:root { --section-prefix: ''; } h1::before, h2::before, h3::before, h4::before, h5::before, h6::before { padding-right: 1ex; } main h1 { counter-increment: h1; counter-reset: h2 h3 h4 h5 h6; } main h1::before { content: var(--section-prefix) counter(h1); } main h2 { counter-increment: h2; counter-reset: h3 h4 h5 h6; } main h2::before { content: var(--section-prefix) counter(h1) '.' counter(h2); } main h3 { counter-increment: h3; counter-reset: h4 h5 h6; } main h3::before { content: var(--section-prefix) counter(h1) '.' counter(h2) '.' counter(h3); } main h4 { counter-increment: h4; counter-reset: h5 h6; } main h4::before { content: var(--section-prefix) counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4); } main h5 { counter-increment: h5; counter-reset: h6; } main h5::before { content: var(--section-prefix) counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4) '.' counter(h5); } main h6 { counter-increment: h6; } main h6::before { content: var(--section-prefix) counter(h1) '.' counter(h2) '.' counter(h3) '.' counter(h4) '.' counter(h5) '.' counter(h6); }