buildGraph turns the collections into nodes and links at build time; the client runs a d3-force simulation and draws plain SVG without the D3 DOM module.
- Embedded JSON escapes < so a closing script tag cannot appear in the data.
- With reduced motion the simulation is stepped 300 times up front and not animated.