Spaces are the only whitespace you can actually reason about
Tabs promise that everyone reads the file at their own width. In practice that promise is exactly the problem.
The moment a file mixes tabs for indentation with spaces for alignment — and real codebases always do — the rendered shape of the code depends on a setting no two developers agree on. A block that lines up beautifully at four columns collapses into a ragged mess at eight. Spaces remove the variable entirely: one byte, one column, the same on every screen, in every diff, in every code-review tool, forever.
Reproducibility is worth more than the theoretical elegance of 'one tab, one level.' You cannot debug a layout you cannot reproduce.