async function loadDashboard() { const res = await apiFetch('/api/dashboard'); if (!res) return; const d = await res.json(); function setDaemon(id, running) { document.getElementById(id).innerHTML = ` ${running ? 'Running' : 'Stopped'}`; } setDaemon('statusSmbd', d.status.smbd); setDaemon('statusNfsd', d.status.nfsd); if (d.disk && !d.disk.error) { const p = d.disk.percent; const bar = document.getElementById('diskBar'); bar.style.width = p + '%'; bar.style.background = p > 90 ? 'var(--red)' : p > 75 ? 'var(--yellow)' : 'var(--accent)'; document.getElementById('diskLabel').textContent = `${d.disk.used_gb} GB / ${d.disk.total_gb} GB — ${d.disk.free_gb} GB free`; } else if (d.disk?.error) { document.getElementById('diskLabel').textContent = 'Error: ' + d.disk.error; } const sb = document.getElementById('dashSharesBody'); if (!d.shares?.length) { sb.innerHTML = `No shares configured.`; } else { sb.innerHTML = d.shares.map(s => ` ${s.type.toUpperCase()} ${esc(s.name ?? '—')} ${esc(s.path)} ${esc(s.access || '—')} ${s.size_gb} GB `).join(''); } _startRefreshCountdown(); }