Do I need different code for numbering equations and figures?

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())