<!-- SOLID CITY · part 3762 -->
s-fill" style="width:'+(t.state==='done'?100:t.state==='review'?80:t.state==='in-progress'?55:t.state==='claimed'?25:5)+'%"></div></div></div><button class="link-btn" data-nav-task="'+t.id+'">Open</button></div>'}).join('');
    document.getElementById('sourceStats').innerHTML=src.length?src.map(function(x){return'<div class="stats-row"><div><strong>'+esc(x.source)+'</strong><p>'+esc(x.event.actor)+' · '+esc(x.event.message)+'</p></div><button class="link-btn" data-nav-task="'+x.task.id+'">Open</button></div>'}).join(''):'<div class="empty">No source references recorded.</div>';
    document.getElementById('exchangeStats').innerHTML=ex.length?ex.map(function(x){return'<div class="stats-row"><div><strong>'+esc(x.event.actor)+'</strong><p>'+esc(x.event.message)+'</p></div><button class="link-btn" data-nav-task="'+x.task.id+'">Open</button></div>'}).join(''):'<div class="empty">No AI-to-AI exchanges recorded.</div>';
    var completion=blocks.map(function(x){return'<div class="stats-row"><div><strong>BLOCKER · '+esc(x.task.title)+'</strong><p>'+esc(x.event.message)+'</p></div><button class="link-btn" data-nav-task="'+x.task.id+'">Open</button></div>'}).join('')+tasks.filter(function(t){return t.state==='done'}).map(function(t){return'<div class="stats-row"><div><strong>DONE · '+esc(t.title)+'</strong><p>Completion is backed by '+t.events.filter(function(e){return e.type==='complete'||e.type==='approval'}).length+' completion/approval event.</p></div><button class="link-btn" data-nav-task="'+t.id+'">Open</button></div>'}).join('');
    document.getElementById('completionStats').innerHTML=completion||'<div class="empty">No blockers or completed work.</div>'
  }
  function taskDrawer(t){selectedTask=t.id;document.getElementById('drawerTitle').textContent=t.title;var st=document.getElementById('drawerState');st.textContent=t.state;st.className='state '+stateClass(t.state);
    var canEdit=t.owner==='king', actions='';
    if(t.owner!=='king'&&t.state!=='done')actions+='<button class="btn primary" data-action="takeover">Take over as The King</button>';
    if(canEdit)actions+='<button class="btn primary" data-action="save">Save human edit</button>';
    if(canEdit&&t.previousOwner)actions+='<button class="btn" data-action="return">Return to '+esc(ownerName(t.previousOwner))+'</button>';
    if(t.state==='review')actions+='<button class="btn gold" data-action="approve">Approve result</button><button class="btn danger" data-action="changes">Request changes</button>';
    if(t.id==='t5'&&t.state!=='done')actions+='<button class="btn gold" data-action="publish">Approve planned board</button>';
    var hist=t.events.slice().reverse().map(function(e){return'<div class="history-item"><p><strong>'+esc(e.actor)+'</strong> · '+esc(e.message)+'</p><div class="history-meta">'+e.time+' · '+e.type.toUpperCase()+(e.source?' · SOURCE: '+esc(e.source):'')+'</div></div>'}).join('');
    document.getElementById('drawerBody').innerHTML='<p class="muted">'+esc(t.description)+'</p><div class="task-facts"><div class="fact"><label>OWNER</label><strong>'+esc(ownerName(t.owner))+'</strong></div><div class="fact"><label>STATE</label><strong>'+esc(t.state)+'</strong></div><div class="fact"><label>WORK VERSION</label><strong>'+t.events.filter(function(e){return e.type==='edit'}).length+' human edits</strong></div><div class="fact"><label>EVENTS</label><strong>'+t.events.length+' recorded</strong></div></div><label class="mono small">ACTUAL WORK</label><textarea id="workEditor" class="work-data" '+(canEdit?'':'readonly')+'>'+esc(t.work)+'</textarea><div class="drawer-actions">'+actions+'</div><div class="info-form"><input id="infoNeed" placeholder="Information needed" aria-label="Information needed"><input id="infoSource" placeholder="Named source" aria-label="Named source"><button class="btn" data-action="info">Record information request + sourced answer</button></div><div class="history"><h3>Full event history</h3>'+hist+'</div>';
    document.getElementById('drawerBackdrop').classList.add('open');renderTasks();setTimeout(function(){document.getElementById('closeDrawer').focus()},0)
  }
  function closeDrawer(){document.getElementById('drawerBackdrop').classList.remove('open');selectedTask=null;renderTasks()}
  function toast(msg){var el=document.getElementById('toast');el.textContent=msg;el.classList.add('show');setTimeout(function(){el.classList.remove('show')},1800)}
  function askConfirm(text,fn){document.getElementById('confirmText').textContent=text;confirmAction=fn;document.getElementById('confirmLayer').classList.add('open')}
  function closeConfirm(){document.getElementById('confirmLayer').classList.remove('open');confirmAction=null}
  function handleAction(action){var t=taskById(selectedTask);if(!t)return;
    if(action==='takeover'){var from=t.owner;t.previousOwner=from;t.owner='king';t.state='in-progress';addEvent(t,'handoff','The King','Took ownership from '+ownerName(from)+'. Existing work was pr