function $(id){return document.getElementById(id)} function formValue(id){return ($(id)?.value||'').trim()} function setText(id,value){const el=$(id);if(el)el.textContent=value??'—'} function setInputValue(id,value){const el=$(id);if(el)el.value=value||''} function escapeHtml(value){return String(value??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]))} function fmtSeconds(s){if(s==null||s==='')return'—';s=Math.max(0,Number(s)||0);const h=Math.floor(s/3600),m=Math.floor((s%3600)/60),r=s%60;if(h)return`${h}h ${m}m`;return m?`${m}m ${r}s`:`${r}s`} function shortText(value,max=42){value=String(value||'—');return value.length>max?value.slice(0,max-1)+'…':value} function formatTime(ts){if(!ts)return'—';try{return new Date(ts).toLocaleTimeString([], {hour:'2-digit',minute:'2-digit',second:'2-digit'})}catch(_){return String(ts).slice(11,19)||'—'}} function statusClass(status){status=String(status||'').toLowerCase();if(status.includes('succeed')||status.includes('success')||status.includes('passed')||status==='completed'||status==='done'||status==='health_only'||status==='repair_success'||status==='full_inference_candidate_health_passed'||status==='full_inference_success')return'success';if(status.includes('manual')||status.includes('stale')||status.includes('blocked')||status.includes('cancelled')||status.includes('canceled')||status.includes('stopped'))return'warn';if(status.includes('failed')||status.includes('error')||status.includes('technical'))return'error';if(status.includes('running')||status.includes('queued')||status.includes('pending')||status.includes('building'))return'running';return'neutral'} function setLink(id,url){const el=$(id);if(!el)return;if(url){el.href=url;el.classList.remove('disabled');el.setAttribute('aria-disabled','false')}else{el.removeAttribute('href');el.classList.add('disabled');el.setAttribute('aria-disabled','true')}} function badgeLabel(status){return String(status||'unknown').replaceAll('_',' ')}