Here you go:
#let in-outline() = {
let after-start = query(selector(<outline-start>).before(here())).len() == 1
let before-end = query(selector(<outline-end>).after(here())).len() == 1
after-start and before-end
}
#let caption(short, details) = context {
if in-outline() { short } else { [#short #details] }
}
#show outline: it => {
[#metadata(none)<outline-start>#it#metadata(none)<outline-end>]
}
#show figure.where(kind: image): set figure(
numbering: (..n) => context {
if in-outline() { numbering("1.", ..n) } else { numbering("1", ..n) }
},
)
#outline(target: figure.where(kind: image), title: [Table of figures])
#figure(
rect(),
caption: caption[A short title for the figure.][Specific details in a few sentences that explain the figure in a lot more text. A bunch more words.],
)
#figure(rect(), caption: caption[A short title for the figure.][#lorem(10)])
