You need to also reset the figure/equation counters manually with each first-level heading. You can do so with a show rule
#show heading.where(level: 1): it => {
counter(figure.where(kind: image)).update(0)
counter(figure.where(kind: table)).update(0)
counter(figure.where(kind: raw)).update(0)
// ..repeat with whatever figure kinds you use
counter(math.equation).update(0)
it
}
Also, there is counter(..).get()
which you can use instead of counter(..).at(here())