{# Shared chart-readiness coordinator for the Playwright PDF renderer. Owns window.fsReportReady. Exposes fsBeaconAcquire() to register a pending chart and fsBeaconRelease() to mark it done; fsReportReady flips to true when the pending counter reaches zero. Used by both _chart_ready.html (Chart.js wrapper) and _echarts_ready.html (ECharts wrapper) so PDFs that include both libraries are captured only after BOTH finish painting. COMPATIBILITY: also exposes window.fsReportPendingCharts as a live numeric view of the internal counter. pdf_renderer.py uses this for BEACON_TIMEOUT diagnostics — preserving the name lets us replace the coordinator without changing the diagnostic. EMPTY-DATA / NO-CHART SAFETY NET: if no chart has acquired the beacon by paint time (e.g., the recipe declared charts in YAML but the data was empty, or the chart library CDN was blocked), we flip fsReportReady=true after DOMContentLoaded + setTimeout(0) so the PDF renderer doesn't hang waiting for a beacon that will never fire. Mirrors the empty-data safety net the prior _chart_ready.html shipped (which is being delegated to here). IDEMPOTENT: including this partial twice in the same document (e.g., a template that includes both chart-ready partials) is safe — the bootstrap script guards with a typeof check, so only the first include initializes the coordinator. Subsequent includes are no-ops and do NOT reset the flag or counter. #}