A solo project and a 200,000-line codebase with fifty contributors are different worlds. At scale, the enemy is unpredictability: a change here breaking something there. The solutions are conventions, boundaries and tooling.
Conventions are not optional
On a large team, a documented, enforced convention (naming, file structure, token usage) is what keeps everyone's CSS compatible. The specific convention matters less than that everyone follows the same one consistently.
Scoping and boundaries
Large CSS avoids global leakage. Options range from disciplined BEM, to CSS Modules (locally-scoped class names), to <code>@scope</code> and shadow DOM. The goal is the same: a component's styles cannot accidentally affect another component.
Cascade layers at scale
Define a project-wide <code>@layer</code> order (e.g. reset, base, layout, components, utilities, overrides) so any team's CSS lands in a predictable place and the cascade is controlled regardless of who wrote what or in which order it loads.
@layer reset, base, layout, components, utilities, overrides;Avoiding regressions
The biggest risk is a change with unintended reach. Low, flat specificity and scoping limit blast radius. Visual regression testing (screenshots compared across builds) catches accidental changes. And dead-code tooling stops the codebase silently growing.
.container * { margin: 8px; }.stack > * + * { margin-top: 8px; } /* scoped, intentional */Adding broad element or descendant selectors (like styling all <code>div</code> or <code>.container *</code>) that ripple across the whole app. Scope styles to components.
Enforce one convention, scope component styles, define a project-wide @layer order, keep specificity flat, and use visual-regression and dead-code tooling. Predictability is everything at scale.
Sketch a @layer order for a large app and decide where reset, components and utilities go. Then find a broad selector in your CSS and rewrite it to be component-scoped.
1. What matters most about a team convention?
2. What controls the cascade across teams?
3. What catches accidental visual changes?
- At scale, predictability is the goal — conventions and boundaries deliver it.
- Scope component styles to prevent global leakage.
- A project-wide @layer order controls the cascade across teams.
- Flat specificity, visual-regression and dead-code tooling prevent regressions.