Adds a download button to the bottom-left React Flow controls that
exports the current canvas view as a PNG with the dot grid preserved.
- New util src/client/utils/exportPng.ts: html-to-image capture +
manual canvas composition (solid bg + dot grid + captured layer).
Works around html-to-image's SVG <pattern> limitations and produces
a deterministic 3x retina PNG.
- During capture, temporary CSS disables ring-shadow halos and forces
service node bodies to a solid dark fill so the dot grid doesn't
bleed through. State is still indicated by border colors and the
inner state dot. Group node headers are excluded so their outlines
stay intact.
- New component src/client/components/ExportPngButton.tsx integrated
as a custom ControlButton inside <Controls> (bottom-left).
- App.tsx: id="dashboard-canvas" + data-no-export on project filter.
- i18n: 4 keys (EN + ES) for the button and 3 error states.
- New dependency: html-to-image@1.11.13