diff --git a/website/canvas.html b/website/canvas.html
index 4b71c1c..f4a3b5b 100644
--- a/website/canvas.html
+++ b/website/canvas.html
@@ -2340,6 +2340,14 @@
FolkRApp.define();
FolkFeed.define();
+ // Zoom and pan state — declared early to avoid TDZ errors
+ // (event handlers reference these before awaits yield execution)
+ let scale = 1;
+ let panX = 0;
+ let panY = 0;
+ const minScale = 0.05;
+ const maxScale = 20;
+
// Get community info from URL
// Supports path-based slugs: cca.rspace.online/campaign/demo → slug "campaign-demo"
const hostname = window.location.hostname;
@@ -5010,13 +5018,6 @@
if (memoryPanel.classList.contains("open")) renderMemoryPanel();
});
- // Zoom and pan controls
- let scale = 1;
- let panX = 0;
- let panY = 0;
- const minScale = 0.05;
- const maxScale = 20;
-
function updateCanvasTransform() {
// Transform only the content layer — canvas viewport stays fixed
canvasContent.style.transform = `translate(${panX}px, ${panY}px) scale(${scale})`;