function applyChartBoardTheme() { const el = document.documentElement; const pref = el.getAttribute('data-cb-theme-pref') || 'light'; let resolved = pref; if (pref === 'system') { resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } if (resolved !== 'dark') { resolved = 'light'; } el.setAttribute('data-cb-theme', resolved); el.setAttribute('data-bs-theme', resolved); try { localStorage.setItem('cb-theme-pref', pref); } catch (e) { /* ignore */ } } function showToast(message, type = 'success') { // Placeholder helper for Phase 1 base setup. console.log(`[${type}] ${message}`); } document.addEventListener('DOMContentLoaded', function () { applyChartBoardTheme(); try { window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function () { if ((document.documentElement.getAttribute('data-cb-theme-pref') || '') === 'system') { applyChartBoardTheme(); } }); } catch (e) { /* ignore */ } const testButtons = document.querySelectorAll('[data-ds-test-btn]'); testButtons.forEach(function (button) { button.addEventListener('click', async function () { const form = button.closest('form'); if (!form) { return; } const resultContainer = form.querySelector('[data-ds-test-result]'); const url = button.getAttribute('data-test-url'); if (!url) { return; } const originalLabel = button.innerHTML; button.disabled = true; button.innerHTML = 'Testing...'; if (resultContainer) { resultContainer.innerHTML = ''; } try { const response = await fetch(url, { method: 'POST', body: new FormData(form), headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' } }); const result = await response.json(); const isSuccess = !!result.success; const message = result.message || (isSuccess ? 'Connection successful.' : 'Connection failed.'); if (resultContainer) { resultContainer.innerHTML = '