Don’t use show rules unless you have to, especially if you put set rules inside. You will face Which show rule takes precedence? or Set rule inside show rule (closure) for the same element gets applied for table/grid · Issue #6219 · typst/typst · GitHub.
Prioritize show-set rules and keep show rules minimal/non-hacky:
#show heading.where(level: 1): set align(center)
#show heading.where(level: 1): set text(24pt, weight: "regular")
#show heading.where(level: 1): smallcaps
#show heading.where(level: 1): it => pagebreak(weak: true, to: "odd") + it
= Chapter A
#lorem(50)
= Chapter B
#lorem(50)
This is the most idiomatic way, but since show rules are used, you won’t be able to un-smallcaps or un-pagebreak level 1 heading, unless this is set inside a non-root scope. But at least all other heading features/behavior will work.