Reading Unit '+esc(unit)+'…Matching the live scope, Dispatch review and event trail.
';try{const r=await fetch(TRACKER+'?mode=unit&property='+encodeURIComponent(property)+'&unit='+encodeURIComponent(unit)+'&_='+Date.now(),{cache:'no-store'}),d=await r.json();if(!r.ok||!d.ok)throw new Error(d.error==='unit not found'?'No exact unit found at Thornbury.':d.error||'Unit unavailable');renderUnit(d)}catch(e){result.innerHTML='
'+esc(e.message||'Could not load unit')+'Check the unit number and try again.
'}};
const load=async()=>{try{const [rr,tr]=await Promise.all([fetch(REPORT+'?property='+encodeURIComponent(property)),fetch(TRACKER+'?property='+encodeURIComponent(property)+'&_='+Date.now(),{cache:'no-store'})]);if(rr.ok)renderReporting(await rr.json());if(tr.ok)renderTracker(await tr.json())}catch(e){document.getElementById('halo-report-live').textContent='Reconnecting…'}};
document.getElementById('hrx-service-search').addEventListener('input',e=>{const q=e.target.value.toLowerCase();renderServices(services.filter(s=>(s.service+' '+s.category).toLowerCase().includes(q)))});
document.getElementById('hrx-unit-form').addEventListener('submit',e=>{e.preventDefault();const q=document.getElementById('hrx-unit-search').value.trim().replace(/^#/,'');if(q)loadUnit(q)});
document.getElementById('hrx-panic').addEventListener('click',async()=>{if(!confirm('Send an emergency request to Archangel Vendor Operations?'))return;const b=document.getElementById('hrx-panic'),s=document.getElementById('hrx-panic-status');b.disabled=true;s.textContent='Sending urgent request…';try{const r=await fetch(API+'?property='+encodeURIComponent(property),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({action:'emergency-request',detail:'Emergency assistance requested from the HALO property report.'})});if(!r.ok)throw new Error();s.textContent='Request sent. May and the vendor team have been alerted.';b.textContent='Emergency request sent'}catch(e){s.textContent='Could not send automatically. Call 214-537-4570 now.'}finally{b.disabled=false}});
const setView=view=>{const report=document.getElementById('halo-reporting-wrap'),metrics=view==='metrics';report?.classList.toggle('halo-metrics-active',metrics);document.body.classList.toggle('halo-metrics-view',metrics);document.querySelectorAll('.halo-view-tab').forEach(b=>b.classList.toggle('is-active',b.dataset.view===view));document.querySelectorAll('.halo-queuebar,.halo-chat-drawer,.halo-live-sync,.halo-focus-caption').forEach(el=>el.style.display=metrics?'none':'');if(metrics){report.scrollTop=0;load()}};
const ensureTabs=()=>{const brand=document.querySelector('.halo-nav-brand');if(!brand||document.getElementById('halo-view-tabs'))return false;brand.insertAdjacentHTML('beforeend','');document.querySelectorAll('.halo-view-tab').forEach(b=>b.onclick=()=>setView(b.dataset.view));return true};if(!ensureTabs()){const t=setInterval(()=>{if(ensureTabs())clearInterval(t)},150)}load();setInterval(()=>{if(!document.hidden&&document.body.classList.contains('halo-metrics-view'))load()},60000);
})();
The widget will be available in preview / live mode.