The fill target the closed-loop fill used — or would have used, since the
harness fills this in (demo.fillTarget ?? FILL_TARGET) on every path,
including the ones that bypass the fill. Already defaulted by the caller, so
this module needs no copy of the harness's FILL_TARGET.
OptionalzoomPer-demo zoom nudge applied AFTER the framing path (>1 = closer).
OptionaldistanceAbsolute camera distance; when set, the closed-loop fill was bypassed.
Optionalautofalse means the fill loop was skipped and framing is whatever F gave:
the scene's authored viewer_config camera when it has one, else a plain
bounds fit. UNDEFINED is the common case (most manifest demos omit it) and
means the closed-loop fill DID run — so this must be tested against false
explicitly, never for falsiness.
The framing knobs in effect for this demo, mirroring the manifest fields of the same names (see
DemoEntryingenerate-gallery.spec.ts). They decide WHICH knob the warning points at: the three framing PATHS (distance, baked, closed-loop fill) are mutually exclusive in the harness, but thezoomnudge is applied after ALL of them, so it can compound any of the three.