Server local time and timezone (the clock the sleep schedule uses).
curl -s http://YOUR_HOST:3030/api/timeCopy
@@ -184,6 +189,15 @@ function connect(){
}
async function loadMeta(){try{var c=await(await fetch('/api/config')).json();document.getElementById('ver').textContent='v'+(c.version||'?');albums=await(await fetch('/api/albums')).json();people=await(await fetch('/api/people')).json();populateGsSource();if(settings)applySettingsToForm(settings);}catch(e){}}
+// === SERVER CLOCK ===
+// Sleep schedule is evaluated in the server's local timezone, so show it here.
+// Anchor to one /api/time fetch, then tick locally; re-sync periodically.
+var srvOffsetMs=null,srvTz='';
+async function syncServerTime(){try{var t=await(await fetch('/api/time')).json();srvOffsetMs=t.epoch-Date.now();srvTz=t.tz||('UTC'+(t.offsetMinutes>=0?'+':'')+(t.offsetMinutes/60));}catch(e){}}
+function p2(n){return n<10?'0'+n:''+n;}
+function tickServerClock(){if(srvOffsetMs===null)return;var d=new Date(Date.now()+srvOffsetMs);var el=document.getElementById('srv-clock');if(!el)return;var warn=(srvTz==='UTC'||srvTz==='Etc/UTC');el.innerHTML=p2(d.getUTCHours())+':'+p2(d.getUTCMinutes())+':'+p2(d.getUTCSeconds())+''+esc(srvTz)+(warn?' ⚠':'')+'';el.className='srv-clock'+(warn?' warn':'');el.title=warn?'Server is on UTC — sleep times will be offset from your local time. Set TZ in docker-compose.':'Server local time — sleep schedule uses this clock';}
+syncServerTime().then(tickServerClock);setInterval(tickServerClock,1000);setInterval(syncServerTime,300000);
+
// === GLOBAL SETTINGS FORM ===
function populateGsSource(){
var sel=document.getElementById('gs-source'),cur=sel.value;