diff --git a/src/app/main.js b/src/app/main.js
index c9c30e4..460e29b 100644
--- a/src/app/main.js
+++ b/src/app/main.js
@@ -851,7 +851,8 @@ function openBarMenu(id,anchor){
Owner
${Object.entries(PEOPLE).map(([k,p])=>``).join("")}
Size${["s","m","l","xl"].map(z=>``).join("")}
- Due
`;
+ Start
+ End
`;
BM.classList.add("show"); BARMENU=id;
const mw=BM.offsetWidth||236, mh=BM.offsetHeight||170, gap=8, vw=window.innerWidth, vh=window.innerHeight;
// sit to the RIGHT of the pill (flip left only if there's no room)
@@ -865,12 +866,18 @@ function refreshBarMenu(id){ if(BARMENU===id) openBarMenu(id); }
function closeBarMenu(){ BM.classList.remove("show"); BARMENU=null; }
document.addEventListener("pointerdown",e=>{ if(BARMENU&&!e.target.closest("#barMenu")) closeBarMenu(); },true);
+function syncTaskDates(n,field){
+ if(!n.start||!n.due) return;
+ const s=dayN(n.start), e=dayN(n.due);
+ if(isNaN(s)||isNaN(e)||s<=e) return;
+ if(field==="start") n.due=n.start; else n.start=n.due;
+}
function updTask(id,f,v,quiet){ snap(); const n=findPath(id).pop();
if(f==="title") n.title=v.trim()||n.title;
else if(f==="owner") n.owner=v;
else if(f==="priority") n.priority=v;
- else if(f==="due") n.due=v||null;
- else if(f==="start") n.start=v||null;
+ else if(f==="due"){ n.due=v||null; syncTaskDates(n,"due"); }
+ else if(f==="start"){ n.start=v||null; syncTaskDates(n,"start"); }
else if(f==="size") n.size=v||null;
renderAll(); if(!quiet&&f!=="title") openDetail(id); }
function deleteTask(id){ const n=findPath(id).pop();
@@ -926,7 +933,8 @@ function openDetail(id){
document.getElementById("dBody").innerHTML=`
Owner${av(n.owner)}
- Due${dueChip(n.due,leaf&&n.done)}
+ Start
+ End${dueChip(n.due,leaf&&n.done)}
${sizeFld}
${leaf?`Status