(function () { 'use strict'; var grid = document.getElementById('board-grid'); var emptyMsg = document.getElementById('empty-msg'); var modalOverlay = document.getElementById('config-modal'); var configForm = document.getElementById('config-form'); var editingBoard = null; function esc(s) { if (typeof s !== 'string') return ''; var d = document.createElement('div'); d.appendChild(document.createTextNode(s)); return d.innerHTML; } // ---- Fetch boards ---- function fetchBoards() { fetch('/api/boards') .then(function (r) { return r.json(); }) .then(function (boards) { renderBoards(boards); }) .catch(function () {}); } // ---- Render board cards ---- function renderBoards(boards) { if (boards.length === 0) { emptyMsg.style.display = 'block'; grid.innerHTML = ''; grid.appendChild(emptyMsg); return; } emptyMsg.style.display = 'none'; var html = ''; boards.forEach(function (board) { var statusClass = board.online ? 'online' : 'offline'; var badgeClass = board.online ? 'badge-online' : 'badge-offline'; var left = board.config && board.config.left || {}; var right = board.config && board.config.right || {}; var scores = board.scores || {}; var leftScore = scores.left != null ? scores.left : '-'; var rightScore = scores.right != null ? scores.right : '-'; var leftColor = left.color || '#dc2626'; var rightColor = right.color || '#2563eb'; html += '