@agent-plan/server 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-plan/server",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "private": false,
5
5
  "description": "Local HTTP/WebSocket server for Agent Plan dashboards and planner APIs.",
6
6
  "license": "MIT",
@@ -41,7 +41,7 @@
41
41
  "@hono/node-server": "^1.14.0",
42
42
  "hono": "^4.7.0",
43
43
  "ws": "^8.18.0",
44
- "@agent-plan/core": "0.4.5"
44
+ "@agent-plan/core": "0.4.6"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/ws": "^8.18.0"
@@ -310,7 +310,7 @@ Please change the parent <Route path="${R}"> to <Route path="${R==="/"?"*":`${R}
310
310
  * See the LICENSE file in the root directory of this source tree.
311
311
  */const bR=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],E0=ot("x",bR),wR="/api",SR=120,ER=40;function Gl(e){return{...e,number:e.number??0,descriptionRef:e.descriptionRef??"",decisions:e.decisions??[],acceptedDecisions:e.acceptedDecisions??[],checklist:e.checklist??[],subtasks:e.subtasks??[],pauseSnapshot:e.pauseSnapshot??null,pauseHistory:e.pauseHistory??[],startedAt:e.startedAt??"",completedAt:e.completedAt??"",descriptionUpdatedAt:e.descriptionUpdatedAt??""}}function Hh(e){return e?{...e,pauseSnapshot:e.pauseSnapshot??null,pendingResume:!!e.pendingResume,deviationId:e.deviationId??""}:null}function md(e){return{...e,discussedAt:e.discussedAt??"",contextReady:e.contextReady??!1,contextReadyReason:e.contextReadyReason??"",descriptionRef:e.descriptionRef??"",notes:e.notes??"",goals:e.goals??[],nonGoals:e.nonGoals??[],dependencies:e.dependencies??[],risks:e.risks??[],openQuestions:e.openQuestions??[],decisions:e.decisions??[],acceptedDecisions:e.acceptedDecisions??[],completionCriteria:e.completionCriteria??[],taskIds:e.taskIds??[],tasks:(e.tasks??[]).map(Gl),linkedRequirements:e.linkedRequirements??[],handoff:e.handoff??"",handoffUpdatedAt:e.handoffUpdatedAt??"",descriptionUpdatedAt:e.descriptionUpdatedAt??""}}function pd(e){return{...e,number:e.number??0,discussedAt:e.discussedAt??"",contextReady:e.contextReady??!1,contextReadyReason:e.contextReadyReason??"",descriptionRef:e.descriptionRef??"",acceptedDecisions:e.acceptedDecisions??[],phaseIds:e.phaseIds??[],descriptionUpdatedAt:e.descriptionUpdatedAt??""}}function N0(e){var a,r,s,u,c,d;return{...e,descriptionRef:e.descriptionRef??"",projectGuidelines:{content:((a=e.projectGuidelines)==null?void 0:a.content)??"",updatedAt:((r=e.projectGuidelines)==null?void 0:r.updatedAt)??"",sessionInfo:((s=e.projectGuidelines)==null?void 0:s.sessionInfo)??[]},scope:e.scope??[],outOfScope:e.outOfScope??[],decisions:e.decisions??[],globalRules:e.globalRules??[],technologies:e.technologies??[],tools:e.tools??[],acceptedDecisions:e.acceptedDecisions??[],workDeviations:e.workDeviations??[],planRoot:e.planRoot??"",projectRoot:e.projectRoot??"",agentPlanVersion:e.agentPlanVersion??"",workflowRules:{beforePhaseStart:((u=e.workflowRules)==null?void 0:u.beforePhaseStart)??[],beforeTaskStart:((c=e.workflowRules)==null?void 0:c.beforeTaskStart)??[],afterPhaseComplete:((d=e.workflowRules)==null?void 0:d.afterPhaseComplete)??[]}}}function Pm(e){return{...e,description:e.description??"",macroTasks:e.macroTasks??[],linkedPhaseIds:e.linkedPhaseIds??[]}}async function _y(e,a){const r={"Content-Type":"application/json","X-Planner-Source":"web-ui",...a==null?void 0:a.headers};try{return await fetch(`${wR}${e}`,{...a,headers:r})}catch{throw new Response("Planner web server unavailable. Pi or planner-web may have stopped. Restart the planner web UI or Pi, then reload this page.",{status:503,statusText:"Planner web server unavailable"})}}async function ut(e,a){let r=await _y(e,a),s=0;for(;r.status===503&&s<ER;)await new Promise(u=>setTimeout(u,SR)),s+=1,r=await _y(e,a);if(!r.ok){const u=await r.text().catch(()=>r.statusText);throw new Response(u||r.statusText,{status:r.status,statusText:r.statusText})}return r.json()}async function Fm(){return N0(await ut("/project"))}async function NR(e){const{descriptionRef:a,...r}=e,s={...r,...a?{descriptionRef:a}:{}};return N0(await ut("/project",{method:"PUT",body:JSON.stringify(s)}))}async function jR(e){return(await ut("/accepted-decisions",{method:"POST",body:JSON.stringify(e)})).acceptedDecision}async function RR(e){const{id:a,...r}=e;return(await ut(`/accepted-decisions/${a}`,{method:"PUT",body:JSON.stringify(r)})).acceptedDecision}async function kR(e){return ut(`/accepted-decisions/${e.id}`,{method:"DELETE",body:JSON.stringify({targetType:e.targetType,targetRef:e.targetRef,confirmed:!0})})}async function TR(){return ut("/ui-config")}async function AR(e){return ut(`/docs/view?path=${encodeURIComponent(e)}`)}async function DR(e,a){return ut("/docs/save",{method:"PUT",body:JSON.stringify({path:e,content:a,confirmed:!0})})}async function Vm(){return(await ut("/features")).map(pd)}async function ac(e){return pd(await ut(`/features/${e}`))}async function CR(e){return pd(await ut("/features",{method:"POST",body:JSON.stringify(e)}))}async function j0(e){const{updatedAt:a,...r}=e;return pd(await ut(`/features/${e.id}`,{method:"PUT",body:JSON.stringify({...r,expectedUpdatedAt:a})}))}async function OR(e){return ut(`/features/${e}`,{method:"DELETE"})}async function MR(){return(await ut("/ideas")).ideas}async function _R(e){return ut("/ideas",{method:"POST",body:JSON.stringify(e)})}async function LR(e){return ut(`/ideas/${e.id}`,{method:"PUT",body:JSON.stringify(e)})}async function zR(e){return ut(`/ideas/${e}`,{method:"DELETE"})}async function Ym(){return(await ut("/requirements")).requirements.map(Pm)}async function $R(e){return Pm(await ut("/requirements",{method:"POST",body:JSON.stringify(e)}))}async function UR(e){const{updatedAt:a,...r}=e;return Pm(await ut(`/requirements/${e.id}`,{method:"PUT",body:JSON.stringify({...r,expectedUpdatedAt:a})}))}async function BR(e){return ut(`/requirements/${e}`,{method:"DELETE"})}async function gd(e){const a=e?`?featureId=${encodeURIComponent(e)}`:"";return(await ut(`/phases${a}`)).map(md)}async function vd(e){return md(await ut(`/phases/${e}`))}async function IR(e){return md(await ut("/phases",{method:"POST",body:JSON.stringify(e)}))}async function R0(e){const{updatedAt:a,...r}=e;return md(await ut(`/phases/${e.id}`,{method:"PUT",body:JSON.stringify({...r,expectedUpdatedAt:a})}))}async function HR(e){return ut(`/phases/${e}`,{method:"DELETE"})}async function qR(e,a){return Gl(await ut(`/phases/${e}/tasks`,{method:"POST",body:JSON.stringify(a)}))}async function xd(e){return Gl(await ut(`/tasks/${e}`))}async function Gm(e){const{updatedAt:a,...r}=e;return Gl(await ut(`/tasks/${e.id}`,{method:"PUT",body:JSON.stringify({...r,expectedUpdatedAt:a})}))}async function PR(e){return Gl(await ut(`/tasks/${e}/start`,{method:"POST"}))}async function FR(e){const a=await ut(`/tasks/${e}/reopen`,{method:"POST",body:JSON.stringify({confirmed:!0})});return Gl(a.task)}async function VR(e,a,r){const s=await ut(`/tasks/${e}/subtasks`,{method:"POST",body:JSON.stringify({phaseId:a,...r})});return Gl(s.task)}async function YR(e,a,r){const s=await ut(`/tasks/${e}/dependencies`,{method:"POST",body:JSON.stringify({phaseId:a,dependsOnId:r})});return Gl(s.task)}async function GR(e){return ut(`/tasks/${e}`,{method:"DELETE"})}async function XR(){return ut("/tasks/active")}async function QR(){const e=await ut("/tasks/focus");return{active:(e.active??[]).map(a=>Hh(a)),pendingResume:(e.pendingResume??[]).map(a=>Hh(a)),nextWork:Hh(e.nextWork),nextWorkReason:e.nextWorkReason??""}}async function gm(){return(await ut("/handoffs")).handoffs??[]}async function KR(){return(await ut("/handoffs/archive")).archived??[]}async function k0(e){return ut(`/phases/${e}/handoff`,{method:"DELETE"})}async function ZR(e=!1){return ut(`/export?full=${e?"true":"false"}`)}async function WR(){return ut("/repair",{method:"POST"})}async function qh(e,a,r,s){return ut("/reorder",{method:"POST",body:JSON.stringify({kind:e,movedId:a,beforeId:r,afterId:s})})}function JR(){const[e,a]=v.useState(()=>{if(typeof window>"u")return"dark";const r=window.localStorage.getItem("plan-ui-theme");return r||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")});return v.useEffect(()=>{document.documentElement.setAttribute("data-theme",e),window.localStorage.setItem("plan-ui-theme",e)},[e]),{theme:e,toggleTheme:()=>a(r=>r==="dark"?"light":"dark")}}function e2({liveStatus:e}){const a=e==="live"?{label:"Live",className:"border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400",dotClassName:"bg-emerald-500"}:e==="reconnecting"?{label:"Reconnecting…",className:"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-400",dotClassName:"bg-amber-500 animate-pulse"}:e==="disconnected"?{label:"Disconnected",className:"border-rose-500/30 bg-rose-500/10 text-rose-700 dark:text-rose-400",dotClassName:"bg-rose-500"}:{label:"Connecting…",className:"border-sky-500/30 bg-sky-500/10 text-sky-700 dark:text-sky-400",dotClassName:"bg-sky-500 animate-pulse"};return o.jsxs("span",{className:`inline-flex max-w-full min-h-7 items-center gap-1.5 rounded-[10px] border px-2 py-1 text-xs font-semibold sm:min-h-8 sm:rounded-[12px] sm:px-2.5 sm:py-1.5 sm:text-sm ${a.className}`,children:[o.jsx("span",{className:`h-2 w-2 shrink-0 rounded-full ${a.dotClassName}`}),o.jsx("span",{className:"truncate",children:a.label})]})}function t2({projectName:e,projectRoot:a,planRoot:r,agentPlanVersion:s,liveStatus:u}){const{theme:c,toggleTheme:d}=JR(),[h,p]=v.useState(!1),[g,y]=v.useState(null),[x,E]=v.useState(!1),S=[{to:"/ideas",label:"Ideas",icon:y0},{to:"/features",label:"Features",icon:Po},{to:"/requirements",label:"Requirements",icon:nc},{to:"/handoff",label:"Handoff",icon:S0}];async function w(j){y(j?"full":"summary");try{const L=await ZR(j),B=new Blob([L.markdown],{type:"text/markdown;charset=utf-8"}),I=URL.createObjectURL(B),F=document.createElement("a");F.href=I,F.download=j?"EXPORT-full.md":L.filePath||"EXPORT.md",document.body.appendChild(F),F.click(),F.remove(),URL.revokeObjectURL(I),p(!1)}catch(L){window.alert(`Export failed: ${L instanceof Error?L.message:String(L)}`)}finally{y(null)}}return o.jsx("div",{className:"relative z-20 overflow-visible border-b border-[var(--border)] bg-[var(--surface-elevated)] backdrop-blur-xl backdrop-saturate-150",children:o.jsxs("div",{className:"page-container flex items-center gap-2 py-2 sm:gap-3 sm:py-2.5",children:[o.jsxs(Ye,{to:"/",title:a??e??"Agent Plan",className:"flex min-w-0 shrink items-center gap-2 sm:gap-2.5",children:[o.jsx("div",{className:"surface-card flex h-8 w-8 shrink-0 items-center justify-center rounded-xl border border-[var(--border)] text-[var(--accent)] sm:h-9 sm:w-9",children:o.jsx(Po,{className:"h-4 w-4"})}),o.jsxs("span",{className:"min-w-0 truncate",children:[o.jsx("span",{className:"block truncate text-sm font-black tracking-tight sm:text-base",children:e??"Agent Plan"}),o.jsx("span",{className:"block truncate text-[9px] font-medium tracking-wide text-[var(--text-subtle)] sm:text-[10px]","data-testid":"agent-plan-version",children:s?`v${s}`:"Version unavailable"})]})]}),o.jsx("nav",{className:"ml-1 hidden items-center gap-1 md:flex",children:S.map(j=>o.jsxs(hm,{to:j.to,"aria-label":j.label,className:({isActive:R})=>`inline-flex min-h-7 shrink-0 items-center gap-1.5 rounded-[10px] border px-2 py-1 text-xs font-semibold transition sm:min-h-8 sm:rounded-[12px] sm:px-3 sm:py-1.5 sm:text-sm ${R?"border-transparent bg-[var(--accent-soft)] text-[var(--accent)]":"border-transparent text-[var(--text-muted)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]"}`,children:[o.jsx(j.icon,{className:"h-3.5 w-3.5 shrink-0 sm:h-4 sm:w-4"}),o.jsx("span",{children:j.label})]},j.to))}),o.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:[o.jsx(e2,{liveStatus:u}),o.jsx("button",{type:"button",onClick:d,"aria-label":c==="dark"?"Switch to light theme":"Switch to dark theme",title:c==="dark"?"Switch to light theme":"Switch to dark theme",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[10px] border border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text-muted)] transition hover:text-[var(--text)] sm:h-9 sm:w-9 sm:rounded-[12px]",children:c==="dark"?o.jsx(gR,{className:"h-4 w-4"}):o.jsx(nR,{className:"h-4 w-4"})}),o.jsxs("div",{className:"relative md:hidden",children:[o.jsx("button",{type:"button","aria-label":"Open menu","aria-haspopup":"menu","aria-expanded":x,onClick:()=>E(j=>!j),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[10px] border border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text-muted)] transition hover:text-[var(--text)]",children:x?o.jsx(E0,{className:"h-4 w-4"}):o.jsx(Wj,{className:"h-4 w-4"})}),x?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"fixed inset-0 z-[150]","aria-hidden":"true",onClick:()=>E(!1)}),o.jsxs("div",{role:"menu",onKeyDown:j=>{j.key==="Escape"&&E(!1)},className:"absolute right-0 top-full z-[200] mt-2 w-52 overflow-hidden rounded-[14px] border border-[var(--border)] bg-[var(--surface-elevated)] p-1 shadow-xl",children:[S.map(j=>o.jsxs(hm,{to:j.to,"aria-label":j.label,onClick:()=>E(!1),className:({isActive:R})=>`flex items-center gap-2 rounded-[10px] px-3 py-2 text-sm font-semibold transition ${R?"bg-[var(--accent-soft)] text-[var(--accent)]":"text-[var(--text)] hover:bg-[var(--accent-soft)]"}`,children:[o.jsx(j.icon,{className:"h-4 w-4 shrink-0"}),o.jsx("span",{children:j.label})]},j.to)),o.jsx("div",{className:"my-1 h-px bg-[var(--border)]"}),o.jsxs("button",{type:"button",role:"menuitem",disabled:g!==null,onClick:()=>{E(!1),w(!1)},className:"flex w-full items-center justify-between rounded-[10px] px-3 py-2 text-left text-sm font-semibold text-[var(--text)] transition hover:bg-[var(--accent-soft)] disabled:cursor-wait disabled:opacity-60",children:["Export summary",g==="summary"?o.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"…"}):null]}),o.jsxs("button",{type:"button",role:"menuitem",disabled:g!==null,onClick:()=>{E(!1),w(!0)},className:"flex w-full items-center justify-between rounded-[10px] px-3 py-2 text-left text-sm font-semibold text-[var(--text)] transition hover:bg-[var(--accent-soft)] disabled:cursor-wait disabled:opacity-60",children:["Export full",g==="full"?o.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"…"}):null]})]})]}):null]}),o.jsxs("div",{className:"relative z-30 hidden md:block",children:[o.jsxs("button",{type:"button","aria-haspopup":"menu","aria-expanded":h,"aria-label":"Export",onClick:()=>p(j=>!j),className:"inline-flex min-h-7 items-center gap-1.5 rounded-[10px] border border-[var(--border-strong)] bg-[var(--surface-elevated)] px-2 py-1 text-xs font-semibold text-[var(--text-muted)] transition hover:text-[var(--text)] sm:min-h-8 sm:rounded-[12px] sm:px-3 sm:py-1.5 sm:text-sm",children:[o.jsx(qj,{className:"h-3.5 w-3.5 shrink-0 sm:h-4 sm:w-4"}),o.jsx("span",{children:"Export"}),o.jsx(Ts,{className:`h-3.5 w-3.5 shrink-0 transition-transform sm:h-4 sm:w-4 ${h?"rotate-180":""}`})]}),h?o.jsxs("div",{role:"menu",onKeyDown:j=>{var I;const R=Array.from(j.currentTarget.querySelectorAll("[role=menuitem]")).filter(F=>!F.hasAttribute("disabled"));if(R.length===0)return;const L=R.indexOf(document.activeElement);let B=L;if(j.key==="ArrowDown")B=L===-1?0:(L+1)%R.length;else if(j.key==="ArrowUp")B=L===-1?R.length-1:(L-1+R.length)%R.length;else if(j.key==="Home")B=0;else if(j.key==="End")B=R.length-1;else return;j.preventDefault(),(I=R[B])==null||I.focus()},className:"absolute right-0 top-full z-[200] mt-2 min-w-44 overflow-hidden rounded-[14px] border border-[var(--border)] bg-[var(--surface-elevated)] p-1 shadow-xl",children:[o.jsxs("button",{type:"button",role:"menuitem",disabled:g!==null,onClick:()=>void w(!1),className:"flex w-full items-center justify-between rounded-[10px] px-3 py-2 text-left text-sm font-semibold text-[var(--text)] transition hover:bg-[var(--accent-soft)] disabled:cursor-wait disabled:opacity-60",children:["Summary",g==="summary"?o.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"…"}):null]}),o.jsxs("button",{type:"button",role:"menuitem",disabled:g!==null,onClick:()=>void w(!0),className:"flex w-full items-center justify-between rounded-[10px] px-3 py-2 text-left text-sm font-semibold text-[var(--text)] transition hover:bg-[var(--accent-soft)] disabled:cursor-wait disabled:opacity-60",children:["Full",g==="full"?o.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"…"}):null]})]}):null]})]})]})})}function Ph(e,a,r){e.split(`
312
312
  `).forEach((u,c)=>{c>0&&a.push(o.jsx("br",{},`${r}-br-${c}`)),u&&a.push(u)})}const Ly=/\.planner\/docs\/[A-Za-z0-9][A-Za-z0-9_\-./]*\.md/g;function n2(e){return`/docs/view?path=${encodeURIComponent(e)}`}function zy(e,a){const r=[],s=/(\[([^\]]+)\]\((https?:\/\/[^\s)]+)\))|(\*\*([^*]+)\*\*)|`([^`]+)`|\*([^*]+)\*/g;let u=0,c=null,d=0;for(;(c=s.exec(e))!==null;)c.index>u&&Ph(e.slice(u,c.index),r,`${a}-${d}`),c[2]&&c[3]?r.push(o.jsx("a",{href:c[3],target:"_blank",rel:"noreferrer",className:"font-semibold text-[var(--accent)] underline-offset-4 hover:underline",children:c[2]},`${a}-link-${d}`)):c[5]?r.push(o.jsx("strong",{className:"font-semibold text-[var(--text)]",children:c[5]},`${a}-strong-${d}`)):c[6]?r.push(o.jsx("code",{className:"rounded-md border border-[var(--border)] px-1.5 py-0.5 font-mono text-[0.95em] text-[var(--text)]",children:c[6]},`${a}-code-${d}`)):c[7]?r.push(o.jsx("em",{className:"italic",children:c[7]},`${a}-em-${d}`)):c[1]&&Ph(c[1],r,`${a}-raw-${d}`),u=s.lastIndex,d+=1;return u<e.length&&Ph(e.slice(u),r,`${a}-tail`),r}function Eo(e,a){const r=[];Ly.lastIndex=0;let s=0,u=null,c=0;for(;(u=Ly.exec(e))!==null;){u.index>s&&r.push(...zy(e.slice(s,u.index),`${a}-md-${c}`));const d=u[0];r.push(o.jsx("a",{href:n2(d),target:"_blank",rel:"noreferrer",className:"font-semibold text-[var(--accent)] underline-offset-4 hover:underline","aria-label":`Open planner document ${d} in a new tab`,children:d},`${a}-doc-${c}`)),s=u.index+d.length,c+=1}return s<e.length&&r.push(...zy(e.slice(s),`${a}-md-tail`)),r}function a2(e,a){var u;const r=e.split(`
313
- `);if(e.startsWith("```")){const c=e.replace(/^```[a-zA-Z]*\n?/,"").replace(/```\s*$/,"");return o.jsx("pre",{className:"overflow-x-auto rounded-lg border border-[var(--border)] bg-[var(--surface-elevated)] p-3 text-sm font-mono text-[var(--text)]",children:o.jsx("code",{children:c})},`code-${a}`)}const s=e.match(/^(#{1,6})\s+(.+)$/);if(s&&s[2]){const c=((u=s[1])==null?void 0:u.length)??1,d=s[2],h=c<=2?"text-base font-bold text-[var(--text)]":"text-sm font-bold text-[var(--text)]";return o.jsx("p",{className:h,children:Eo(d,`h-${a}`)},`h-${a}`)}return r.every(c=>/^\s*>\s?/.test(c))?o.jsx("blockquote",{className:"border-l-2 border-[var(--accent)] pl-4 text-sm italic text-[var(--text-muted)]",children:r.map((c,d)=>o.jsx("div",{children:Eo(c.replace(/^\s*>\s?/,""),`bq-${a}-${d}`)},`bq-${a}-${d}`))},`bq-${a}`):/^\s*([-*_])\1{2,}\s*$/.test(e.trim())?o.jsx("hr",{className:"border-[var(--border)]"},`hr-${a}`):r.every(c=>/^\s*[-*]\s+/.test(c))?o.jsx("ul",{className:"grid gap-2 pl-5 text-sm text-[var(--text-muted)]",children:r.map((c,d)=>o.jsx("li",{className:"list-disc",children:Eo(c.replace(/^\s*[-*]\s+/,""),`ul-${a}-${d}`)},`ul-${a}-${d}`))},`ul-${a}`):r.every(c=>/^\s*\d+\.\s+/.test(c))?o.jsx("ol",{className:"grid gap-2 pl-5 text-sm text-[var(--text-muted)] list-decimal",children:r.map((c,d)=>o.jsx("li",{children:Eo(c.replace(/^\s*\d+\.\s+/,""),`ol-${a}-${d}`)},`ol-${a}-${d}`))},`ol-${a}`):o.jsx("p",{className:"text-sm leading-6 text-[var(--text-muted)] whitespace-pre-wrap",children:Eo(e,`p-${a}`)},`p-${a}`)}function Mn({text:e,className:a=""}){if(!(e!=null&&e.trim()))return null;const r=e.trim().split(/\n\s*\n/).filter(Boolean);return o.jsx("div",{className:`formatted-text grid grid-cols-1 gap-3 ${a}`,children:r.map((s,u)=>a2(s,u))})}function il(e){return String(e&&e>0?e:0).padStart(3,"0")}function cl({featureNum:e,phaseNum:a,taskNum:r}){const s=[];return e!==void 0&&s.push(`F${il(e)}`),a!==void 0&&s.push(`P${il(a)}`),r!==void 0&&s.push(`T${il(r)}`),s.join("/")}async function r2(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{const a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.top="-1000px",a.style.opacity="0",document.body.appendChild(a),a.focus(),a.select();const r=document.execCommand("copy");return a.remove(),r}catch{return!1}}function T0({type:e,phaseNum:a,featureNum:r}){return e==="feature"?null:e==="phase"?r===void 0?null:o.jsx("div",{className:"shrink-0 inline-flex items-stretch font-mono text-[10.5px] font-semibold rounded-md overflow-hidden border border-[var(--border)] bg-[var(--surface-elevated)]",children:o.jsxs("span",{className:"px-2 py-1 text-[var(--text-muted)]",children:["F",il(r)]})}):e==="task"?a===void 0?null:o.jsxs("div",{className:"shrink-0 inline-flex items-stretch font-mono text-[10.5px] font-semibold rounded-md overflow-hidden border border-[var(--border)] bg-[var(--surface-elevated)]",children:[o.jsxs("span",{className:"px-2 py-1 text-[var(--text-muted)]",children:["P",il(a)]}),r!==void 0&&o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"w-[1px] bg-[var(--border)]"}),o.jsxs("span",{className:"px-2 py-1 text-[var(--text-subtle)]",children:["F",il(r)]})]})]}):null}function nr({featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,featureName:d,phaseName:h,taskTitle:p}){const g=d?{title:d}:{},y=h?{title:h}:{},x=p?{title:p}:{},E=s?({children:j})=>o.jsx(Ye,{to:`/features/${s}`,...g,className:"entity-path-seg entity-path-seg--feature entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--feature",...g,children:j}),S=u?({children:j})=>o.jsx(Ye,{to:`/features/${s}/phases/${u}`,...y,className:"entity-path-seg entity-path-seg--phase entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--phase",...y,children:j}),w=c?({children:j})=>o.jsx(Ye,{to:`/features/${s}/phases/${u}/tasks/${c}`,...x,className:"entity-path-seg entity-path-seg--task entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--task",...x,children:j});return o.jsxs("span",{className:"entity-path-badge",children:[e!==void 0?o.jsxs(E,{children:["F",il(e)]}):null,a!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"entity-path-sep","aria-hidden":"true",children:"/"}),o.jsxs(S,{children:["P",il(a)]})]}):null,r!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"entity-path-sep","aria-hidden":"true",children:"/"}),o.jsxs(w,{children:["T",il(r)]})]}):null]})}function rr({id:e,children:a}){const[r,s]=v.useState(!1);return o.jsxs("button",{type:"button",onClick:async u=>{u.preventDefault(),u.stopPropagation(),await r2(e)&&(s(!0),window.setTimeout(()=>s(!1),1200))},title:r?"Copied":`Copy ${e}`,"aria-label":r?"Copied":`Copy ${e}`,className:"copyable-id group inline-flex items-center gap-1.5",children:[a,o.jsx("span",{className:"copyable-id__icon","aria-hidden":"true",children:r?o.jsx(Sj,{className:"h-3 w-3 text-emerald-500"}):o.jsx(Ij,{className:"h-3 w-3"})})]})}function ul({shortId:e}){return o.jsx(rr,{id:e,children:o.jsx("span",{className:"short-id-badge",children:e})})}function A0({featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,shortId:d,featureName:h,phaseName:p,taskTitle:g}){return o.jsxs(o.Fragment,{children:[o.jsx(nr,{featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,featureName:h,phaseName:p,taskTitle:g}),o.jsx(rr,{id:cl({featureNum:e,phaseNum:a,taskNum:r}),children:o.jsx("span",{className:"sr-only",children:"Copy path"})}),d?o.jsx(ul,{shortId:d}):null]})}function Xm({phaseId:e,updatedAt:a}){const r=`Phase handoff pending${a?` · updated ${new Date(a).toLocaleString()}`:""}`;return o.jsxs("a",{href:`/handoff#${e}`,className:"handoff-badge flex items-center gap-1 ml-2 shrink-0",title:r,"aria-label":r,children:[o.jsxs("svg",{viewBox:"0 0 16 16",width:"14",height:"14","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[o.jsx("path",{d:"M4 2h5l3 3v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z"}),o.jsx("path",{d:"M9 2v3h3"}),o.jsx("path",{d:"M5.5 8h5M5.5 10.5h5"})]}),o.jsx("span",{className:"handoff-badge__label",children:"handoff"})]})}const vm={planned:{colorVar:"--color-status-planned",icon:"circle",pattern:"",label:"Planned",description:"Not started",borderStyle:"solid",bgOpacity:10,borderOpacity:30},started:{colorVar:"--color-status-started",icon:"play-start",pattern:"dashed",label:"Started",description:"Begun but not active now",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},"in-progress":{colorVar:"--color-status-in-progress",icon:"play",pattern:"pulse",label:"In progress",description:"Active now",borderStyle:"solid",bgOpacity:12,borderOpacity:30},waiting:{colorVar:"--color-status-waiting",icon:"clock",pattern:"dashed",label:"Waiting",description:"Waiting on a dependency",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},blocked:{colorVar:"--color-status-blocked",icon:"stop",pattern:"",label:"Blocked",description:"Impediment",borderStyle:"solid",bgOpacity:12,borderOpacity:30},deferred:{colorVar:"--color-status-deferred",icon:"pause",pattern:"dashed",label:"Deferred",description:"Postponed",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},done:{colorVar:"--color-status-done",icon:"check",pattern:"",label:"Done",description:"Completed",borderStyle:"solid",bgOpacity:14,borderOpacity:30},closed:{colorVar:"--color-status-closed",icon:"check-mixed",pattern:"",label:"Closed",description:"Closed with mixed outcomes",borderStyle:"solid",bgOpacity:14,borderOpacity:30},canceled:{colorVar:"--color-status-canceled",icon:"ban",pattern:"hatch",label:"Canceled",description:"Canceled",borderStyle:"solid",bgOpacity:8,borderOpacity:30},rejected:{colorVar:"--color-status-rejected",icon:"x",pattern:"crosshatch",label:"Rejected",description:"Rejected",borderStyle:"solid",bgOpacity:10,borderOpacity:30}};function Xl(e){return vm[e]??vm.planned}function Gu(e,a,r){switch(a){case"bg":return`color-mix(in srgb, var(${e.colorVar}) ${e.bgOpacity}%, transparent)`;case"border":return`color-mix(in srgb, var(${e.colorVar}) ${e.borderOpacity}%, transparent)`}}function l2(e){const a=Xl(e);return{backgroundColor:Gu(a,"bg"),borderStyle:a.borderStyle,borderColor:Gu(a,"border"),borderWidth:"1px"}}function s2(e){const a=Xl(e);return{backgroundColor:Gu(a,"bg"),borderStyle:a.borderStyle,borderColor:Gu(a,"border"),borderWidth:"1px"}}function Qm(e){const{pattern:a}=Xl(e);return a?a==="dashed"?`status-pattern-dashed status-pattern-dashed-${e}`:`status-pattern-${a}`:""}function D0(e){return`status-${e}`}function C0(e,a=30){return`color-mix(in srgb, var(${Xl(e).colorVar}) ${a}%, transparent)`}function O0(e){return e in vm?e:"planned"}function i2(e,a){const s=[Xl(e).label],u=[["done",a.done],["in-progress",a.inProgress],["planned",a.planned],["waiting",a.waiting],["blocked",a.blocked],["deferred",a.deferred],["canceled",a.canceled],["rejected",a.rejected]];for(const[c,d]of u)d>0&&s.push(`${d} ${c}`);return s.join(" · ")}const M0={circle:hd,"play-start":sR,play:v0,clock:Uj,stop:b0,pause:qm,check:Hm,"check-mixed":Rj,ban:p0,x:Lj};function o2({status:e,className:a=""}){const r=Xl(e),s=M0[r.icon]??hd;return o.jsx(s,{className:`h-4 w-4 shrink-0 ${a}`.trim(),"aria-hidden":"true"})}function fr({status:e}){const a=O0(e),r=Xl(a);return o.jsxs("span",{className:`status-chip ${D0(a)} ${Qm(a)}`,title:r.description,"aria-label":r.description,children:[o.jsx(o2,{status:a,className:"h-3.5 w-3.5"}),o.jsx("span",{children:r.label})]})}function rc({status:e,breakdown:a,size:r="md",children:s}){const u=Xl(e),c=M0[u.icon]??hd,d=Qm(e),h=a?i2(e,a):u.description,p=r==="sm"?"px-2 py-0.5 text-[10px]":"px-2.5 py-1 text-[11px]";return o.jsxs("span",{className:`status-chip ${D0(e)} ${d} ${p}`,title:h,"aria-label":h,children:[o.jsx(c,{className:"h-3.5 w-3.5"}),o.jsx("span",{children:u.label}),s]})}function Xu({status:e,breakdown:a,doneTasks:r,totalTasks:s,recentlyChanged:u,className:c}){const d=r!=null&&s!=null;return o.jsxs("div",{className:c,children:[u?o.jsx("span",{className:"rounded-full bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--accent)]",children:"Updated"}):null,d?o.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",r,"/",s||0,")"]}):null,o.jsx(rc,{status:e,breakdown:a})]})}function xm({task:e,variant:a="active"}){const r=Mr(),s=e.featureId?`/features/${e.featureId}/phases/${e.phaseId}/tasks/${e.id}`:"/features";return o.jsx("article",{className:`min-w-0 rounded-[12px] border bg-[var(--surface-card)] px-3 py-2 text-sm text-[var(--text)] ${a==="next"?"border-dashed border-[var(--accent)] bg-[var(--accent)]/5":e.pendingResume?"border-[var(--accent)]":"border-[var(--border)]"}`,children:o.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[o.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[o.jsx(nr,{featureNum:e.featureNumber,phaseNum:e.phaseNumber,taskNum:e.number,featureId:e.featureId,phaseId:e.phaseId,taskId:e.id}),o.jsx(rr,{id:cl({featureNum:e.featureNumber,phaseNum:e.phaseNumber,taskNum:e.number}),children:o.jsx("span",{className:"sr-only",children:"Copy task path"})}),e.shortId?o.jsx(ul,{shortId:e.shortId}):null,a==="next"?o.jsx("span",{className:"shrink-0 rounded-full border border-[var(--accent)]/50 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-[0.16em] text-[var(--accent)]",children:"Next"}):null,o.jsx("span",{className:"shrink-0",children:o.jsx(fr,{status:e.status})}),o.jsx(Ye,{to:s,className:"min-w-0 flex-1 truncate font-medium hover:text-[var(--accent)]",children:e.title})]}),o.jsx("button",{type:"button",onClick:u=>{u.preventDefault(),u.stopPropagation(),r(`/?locate=T${e.number}`)},"aria-label":`Locate T${e.number} in work tree`,title:"Locate in work tree",className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-[8px] text-[var(--text-subtle)] transition-colors hover:bg-[var(--accent)] hover:text-white",children:o.jsx(Kj,{className:"h-4 w-4"})})]})})}function c2({taskFocus:e}){const a=v.useMemo(()=>{const r=s=>{const u=new Set;return s.filter(c=>u.has(c.id)?!1:(u.add(c.id),!0))};return{active:r(e.active),pendingResume:r(e.pendingResume)}},[e.active,e.pendingResume]);return a.active.length===0&&!e.nextWork?null:o.jsx("div",{className:"relative z-10 border-t border-[var(--border)] bg-[var(--surface-elevated)]/95 backdrop-blur-xl",children:o.jsx("div",{className:"page-container grid gap-3 py-2.5",children:a.active.length>0?o.jsxs("section",{"aria-labelledby":"active-task-heading",className:"grid gap-1.5",children:[o.jsxs("h2",{id:"active-task-heading",className:"text-[10px] font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:["Active tasks (",a.active.length,")"]}),a.active.map(r=>o.jsx(xm,{task:r},r.id))]}):e.nextWork?o.jsxs("section",{"aria-labelledby":"next-work-heading",className:"grid gap-1.5",children:[o.jsx("h2",{id:"next-work-heading",className:"text-[10px] font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:"Next work"}),o.jsx(xm,{task:e.nextWork,variant:"next"}),e.nextWorkReason?o.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:e.nextWorkReason}):null]}):null})})}function u2({project:e,taskFocus:a,serverInfo:r}){const s=pr(),[u,c]=v.useState("connecting");return v.useEffect(()=>{const d=h=>{var g;const p=(g=h.detail)==null?void 0:g.status;p&&c(p)};return window.addEventListener("agent-plan:ws-status",d),()=>window.removeEventListener("agent-plan:ws-status",d)},[]),o.jsxs("div",{className:"page-shell",children:[o.jsxs("header",{className:"sticky top-0 z-30 overflow-visible",children:[o.jsx(t2,{projectName:e==null?void 0:e.name,projectRoot:e==null?void 0:e.projectRoot,planRoot:e==null?void 0:e.planRoot,agentPlanVersion:(e==null?void 0:e.agentPlanVersion)??"",liveStatus:u}),o.jsx(c2,{taskFocus:a})]}),o.jsxs("div",{className:"page-container py-8",children:[o.jsxs("div",{className:"mb-8 flex flex-col gap-3 md:flex-row md:items-end md:justify-between md:gap-6",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsx("p",{className:"text-sm font-semibold uppercase tracking-[0.24em] text-[var(--text-subtle)]",children:"Current project"}),o.jsx("h1",{className:"text-2xl font-black tracking-tight text-[var(--text)] md:text-3xl",children:o.jsx(Ye,{to:"/",className:"hover:text-[var(--accent)]",children:(e==null?void 0:e.name)??"Agent Plan"})}),e!=null&&e.projectRoot?o.jsx("p",{className:"mt-2 truncate font-mono text-xs text-[var(--text-subtle)]",title:e.projectRoot,children:e.projectRoot}):null,r?o.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-xs",children:[o.jsxs("span",{className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 font-semibold uppercase tracking-[0.12em] ${r.mode==="lan"?"bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] text-[var(--accent)]":"bg-[var(--surface-elevated)] text-[var(--text-muted)]"}`,children:[o.jsx("span",{"aria-hidden":"true",className:"inline-block h-1.5 w-1.5 rounded-full bg-current"}),r.mode==="lan"?"LAN visible":"Local only"]}),o.jsx("a",{href:r.localUrl,target:"_blank",rel:"noreferrer",className:"font-mono text-[var(--text-subtle)] underline-offset-2 hover:text-[var(--accent)] hover:underline",children:r.localUrl}),r.lanUrl?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"text-[var(--text-subtle)]",children:"·"}),o.jsx("a",{href:r.lanUrl,target:"_blank",rel:"noreferrer",className:"font-mono text-[var(--text-subtle)] underline-offset-2 hover:text-[var(--accent)] hover:underline",children:r.lanUrl})]}):null]}):null,e!=null&&e.description?o.jsx(Mn,{text:e.description,className:"mt-2 max-w-3xl"}):null]}),s.state!=="idle"?o.jsx("div",{className:"text-sm font-semibold text-[var(--accent)]",children:"Updating…"}):null]}),o.jsx(Ni,{})]})]})}const ka=32,_0=4,d2=Math.PI*1.2;function L0(){if(typeof document>"u")return"#7b68ee";const e=document.createElement("div");e.style.color="var(--accent, #7b68ee)",document.body.appendChild(e);const a=getComputedStyle(e).color||"#7b68ee";return e.remove(),a}function f2(){const e=document.createElement("canvas");e.width=ka,e.height=ka;const a=e.getContext("2d");if(!a)return"";const r=L0();return a.beginPath(),a.arc(ka/2,ka/2,ka/2-_0,0,Math.PI*2),a.fillStyle=r,a.fill(),a.fillStyle="#ffffff",a.font="bold 16px system-ui, sans-serif",a.textAlign="center",a.textBaseline="middle",a.fillText("A",ka/2,ka/2+1),e.toDataURL("image/png")}function h2(e,a){const r=e.getContext("2d");if(!r)return"";const s=L0();r.clearRect(0,0,ka,ka);const u=ka/2,c=ka/2,d=ka/2-_0;return r.beginPath(),r.arc(u,c,d,0,Math.PI*2),r.fillStyle=s,r.globalAlpha=.85,r.fill(),r.globalAlpha=1,r.beginPath(),r.arc(u,c,d-3,a,a+d2),r.strokeStyle="#ffffff",r.lineWidth=3,r.lineCap="round",r.stroke(),r.fillStyle="#ffffff",r.font="bold 14px system-ui, sans-serif",r.textAlign="center",r.textBaseline="middle",r.fillText("A",u,c+1),e.toDataURL("image/png")}function m2(){let e=document.querySelector("link[rel~='icon']");return e||(e=document.createElement("link"),e.rel="icon",e.type="image/png",document.head.appendChild(e)),e}function p2(e){const a=v.useRef(null),r=v.useRef(null),s=v.useRef(null),u=v.useRef(0);v.useEffect(()=>{if(a.current||(a.current=m2()),s.current||(s.current=f2()),!r.current){const h=document.createElement("canvas");h.width=ka,h.height=ka,r.current=h}const c=a.current;if(!e){c.href=s.current;return}const d=window.setInterval(()=>{document.hidden||(u.current+=Math.PI/10,c.href=h2(r.current,u.current))},100);return()=>{window.clearInterval(d),c.href=s.current}},[e])}const Co={create:{key:"n",primary:!0},edit:{key:"e",primary:!0},delete:{key:"d",primary:!0},submit:{key:"Enter",primary:!0}},z0=v.createContext(Co);function $0(){return typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform)}function g2(e){return typeof e!="string"}function v2(e){return{create:(e==null?void 0:e.create)??Co.create,edit:(e==null?void 0:e.edit)??Co.edit,delete:(e==null?void 0:e.delete)??Co.delete,submit:(e==null?void 0:e.submit)??Co.submit}}function x2(e){const a=[],r=$0();e.primary&&a.push(r?"⌘":"Ctrl"),e.meta&&a.push(r?"⌘":"Meta"),e.ctrl&&a.push(r?"⌃":"Ctrl"),e.shift&&a.push(r?"⇧":"Shift"),e.alt&&a.push(r?"⌥":"Alt");const s=e.key==="Backspace"?r?"⌫":"Backspace":e.key==="Enter"?r?"↩":"Enter":e.key.length===1?e.key.toUpperCase():e.key;return a.push(s),r?a.join(""):a.join("+")}function y2(e){return e instanceof HTMLElement?!!e.closest("input, textarea, select, [contenteditable='true']"):!1}function b2(e,a){const r=a.key.length===1?a.key.toLowerCase():a.key,s=e.key.length===1?e.key.toLowerCase():e.key,u=$0(),c=a.meta??(a.primary?u:!1),d=a.ctrl??(a.primary?!u:!1);return s===r&&!!c===e.metaKey&&!!d===e.ctrlKey&&!!a.shift===e.shiftKey&&!!a.alt===e.altKey}function w2({shortcuts:e,children:a}){return v.createElement(z0.Provider,{value:v2(e)},a)}function U0(e){const a=v.useContext(z0);if(e)return g2(e)?e:a[e]}function _n(e,a,r){const s=U0(e);v.useEffect(()=>{if(!s||(r==null?void 0:r.enabled)===!1)return;const u=c=>{!(r!=null&&r.allowInEditable)&&y2(c.target)||b2(c,s)&&(c.preventDefault(),a())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[a,r==null?void 0:r.allowInEditable,r==null?void 0:r.enabled,s])}const S2=1500,E2=80,N2=12e3,j2=5e3;function R2(){const{revalidate:e}=lN(),a=v.useRef(null),r=v.useRef(null),s=v.useRef(null),u=v.useRef(null),c=v.useRef(null);return v.useEffect(()=>{let d=!0;const h=F=>{window.dispatchEvent(new CustomEvent("agent-plan:ws-status",{detail:{status:F}}))},p=()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},g=()=>{s.current!==null&&(window.clearTimeout(s.current),s.current=null)},y=()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},x=()=>{u.current!==null&&(window.clearInterval(u.current),u.current=null)},E=()=>{g(),s.current=window.setTimeout(()=>{e()},E2)},S=()=>{!d||r.current!==null||(h("reconnecting"),r.current=window.setTimeout(()=>{r.current=null,R()},S2))},w=()=>{x(),y();const F=a.current;if(a.current=null,F&&(F.readyState===WebSocket.OPEN||F.readyState===WebSocket.CONNECTING))try{F.close()}catch{}},j=()=>{x(),y(),u.current=window.setInterval(()=>{const F=a.current;if(!(!F||F.readyState!==WebSocket.OPEN)){try{F.send(JSON.stringify({type:"ping"}))}catch{w(),S();return}y(),c.current=window.setTimeout(()=>{w(),S()},j2)}},N2)},R=()=>{if(!d)return;const F=a.current;if(F&&(F.readyState===WebSocket.OPEN||F.readyState===WebSocket.CONNECTING))return;h(r.current!==null?"reconnecting":"connecting"),p();const W=window.location.protocol==="https:"?"wss":"ws",ne=new WebSocket(`${W}://${window.location.host}/ws`);a.current=ne,ne.onopen=()=>{p(),h("live"),j()},ne.onmessage=_=>{y();try{const T=JSON.parse(_.data);if(!T.type||T.type==="pong"||T.type==="connected")return;switch(window.dispatchEvent(new CustomEvent("agent-plan:ws-event",{detail:T})),T.type){case"project-updated":case"features-updated":case"phases-updated":case"requirements-updated":case"plan-rendered":case"file-changed":case"handoffUpdated":case"handoffCleared":E();break;default:break}}catch{}},ne.onclose=()=>{x(),y(),a.current===ne&&(a.current=null),d&&S()},ne.onerror=()=>{try{ne.close()}catch{}}},L=()=>{const F=a.current;(!F||F.readyState===WebSocket.CLOSED||F.readyState===WebSocket.CLOSING)&&R()},B=()=>{document.visibilityState==="visible"&&L()},I=()=>{L()};return h("connecting"),R(),window.addEventListener("online",I),document.addEventListener("visibilitychange",B),()=>{d=!1,h("disconnected"),window.removeEventListener("online",I),document.removeEventListener("visibilitychange",B),p(),g(),x(),y(),w()}},[e]),null}async function k2(){const[e,a,r]=await Promise.all([Fm(),TR(),QR()]);return{project:e,uiConfig:a,taskFocus:r}}function T2(){const{project:e,uiConfig:a,taskFocus:r}=gr();return v.useEffect(()=>{var d,h;const s=(d=e==null?void 0:e.name)==null?void 0:d.trim(),u=(h=e==null?void 0:e.projectRoot)==null?void 0:h.trim(),c=u?u.split(/[/\\]/).filter(Boolean).pop():void 0;s?c&&c!==s?document.title=`${s} · ${c}`:document.title=`${s} · Agent Plan`:document.title="Agent Plan"},[e==null?void 0:e.name,e==null?void 0:e.projectRoot]),p2(r.active.length>0),o.jsxs(w2,{shortcuts:a.shortcuts,children:[o.jsx(R2,{}),o.jsx(d0,{getKey:s=>s.pathname}),o.jsx(u2,{project:e,taskFocus:r,serverInfo:a.server})]})}function A2(e,a){if(typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string")return e.message;if(typeof e=="string"){try{const r=JSON.parse(e);if(typeof r.message=="string")return r.message}catch{return e}return e}return a}function D2(){const e=o0(),a=wi(e),r=a&&e.status===503,s=a&&e.status===423,u=a?r?"Planner web UI disconnected":s?"Planner write already in progress":`Request failed (${e.status})`:"Planner web UI unavailable",c=a?A2(e.data,e.statusText):e instanceof Error?e.message:"The planner web UI could not reach its local server.";return v.useEffect(()=>{document.title="Agent Plan"},[]),o.jsx("div",{className:"page-shell min-h-screen",children:o.jsx("div",{className:"page-container flex min-h-screen items-center justify-center py-12",children:o.jsxs("div",{className:"surface-card max-w-2xl rounded-[24px] px-8 py-8",children:[o.jsx("p",{className:"text-sm font-semibold uppercase tracking-[0.24em] text-[var(--text-subtle)]",children:"Agent Plan"}),o.jsx("h1",{className:"mt-2 text-2xl font-black tracking-tight text-[var(--text)] md:text-3xl",children:u}),o.jsx("p",{className:"mt-4 text-sm text-[var(--text-muted)]",children:String(c)}),o.jsx("div",{className:"mt-6 grid gap-2 text-sm text-[var(--text-muted)]",children:r?o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"Possible cause: Pi was closed or the local planner web server stopped."}),o.jsx("p",{children:"What to do:"}),o.jsxs("ul",{className:"grid gap-1 pl-5",children:[o.jsxs("li",{className:"list-disc",children:["restart Pi or run ",o.jsx("code",{children:"planner-web start"})]}),o.jsx("li",{className:"list-disc",children:"reopen this planner UI from the new session if needed"}),o.jsx("li",{className:"list-disc",children:"then reload this page"})]})]}):s?o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"Another Pi, MCP, CLI, development, or planner-server process is currently mutating this planner root."}),o.jsx("p",{children:"Read-only pages remain available. Wait for that write to finish, then retry without starting another planner server."})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"The request reached the planner server, but the server rejected it."}),o.jsx("p",{children:"Fix the validation issue above, then try again."})]})}),o.jsx("div",{className:"mt-6 flex flex-wrap gap-3",children:o.jsx("button",{type:"button",onClick:()=>window.location.reload(),className:"inline-flex min-h-9 items-center whitespace-nowrap rounded-[12px] bg-[var(--accent)] px-3 py-1.5 text-sm font-semibold text-white transition hover:opacity-90 sm:min-h-11 sm:rounded-[14px] sm:px-4 sm:py-2",children:"Reload page"})})]})})})}async function C2(){const[e,a,r]=await Promise.all([Vm(),gd(),XR()]);return{features:e,phases:a,activeTasks:r}}function O2({shortcut:e}){const a=U0(e);return a?o.jsx("span",{className:"hidden rounded-md border border-[var(--border-strong)] bg-[var(--surface-elevated)] px-2 py-0.5 text-[11px] font-bold tracking-wide text-[var(--text-muted)] sm:inline-block",children:x2(a)}):null}const M2={primary:"border-transparent bg-[var(--accent)] text-white hover:bg-[var(--accent-hover)]",secondary:"border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]",ghost:"border-transparent bg-transparent text-[var(--text-muted)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]",danger:"border-transparent bg-[var(--danger-soft)] text-[var(--color-status-blocked)] hover:bg-[color-mix(in_srgb,var(--danger-soft)_88%,black_12%)]"};function Ze({variant:e="secondary",className:a="",children:r,shortcut:s,...u}){return o.jsxs("button",{className:`inline-flex min-h-9 items-center justify-center gap-1.5 whitespace-nowrap rounded-[12px] border px-3 py-1.5 text-sm font-semibold transition-colors motion-reduce:transition-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--surface)] disabled:cursor-not-allowed disabled:opacity-60 sm:min-h-11 sm:rounded-[14px] sm:px-4 sm:py-2 sm:gap-2 ${M2[e]} ${a}`,...u,children:[o.jsx("span",{className:"inline-flex items-center gap-1.5 sm:gap-2",children:r}),s?o.jsx(O2,{shortcut:s}):null]})}function $t({className:e="",children:a,...r}){return o.jsx("div",{className:`surface-card p-6 ${e}`,...r,children:a})}function No(...e){return e.filter(Boolean).join(" ")}function _2(){return o.jsx("span",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text)] shadow-sm transition group-open:rotate-180 group-hover:border-[var(--accent)] group-hover:text-[var(--accent)]",children:o.jsx(Ts,{className:"h-5 w-5"})})}function Hn({title:e,subtitle:a,leading:r,actions:s,defaultOpen:u=!1,count:c,className:d,summaryClassName:h,contentClassName:p,titleClassName:g,subtitleClassName:y,children:x}){return o.jsxs("details",{className:No("group mt-4 overflow-hidden rounded-[10px] border border-[var(--border)]",d),open:u,children:[o.jsxs("summary",{className:No("flex min-w-0 list-none cursor-pointer items-start justify-between gap-3 bg-[var(--surface-elevated)] p-4 text-left text-[var(--text)] transition-colors select-none hover:bg-[var(--surface-strong)] [&::-webkit-details-marker]:hidden",h),children:[o.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:[r?o.jsx("div",{className:"shrink-0 pt-0.5",children:r}):null,o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsxs("div",{className:No("flex flex-wrap items-center gap-2 text-sm font-semibold",g),children:[e,c!==void 0?o.jsxs("span",{className:"text-[var(--text-subtle)]",children:["(",c,")"]}):null]}),a?o.jsx("div",{className:No("mt-2 text-sm text-[var(--text-muted)] [overflow-wrap:anywhere]",y),children:a}):null]})]}),o.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[s,o.jsx(_2,{})]})]}),o.jsx("div",{className:No("border-t border-[var(--border)] bg-[var(--surface)] p-4",p),children:x})]})}function ym({targetType:e,targetRef:a,returnTo:r}){return o.jsxs(o.Fragment,{children:[o.jsx("input",{type:"hidden",name:"targetType",value:e}),a?o.jsx("input",{type:"hidden",name:"targetRef",value:a}):null,o.jsx("input",{type:"hidden",name:"returnTo",value:r})]})}function B0({decision:e}){return o.jsxs("div",{className:"grid gap-2",children:[o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Title",o.jsx("input",{name:"title",required:!0,defaultValue:(e==null?void 0:e.title)??"",className:"field-control"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Decision",o.jsx("textarea",{name:"decision",defaultValue:(e==null?void 0:e.decision)??"",className:"field-control field-textarea min-h-20"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Rationale",o.jsx("textarea",{name:"rationale",defaultValue:(e==null?void 0:e.rationale)??"",className:"field-control field-textarea min-h-20"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Implementation notes",o.jsx("textarea",{name:"implementationNotes",defaultValue:(e==null?void 0:e.implementationNotes)??"",className:"field-control field-textarea min-h-20"})]})]})}function L2({targetType:e,targetRef:a,returnTo:r}){return o.jsxs("details",{className:"surface-card px-4 py-3",children:[o.jsx("summary",{className:"cursor-pointer select-none text-sm font-semibold text-[var(--text)]",children:"Add accepted decision"}),o.jsxs(dn,{method:"post",action:"/accepted-decisions",className:"mt-3 grid gap-3",children:[o.jsx(ym,{targetType:e,targetRef:a,returnTo:r}),o.jsx("input",{type:"hidden",name:"intent",value:"create"}),o.jsx(B0,{}),o.jsx(Ze,{type:"submit",variant:"primary",className:"justify-self-start",children:"Add decision"})]})]})}function z2({entry:e,targetType:a,targetRef:r,returnTo:s}){return o.jsxs("details",{className:"mt-3 rounded-[12px] border border-[var(--border)] bg-[var(--surface-elevated)] px-3 py-2",children:[o.jsx("summary",{className:"cursor-pointer select-none text-sm font-semibold text-[var(--text)]",children:"Manage decision"}),o.jsxs("div",{className:"mt-3 grid gap-3",children:[o.jsxs(dn,{method:"post",action:"/accepted-decisions",className:"grid gap-3",children:[o.jsx(ym,{targetType:a,targetRef:r,returnTo:s}),o.jsx("input",{type:"hidden",name:"intent",value:"update"}),o.jsx("input",{type:"hidden",name:"decisionId",value:e.id}),o.jsx(B0,{decision:e}),o.jsx(Ze,{type:"submit",variant:"secondary",className:"justify-self-start",children:"Save decision"})]}),o.jsxs(dn,{method:"post",action:"/accepted-decisions",onSubmit:u=>{window.confirm(`Delete accepted decision “${e.title}”? This cannot be undone.`)||u.preventDefault()},children:[o.jsx(ym,{targetType:a,targetRef:r,returnTo:s}),o.jsx("input",{type:"hidden",name:"intent",value:"delete"}),o.jsx("input",{type:"hidden",name:"decisionId",value:e.id}),o.jsx(Ze,{type:"submit",variant:"danger",children:"Delete decision"})]})]})]})}function yd({decisions:e,targetType:a,targetRef:r}){const s=ga(),u=`${s.pathname}${s.search}${s.hash}`,c=!!a;return e.length===0&&!c?null:o.jsxs(Hn,{title:`Accepted decisions (${e.length})`,contentClassName:"grid gap-3",children:[c&&a?o.jsx(L2,{targetType:a,targetRef:r,returnTo:u}):null,e.map(d=>o.jsxs("div",{className:"surface-card px-4 py-3",children:[o.jsx("p",{className:"text-sm font-semibold text-[var(--text)]",children:d.title}),d.decision?o.jsxs("div",{className:"mt-2 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Decision:"}),o.jsx(Mn,{text:d.decision,className:"mt-1"})]}):null,d.rationale?o.jsxs("div",{className:"mt-1 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Rationale:"}),o.jsx(Mn,{text:d.rationale,className:"mt-1"})]}):null,d.implementationNotes?o.jsxs("div",{className:"mt-1 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Implementation:"}),o.jsx(Mn,{text:d.implementationNotes,className:"mt-1"})]}):null,c&&a?o.jsx(z2,{entry:d,targetType:a,targetRef:r,returnTo:u}):null]},d.id))]},s.key)}function Nu({title:e,items:a}){return a.length===0?null:o.jsxs("section",{children:[o.jsx("h3",{className:"text-sm font-semibold uppercase tracking-[0.18em] text-[var(--text-subtle)]",children:e}),o.jsx("ul",{className:"mt-2 grid gap-2 pl-5 text-sm text-[var(--text-muted)]",children:a.map(r=>o.jsx("li",{className:"list-disc",children:r},r))})]})}function $2({project:e}){const a=e.projectGuidelines.content.trim(),r=e.workflowRules.beforePhaseStart.length+e.workflowRules.beforeTaskStart.length+e.workflowRules.afterPhaseComplete.length,s=e.globalRules.length+r+e.decisions.length;return e.scope.length>0||e.outOfScope.length>0||e.technologies.length>0||e.tools.length>0||a.length>0||e.acceptedDecisions.length>0||s>0?o.jsx($t,{className:"grid gap-4",children:o.jsxs("details",{className:"group",children:[o.jsx("summary",{className:"cursor-pointer select-none text-lg font-bold text-[var(--text)]",children:"Project Context"}),o.jsxs("div",{className:"mt-4 grid gap-4",children:[o.jsx(Nu,{title:"In scope",items:e.scope}),o.jsx(Nu,{title:"Out of scope",items:e.outOfScope}),e.technologies.length>0||e.tools.length>0?o.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[o.jsx(Nu,{title:"Technologies",items:e.technologies}),o.jsx(Nu,{title:"Tools",items:e.tools})]}):null,a?o.jsxs("section",{children:[o.jsx("h3",{className:"text-sm font-semibold uppercase tracking-[0.18em] text-[var(--text-subtle)]",children:"Project Guidelines"}),o.jsx("div",{className:"mt-2 text-sm text-[var(--text-muted)]",children:o.jsx(Mn,{text:a})})]}):null,o.jsx(yd,{decisions:e.acceptedDecisions,targetType:"project"}),s>0?o.jsxs("aside",{className:"rounded-[14px] border border-[var(--border)] bg-[var(--surface-elevated)] px-4 py-3 text-sm text-[var(--text-muted)]","aria-label":"Legacy project context",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Legacy project context remains."})," ",s," legacy rule or decision ",s===1?"entry will":"entries will"," migrate automatically on the next explicit planner load."]}):null]})]})}):null}function U2(...e){return e.filter(Boolean).join(" ")}function B2(e){return e&&e>0?`P${e}`:""}function bd({priority:e,className:a}){const r=B2(e);if(!r)return null;const s=`Priority ${e}`;return o.jsx("span",{className:U2("inline-flex items-center rounded-full border border-[var(--border)] bg-[var(--surface-elevated)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.08em] text-[var(--text-muted)]",a),"aria-label":s,title:s,children:r})}function I2(e){try{return new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e))}catch{return e}}function H2({features:e,phases:a}){const r=v.useMemo(()=>{const s=new Map(e.map(u=>[u.id,u.name]));return a.flatMap(u=>u.tasks.filter(c=>c.status==="done").map(c=>({task:c,phase:u,feature:e.find(d=>d.id===u.featureId),featureName:u.featureId?s.get(u.featureId)??u.featureId:"Unlinked feature",completedAt:c.completedAt||c.updatedAt}))).sort((u,c)=>c.completedAt.localeCompare(u.completedAt)).slice(0,3)},[e,a]);return o.jsxs($t,{className:"grid gap-4",children:[o.jsxs("div",{children:[o.jsx("h2",{className:"text-lg font-bold text-[var(--text)]",children:"Latest completed tasks"}),o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"Most recently completed tasks, ordered by completion timestamp."})]}),o.jsx("div",{className:"grid gap-3",children:r.length>0?r.map(({task:s,phase:u,feature:c,featureName:d,completedAt:h})=>o.jsxs("div",{className:"surface-card grid min-w-0 grid-cols-1 gap-1 px-4 py-3 transition hover:border-[var(--accent)] hover:bg-[var(--accent-soft)]",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[o.jsx(A0,{featureNum:c==null?void 0:c.number,phaseNum:u.number,taskNum:s.number,featureId:c==null?void 0:c.id,phaseId:u.id,taskId:s.id,shortId:s.shortId,featureName:c==null?void 0:c.name,phaseName:u.title,taskTitle:s.title}),o.jsx(bd,{priority:s.priority}),o.jsx("span",{className:"ml-auto shrink-0",children:o.jsx(fr,{status:s.status})})]}),o.jsx(Ye,{to:u.featureId?`/features/${u.featureId}/phases/${u.id}/tasks/${s.id}`:"/features",className:"entity-link--task min-w-0 break-words text-sm font-semibold underline-offset-4 [overflow-wrap:anywhere]",children:s.title}),o.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-[var(--text-muted)]",children:[o.jsx(T0,{type:"phase",featureNum:c==null?void 0:c.number}),o.jsxs("span",{className:"min-w-0 truncate",children:[d," · ",u.title]})]}),o.jsxs("div",{className:"text-[11px] text-[var(--text-subtle)]",children:["Completed ",I2(h)]})]},s.id)):o.jsx("p",{className:"py-4 text-center text-sm text-[var(--text-muted)]",children:"No completed tasks yet."})})]})}const $y=1440*60*1e3;function q2(e){const a=Date.now()-new Date(e).getTime();if(a<0)return"just now";const r=Math.floor(a/1e3);if(r<60)return`${r}s ago`;const s=Math.floor(r/60);return s<60?`${s}m ago`:new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e))}function P2({features:e,phases:a}){const[,r]=v.useState(0),s=Date.now(),u=v.useMemo(()=>{const c=new Map(e.map(d=>[d.id,d.name]));return a.flatMap(d=>d.tasks.map(h=>({task:h,phase:d,feature:e.find(p=>p.id===d.featureId),featureName:d.featureId?c.get(d.featureId)??d.featureId:"Unlinked feature",createdAt:h.createdAt}))).filter(d=>{const h=new Date(d.createdAt).getTime();return Number.isFinite(h)&&s-h<$y&&s-h>=0&&d.task.status==="planned"&&!d.task.startedAt}).sort((d,h)=>h.createdAt.localeCompare(d.createdAt)).slice(0,10)},[e,a,s]);return v.useEffect(()=>{if(u.length===0)return;const c=u.reduce((h,p)=>{const g=new Date(p.createdAt).getTime()+$y-Date.now();return Math.min(h,g)},1/0);if(!Number.isFinite(c)||c<=0)return;const d=window.setTimeout(()=>r(h=>h+1),c+50);return()=>window.clearTimeout(d)},[u]),u.length===0?null:o.jsxs($t,{className:"grid gap-4",children:[o.jsxs("div",{children:[o.jsx("h2",{className:"text-lg font-bold text-[var(--text)]",children:"New Added Tasks"}),o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"Tasks created in the last 24 hours."})]}),o.jsx("div",{className:"grid gap-3",children:u.map(({task:c,phase:d,feature:h,featureName:p,createdAt:g})=>o.jsxs("div",{className:"surface-card grid min-w-0 grid-cols-1 gap-1 border-[color:color-mix(in_srgb,var(--color-status-done)_0%,transparent)] px-4 py-3 transition hover:border-[var(--accent)] hover:bg-[var(--accent-soft)]",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[o.jsx(A0,{featureNum:h==null?void 0:h.number,phaseNum:d.number,taskNum:c.number,featureId:h==null?void 0:h.id,phaseId:d.id,taskId:c.id,shortId:c.shortId,featureName:h==null?void 0:h.name,phaseName:d.title,taskTitle:c.title}),o.jsx(bd,{priority:c.priority}),o.jsx("span",{className:"inline-flex items-center rounded-full bg-[color:color-mix(in_srgb,var(--accent)_18%,transparent)] px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--accent)]",children:"New"}),o.jsx("span",{className:"ml-auto shrink-0",children:o.jsx(fr,{status:c.status})})]}),o.jsx(Ye,{to:d.featureId?`/features/${d.featureId}/phases/${d.id}/tasks/${c.id}`:"/features",className:"entity-link--task min-w-0 break-words text-sm font-semibold underline-offset-4 [overflow-wrap:anywhere]",children:c.title}),o.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-[var(--text-muted)]",children:[o.jsx(T0,{type:"phase",featureNum:h==null?void 0:h.number}),o.jsxs("span",{className:"min-w-0 truncate",children:[p," · ",d.title]})]}),o.jsxs("div",{className:"text-[11px] text-[var(--text-subtle)]",children:["Added ",q2(g)]})]},c.id))})]})}const F2=new Set(["in-progress"]),V2=new Set(["planned","waiting","blocked","deferred"]),Y2=new Set(["done","canceled","rejected"]);function I0(e){return e==="discovery"?"in-progress":e==="draft"?"planned":e}function G2(e){const a={planned:0,inProgress:0,waiting:0,blocked:0,deferred:0,done:0,canceled:0,rejected:0};for(const r of e)switch(r){case"planned":a.planned++;break;case"in-progress":a.inProgress++;break;case"waiting":a.waiting++;break;case"blocked":a.blocked++;break;case"deferred":a.deferred++;break;case"done":a.done++;break;case"canceled":a.canceled++;break;case"rejected":a.rejected++;break}return a}function X2(){return{planned:0,inProgress:0,waiting:0,blocked:0,deferred:0,done:0,canceled:0,rejected:0}}function H0(e){const a=e,r=G2(a),s=a.length;if(s===0)return{displayStatus:"planned",breakdown:X2(),hasStarted:!1,totalChildren:0,meaningfulChildren:0};const u=a.filter(g=>g!=="canceled"&&g!=="rejected"),c=u.length,d=u.some(g=>g!=="planned");if(u.some(g=>F2.has(g)))return{displayStatus:"in-progress",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c};if(a.every(g=>Y2.has(g)))return a.every(g=>g==="done")?{displayStatus:"done",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:a.every(g=>g==="canceled")?{displayStatus:"canceled",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:a.every(g=>g==="rejected")?{displayStatus:"rejected",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:{displayStatus:"closed",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c};const h=u.filter(g=>V2.has(g));return h.length>0&&h.every(g=>g==="waiting")?{displayStatus:"waiting",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="blocked")?{displayStatus:"blocked",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="deferred")?{displayStatus:"deferred",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="planned")&&!d?{displayStatus:"planned",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:{displayStatus:"started",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}}function Km(e){const a=e.map(r=>I0(r.status));return H0(a)}function Zm(e){const a=e.map(r=>I0(r.status));return H0(a)}function q0(e){return Zm(e)}function P0(e){return Km(e)}const Oo={key:"priority",direction:"asc"},Q2=4200;function K2(e){return e.reduce((a,r)=>a+r.tasks.length,0)}function Z2(e){return e.reduce((a,r)=>a+r.tasks.filter(s=>s.status==="done").length,0)}function W2(e){return String(e&&e>0?e:0).padStart(3,"0")}const J2={draft:0,discovery:1,planned:2,waiting:3,blocked:4,deferred:5,"in-progress":7,done:8,canceled:9,rejected:10};function Uy(e,a){if(a==="title")return"name"in e?e.name:e.title;if(a==="status")return J2[e.status]??99;if(a==="startedAt"){if("startedAt"in e){const r=e.startedAt;return r?new Date(r).getTime():Number.MAX_SAFE_INTEGER}return Number.MAX_SAFE_INTEGER}if(a==="completedAt"){if("completedAt"in e){const r=e.completedAt;return r?new Date(r).getTime():Number.MAX_SAFE_INTEGER}return Number.MAX_SAFE_INTEGER}if(a==="shortId")return e.shortId??"";if(a==="priority"||a==="number")return e[a]??0;if(a==="createdAt"||a==="updatedAt"){const r=e[a];return r?new Date(r).getTime():0}return 0}function _o(e,a,r,s){const u=Uy(e,r),c=Uy(a,r);let d;return typeof u=="number"&&typeof c=="number"?d=u-c:d=String(u).localeCompare(String(c)),d===0&&(d=(e.priority??0)-(a.priority??0)||e.number-a.number||e.createdAt.localeCompare(a.createdAt)),s==="desc"?-d:d}function ek(e,a,r=Oo){const s=new Map;for(const u of a){if(!u.featureId)continue;const c=s.get(u.featureId)??[];c.push(u),s.set(u.featureId,c)}return e.map(u=>{const c=s.get(u.id)??[],d=c.reduce((y,x)=>y+x.tasks.length,0),h=c.reduce((y,x)=>y+x.tasks.filter(E=>E.status==="done").length,0),p=c.map(y=>{const x=[...y.tasks].sort((S,w)=>_o(S,w,r.key,r.direction)),E=x.some(S=>S.status==="in-progress");return{phase:y,totalTasks:y.tasks.length,doneTasks:y.tasks.filter(S=>S.status==="done").length,allTasks:x,hasActiveTask:E,display:Km(x)}}),g=p.some(({phase:y,allTasks:x})=>y.status==="in-progress"||y.status==="discovery"||x.some(E=>E.status==="in-progress"));return{feature:u,totalTasks:d,doneTasks:h,allPhases:p.sort((y,x)=>_o(y.phase,x.phase,r.key,r.direction)),hasActiveTask:p.some(y=>y.hasActiveTask),isActive:g,display:Zm(p.map(y=>y.phase))}}).sort((u,c)=>_o(u.feature,c.feature,r.key,r.direction))}function ju({title:e,value:a,valueSuffix:r,subtitle:s,icon:u,valueClassName:c,iconClassName:d}){return o.jsxs($t,{className:"flex items-start justify-between gap-4",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:e}),o.jsxs("div",{className:"mt-2 flex items-end gap-2",children:[o.jsx("p",{className:`text-3xl font-black tracking-tight ${c??"text-[var(--text)]"}`,children:a}),r?o.jsx("span",{className:"pb-1 text-sm font-semibold text-[var(--text-muted)]",children:r}):null]}),o.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]",children:s})]}),o.jsx("div",{className:`surface-card flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl border border-[var(--border)] bg-[var(--accent-soft)] ${d??"text-[var(--accent)]"}`,children:u})]})}function By(e){return e>=80?"text-emerald-600 dark:text-emerald-400":e>=30?"text-amber-600 dark:text-amber-400":"text-rose-600 dark:text-rose-400"}function tk({features:e,phases:a}){const r=new Map;for(const x of a)x.featureId&&r.set(x.featureId,[...r.get(x.featureId)??[],x]);const s=e.filter(x=>{const E=r.get(x.id)??[];return Zm(E).displayStatus==="done"}).length,u=Math.max(e.length-s,0),c=a.filter(x=>Km(x.tasks).displayStatus==="done").length,d=Math.max(a.length-c,0),h=K2(a),p=Z2(a),g=Math.max(h-p,0),y=h>0?Math.round(p/h*100):0;return o.jsxs("div",{className:"grid gap-4 lg:grid-cols-4",children:[o.jsx(ju,{title:"Features",value:String(e.length),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[s," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[u," left"]})]}),icon:o.jsx(Po,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Phases",value:String(a.length),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[c," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[d," left"]})]}),icon:o.jsx(bj,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Tasks",value:String(h),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[p," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[g," left"]})]}),icon:o.jsx(nc,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Completion",value:`${y}%`,subtitle:"Task completion rate",valueClassName:By(y),iconClassName:By(y),icon:o.jsx(Hm,{className:"h-4 w-4"})})]})}const nk=["done","canceled","rejected"],ak=["planned","in-progress","blocked","waiting","deferred"],rk=1440*60*1e3,lk=10;function Lo(e){return nk.includes(e)}function Qu(e){return ak.includes(e)}const F0=[{label:"0-7d",minDays:0,maxDays:7},{label:"8-14d",minDays:8,maxDays:14},{label:"15-30d",minDays:15,maxDays:30},{label:"31-60d",minDays:31,maxDays:60},{label:"61+d",minDays:61,maxDays:null}];function sk(e){const a=[];for(const r of e)r.tasks&&a.push(...r.tasks);return a}function Bl(e){if(!e)return null;const a=Date.parse(e);return Number.isNaN(a)?null:new Date(a).toISOString().slice(0,lk)}function gi(e){return Date.parse(`${e}T00:00:00.000Z`)}function V0(e,a){const r=Date.parse(e.date),s=Date.parse(a.date);return r!==s&&!Number.isNaN(r)&&!Number.isNaN(s)?r-s:e.id<a.id?-1:e.id>a.id?1:0}function ik(e,a){const r=Bl(e.createdAt),s=gi(a),u=[...e.statusLog??[]].sort(V0);let c=null;for(const d of u){const h=Lo(d.fromStatus);if(!Lo(d.toStatus)&&h){const g=Bl(d.date);g&&gi(g)<=s&&(c=g)}}return c??r}function Ru(e,a){return a>0?e/a:0}function ok(){return{deletedTasksNotRepresented:!0,legacyHistoryFallbackUsed:!1,notes:["Deleted tasks are absent from the current persisted planner files, so they never appear in any series, count, or backlog total."]}}function ck(){return F0.map(e=>({...e,count:0,taskIds:[]}))}function Iy(e,a){const r=e.filter(c=>c.kind==="added").length,s=e.filter(c=>c.kind==="closed").length,u=e.filter(c=>c.kind==="reopened").length;return{addedTotal:r,closedTotal:s,reopenedTotal:u,netBacklog:r+u-s,activeDays:a,addRatePerActiveDay:Ru(r,a),closeRatePerActiveDay:Ru(s,a),reopenRatePerActiveDay:Ru(u,a),closureRatio:Ru(s,r)}}function Y0(e){return{currentOpen:e.filter(a=>Qu(a.status)).length,currentTotal:e.length,currentDone:e.filter(a=>a.status==="done").length,currentCanceled:e.filter(a=>a.status==="canceled").length,currentRejected:e.filter(a=>a.status==="rejected").length}}function uk(e,a,r){const s={addedTotal:0,closedTotal:0,reopenedTotal:0,netBacklog:0,activeDays:0,addRatePerActiveDay:0,closeRatePerActiveDay:0,reopenRatePerActiveDay:0,closureRatio:0};return{windowDays:e,asOf:null,calendarRange:null,dailyPoints:[],cumulativePoints:[],agingBuckets:ck(),summary:{...s,...Y0(a)},allTime:s,currentOpenIds:a.filter(u=>Qu(u.status)).map(u=>u.id).sort(),windowAddedIds:[],windowClosedIds:[],windowReopenedIds:[],limitations:r}}function dk(e,a={}){const r=a.windowDays??21,s=ok(),u=new Set(s.notes),c=J=>{u.add(J),s.legacyHistoryFallbackUsed=!0},d=[];for(const J of e){const $=Bl(J.createdAt);$&&d.push({day:$,kind:"added",taskId:J.id});const P=[...J.statusLog??[]].sort(V0);let ce=null;for(const Se of P){const A=Lo(Se.fromStatus),C=Lo(Se.toStatus),G=Bl(Se.date);G&&(C&&!A?d.push({day:G,kind:"closed",taskId:J.id}):!C&&A&&d.push({day:G,kind:"reopened",taskId:J.id}),ce=C)}const me=Lo(J.status);if(me&&ce!==!0){const Se=Bl(J.completedAt)??Bl(J.updatedAt)??$;Se&&d.push({day:Se,kind:"closed",taskId:J.id}),c("A terminal task's history does not record a closure; a close was inferred from completedAt/updatedAt/createdAt.")}else if(!me&&ce===!0){const Se=Bl(J.updatedAt)??$;Se&&d.push({day:Se,kind:"reopened",taskId:J.id}),c("A task whose history ends in a terminal status is currently open; a reopen was inferred from updatedAt/createdAt.")}}if(d.length===0)return s.notes=[...u],uk(r,e,s);const h=d.map(J=>J.day).reduce((J,$)=>$>J?$:J),p=a.asOf&&Bl(a.asOf)||h,g=gi(p),y=d.filter(J=>gi(J.day)<=g),x=[...new Set(y.map(J=>J.day))].sort(),E=new Map;for(const J of y){const $=E.get(J.day)??{added:0,closed:0,reopened:0,addedIds:new Set,closedIds:new Set,reopenedIds:new Set};J.kind==="added"?($.added+=1,$.addedIds.add(J.taskId)):J.kind==="closed"?($.closed+=1,$.closedIds.add(J.taskId)):($.reopened+=1,$.reopenedIds.add(J.taskId)),E.set(J.day,$)}const S=[];let w=0,j=0,R=0;for(const J of x){const $=E.get(J)??{added:0,closed:0,reopened:0,addedIds:new Set,closedIds:new Set,reopenedIds:new Set};w+=$.added,j+=$.closed,R+=$.reopened;const P=j-R,ce=w+R-j;S.push({date:J,added:$.added,closed:$.closed,reopened:$.reopened,netBacklog:ce,cumulativeScope:w,cumulativeCompletion:P,addedTaskIds:[...$.addedIds].sort(),closedTaskIds:[...$.closedIds].sort(),reopenedTaskIds:[...$.reopenedIds].sort()})}const L=S.slice(Math.max(0,S.length-r)),B=new Set(L.map(J=>J.date)),I=y.filter(J=>B.has(J.day)),F=L[0],W=L[L.length-1],ne=F&&W?{start:F.date,end:W.date}:null,_=F0.map(J=>({...J,count:0,taskIds:new Set}));for(const J of e){if(!Qu(J.status))continue;const $=ik(J,p);if(!$||gi($)>g)continue;const P=Math.max(0,Math.floor((g-gi($))/rk)),ce=_.find(me=>P>=me.minDays&&(me.maxDays===null||P<=me.maxDays));ce&&(ce.count+=1,ce.taskIds.add(J.id))}const T=_.map(J=>({...J,taskIds:[...J.taskIds].sort()})),de={...Iy(I,L.length),...Y0(e)},ge=Iy(y,x.length),be=e.filter(J=>Qu(J.status)).map(J=>J.id).sort(),re=[...new Set(I.filter(J=>J.kind==="added").map(J=>J.taskId))].sort(),je=[...new Set(I.filter(J=>J.kind==="closed").map(J=>J.taskId))].sort(),Te=[...new Set(I.filter(J=>J.kind==="reopened").map(J=>J.taskId))].sort();return r>x.length&&u.add(`Requested ${r}-active-day window exceeds the ${x.length} active days available at or before asOf; the window was clamped to all available active days.`),s.notes=[...u],{windowDays:r,asOf:p,calendarRange:ne,dailyPoints:L,cumulativePoints:S,agingBuckets:T,summary:de,allTime:ge,currentOpenIds:be,windowAddedIds:re,windowClosedIds:je,windowReopenedIds:Te,limitations:s}}const Es=184,Si=16,Ku=16,Wm=30,pa=34;function G0(e){return 420}function X0(e,a,r){const s=r-pa-Ku;return a<=1?pa+s/2:pa+e/(a-1)*s}function Fo(e,a){const r=Es-Si-Wm;return Si+r-e/Math.max(a,1)*r}function Q0(e){return e<=3?new Set(Array.from({length:e},(a,r)=>r)):new Set([0,Math.floor((e-1)/2),e-1])}function K0(e){return e.slice(5)}function Vo({title:e,description:a,children:r}){return o.jsxs("article",{className:"min-w-0 max-w-full overflow-hidden [contain:inline-size] rounded-xl border border-[var(--border)] bg-[var(--surface-elevated)] p-3",children:[o.jsx("h3",{className:"text-sm font-bold text-[var(--text)]",children:e}),o.jsx("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:a}),o.jsx("div",{className:"mt-3",children:r})]})}function al(e,a,r){return`${a} ${a===1?"task":"tasks"} ${e} on ${r}`}function fk({points:e,onSelect:a}){if(e.length===0)return o.jsx(Vo,{title:"Added vs Closed",description:"Task-flow events by active UTC day.",children:o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"No active-day flow data."})});const r=G0(e.length),s=Math.max(1,...e.flatMap(p=>[p.added,p.closed])),u=Es-Wm,c=(r-pa-Ku)/Math.max(e.length,1),d=Math.max(1.5,Math.min(10,c*.28)),h=Q0(e.length);return o.jsxs(Vo,{title:"Added vs Closed",description:"Solid bars are additions; striped bars are closures. Reopens and net change are available in the data table.",children:[o.jsxs("div",{className:"flex items-center gap-4 text-xs font-semibold text-[var(--text-muted)]","aria-hidden":"true",children:[o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-2.5 w-4 rounded-sm bg-[var(--accent)]"}),"Added (solid)"]}),o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-2.5 w-4 rounded-sm border border-[var(--text-muted)] bg-[repeating-linear-gradient(135deg,var(--text-muted)_0_1px,transparent_1px_3px)]"}),"Closed (striped)"]})]}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5","data-responsive-chart":"horizontal-scroll",children:o.jsxs("svg",{width:"100%",viewBox:`0 0 ${r} ${Es}`,"data-coordinate-width":r,className:"block h-auto max-h-[184px] max-w-full",role:"img","aria-labelledby":"flow-chart-title flow-chart-desc",children:[o.jsx("title",{id:"flow-chart-title",children:"Added versus closed tasks by active UTC day"}),o.jsx("desc",{id:"flow-chart-desc",children:"Grouped bars use solid shapes for additions and striped shapes for closures. Exact values are provided in an accessible table."}),o.jsx("defs",{children:o.jsx("pattern",{id:"flow-closed-stripes",width:"4",height:"4",patternUnits:"userSpaceOnUse",patternTransform:"rotate(45)",children:o.jsx("line",{x1:"0",y1:"0",x2:"0",y2:"4",stroke:"currentColor",strokeWidth:"2"})})}),o.jsx("line",{x1:pa,y1:Si,x2:pa,y2:u,stroke:"var(--border-strong)"}),o.jsx("line",{x1:pa,y1:u,x2:r-Ku,y2:u,stroke:"var(--border-strong)"}),o.jsx("text",{x:pa-6,y:Si+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:s}),o.jsx("text",{x:pa-6,y:u+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:"0"}),e.map((p,g)=>{const y=pa+(g+.5)*c,x=Fo(p.added,s),E=Fo(p.closed,s);return o.jsxs("g",{children:[o.jsx("title",{children:`${p.date}: ${p.added} added, ${p.closed} closed, ${p.reopened} reopened, net backlog ${p.netBacklog}`}),a&&p.addedTaskIds.length>0?o.jsx("g",{role:"button",tabIndex:0,"aria-label":`Filter Work Tree to ${al("added",p.addedTaskIds.length,p.date)}`,className:"cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}),onKeyDown:S=>{S.key!=="Enter"&&S.key!==" "||(S.preventDefault(),a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}))},children:o.jsx("rect",{x:y-d-1,y:x,width:d,height:Math.max(2,u-x),rx:"1.5",fill:"var(--accent)"})}):o.jsx("rect",{x:y-d-1,y:x,width:d,height:Math.max(0,u-x),rx:"1.5",fill:"var(--accent)"}),a&&p.closedTaskIds.length>0?o.jsx("g",{role:"button",tabIndex:0,"aria-label":`Filter Work Tree to ${al("closed",p.closedTaskIds.length,p.date)}`,className:"cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}),onKeyDown:S=>{S.key!=="Enter"&&S.key!==" "||(S.preventDefault(),a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}))},children:o.jsx("rect",{x:y+1,y:E,width:d,height:Math.max(2,u-E),rx:"1.5",fill:"url(#flow-closed-stripes)",stroke:"var(--text-muted)",strokeWidth:"0.5"})}):o.jsx("rect",{x:y+1,y:E,width:d,height:Math.max(0,u-E),rx:"1.5",fill:"url(#flow-closed-stripes)",stroke:"var(--text-muted)",strokeWidth:"0.5"}),h.has(g)?o.jsx("text",{x:y,y:Es-9,textAnchor:"middle",className:"fill-[var(--text-subtle)] text-[10px]",children:K0(p.date)}):null]},p.date)})]})}),o.jsxs("details",{className:"mt-2 min-w-0 max-w-full overflow-hidden [contain:inline-size] text-xs text-[var(--text-muted)]",children:[o.jsx("summary",{className:"cursor-pointer font-semibold focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:"View exact flow data"}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5",children:o.jsxs("table",{className:"w-full table-fixed border-collapse text-left",children:[o.jsx("caption",{className:"sr-only",children:"Exact added, closed, reopened, and net backlog values by active UTC day"}),o.jsx("thead",{children:o.jsxs("tr",{className:"border-b border-[var(--border)]",children:[o.jsx("th",{className:"px-2 py-1",children:"Date"}),o.jsx("th",{className:"px-2 py-1",children:"Added"}),o.jsx("th",{className:"px-2 py-1",children:"Closed"}),o.jsx("th",{className:"px-2 py-1",children:"Reopened"}),o.jsx("th",{className:"px-2 py-1",children:"Net backlog"})]})}),o.jsx("tbody",{children:e.map(p=>o.jsxs("tr",{className:"border-b border-[var(--border)] last:border-0",children:[o.jsx("th",{className:"px-2 py-1 font-mono font-medium",children:p.date}),o.jsx("td",{className:"px-2 py-1",children:a&&p.addedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}),children:p.added}):p.added}),o.jsx("td",{className:"px-2 py-1",children:a&&p.closedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}),children:p.closed}):p.closed}),o.jsx("td",{className:"px-2 py-1",children:a&&p.reopenedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`reopened:${p.date}`,label:al("reopened",p.reopenedTaskIds.length,p.date),taskIds:p.reopenedTaskIds}),children:p.reopened}):p.reopened}),o.jsx("td",{className:"px-2 py-1",children:p.netBacklog})]},p.date))})]})})]})]})}function Hy(e,a,r,s){return e.map((u,c)=>`${c===0?"M":"L"} ${X0(c,e.length,a).toFixed(2)} ${Fo(Math.max(0,r(u)),s).toFixed(2)}`).join(" ")}function hk({points:e}){if(e.length===0)return o.jsx(Vo,{title:"Scope vs Completion",description:"Cumulative burn-up across the selected active days.",children:o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"No cumulative flow data."})});const a=G0(e.length),r=Math.max(1,...e.flatMap(h=>[h.cumulativeScope,h.cumulativeCompletion])),s=Es-Wm,u=Q0(e.length),c=Hy(e,a,h=>h.cumulativeScope,r),d=Hy(e,a,h=>h.cumulativeCompletion,r);return o.jsxs(Vo,{title:"Scope vs Completion",description:"The solid scope line and dashed completion line expose the open-backlog gap without relying on color.",children:[o.jsxs("div",{className:"flex items-center gap-4 text-xs font-semibold text-[var(--text-muted)]","aria-hidden":"true",children:[o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-0.5 w-5 bg-[var(--accent)]"}),"Scope (solid)"]}),o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"w-5 border-t-2 border-dashed border-[var(--color-status-done)]"}),"Completion (dashed)"]})]}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5","data-responsive-chart":"horizontal-scroll",children:o.jsxs("svg",{width:"100%",viewBox:`0 0 ${a} ${Es}`,"data-coordinate-width":a,className:"block h-auto max-h-[184px] max-w-full",role:"img","aria-labelledby":"burnup-chart-title burnup-chart-desc",children:[o.jsx("title",{id:"burnup-chart-title",children:"Cumulative scope versus completion"}),o.jsx("desc",{id:"burnup-chart-desc",children:"A solid scope line and dashed completion line show the cumulative open-backlog gap. Exact values are provided in an accessible table."}),o.jsx("line",{x1:pa,y1:Si,x2:pa,y2:s,stroke:"var(--border-strong)"}),o.jsx("line",{x1:pa,y1:s,x2:a-Ku,y2:s,stroke:"var(--border-strong)"}),o.jsx("text",{x:pa-6,y:Si+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:r}),o.jsx("text",{x:pa-6,y:s+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:"0"}),o.jsx("path",{d:c,fill:"none",stroke:"var(--accent)",strokeWidth:"2.5"}),o.jsx("path",{d,fill:"none",stroke:"var(--color-status-done)",strokeWidth:"2.5",strokeDasharray:"6 4"}),e.map((h,p)=>{const g=X0(p,e.length,a);return o.jsxs("g",{children:[o.jsx("title",{children:`${h.date}: cumulative scope ${h.cumulativeScope}, cumulative completion ${h.cumulativeCompletion}, open backlog ${h.netBacklog}`}),o.jsx("circle",{cx:g,cy:Fo(h.cumulativeScope,r),r:"2.5",fill:"var(--accent)"}),o.jsx("rect",{x:g-2.5,y:Fo(Math.max(0,h.cumulativeCompletion),r)-2.5,width:"5",height:"5",fill:"var(--color-status-done)"}),u.has(p)?o.jsx("text",{x:g,y:Es-9,textAnchor:"middle",className:"fill-[var(--text-subtle)] text-[10px]",children:K0(h.date)}):null]},h.date)})]})}),o.jsx("div",{className:"sr-only",children:o.jsxs("table",{children:[o.jsx("caption",{children:"Exact cumulative scope, completion, and open backlog values by active UTC day"}),o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Date"}),o.jsx("th",{children:"Scope"}),o.jsx("th",{children:"Completion"}),o.jsx("th",{children:"Open backlog"})]})}),o.jsx("tbody",{children:e.map(h=>o.jsxs("tr",{children:[o.jsx("th",{children:h.date}),o.jsx("td",{children:h.cumulativeScope}),o.jsx("td",{children:h.cumulativeCompletion}),o.jsx("td",{children:h.netBacklog})]},h.date))})]})})]})}function mk({analytics:e,onSelect:a}){const r=Math.max(1,...e.agingBuckets.map(u=>u.count)),s=e.agingBuckets.reduce((u,c)=>u+c.count,0);return o.jsxs(Vo,{title:"Open-task aging",description:"Whole UTC days since creation or the latest reopen.",children:[s===0?o.jsx("p",{className:"mb-3 text-sm text-[var(--text-muted)]",children:"No open tasks have an aging anchor at this cutoff."}):null,o.jsx("ul",{className:"grid gap-2","aria-label":"Open-task aging buckets",children:e.agingBuckets.map(u=>{const c=o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"font-semibold text-[var(--text-muted)]",children:u.label}),o.jsx("span",{className:"h-3 overflow-hidden rounded-full border border-[var(--border)] bg-[var(--surface-card)]",children:o.jsx("span",{className:"block h-full rounded-full bg-[var(--accent)]",style:{width:`${u.count/r*100}%`}})}),o.jsx("span",{className:"text-right font-bold tabular-nums text-[var(--text)]","aria-label":`${u.count} tasks`,children:u.count})]});return o.jsx("li",{children:a&&u.taskIds.length>0?o.jsx("button",{type:"button",className:"grid w-full grid-cols-[3.75rem_minmax(0,1fr)_2rem] items-center gap-2 rounded-lg text-xs hover:bg-[var(--accent-soft)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]","aria-label":`Filter Work Tree to ${u.count} ${u.count===1?"task":"tasks"} aged ${u.label}`,onClick:()=>a({key:`aging:${u.label}`,label:`${u.count} ${u.count===1?"task":"tasks"} aged ${u.label}`,taskIds:u.taskIds}),children:c}):o.jsx("div",{className:"grid grid-cols-[3.75rem_minmax(0,1fr)_2rem] items-center gap-2 text-xs",children:c})},u.label)})}),o.jsx("div",{className:"sr-only",children:o.jsxs("table",{children:[o.jsx("caption",{children:"Exact open-task aging bucket counts"}),o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Age"}),o.jsx("th",{children:"Open tasks"})]})}),o.jsx("tbody",{children:e.agingBuckets.map(u=>o.jsxs("tr",{children:[o.jsx("th",{children:u.label}),o.jsx("td",{children:u.count})]},u.label))})]})})]})}function pk({analytics:e,onSelect:a}){const r=a?{onSelect:a}:{};return o.jsxs("div",{className:"grid min-w-0 max-w-full overflow-hidden gap-3 xl:grid-cols-2",children:[o.jsx(fk,{points:e.dailyPoints,...r}),o.jsx(hk,{points:e.dailyPoints}),o.jsx("div",{className:"min-w-0 xl:col-span-2",children:o.jsx(mk,{analytics:e,...r})})]})}const gk=[7,21,60];function vk(e){return e>0?`+${e}`:String(e)}function ku(e){return e.toFixed(1)}function xk(e){return`${(e*100).toFixed(0)}%`}function yk(e){const{netBacklog:a,activeDays:r}=e.summary;if(r===0)return"No task-flow activity is recorded for this period.";if(a>0)return`Backlog grew by ${a} ${a===1?"task":"tasks"} across the selected active days.`;if(a<0){const s=Math.abs(a);return`Backlog shrank by ${s} ${s===1?"task":"tasks"} across the selected active days.`}return"Backlog stayed level across the selected active days."}function bk({value:e}){return e>0?o.jsx(vj,{className:"h-4 w-4","aria-hidden":"true"}):e<0?o.jsx(uj,{className:"h-4 w-4","aria-hidden":"true"}):o.jsx(eR,{className:"h-4 w-4","aria-hidden":"true"})}function xs({label:e,value:a,detail:r,valueClassName:s="text-[var(--text)]",onSelect:u,selected:c}){return o.jsxs("div",{className:`min-w-28 rounded-xl border bg-[var(--surface-elevated)] px-3 py-2.5 ${c?"border-[var(--accent)] ring-1 ring-[var(--accent)]":"border-[var(--border)]"}`,children:[o.jsx("dt",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--text-subtle)]",children:e}),o.jsx("dd",{className:`mt-1 text-xl font-black tracking-tight ${s}`,children:u?o.jsx("button",{type:"button","aria-pressed":c,"aria-label":`Filter Work Tree by ${e}`,onClick:u,className:"rounded-md underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:a}):a}),r?o.jsx("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:r}):null]})}function wk({phases:e,asOf:a,activeDrilldown:r,onDrilldown:s,onClearDrilldown:u}){const[c,d]=v.useState(21),h=v.useMemo(()=>sk(e),[e]),p=a??new Date().toISOString().slice(0,10),g=v.useMemo(()=>dk(h,{windowDays:c,asOf:p}),[p,h,c]),y=g.summary.netBacklog>0?"text-rose-600 dark:text-rose-400":g.summary.netBacklog<0?"text-emerald-600 dark:text-emerald-400":"text-[var(--text)]",x=g.limitations.notes.join(" "),E=(S,w,j)=>s&&j.length>0?()=>s({key:S,label:w,taskIds:j}):null;return o.jsx($t,{className:"min-w-0 overflow-hidden [contain:inline-size]",children:o.jsxs("section",{"aria-labelledby":"flow-backlog-heading",className:"grid min-w-0 max-w-full gap-4",children:[o.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx(oj,{className:"h-4 w-4 text-[var(--accent)]","aria-hidden":"true"}),o.jsx("h2",{id:"flow-backlog-heading",className:"text-lg font-bold text-[var(--text)]",children:"Flow & Backlog"})]}),o.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]","aria-live":"polite",children:yk(g)})]}),o.jsx("div",{role:"group","aria-label":"Active-day period",className:"flex w-full min-w-0 items-center gap-1 overflow-x-auto [contain:inline-size] sm:w-auto sm:max-w-full sm:shrink-0 rounded-xl border border-[var(--border)] bg-[var(--surface-card)] p-1 [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5",children:gk.map(S=>o.jsxs("button",{type:"button","aria-label":`${S} active days`,"aria-pressed":c===S,onClick:()=>d(S),className:`h-8 shrink-0 rounded-lg px-2.5 text-xs font-bold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:ring-offset-[var(--surface)] ${c===S?"bg-[var(--accent)] text-white":"text-[var(--text-muted)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]"}`,children:[o.jsx("span",{children:S}),o.jsx("span",{className:"hidden sm:inline",children:" active days"})]},S))})]}),o.jsx("p",{className:"text-xs text-[var(--text-subtle)]",children:g.calendarRange?o.jsxs(o.Fragment,{children:[o.jsx("span",{children:"UTC range "}),o.jsx("time",{dateTime:g.calendarRange.start,children:g.calendarRange.start}),o.jsx("span",{children:" – "}),o.jsx("time",{dateTime:g.calendarRange.end,children:g.calendarRange.end}),o.jsxs("span",{children:[" · ",g.summary.activeDays," active ",g.summary.activeDays===1?"day":"days"]})]}):"No UTC activity range is available."}),o.jsxs("dl",{className:"grid min-w-0 grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8",children:[o.jsx(xs,{label:"Added",value:String(g.summary.addedTotal),detail:`${ku(g.summary.addRatePerActiveDay)} / active day`,onSelect:E("window-added",`${g.windowAddedIds.length} ${g.windowAddedIds.length===1?"task":"tasks"} added in the selected window`,g.windowAddedIds),selected:(r==null?void 0:r.key)==="window-added"}),o.jsx(xs,{label:"Closed",value:String(g.summary.closedTotal),detail:`${ku(g.summary.closeRatePerActiveDay)} / active day`,onSelect:E("window-closed",`${g.windowClosedIds.length} ${g.windowClosedIds.length===1?"task":"tasks"} closed in the selected window`,g.windowClosedIds),selected:(r==null?void 0:r.key)==="window-closed"}),g.summary.reopenedTotal>0?o.jsx(xs,{label:"Reopened",value:String(g.summary.reopenedTotal),onSelect:E("window-reopened",`${g.windowReopenedIds.length} ${g.windowReopenedIds.length===1?"task":"tasks"} reopened in the selected window`,g.windowReopenedIds),selected:(r==null?void 0:r.key)==="window-reopened"}):null,o.jsxs("div",{className:"min-w-28 rounded-xl border border-[var(--border)] bg-[var(--surface-elevated)] px-3 py-2.5",children:[o.jsx("dt",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--text-subtle)]",children:"Net change"}),o.jsxs("dd",{className:`mt-1 flex items-center gap-1 text-xl font-black tracking-tight ${y}`,children:[o.jsx(bk,{value:g.summary.netBacklog}),vk(g.summary.netBacklog)]})]}),o.jsx(xs,{label:"Open now",value:String(g.summary.currentOpen),detail:`${g.summary.currentTotal} total`,onSelect:E("current-open",`${g.currentOpenIds.length} currently open ${g.currentOpenIds.length===1?"task":"tasks"}`,g.currentOpenIds),selected:(r==null?void 0:r.key)==="current-open"}),o.jsx(xs,{label:"Add rate",value:ku(g.summary.addRatePerActiveDay),detail:"per active day",onSelect:null,selected:!1}),o.jsx(xs,{label:"Close rate",value:ku(g.summary.closeRatePerActiveDay),detail:"per active day",onSelect:null,selected:!1}),o.jsx(xs,{label:"Closure ratio",value:xk(g.summary.closureRatio),detail:"closed / added",onSelect:null,selected:!1})]}),o.jsx(pk,{analytics:g,...s?{onSelect:s}:{}}),r?o.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 rounded-xl border border-[var(--accent)] bg-[var(--accent-soft)] px-3 py-2 text-sm",role:"status",children:[o.jsxs("span",{className:"font-semibold text-[var(--text)]",children:["Work Tree filter: ",r.label]}),u?o.jsx("button",{type:"button",onClick:u,className:"rounded-lg px-2 py-1 text-xs font-bold text-[var(--accent)] underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:"Clear analytics filter"}):null]}):null,o.jsx("p",{className:"text-xs text-[var(--text-subtle)]",title:x,children:"Current planner files exclude deleted tasks; legacy gaps are inferred from available timestamps."})]})})}function Sk(){for(var e=arguments.length,a=new Array(e),r=0;r<e;r++)a[r]=arguments[r];return v.useMemo(()=>s=>{a.forEach(u=>u(s))},a)}const wd=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ji(e){const a=Object.prototype.toString.call(e);return a==="[object Window]"||a==="[object global]"}function Jm(e){return"nodeType"in e}function va(e){var a,r;return e?ji(e)?e:Jm(e)&&(a=(r=e.ownerDocument)==null?void 0:r.defaultView)!=null?a:window:window}function ep(e){const{Document:a}=va(e);return e instanceof a}function lc(e){return ji(e)?!1:e instanceof va(e).HTMLElement}function Z0(e){return e instanceof va(e).SVGElement}function Ri(e){return e?ji(e)?e.document:Jm(e)?ep(e)?e:lc(e)||Z0(e)?e.ownerDocument:document:document:document}const hr=wd?v.useLayoutEffect:v.useEffect;function Sd(e){const a=v.useRef(e);return hr(()=>{a.current=e}),v.useCallback(function(){for(var r=arguments.length,s=new Array(r),u=0;u<r;u++)s[u]=arguments[u];return a.current==null?void 0:a.current(...s)},[])}function Ek(){const e=v.useRef(null),a=v.useCallback((s,u)=>{e.current=setInterval(s,u)},[]),r=v.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[a,r]}function Yo(e,a){a===void 0&&(a=[e]);const r=v.useRef(e);return hr(()=>{r.current!==e&&(r.current=e)},a),r}function sc(e,a){const r=v.useRef();return v.useMemo(()=>{const s=e(r.current);return r.current=s,s},[...a])}function Zu(e){const a=Sd(e),r=v.useRef(null),s=v.useCallback(u=>{u!==r.current&&(a==null||a(u,r.current)),r.current=u},[]);return[r,s]}function Wu(e){const a=v.useRef();return v.useEffect(()=>{a.current=e},[e]),a.current}let Fh={};function ic(e,a){return v.useMemo(()=>{if(a)return a;const r=Fh[e]==null?0:Fh[e]+1;return Fh[e]=r,e+"-"+r},[e,a])}function W0(e){return function(a){for(var r=arguments.length,s=new Array(r>1?r-1:0),u=1;u<r;u++)s[u-1]=arguments[u];return s.reduce((c,d)=>{const h=Object.entries(d);for(const[p,g]of h){const y=c[p];y!=null&&(c[p]=y+e*g)}return c},{...a})}}const yi=W0(1),Ju=W0(-1);function Nk(e){return"clientX"in e&&"clientY"in e}function Ed(e){if(!e)return!1;const{KeyboardEvent:a}=va(e.target);return a&&e instanceof a}function jk(e){if(!e)return!1;const{TouchEvent:a}=va(e.target);return a&&e instanceof a}function ed(e){if(jk(e)){if(e.touches&&e.touches.length){const{clientX:a,clientY:r}=e.touches[0];return{x:a,y:r}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:a,clientY:r}=e.changedTouches[0];return{x:a,y:r}}}return Nk(e)?{x:e.clientX,y:e.clientY}:null}const Vl=Object.freeze({Translate:{toString(e){if(!e)return;const{x:a,y:r}=e;return"translate3d("+(a?Math.round(a):0)+"px, "+(r?Math.round(r):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:a,scaleY:r}=e;return"scaleX("+a+") scaleY("+r+")"}},Transform:{toString(e){if(e)return[Vl.Translate.toString(e),Vl.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:a,duration:r,easing:s}=e;return a+" "+r+"ms "+s}}}),qy="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function Rk(e){return e.matches(qy)?e:e.querySelector(qy)}const kk={display:"none"};function Tk(e){let{id:a,value:r}=e;return hn.createElement("div",{id:a,style:kk},r)}function Ak(e){let{id:a,announcement:r,ariaLiveType:s="assertive"}=e;const u={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return hn.createElement("div",{id:a,style:u,role:"status","aria-live":s,"aria-atomic":!0},r)}function Dk(){const[e,a]=v.useState("");return{announce:v.useCallback(s=>{s!=null&&a(s)},[]),announcement:e}}const J0=v.createContext(null);function Ck(e){const a=v.useContext(J0);v.useEffect(()=>{if(!a)throw new Error("useDndMonitor must be used within a children of <DndContext>");return a(e)},[e,a])}function Ok(){const[e]=v.useState(()=>new Set),a=v.useCallback(s=>(e.add(s),()=>e.delete(s)),[e]);return[v.useCallback(s=>{let{type:u,event:c}=s;e.forEach(d=>{var h;return(h=d[u])==null?void 0:h.call(d,c)})},[e]),a]}const Mk={draggable:`
313
+ `);if(e.startsWith("```")){const c=e.replace(/^```[a-zA-Z]*\n?/,"").replace(/```\s*$/,"");return o.jsx("pre",{className:"overflow-x-auto rounded-lg border border-[var(--border)] bg-[var(--surface-elevated)] p-3 text-sm font-mono text-[var(--text)]",children:o.jsx("code",{children:c})},`code-${a}`)}const s=e.match(/^(#{1,6})\s+(.+)$/);if(s&&s[2]){const c=((u=s[1])==null?void 0:u.length)??1,d=s[2],h=c<=2?"text-base font-bold text-[var(--text)]":"text-sm font-bold text-[var(--text)]";return o.jsx("p",{className:h,children:Eo(d,`h-${a}`)},`h-${a}`)}return r.every(c=>/^\s*>\s?/.test(c))?o.jsx("blockquote",{className:"border-l-2 border-[var(--accent)] pl-4 text-sm italic text-[var(--text-muted)]",children:r.map((c,d)=>o.jsx("div",{children:Eo(c.replace(/^\s*>\s?/,""),`bq-${a}-${d}`)},`bq-${a}-${d}`))},`bq-${a}`):/^\s*([-*_])\1{2,}\s*$/.test(e.trim())?o.jsx("hr",{className:"border-[var(--border)]"},`hr-${a}`):r.every(c=>/^\s*[-*]\s+/.test(c))?o.jsx("ul",{className:"grid gap-2 pl-5 text-sm text-[var(--text-muted)]",children:r.map((c,d)=>o.jsx("li",{className:"list-disc",children:Eo(c.replace(/^\s*[-*]\s+/,""),`ul-${a}-${d}`)},`ul-${a}-${d}`))},`ul-${a}`):r.every(c=>/^\s*\d+\.\s+/.test(c))?o.jsx("ol",{className:"grid gap-2 pl-5 text-sm text-[var(--text-muted)] list-decimal",children:r.map((c,d)=>o.jsx("li",{children:Eo(c.replace(/^\s*\d+\.\s+/,""),`ol-${a}-${d}`)},`ol-${a}-${d}`))},`ol-${a}`):o.jsx("p",{className:"text-sm leading-6 text-[var(--text-muted)] whitespace-pre-wrap",children:Eo(e,`p-${a}`)},`p-${a}`)}function Mn({text:e,className:a=""}){if(!(e!=null&&e.trim()))return null;const r=e.trim().split(/\n\s*\n/).filter(Boolean);return o.jsx("div",{className:`formatted-text grid grid-cols-1 gap-3 ${a}`,children:r.map((s,u)=>a2(s,u))})}function il(e){return String(e&&e>0?e:0).padStart(3,"0")}function cl({featureNum:e,phaseNum:a,taskNum:r}){const s=[];return e!==void 0&&s.push(`F${il(e)}`),a!==void 0&&s.push(`P${il(a)}`),r!==void 0&&s.push(`T${il(r)}`),s.join("/")}async function r2(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{const a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.top="-1000px",a.style.opacity="0",document.body.appendChild(a),a.focus(),a.select();const r=document.execCommand("copy");return a.remove(),r}catch{return!1}}function T0({type:e,phaseNum:a,featureNum:r}){return e==="feature"?null:e==="phase"?r===void 0?null:o.jsx("div",{className:"shrink-0 inline-flex items-stretch font-mono text-[10.5px] font-semibold rounded-md overflow-hidden border border-[var(--border)] bg-[var(--surface-elevated)]",children:o.jsxs("span",{className:"px-2 py-1 text-[var(--text-muted)]",children:["F",il(r)]})}):e==="task"?a===void 0?null:o.jsxs("div",{className:"shrink-0 inline-flex items-stretch font-mono text-[10.5px] font-semibold rounded-md overflow-hidden border border-[var(--border)] bg-[var(--surface-elevated)]",children:[o.jsxs("span",{className:"px-2 py-1 text-[var(--text-muted)]",children:["P",il(a)]}),r!==void 0&&o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"w-[1px] bg-[var(--border)]"}),o.jsxs("span",{className:"px-2 py-1 text-[var(--text-subtle)]",children:["F",il(r)]})]})]}):null}function nr({featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,featureName:d,phaseName:h,taskTitle:p}){const g=d?{title:d}:{},y=h?{title:h}:{},x=p?{title:p}:{},E=s?({children:j})=>o.jsx(Ye,{to:`/features/${s}`,...g,className:"entity-path-seg entity-path-seg--feature entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--feature",...g,children:j}),S=u?({children:j})=>o.jsx(Ye,{to:`/features/${s}/phases/${u}`,...y,className:"entity-path-seg entity-path-seg--phase entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--phase",...y,children:j}),w=c?({children:j})=>o.jsx(Ye,{to:`/features/${s}/phases/${u}/tasks/${c}`,...x,className:"entity-path-seg entity-path-seg--task entity-path-seg--link",children:j}):({children:j})=>o.jsx("span",{className:"entity-path-seg entity-path-seg--task",...x,children:j});return o.jsxs("span",{className:"entity-path-badge",children:[e!==void 0?o.jsxs(E,{children:["F",il(e)]}):null,a!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"entity-path-sep","aria-hidden":"true",children:"/"}),o.jsxs(S,{children:["P",il(a)]})]}):null,r!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"entity-path-sep","aria-hidden":"true",children:"/"}),o.jsxs(w,{children:["T",il(r)]})]}):null]})}function rr({id:e,children:a}){const[r,s]=v.useState(!1);return o.jsxs("button",{type:"button",onClick:async u=>{u.preventDefault(),u.stopPropagation(),await r2(e)&&(s(!0),window.setTimeout(()=>s(!1),1200))},title:r?"Copied":`Copy ${e}`,"aria-label":r?"Copied":`Copy ${e}`,className:"copyable-id group inline-flex items-center gap-1.5",children:[a,o.jsx("span",{className:"copyable-id__icon","aria-hidden":"true",children:r?o.jsx(Sj,{className:"h-3 w-3 text-emerald-500"}):o.jsx(Ij,{className:"h-3 w-3"})})]})}function ul({shortId:e}){return o.jsx(rr,{id:e,children:o.jsx("span",{className:"short-id-badge",children:e})})}function A0({featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,shortId:d,featureName:h,phaseName:p,taskTitle:g}){return o.jsxs(o.Fragment,{children:[o.jsx(nr,{featureNum:e,phaseNum:a,taskNum:r,featureId:s,phaseId:u,taskId:c,featureName:h,phaseName:p,taskTitle:g}),o.jsx(rr,{id:cl({featureNum:e,phaseNum:a,taskNum:r}),children:o.jsx("span",{className:"sr-only",children:"Copy path"})}),d?o.jsx(ul,{shortId:d}):null]})}function Xm({phaseId:e,updatedAt:a}){const r=`Phase handoff pending${a?` · updated ${new Date(a).toLocaleString()}`:""}`;return o.jsxs("a",{href:`/handoff#${e}`,className:"handoff-badge flex items-center gap-1 ml-2 shrink-0",title:r,"aria-label":r,children:[o.jsxs("svg",{viewBox:"0 0 16 16",width:"14",height:"14","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[o.jsx("path",{d:"M4 2h5l3 3v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z"}),o.jsx("path",{d:"M9 2v3h3"}),o.jsx("path",{d:"M5.5 8h5M5.5 10.5h5"})]}),o.jsx("span",{className:"handoff-badge__label",children:"handoff"})]})}const vm={planned:{colorVar:"--color-status-planned",icon:"circle",pattern:"",label:"Planned",description:"Not started",borderStyle:"solid",bgOpacity:10,borderOpacity:30},started:{colorVar:"--color-status-started",icon:"play-start",pattern:"dashed",label:"Started",description:"Begun but not active now",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},"in-progress":{colorVar:"--color-status-in-progress",icon:"play",pattern:"pulse",label:"In progress",description:"Active now",borderStyle:"solid",bgOpacity:12,borderOpacity:30},waiting:{colorVar:"--color-status-waiting",icon:"clock",pattern:"dashed",label:"Waiting",description:"Waiting on a dependency",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},blocked:{colorVar:"--color-status-blocked",icon:"stop",pattern:"",label:"Blocked",description:"Impediment",borderStyle:"solid",bgOpacity:12,borderOpacity:30},deferred:{colorVar:"--color-status-deferred",icon:"pause",pattern:"dashed",label:"Deferred",description:"Postponed",borderStyle:"dashed",bgOpacity:10,borderOpacity:30},done:{colorVar:"--color-status-done",icon:"check",pattern:"",label:"Done",description:"Completed",borderStyle:"solid",bgOpacity:14,borderOpacity:30},closed:{colorVar:"--color-status-closed",icon:"check-mixed",pattern:"",label:"Closed",description:"Closed with mixed outcomes",borderStyle:"solid",bgOpacity:14,borderOpacity:30},canceled:{colorVar:"--color-status-canceled",icon:"ban",pattern:"hatch",label:"Canceled",description:"Canceled",borderStyle:"solid",bgOpacity:8,borderOpacity:30},rejected:{colorVar:"--color-status-rejected",icon:"x",pattern:"crosshatch",label:"Rejected",description:"Rejected",borderStyle:"solid",bgOpacity:10,borderOpacity:30}};function Xl(e){return vm[e]??vm.planned}function Gu(e,a,r){switch(a){case"bg":return`color-mix(in srgb, var(${e.colorVar}) ${e.bgOpacity}%, transparent)`;case"border":return`color-mix(in srgb, var(${e.colorVar}) ${e.borderOpacity}%, transparent)`}}function l2(e){const a=Xl(e);return{backgroundColor:Gu(a,"bg"),borderStyle:a.borderStyle,borderColor:Gu(a,"border"),borderWidth:"1px"}}function s2(e){const a=Xl(e);return{backgroundColor:Gu(a,"bg"),borderStyle:a.borderStyle,borderColor:Gu(a,"border"),borderWidth:"1px"}}function Qm(e){const{pattern:a}=Xl(e);return a?a==="dashed"?`status-pattern-dashed status-pattern-dashed-${e}`:`status-pattern-${a}`:""}function D0(e){return`status-${e}`}function C0(e,a=30){return`color-mix(in srgb, var(${Xl(e).colorVar}) ${a}%, transparent)`}function O0(e){return e in vm?e:"planned"}function i2(e,a){const s=[Xl(e).label],u=[["done",a.done],["in-progress",a.inProgress],["planned",a.planned],["waiting",a.waiting],["blocked",a.blocked],["deferred",a.deferred],["canceled",a.canceled],["rejected",a.rejected]];for(const[c,d]of u)d>0&&s.push(`${d} ${c}`);return s.join(" · ")}const M0={circle:hd,"play-start":sR,play:v0,clock:Uj,stop:b0,pause:qm,check:Hm,"check-mixed":Rj,ban:p0,x:Lj};function o2({status:e,className:a=""}){const r=Xl(e),s=M0[r.icon]??hd;return o.jsx(s,{className:`h-4 w-4 shrink-0 ${a}`.trim(),"aria-hidden":"true"})}function fr({status:e}){const a=O0(e),r=Xl(a);return o.jsxs("span",{className:`status-chip ${D0(a)} ${Qm(a)}`,title:r.description,"aria-label":r.description,children:[o.jsx(o2,{status:a,className:"h-3.5 w-3.5"}),o.jsx("span",{children:r.label})]})}function rc({status:e,breakdown:a,size:r="md",children:s}){const u=Xl(e),c=M0[u.icon]??hd,d=Qm(e),h=a?i2(e,a):u.description,p=r==="sm"?"px-2 py-0.5 text-[10px]":"px-2.5 py-1 text-[11px]";return o.jsxs("span",{className:`status-chip ${D0(e)} ${d} ${p}`,title:h,"aria-label":h,children:[o.jsx(c,{className:"h-3.5 w-3.5"}),o.jsx("span",{children:u.label}),s]})}function Xu({status:e,breakdown:a,doneTasks:r,totalTasks:s,recentlyChanged:u,className:c}){const d=r!=null&&s!=null;return o.jsxs("div",{className:c,children:[u?o.jsx("span",{className:"rounded-full bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--accent)]",children:"Updated"}):null,d?o.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",r,"/",s||0,")"]}):null,o.jsx(rc,{status:e,breakdown:a})]})}function xm({task:e,variant:a="active"}){const r=Mr(),s=e.featureId?`/features/${e.featureId}/phases/${e.phaseId}/tasks/${e.id}`:"/features";return o.jsx("article",{className:`min-w-0 rounded-[12px] border bg-[var(--surface-card)] px-3 py-2 text-sm text-[var(--text)] ${a==="next"?"border-dashed border-[var(--accent)] bg-[var(--accent)]/5":e.pendingResume?"border-[var(--accent)]":"border-[var(--border)]"}`,children:o.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[o.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[o.jsx(nr,{featureNum:e.featureNumber,phaseNum:e.phaseNumber,taskNum:e.number,featureId:e.featureId,phaseId:e.phaseId,taskId:e.id}),o.jsx(rr,{id:cl({featureNum:e.featureNumber,phaseNum:e.phaseNumber,taskNum:e.number}),children:o.jsx("span",{className:"sr-only",children:"Copy task path"})}),e.shortId?o.jsx(ul,{shortId:e.shortId}):null,a==="next"?o.jsx("span",{className:"shrink-0 rounded-full border border-[var(--accent)]/50 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-[0.16em] text-[var(--accent)]",children:"Next"}):null,o.jsx("span",{className:"shrink-0",children:o.jsx(fr,{status:e.status})}),o.jsx(Ye,{to:s,className:"min-w-0 flex-1 truncate font-medium hover:text-[var(--accent)]",children:e.title})]}),o.jsx("button",{type:"button",onClick:u=>{u.preventDefault(),u.stopPropagation(),r(`/?locate=T${e.number}`)},"aria-label":`Locate T${e.number} in work tree`,title:"Locate in work tree",className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-[8px] text-[var(--text-subtle)] transition-colors hover:bg-[var(--accent)] hover:text-white",children:o.jsx(Kj,{className:"h-4 w-4"})})]})})}function c2({taskFocus:e}){const a=v.useMemo(()=>{const r=s=>{const u=new Set;return s.filter(c=>u.has(c.id)?!1:(u.add(c.id),!0))};return{active:r(e.active),pendingResume:r(e.pendingResume)}},[e.active,e.pendingResume]);return a.active.length===0&&!e.nextWork?null:o.jsx("div",{className:"relative z-10 border-t border-[var(--border)] bg-[var(--surface-elevated)]/95 backdrop-blur-xl",children:o.jsx("div",{className:"page-container grid gap-3 py-2.5",children:a.active.length>0?o.jsxs("section",{"aria-labelledby":"active-task-heading",className:"grid gap-1.5",children:[o.jsxs("h2",{id:"active-task-heading",className:"text-[10px] font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:["Active tasks (",a.active.length,")"]}),a.active.map(r=>o.jsx(xm,{task:r},r.id))]}):e.nextWork?o.jsxs("section",{"aria-labelledby":"next-work-heading",className:"grid gap-1.5",children:[o.jsx("h2",{id:"next-work-heading",className:"text-[10px] font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:"Next work"}),o.jsx(xm,{task:e.nextWork,variant:"next"}),e.nextWorkReason?o.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:e.nextWorkReason}):null]}):null})})}function u2({project:e,taskFocus:a,serverInfo:r}){const s=pr(),[u,c]=v.useState("connecting");return v.useEffect(()=>{const d=h=>{var g;const p=(g=h.detail)==null?void 0:g.status;p&&c(p)};return window.addEventListener("agent-plan:ws-status",d),()=>window.removeEventListener("agent-plan:ws-status",d)},[]),o.jsxs("div",{className:"page-shell",children:[o.jsxs("header",{className:"sticky top-0 z-30 overflow-visible",children:[o.jsx(t2,{projectName:e==null?void 0:e.name,projectRoot:e==null?void 0:e.projectRoot,planRoot:e==null?void 0:e.planRoot,agentPlanVersion:(e==null?void 0:e.agentPlanVersion)??"",liveStatus:u}),o.jsx(c2,{taskFocus:a})]}),o.jsxs("div",{className:"page-container py-8",children:[o.jsxs("div",{className:"mb-8 flex flex-col gap-3 md:flex-row md:items-end md:justify-between md:gap-6",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsx("p",{className:"text-sm font-semibold uppercase tracking-[0.24em] text-[var(--text-subtle)]",children:"Current project"}),o.jsx("h1",{className:"text-2xl font-black tracking-tight text-[var(--text)] md:text-3xl",children:o.jsx(Ye,{to:"/",className:"hover:text-[var(--accent)]",children:(e==null?void 0:e.name)??"Agent Plan"})}),e!=null&&e.projectRoot?o.jsx("p",{className:"mt-2 truncate font-mono text-xs text-[var(--text-subtle)]",title:e.projectRoot,children:e.projectRoot}):null,r?o.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-xs",children:[o.jsxs("span",{className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 font-semibold uppercase tracking-[0.12em] ${r.mode==="lan"?"bg-[color:color-mix(in_srgb,var(--accent)_16%,transparent)] text-[var(--accent)]":"bg-[var(--surface-elevated)] text-[var(--text-muted)]"}`,children:[o.jsx("span",{"aria-hidden":"true",className:"inline-block h-1.5 w-1.5 rounded-full bg-current"}),r.mode==="lan"?"LAN visible":"Local only"]}),o.jsx("a",{href:r.localUrl,target:"_blank",rel:"noreferrer",className:"font-mono text-[var(--text-subtle)] underline-offset-2 hover:text-[var(--accent)] hover:underline",children:r.localUrl}),r.lanUrl?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"text-[var(--text-subtle)]",children:"·"}),o.jsx("a",{href:r.lanUrl,target:"_blank",rel:"noreferrer",className:"font-mono text-[var(--text-subtle)] underline-offset-2 hover:text-[var(--accent)] hover:underline",children:r.lanUrl})]}):null]}):null,e!=null&&e.description?o.jsx(Mn,{text:e.description,className:"mt-2 max-w-3xl"}):null]}),s.state!=="idle"?o.jsx("div",{className:"text-sm font-semibold text-[var(--accent)]",children:"Updating…"}):null]}),o.jsx(Ni,{})]})]})}const ka=32,_0=4,d2=Math.PI*1.2;function L0(){if(typeof document>"u")return"#7b68ee";const e=document.createElement("div");e.style.color="var(--accent, #7b68ee)",document.body.appendChild(e);const a=getComputedStyle(e).color||"#7b68ee";return e.remove(),a}function f2(){const e=document.createElement("canvas");e.width=ka,e.height=ka;const a=e.getContext("2d");if(!a)return"";const r=L0();return a.beginPath(),a.arc(ka/2,ka/2,ka/2-_0,0,Math.PI*2),a.fillStyle=r,a.fill(),a.fillStyle="#ffffff",a.font="bold 16px system-ui, sans-serif",a.textAlign="center",a.textBaseline="middle",a.fillText("A",ka/2,ka/2+1),e.toDataURL("image/png")}function h2(e,a){const r=e.getContext("2d");if(!r)return"";const s=L0();r.clearRect(0,0,ka,ka);const u=ka/2,c=ka/2,d=ka/2-_0;return r.beginPath(),r.arc(u,c,d,0,Math.PI*2),r.fillStyle=s,r.globalAlpha=.85,r.fill(),r.globalAlpha=1,r.beginPath(),r.arc(u,c,d-3,a,a+d2),r.strokeStyle="#ffffff",r.lineWidth=3,r.lineCap="round",r.stroke(),r.fillStyle="#ffffff",r.font="bold 14px system-ui, sans-serif",r.textAlign="center",r.textBaseline="middle",r.fillText("A",u,c+1),e.toDataURL("image/png")}function m2(){let e=document.querySelector("link[rel~='icon']");return e||(e=document.createElement("link"),e.rel="icon",e.type="image/png",document.head.appendChild(e)),e}function p2(e){const a=v.useRef(null),r=v.useRef(null),s=v.useRef(null),u=v.useRef(0);v.useEffect(()=>{if(a.current||(a.current=m2()),s.current||(s.current=f2()),!r.current){const h=document.createElement("canvas");h.width=ka,h.height=ka,r.current=h}const c=a.current;if(!e){c.href=s.current;return}const d=window.setInterval(()=>{document.hidden||(u.current+=Math.PI/10,c.href=h2(r.current,u.current))},100);return()=>{window.clearInterval(d),c.href=s.current}},[e])}const Co={create:{key:"n",primary:!0},edit:{key:"e",primary:!0},delete:{key:"d",primary:!0},submit:{key:"Enter",primary:!0}},z0=v.createContext(Co);function $0(){return typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform)}function g2(e){return typeof e!="string"}function v2(e){return{create:(e==null?void 0:e.create)??Co.create,edit:(e==null?void 0:e.edit)??Co.edit,delete:(e==null?void 0:e.delete)??Co.delete,submit:(e==null?void 0:e.submit)??Co.submit}}function x2(e){const a=[],r=$0();e.primary&&a.push(r?"⌘":"Ctrl"),e.meta&&a.push(r?"⌘":"Meta"),e.ctrl&&a.push(r?"⌃":"Ctrl"),e.shift&&a.push(r?"⇧":"Shift"),e.alt&&a.push(r?"⌥":"Alt");const s=e.key==="Backspace"?r?"⌫":"Backspace":e.key==="Enter"?r?"↩":"Enter":e.key.length===1?e.key.toUpperCase():e.key;return a.push(s),r?a.join(""):a.join("+")}function y2(e){return e instanceof HTMLElement?!!e.closest("input, textarea, select, [contenteditable='true']"):!1}function b2(e,a){const r=a.key.length===1?a.key.toLowerCase():a.key,s=e.key.length===1?e.key.toLowerCase():e.key,u=$0(),c=a.meta??(a.primary?u:!1),d=a.ctrl??(a.primary?!u:!1);return s===r&&!!c===e.metaKey&&!!d===e.ctrlKey&&!!a.shift===e.shiftKey&&!!a.alt===e.altKey}function w2({shortcuts:e,children:a}){return v.createElement(z0.Provider,{value:v2(e)},a)}function U0(e){const a=v.useContext(z0);if(e)return g2(e)?e:a[e]}function _n(e,a,r){const s=U0(e);v.useEffect(()=>{if(!s||(r==null?void 0:r.enabled)===!1)return;const u=c=>{!(r!=null&&r.allowInEditable)&&y2(c.target)||b2(c,s)&&(c.preventDefault(),a())};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[a,r==null?void 0:r.allowInEditable,r==null?void 0:r.enabled,s])}const S2=1500,E2=80,N2=12e3,j2=5e3;function R2(){const{revalidate:e}=lN(),a=v.useRef(null),r=v.useRef(null),s=v.useRef(null),u=v.useRef(null),c=v.useRef(null);return v.useEffect(()=>{let d=!0;const h=F=>{window.dispatchEvent(new CustomEvent("agent-plan:ws-status",{detail:{status:F}}))},p=()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},g=()=>{s.current!==null&&(window.clearTimeout(s.current),s.current=null)},y=()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},x=()=>{u.current!==null&&(window.clearInterval(u.current),u.current=null)},E=()=>{g(),s.current=window.setTimeout(()=>{e()},E2)},S=()=>{!d||r.current!==null||(h("reconnecting"),r.current=window.setTimeout(()=>{r.current=null,R()},S2))},w=()=>{x(),y();const F=a.current;if(a.current=null,F&&(F.readyState===WebSocket.OPEN||F.readyState===WebSocket.CONNECTING))try{F.close()}catch{}},j=()=>{x(),y(),u.current=window.setInterval(()=>{const F=a.current;if(!(!F||F.readyState!==WebSocket.OPEN)){try{F.send(JSON.stringify({type:"ping"}))}catch{w(),S();return}y(),c.current=window.setTimeout(()=>{w(),S()},j2)}},N2)},R=()=>{if(!d)return;const F=a.current;if(F&&(F.readyState===WebSocket.OPEN||F.readyState===WebSocket.CONNECTING))return;h(r.current!==null?"reconnecting":"connecting"),p();const W=window.location.protocol==="https:"?"wss":"ws",ne=new WebSocket(`${W}://${window.location.host}/ws`);a.current=ne,ne.onopen=()=>{p(),h("live"),j()},ne.onmessage=_=>{y();try{const T=JSON.parse(_.data);if(!T.type||T.type==="pong"||T.type==="connected")return;switch(window.dispatchEvent(new CustomEvent("agent-plan:ws-event",{detail:T})),T.type){case"project-updated":case"features-updated":case"phases-updated":case"requirements-updated":case"plan-rendered":case"file-changed":case"handoffUpdated":case"handoffCleared":E();break;default:break}}catch{}},ne.onclose=()=>{x(),y(),a.current===ne&&(a.current=null),d&&S()},ne.onerror=()=>{try{ne.close()}catch{}}},L=()=>{const F=a.current;(!F||F.readyState===WebSocket.CLOSED||F.readyState===WebSocket.CLOSING)&&R()},B=()=>{document.visibilityState==="visible"&&L()},I=()=>{L()};return h("connecting"),R(),window.addEventListener("online",I),document.addEventListener("visibilitychange",B),()=>{d=!1,h("disconnected"),window.removeEventListener("online",I),document.removeEventListener("visibilitychange",B),p(),g(),x(),y(),w()}},[e]),null}async function k2(){const[e,a,r]=await Promise.all([Fm(),TR(),QR()]);return{project:e,uiConfig:a,taskFocus:r}}function T2(){const{project:e,uiConfig:a,taskFocus:r}=gr();return v.useEffect(()=>{var d,h;const s=(d=e==null?void 0:e.name)==null?void 0:d.trim(),u=(h=e==null?void 0:e.projectRoot)==null?void 0:h.trim(),c=u?u.split(/[/\\]/).filter(Boolean).pop():void 0;s?c&&c!==s?document.title=`${s} · ${c}`:document.title=`${s} · Agent Plan`:document.title="Agent Plan"},[e==null?void 0:e.name,e==null?void 0:e.projectRoot]),p2(r.active.length>0),o.jsxs(w2,{shortcuts:a.shortcuts,children:[o.jsx(R2,{}),o.jsx(d0,{getKey:s=>s.pathname}),o.jsx(u2,{project:e,taskFocus:r,serverInfo:a.server})]})}function A2(e,a){if(typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string")return e.message;if(typeof e=="string"){try{const r=JSON.parse(e);if(typeof r.message=="string")return r.message}catch{return e}return e}return a}function D2(){const e=o0(),a=wi(e),r=a&&e.status===503,s=a&&e.status===423,u=a?r?"Planner web UI disconnected":s?"Planner write already in progress":`Request failed (${e.status})`:"Planner web UI unavailable",c=a?A2(e.data,e.statusText):e instanceof Error?e.message:"The planner web UI could not reach its local server.";return v.useEffect(()=>{document.title="Agent Plan"},[]),o.jsx("div",{className:"page-shell min-h-screen",children:o.jsx("div",{className:"page-container flex min-h-screen items-center justify-center py-12",children:o.jsxs("div",{className:"surface-card max-w-2xl rounded-[24px] px-8 py-8",children:[o.jsx("p",{className:"text-sm font-semibold uppercase tracking-[0.24em] text-[var(--text-subtle)]",children:"Agent Plan"}),o.jsx("h1",{className:"mt-2 text-2xl font-black tracking-tight text-[var(--text)] md:text-3xl",children:u}),o.jsx("p",{className:"mt-4 text-sm text-[var(--text-muted)]",children:String(c)}),o.jsx("div",{className:"mt-6 grid gap-2 text-sm text-[var(--text-muted)]",children:r?o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"Possible cause: Pi was closed or the local planner web server stopped."}),o.jsx("p",{children:"What to do:"}),o.jsxs("ul",{className:"grid gap-1 pl-5",children:[o.jsxs("li",{className:"list-disc",children:["restart Pi or run ",o.jsx("code",{children:"planner-web start"})]}),o.jsx("li",{className:"list-disc",children:"reopen this planner UI from the new session if needed"}),o.jsx("li",{className:"list-disc",children:"then reload this page"})]})]}):s?o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"Another Pi, MCP, CLI, development, or planner-server process is currently mutating this planner root."}),o.jsx("p",{children:"Read-only pages remain available. Wait for that write to finish, then retry without starting another planner server."})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{children:"The request reached the planner server, but the server rejected it."}),o.jsx("p",{children:"Fix the validation issue above, then try again."})]})}),o.jsx("div",{className:"mt-6 flex flex-wrap gap-3",children:o.jsx("button",{type:"button",onClick:()=>window.location.reload(),className:"inline-flex min-h-9 items-center whitespace-nowrap rounded-[12px] bg-[var(--accent)] px-3 py-1.5 text-sm font-semibold text-white transition hover:opacity-90 sm:min-h-11 sm:rounded-[14px] sm:px-4 sm:py-2",children:"Reload page"})})]})})})}async function C2(){const[e,a,r]=await Promise.all([Vm(),gd(),XR()]);return{features:e,phases:a,activeTasks:r}}function O2({shortcut:e}){const a=U0(e);return a?o.jsx("span",{className:"hidden rounded-md border border-[var(--border-strong)] bg-[var(--surface-elevated)] px-2 py-0.5 text-[11px] font-bold tracking-wide text-[var(--text-muted)] sm:inline-block",children:x2(a)}):null}const M2={primary:"border-transparent bg-[var(--accent)] text-white hover:bg-[var(--accent-hover)]",secondary:"border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]",ghost:"border-transparent bg-transparent text-[var(--text-muted)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]",danger:"border-transparent bg-[var(--danger-soft)] text-[var(--color-status-blocked)] hover:bg-[color-mix(in_srgb,var(--danger-soft)_88%,black_12%)]"};function Ze({variant:e="secondary",className:a="",children:r,shortcut:s,...u}){return o.jsxs("button",{className:`inline-flex min-h-9 items-center justify-center gap-1.5 whitespace-nowrap rounded-[12px] border px-3 py-1.5 text-sm font-semibold transition-colors motion-reduce:transition-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--surface)] disabled:cursor-not-allowed disabled:opacity-60 sm:min-h-11 sm:rounded-[14px] sm:px-4 sm:py-2 sm:gap-2 ${M2[e]} ${a}`,...u,children:[o.jsx("span",{className:"inline-flex items-center gap-1.5 sm:gap-2",children:r}),s?o.jsx(O2,{shortcut:s}):null]})}function $t({className:e="",children:a,...r}){return o.jsx("div",{className:`surface-card p-6 ${e}`,...r,children:a})}function No(...e){return e.filter(Boolean).join(" ")}function _2(){return o.jsx("span",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-[var(--border-strong)] bg-[var(--surface-elevated)] text-[var(--text)] shadow-sm transition group-open:rotate-180 group-hover:border-[var(--accent)] group-hover:text-[var(--accent)]",children:o.jsx(Ts,{className:"h-5 w-5"})})}function Hn({title:e,subtitle:a,leading:r,actions:s,defaultOpen:u=!1,count:c,className:d,summaryClassName:h,contentClassName:p,titleClassName:g,subtitleClassName:y,children:x}){return o.jsxs("details",{className:No("group mt-4 overflow-hidden rounded-[10px] border border-[var(--border)]",d),open:u,children:[o.jsxs("summary",{className:No("flex min-w-0 list-none cursor-pointer items-start justify-between gap-3 bg-[var(--surface-elevated)] p-4 text-left text-[var(--text)] transition-colors select-none hover:bg-[var(--surface-strong)] [&::-webkit-details-marker]:hidden",h),children:[o.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:[r?o.jsx("div",{className:"shrink-0 pt-0.5",children:r}):null,o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsxs("div",{className:No("flex flex-wrap items-center gap-2 text-sm font-semibold",g),children:[e,c!==void 0?o.jsxs("span",{className:"text-[var(--text-subtle)]",children:["(",c,")"]}):null]}),a?o.jsx("div",{className:No("mt-2 text-sm text-[var(--text-muted)] [overflow-wrap:anywhere]",y),children:a}):null]})]}),o.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[s,o.jsx(_2,{})]})]}),o.jsx("div",{className:No("border-t border-[var(--border)] bg-[var(--surface)] p-4",p),children:x})]})}function ym({targetType:e,targetRef:a,returnTo:r}){return o.jsxs(o.Fragment,{children:[o.jsx("input",{type:"hidden",name:"targetType",value:e}),a?o.jsx("input",{type:"hidden",name:"targetRef",value:a}):null,o.jsx("input",{type:"hidden",name:"returnTo",value:r})]})}function B0({decision:e}){return o.jsxs("div",{className:"grid gap-2",children:[o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Title",o.jsx("input",{name:"title",required:!0,defaultValue:(e==null?void 0:e.title)??"",className:"field-control"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Decision",o.jsx("textarea",{name:"decision",defaultValue:(e==null?void 0:e.decision)??"",className:"field-control field-textarea min-h-20"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Rationale",o.jsx("textarea",{name:"rationale",defaultValue:(e==null?void 0:e.rationale)??"",className:"field-control field-textarea min-h-20"})]}),o.jsxs("label",{className:"grid gap-1 text-sm font-medium text-[var(--text)]",children:["Implementation notes",o.jsx("textarea",{name:"implementationNotes",defaultValue:(e==null?void 0:e.implementationNotes)??"",className:"field-control field-textarea min-h-20"})]})]})}function L2({targetType:e,targetRef:a,returnTo:r}){return o.jsxs("details",{className:"surface-card px-4 py-3",children:[o.jsx("summary",{className:"cursor-pointer select-none text-sm font-semibold text-[var(--text)]",children:"Add accepted decision"}),o.jsxs(dn,{method:"post",action:"/accepted-decisions",className:"mt-3 grid gap-3",children:[o.jsx(ym,{targetType:e,targetRef:a,returnTo:r}),o.jsx("input",{type:"hidden",name:"intent",value:"create"}),o.jsx(B0,{}),o.jsx(Ze,{type:"submit",variant:"primary",className:"justify-self-start",children:"Add decision"})]})]})}function z2({entry:e,targetType:a,targetRef:r,returnTo:s}){return o.jsxs("details",{className:"mt-3 rounded-[12px] border border-[var(--border)] bg-[var(--surface-elevated)] px-3 py-2",children:[o.jsx("summary",{className:"cursor-pointer select-none text-sm font-semibold text-[var(--text)]",children:"Manage decision"}),o.jsxs("div",{className:"mt-3 grid gap-3",children:[o.jsxs(dn,{method:"post",action:"/accepted-decisions",className:"grid gap-3",children:[o.jsx(ym,{targetType:a,targetRef:r,returnTo:s}),o.jsx("input",{type:"hidden",name:"intent",value:"update"}),o.jsx("input",{type:"hidden",name:"decisionId",value:e.id}),o.jsx(B0,{decision:e}),o.jsx(Ze,{type:"submit",variant:"secondary",className:"justify-self-start",children:"Save decision"})]}),o.jsxs(dn,{method:"post",action:"/accepted-decisions",onSubmit:u=>{window.confirm(`Delete accepted decision “${e.title}”? This cannot be undone.`)||u.preventDefault()},children:[o.jsx(ym,{targetType:a,targetRef:r,returnTo:s}),o.jsx("input",{type:"hidden",name:"intent",value:"delete"}),o.jsx("input",{type:"hidden",name:"decisionId",value:e.id}),o.jsx(Ze,{type:"submit",variant:"danger",children:"Delete decision"})]})]})]})}function yd({decisions:e,targetType:a,targetRef:r}){const s=ga(),u=`${s.pathname}${s.search}${s.hash}`,c=!!a;return e.length===0&&!c?null:o.jsxs(Hn,{title:`Accepted decisions (${e.length})`,contentClassName:"grid gap-3",children:[c&&a?o.jsx(L2,{targetType:a,targetRef:r,returnTo:u}):null,e.map(d=>o.jsxs("div",{className:"surface-card px-4 py-3",children:[o.jsx("p",{className:"text-sm font-semibold text-[var(--text)]",children:d.title}),d.decision?o.jsxs("div",{className:"mt-2 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Decision:"}),o.jsx(Mn,{text:d.decision,className:"mt-1"})]}):null,d.rationale?o.jsxs("div",{className:"mt-1 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Rationale:"}),o.jsx(Mn,{text:d.rationale,className:"mt-1"})]}):null,d.implementationNotes?o.jsxs("div",{className:"mt-1 text-sm text-[var(--text-muted)]",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Implementation:"}),o.jsx(Mn,{text:d.implementationNotes,className:"mt-1"})]}):null,c&&a?o.jsx(z2,{entry:d,targetType:a,targetRef:r,returnTo:u}):null]},d.id))]},s.key)}function Nu({title:e,items:a}){return a.length===0?null:o.jsxs("section",{children:[o.jsx("h3",{className:"text-sm font-semibold uppercase tracking-[0.18em] text-[var(--text-subtle)]",children:e}),o.jsx("ul",{className:"mt-2 grid gap-2 pl-5 text-sm text-[var(--text-muted)]",children:a.map(r=>o.jsx("li",{className:"list-disc",children:r},r))})]})}function $2({project:e}){const a=e.projectGuidelines.content.trim(),r=e.workflowRules.beforePhaseStart.length+e.workflowRules.beforeTaskStart.length+e.workflowRules.afterPhaseComplete.length,s=e.globalRules.length+r+e.decisions.length;return e.scope.length>0||e.outOfScope.length>0||e.technologies.length>0||e.tools.length>0||a.length>0||e.acceptedDecisions.length>0||s>0?o.jsx($t,{className:"grid gap-4",children:o.jsxs("details",{className:"group",children:[o.jsx("summary",{className:"cursor-pointer select-none text-lg font-bold text-[var(--text)]",children:"Project Context"}),o.jsxs("div",{className:"mt-4 grid gap-4",children:[o.jsx(Nu,{title:"In scope",items:e.scope}),o.jsx(Nu,{title:"Out of scope",items:e.outOfScope}),e.technologies.length>0||e.tools.length>0?o.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[o.jsx(Nu,{title:"Technologies",items:e.technologies}),o.jsx(Nu,{title:"Tools",items:e.tools})]}):null,a?o.jsxs("section",{children:[o.jsx("h3",{className:"text-sm font-semibold uppercase tracking-[0.18em] text-[var(--text-subtle)]",children:"Project Guidelines"}),o.jsx("div",{className:"mt-2 text-sm text-[var(--text-muted)]",children:o.jsx(Mn,{text:a})})]}):null,o.jsx(yd,{decisions:e.acceptedDecisions,targetType:"project"}),s>0?o.jsxs("aside",{className:"rounded-[14px] border border-[var(--border)] bg-[var(--surface-elevated)] px-4 py-3 text-sm text-[var(--text-muted)]","aria-label":"Legacy project context",children:[o.jsx("span",{className:"font-semibold text-[var(--text)]",children:"Legacy project context remains."})," ",s," legacy rule or decision ",s===1?"entry will":"entries will"," migrate automatically on the next explicit planner load."]}):null]})]})}):null}function U2(...e){return e.filter(Boolean).join(" ")}function B2(e){return e&&e>0?`P${e}`:""}function bd({priority:e,className:a}){const r=B2(e);if(!r)return null;const s=`Priority ${e}`;return o.jsx("span",{className:U2("inline-flex items-center rounded-full border border-[var(--border)] bg-[var(--surface-elevated)] px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.08em] text-[var(--text-muted)]",a),"aria-label":s,title:s,children:r})}function I2(e){try{return new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e))}catch{return e}}function H2({features:e,phases:a}){const r=v.useMemo(()=>{const s=new Map(e.map(u=>[u.id,u.name]));return a.flatMap(u=>u.tasks.filter(c=>c.status==="done").map(c=>({task:c,phase:u,feature:e.find(d=>d.id===u.featureId),featureName:u.featureId?s.get(u.featureId)??u.featureId:"Unlinked feature",completedAt:c.completedAt||c.updatedAt}))).sort((u,c)=>c.completedAt.localeCompare(u.completedAt)).slice(0,3)},[e,a]);return o.jsxs($t,{className:"grid gap-4",children:[o.jsxs("div",{children:[o.jsx("h2",{className:"text-lg font-bold text-[var(--text)]",children:"Latest completed tasks"}),o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"Most recently completed tasks, ordered by completion timestamp."})]}),o.jsx("div",{className:"grid gap-3",children:r.length>0?r.map(({task:s,phase:u,feature:c,featureName:d,completedAt:h})=>o.jsxs("div",{className:"surface-card grid min-w-0 grid-cols-1 gap-1 px-4 py-3 transition hover:border-[var(--accent)] hover:bg-[var(--accent-soft)]",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[o.jsx(A0,{featureNum:c==null?void 0:c.number,phaseNum:u.number,taskNum:s.number,featureId:c==null?void 0:c.id,phaseId:u.id,taskId:s.id,shortId:s.shortId,featureName:c==null?void 0:c.name,phaseName:u.title,taskTitle:s.title}),o.jsx(bd,{priority:s.priority}),o.jsx("span",{className:"ml-auto shrink-0",children:o.jsx(fr,{status:s.status})})]}),o.jsx(Ye,{to:u.featureId?`/features/${u.featureId}/phases/${u.id}/tasks/${s.id}`:"/features",className:"entity-link--task min-w-0 break-words text-sm font-semibold underline-offset-4 [overflow-wrap:anywhere]",children:s.title}),o.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-[var(--text-muted)]",children:[o.jsx(T0,{type:"phase",featureNum:c==null?void 0:c.number}),o.jsxs("span",{className:"min-w-0 truncate",children:[d," · ",u.title]})]}),o.jsxs("div",{className:"text-[11px] text-[var(--text-subtle)]",children:["Completed ",I2(h)]})]},s.id)):o.jsx("p",{className:"py-4 text-center text-sm text-[var(--text-muted)]",children:"No completed tasks yet."})})]})}const $y=1440*60*1e3;function q2(e){const a=Date.now()-new Date(e).getTime();if(a<0)return"just now";const r=Math.floor(a/1e3);if(r<60)return`${r}s ago`;const s=Math.floor(r/60);return s<60?`${s}m ago`:new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e))}function P2({features:e,phases:a}){const[,r]=v.useState(0),s=Date.now(),u=v.useMemo(()=>{const c=new Map(e.map(d=>[d.id,d.name]));return a.flatMap(d=>d.tasks.map(h=>({task:h,phase:d,feature:e.find(p=>p.id===d.featureId),featureName:d.featureId?c.get(d.featureId)??d.featureId:"Unlinked feature",createdAt:h.createdAt}))).filter(d=>{const h=new Date(d.createdAt).getTime();return Number.isFinite(h)&&s-h<$y&&s-h>=0&&d.task.status==="planned"&&!d.task.startedAt}).sort((d,h)=>h.createdAt.localeCompare(d.createdAt)).slice(0,10)},[e,a,s]);return v.useEffect(()=>{if(u.length===0)return;const c=u.reduce((h,p)=>{const g=new Date(p.createdAt).getTime()+$y-Date.now();return Math.min(h,g)},1/0);if(!Number.isFinite(c)||c<=0)return;const d=window.setTimeout(()=>r(h=>h+1),c+50);return()=>window.clearTimeout(d)},[u]),u.length===0?null:o.jsxs($t,{className:"grid gap-4",children:[o.jsxs("div",{children:[o.jsx("h2",{className:"text-lg font-bold text-[var(--text)]",children:"New Added Tasks"}),o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"Tasks created in the last 24 hours."})]}),o.jsx("div",{className:"grid gap-3",children:u.map(({task:c,phase:d,feature:h,featureName:p,createdAt:g})=>o.jsxs("div",{className:"surface-card grid min-w-0 grid-cols-1 gap-1 border-[color:color-mix(in_srgb,var(--color-status-done)_0%,transparent)] px-4 py-3 transition hover:border-[var(--accent)] hover:bg-[var(--accent-soft)]",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[o.jsx(A0,{featureNum:h==null?void 0:h.number,phaseNum:d.number,taskNum:c.number,featureId:h==null?void 0:h.id,phaseId:d.id,taskId:c.id,shortId:c.shortId,featureName:h==null?void 0:h.name,phaseName:d.title,taskTitle:c.title}),o.jsx(bd,{priority:c.priority}),o.jsx("span",{className:"inline-flex items-center rounded-full bg-[color:color-mix(in_srgb,var(--accent)_18%,transparent)] px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--accent)]",children:"New"}),o.jsx("span",{className:"ml-auto shrink-0",children:o.jsx(fr,{status:c.status})})]}),o.jsx(Ye,{to:d.featureId?`/features/${d.featureId}/phases/${d.id}/tasks/${c.id}`:"/features",className:"entity-link--task min-w-0 break-words text-sm font-semibold underline-offset-4 [overflow-wrap:anywhere]",children:c.title}),o.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-xs text-[var(--text-muted)]",children:[o.jsx(T0,{type:"phase",featureNum:h==null?void 0:h.number}),o.jsxs("span",{className:"min-w-0 truncate",children:[p," · ",d.title]})]}),o.jsxs("div",{className:"text-[11px] text-[var(--text-subtle)]",children:["Added ",q2(g)]})]},c.id))})]})}const F2=new Set(["in-progress"]),V2=new Set(["planned","waiting","blocked","deferred"]),Y2=new Set(["done","canceled","rejected"]);function I0(e){return e==="discovery"?"in-progress":e==="draft"?"planned":e}function G2(e){const a={planned:0,inProgress:0,waiting:0,blocked:0,deferred:0,done:0,canceled:0,rejected:0};for(const r of e)switch(r){case"planned":a.planned++;break;case"in-progress":a.inProgress++;break;case"waiting":a.waiting++;break;case"blocked":a.blocked++;break;case"deferred":a.deferred++;break;case"done":a.done++;break;case"canceled":a.canceled++;break;case"rejected":a.rejected++;break}return a}function X2(){return{planned:0,inProgress:0,waiting:0,blocked:0,deferred:0,done:0,canceled:0,rejected:0}}function H0(e){const a=e,r=G2(a),s=a.length;if(s===0)return{displayStatus:"planned",breakdown:X2(),hasStarted:!1,totalChildren:0,meaningfulChildren:0};const u=a.filter(g=>g!=="canceled"&&g!=="rejected"),c=u.length,d=u.some(g=>g!=="planned");if(u.some(g=>F2.has(g)))return{displayStatus:"in-progress",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c};if(a.every(g=>Y2.has(g)))return a.every(g=>g==="done")?{displayStatus:"done",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:a.every(g=>g==="canceled")?{displayStatus:"canceled",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:a.every(g=>g==="rejected")?{displayStatus:"rejected",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:{displayStatus:"closed",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c};const h=u.filter(g=>V2.has(g));return h.length>0&&h.every(g=>g==="waiting")?{displayStatus:"waiting",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="blocked")?{displayStatus:"blocked",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="deferred")?{displayStatus:"deferred",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:h.length>0&&h.every(g=>g==="planned")&&!d?{displayStatus:"planned",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}:{displayStatus:"started",breakdown:r,hasStarted:d,totalChildren:s,meaningfulChildren:c}}function Km(e){const a=e.map(r=>I0(r.status));return H0(a)}function Zm(e){const a=e.map(r=>I0(r.status));return H0(a)}function q0(e){return Zm(e)}function P0(e){return Km(e)}const Oo={key:"priority",direction:"asc"},Q2=4200;function K2(e){return e.reduce((a,r)=>a+r.tasks.length,0)}function Z2(e){return e.reduce((a,r)=>a+r.tasks.filter(s=>s.status==="done").length,0)}function W2(e){return String(e&&e>0?e:0).padStart(3,"0")}const J2={draft:0,discovery:1,planned:2,waiting:3,blocked:4,deferred:5,"in-progress":7,done:8,canceled:9,rejected:10};function Uy(e,a){if(a==="title")return"name"in e?e.name:e.title;if(a==="status")return J2[e.status]??99;if(a==="startedAt"){if("startedAt"in e){const r=e.startedAt;return r?new Date(r).getTime():Number.MAX_SAFE_INTEGER}return Number.MAX_SAFE_INTEGER}if(a==="completedAt"){if("completedAt"in e){const r=e.completedAt;return r?new Date(r).getTime():Number.MAX_SAFE_INTEGER}return Number.MAX_SAFE_INTEGER}if(a==="shortId")return e.shortId??"";if(a==="priority"||a==="number")return e[a]??0;if(a==="createdAt"||a==="updatedAt"){const r=e[a];return r?new Date(r).getTime():0}return 0}function _o(e,a,r,s){const u=Uy(e,r),c=Uy(a,r);let d;return typeof u=="number"&&typeof c=="number"?d=u-c:d=String(u).localeCompare(String(c)),d===0&&(d=(e.priority??0)-(a.priority??0)||e.number-a.number||e.createdAt.localeCompare(a.createdAt)),s==="desc"?-d:d}function ek(e,a,r=Oo){const s=new Map;for(const u of a){if(!u.featureId)continue;const c=s.get(u.featureId)??[];c.push(u),s.set(u.featureId,c)}return e.map(u=>{const c=s.get(u.id)??[],d=c.reduce((y,x)=>y+x.tasks.length,0),h=c.reduce((y,x)=>y+x.tasks.filter(E=>E.status==="done").length,0),p=c.map(y=>{const x=[...y.tasks].sort((S,w)=>_o(S,w,r.key,r.direction)),E=x.some(S=>S.status==="in-progress");return{phase:y,totalTasks:y.tasks.length,doneTasks:y.tasks.filter(S=>S.status==="done").length,allTasks:x,hasActiveTask:E,display:Km(x)}}),g=p.some(({phase:y,allTasks:x})=>y.status==="in-progress"||y.status==="discovery"||x.some(E=>E.status==="in-progress"));return{feature:u,totalTasks:d,doneTasks:h,allPhases:p.sort((y,x)=>_o(y.phase,x.phase,r.key,r.direction)),hasActiveTask:p.some(y=>y.hasActiveTask),isActive:g,display:Zm(p.map(y=>y.phase))}}).sort((u,c)=>_o(u.feature,c.feature,r.key,r.direction))}function ju({title:e,value:a,valueSuffix:r,subtitle:s,icon:u,valueClassName:c,iconClassName:d}){return o.jsxs($t,{className:"flex items-start justify-between gap-4",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.22em] text-[var(--text-subtle)]",children:e}),o.jsxs("div",{className:"mt-2 flex items-end gap-2",children:[o.jsx("p",{className:`text-3xl font-black tracking-tight ${c??"text-[var(--text)]"}`,children:a}),r?o.jsx("span",{className:"pb-1 text-sm font-semibold text-[var(--text-muted)]",children:r}):null]}),o.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]",children:s})]}),o.jsx("div",{className:`surface-card flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl border border-[var(--border)] bg-[var(--accent-soft)] ${d??"text-[var(--accent)]"}`,children:u})]})}function By(e){return e>=80?"text-emerald-600 dark:text-emerald-400":e>=30?"text-amber-600 dark:text-amber-400":"text-rose-600 dark:text-rose-400"}function tk({features:e,phases:a}){const r=new Map;for(const x of a)x.featureId&&r.set(x.featureId,[...r.get(x.featureId)??[],x]);const s=e.filter(x=>{const E=r.get(x.id)??[];return Zm(E).displayStatus==="done"}).length,u=Math.max(e.length-s,0),c=a.filter(x=>Km(x.tasks).displayStatus==="done").length,d=Math.max(a.length-c,0),h=K2(a),p=Z2(a),g=Math.max(h-p,0),y=h>0?Math.round(p/h*100):0;return o.jsxs("div",{className:"grid gap-4 lg:grid-cols-4",children:[o.jsx(ju,{title:"Features",value:String(e.length),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[s," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[u," left"]})]}),icon:o.jsx(Po,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Phases",value:String(a.length),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[c," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[d," left"]})]}),icon:o.jsx(bj,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Tasks",value:String(h),valueSuffix:"total",subtitle:o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"font-semibold text-emerald-600 dark:text-emerald-400",children:[p," done"]}),o.jsx("span",{children:" · "}),o.jsxs("span",{className:"font-semibold text-amber-600 dark:text-amber-400",children:[g," left"]})]}),icon:o.jsx(nc,{className:"h-4 w-4"})}),o.jsx(ju,{title:"Completion",value:`${y}%`,subtitle:"Task completion rate",valueClassName:By(y),iconClassName:By(y),icon:o.jsx(Hm,{className:"h-4 w-4"})})]})}const nk=["done","canceled","rejected"],ak=["planned","in-progress","blocked","waiting","deferred"],rk=1440*60*1e3,lk=10;function Lo(e){return nk.includes(e)}function Qu(e){return ak.includes(e)}const F0=[{label:"0-7d",minDays:0,maxDays:7},{label:"8-14d",minDays:8,maxDays:14},{label:"15-30d",minDays:15,maxDays:30},{label:"31-60d",minDays:31,maxDays:60},{label:"61+d",minDays:61,maxDays:null}];function sk(e){const a=[];for(const r of e)r.tasks&&a.push(...r.tasks);return a}function Bl(e){if(!e)return null;const a=Date.parse(e);return Number.isNaN(a)?null:new Date(a).toISOString().slice(0,lk)}function gi(e){return Date.parse(`${e}T00:00:00.000Z`)}function V0(e,a){const r=Date.parse(e.date),s=Date.parse(a.date);return r!==s&&!Number.isNaN(r)&&!Number.isNaN(s)?r-s:e.id<a.id?-1:e.id>a.id?1:0}function ik(e,a){const r=Bl(e.createdAt),s=gi(a),u=[...e.statusLog??[]].sort(V0);let c=null;for(const d of u){const h=Lo(d.fromStatus);if(!Lo(d.toStatus)&&h){const g=Bl(d.date);g&&gi(g)<=s&&(c=g)}}return c??r}function Ru(e,a){return a>0?e/a:0}function ok(){return{deletedTasksNotRepresented:!0,legacyHistoryFallbackUsed:!1,notes:["Deleted tasks are absent from the current persisted planner files, so they never appear in any series, count, or backlog total."]}}function ck(){return F0.map(e=>({...e,count:0,taskIds:[]}))}function Iy(e,a){const r=e.filter(c=>c.kind==="added").length,s=e.filter(c=>c.kind==="closed").length,u=e.filter(c=>c.kind==="reopened").length;return{addedTotal:r,closedTotal:s,reopenedTotal:u,netBacklog:r+u-s,activeDays:a,addRatePerActiveDay:Ru(r,a),closeRatePerActiveDay:Ru(s,a),reopenRatePerActiveDay:Ru(u,a),closureRatio:Ru(s,r)}}function Y0(e){return{currentOpen:e.filter(a=>Qu(a.status)).length,currentTotal:e.length,currentDone:e.filter(a=>a.status==="done").length,currentCanceled:e.filter(a=>a.status==="canceled").length,currentRejected:e.filter(a=>a.status==="rejected").length}}function uk(e,a,r){const s={addedTotal:0,closedTotal:0,reopenedTotal:0,netBacklog:0,activeDays:0,addRatePerActiveDay:0,closeRatePerActiveDay:0,reopenRatePerActiveDay:0,closureRatio:0};return{windowDays:e,asOf:null,calendarRange:null,dailyPoints:[],cumulativePoints:[],agingBuckets:ck(),summary:{...s,...Y0(a)},allTime:s,currentOpenIds:a.filter(u=>Qu(u.status)).map(u=>u.id).sort(),windowAddedIds:[],windowClosedIds:[],windowReopenedIds:[],limitations:r}}function dk(e,a={}){const r=a.windowDays??21,s=ok(),u=new Set(s.notes),c=J=>{u.add(J),s.legacyHistoryFallbackUsed=!0},d=[];for(const J of e){const $=Bl(J.createdAt);$&&d.push({day:$,kind:"added",taskId:J.id});const P=[...J.statusLog??[]].sort(V0);let ce=null;for(const Se of P){const A=Lo(Se.fromStatus),C=Lo(Se.toStatus),G=Bl(Se.date);G&&(C&&!A?d.push({day:G,kind:"closed",taskId:J.id}):!C&&A&&d.push({day:G,kind:"reopened",taskId:J.id}),ce=C)}const me=Lo(J.status);if(me&&ce!==!0){const Se=Bl(J.completedAt)??Bl(J.updatedAt)??$;Se&&d.push({day:Se,kind:"closed",taskId:J.id}),c("A terminal task's history does not record a closure; a close was inferred from completedAt/updatedAt/createdAt.")}else if(!me&&ce===!0){const Se=Bl(J.updatedAt)??$;Se&&d.push({day:Se,kind:"reopened",taskId:J.id}),c("A task whose history ends in a terminal status is currently open; a reopen was inferred from updatedAt/createdAt.")}}if(d.length===0)return s.notes=[...u],uk(r,e,s);const h=d.map(J=>J.day).reduce((J,$)=>$>J?$:J),p=a.asOf&&Bl(a.asOf)||h,g=gi(p),y=d.filter(J=>gi(J.day)<=g),x=[...new Set(y.map(J=>J.day))].sort(),E=new Map;for(const J of y){const $=E.get(J.day)??{added:0,closed:0,reopened:0,addedIds:new Set,closedIds:new Set,reopenedIds:new Set};J.kind==="added"?($.added+=1,$.addedIds.add(J.taskId)):J.kind==="closed"?($.closed+=1,$.closedIds.add(J.taskId)):($.reopened+=1,$.reopenedIds.add(J.taskId)),E.set(J.day,$)}const S=[];let w=0,j=0,R=0;for(const J of x){const $=E.get(J)??{added:0,closed:0,reopened:0,addedIds:new Set,closedIds:new Set,reopenedIds:new Set};w+=$.added,j+=$.closed,R+=$.reopened;const P=j-R,ce=w+R-j;S.push({date:J,added:$.added,closed:$.closed,reopened:$.reopened,netBacklog:ce,cumulativeScope:w,cumulativeCompletion:P,addedTaskIds:[...$.addedIds].sort(),closedTaskIds:[...$.closedIds].sort(),reopenedTaskIds:[...$.reopenedIds].sort()})}const L=S.slice(Math.max(0,S.length-r)),B=new Set(L.map(J=>J.date)),I=y.filter(J=>B.has(J.day)),F=L[0],W=L[L.length-1],ne=F&&W?{start:F.date,end:W.date}:null,_=F0.map(J=>({...J,count:0,taskIds:new Set}));for(const J of e){if(!Qu(J.status))continue;const $=ik(J,p);if(!$||gi($)>g)continue;const P=Math.max(0,Math.floor((g-gi($))/rk)),ce=_.find(me=>P>=me.minDays&&(me.maxDays===null||P<=me.maxDays));ce&&(ce.count+=1,ce.taskIds.add(J.id))}const T=_.map(J=>({...J,taskIds:[...J.taskIds].sort()})),de={...Iy(I,L.length),...Y0(e)},ge=Iy(y,x.length),be=e.filter(J=>Qu(J.status)).map(J=>J.id).sort(),re=[...new Set(I.filter(J=>J.kind==="added").map(J=>J.taskId))].sort(),je=[...new Set(I.filter(J=>J.kind==="closed").map(J=>J.taskId))].sort(),Te=[...new Set(I.filter(J=>J.kind==="reopened").map(J=>J.taskId))].sort();return r>x.length&&u.add(`Requested ${r}-active-day window exceeds the ${x.length} active days available at or before asOf; the window was clamped to all available active days.`),s.notes=[...u],{windowDays:r,asOf:p,calendarRange:ne,dailyPoints:L,cumulativePoints:S,agingBuckets:T,summary:de,allTime:ge,currentOpenIds:be,windowAddedIds:re,windowClosedIds:je,windowReopenedIds:Te,limitations:s}}const Es=184,Si=16,Ku=16,Wm=30,pa=34;function G0(e){return 420}function X0(e,a,r){const s=r-pa-Ku;return a<=1?pa+s/2:pa+e/(a-1)*s}function Fo(e,a){const r=Es-Si-Wm;return Si+r-e/Math.max(a,1)*r}function Q0(e){return e<=3?new Set(Array.from({length:e},(a,r)=>r)):new Set([0,Math.floor((e-1)/2),e-1])}function K0(e){return e.slice(5)}function Vo({title:e,description:a,children:r}){return o.jsxs("article",{className:"min-w-0 max-w-full overflow-hidden [contain:inline-size] rounded-xl border border-[var(--border)] bg-[var(--surface-elevated)] p-3",children:[o.jsx("h3",{className:"text-sm font-bold text-[var(--text)]",children:e}),o.jsx("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:a}),o.jsx("div",{className:"mt-3",children:r})]})}function al(e,a,r){return`${a} ${a===1?"task":"tasks"} ${e} on ${r}`}function fk({points:e,onSelect:a}){if(e.length===0)return o.jsx(Vo,{title:"Added vs Closed",description:"Task-flow events by active UTC day.",children:o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"No active-day flow data."})});const r=G0(e.length),s=Math.max(1,...e.flatMap(p=>[p.added,p.closed])),u=Es-Wm,c=(r-pa-Ku)/Math.max(e.length,1),d=Math.max(1.5,Math.min(10,c*.28)),h=Q0(e.length);return o.jsxs(Vo,{title:"Added vs Closed",description:"Solid bars are additions; striped bars are closures. Reopens and net change are available in the data table.",children:[o.jsxs("div",{className:"flex items-center gap-4 text-xs font-semibold text-[var(--text-muted)]","aria-hidden":"true",children:[o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-2.5 w-4 rounded-sm bg-[var(--accent)]"}),"Added (solid)"]}),o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-2.5 w-4 rounded-sm border border-[var(--text-muted)] bg-[repeating-linear-gradient(135deg,var(--text-muted)_0_1px,transparent_1px_3px)]"}),"Closed (striped)"]})]}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5","data-responsive-chart":"horizontal-scroll",children:o.jsxs("svg",{width:"100%",viewBox:`0 0 ${r} ${Es}`,"data-coordinate-width":r,className:"block h-auto max-h-[184px] max-w-full",role:"img","aria-labelledby":"flow-chart-title flow-chart-desc",children:[o.jsx("title",{id:"flow-chart-title",children:"Added versus closed tasks by active UTC day"}),o.jsx("desc",{id:"flow-chart-desc",children:"Grouped bars use solid shapes for additions and striped shapes for closures. Exact values are provided in an accessible table."}),o.jsx("defs",{children:o.jsx("pattern",{id:"flow-closed-stripes",width:"4",height:"4",patternUnits:"userSpaceOnUse",patternTransform:"rotate(45)",children:o.jsx("line",{x1:"0",y1:"0",x2:"0",y2:"4",stroke:"currentColor",strokeWidth:"2"})})}),o.jsx("line",{x1:pa,y1:Si,x2:pa,y2:u,stroke:"var(--border-strong)"}),o.jsx("line",{x1:pa,y1:u,x2:r-Ku,y2:u,stroke:"var(--border-strong)"}),o.jsx("text",{x:pa-6,y:Si+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:s}),o.jsx("text",{x:pa-6,y:u+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:"0"}),e.map((p,g)=>{const y=pa+(g+.5)*c,x=Fo(p.added,s),E=Fo(p.closed,s);return o.jsxs("g",{children:[o.jsx("title",{children:`${p.date}: ${p.added} added, ${p.closed} closed, ${p.reopened} reopened, net backlog ${p.netBacklog}`}),a&&p.addedTaskIds.length>0?o.jsx("g",{role:"button",tabIndex:0,"aria-label":`Filter Work Tree to ${al("added",p.addedTaskIds.length,p.date)}`,className:"cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}),onKeyDown:S=>{S.key!=="Enter"&&S.key!==" "||(S.preventDefault(),a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}))},children:o.jsx("rect",{x:y-d-1,y:x,width:d,height:Math.max(2,u-x),rx:"1.5",fill:"var(--accent)"})}):o.jsx("rect",{x:y-d-1,y:x,width:d,height:Math.max(0,u-x),rx:"1.5",fill:"var(--accent)"}),a&&p.closedTaskIds.length>0?o.jsx("g",{role:"button",tabIndex:0,"aria-label":`Filter Work Tree to ${al("closed",p.closedTaskIds.length,p.date)}`,className:"cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}),onKeyDown:S=>{S.key!=="Enter"&&S.key!==" "||(S.preventDefault(),a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}))},children:o.jsx("rect",{x:y+1,y:E,width:d,height:Math.max(2,u-E),rx:"1.5",fill:"url(#flow-closed-stripes)",stroke:"var(--text-muted)",strokeWidth:"0.5"})}):o.jsx("rect",{x:y+1,y:E,width:d,height:Math.max(0,u-E),rx:"1.5",fill:"url(#flow-closed-stripes)",stroke:"var(--text-muted)",strokeWidth:"0.5"}),h.has(g)?o.jsx("text",{x:y,y:Es-9,textAnchor:"middle",className:"fill-[var(--text-subtle)] text-[10px]",children:K0(p.date)}):null]},p.date)})]})}),o.jsxs("details",{className:"mt-2 min-w-0 max-w-full overflow-hidden [contain:inline-size] text-xs text-[var(--text-muted)]",children:[o.jsx("summary",{className:"cursor-pointer font-semibold focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:"View exact flow data"}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5",children:o.jsxs("table",{className:"w-full table-fixed border-collapse text-left",children:[o.jsx("caption",{className:"sr-only",children:"Exact added, closed, reopened, and net backlog values by active UTC day"}),o.jsx("thead",{children:o.jsxs("tr",{className:"border-b border-[var(--border)]",children:[o.jsx("th",{className:"px-2 py-1",children:"Date"}),o.jsx("th",{className:"px-2 py-1",children:"Added"}),o.jsx("th",{className:"px-2 py-1",children:"Closed"}),o.jsx("th",{className:"px-2 py-1",children:"Reopened"}),o.jsx("th",{className:"px-2 py-1",children:"Net backlog"})]})}),o.jsx("tbody",{children:e.map(p=>o.jsxs("tr",{className:"border-b border-[var(--border)] last:border-0",children:[o.jsx("th",{className:"px-2 py-1 font-mono font-medium",children:p.date}),o.jsx("td",{className:"px-2 py-1",children:a&&p.addedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`added:${p.date}`,label:al("added",p.addedTaskIds.length,p.date),taskIds:p.addedTaskIds}),children:p.added}):p.added}),o.jsx("td",{className:"px-2 py-1",children:a&&p.closedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`closed:${p.date}`,label:al("closed",p.closedTaskIds.length,p.date),taskIds:p.closedTaskIds}),children:p.closed}):p.closed}),o.jsx("td",{className:"px-2 py-1",children:a&&p.reopenedTaskIds.length>0?o.jsx("button",{type:"button",className:"font-bold underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",onClick:()=>a({key:`reopened:${p.date}`,label:al("reopened",p.reopenedTaskIds.length,p.date),taskIds:p.reopenedTaskIds}),children:p.reopened}):p.reopened}),o.jsx("td",{className:"px-2 py-1",children:p.netBacklog})]},p.date))})]})})]})]})}function Hy(e,a,r,s){return e.map((u,c)=>`${c===0?"M":"L"} ${X0(c,e.length,a).toFixed(2)} ${Fo(Math.max(0,r(u)),s).toFixed(2)}`).join(" ")}function hk({points:e}){if(e.length===0)return o.jsx(Vo,{title:"Scope vs Completion",description:"Cumulative burn-up across the selected active days.",children:o.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:"No cumulative flow data."})});const a=G0(e.length),r=Math.max(1,...e.flatMap(h=>[h.cumulativeScope,h.cumulativeCompletion])),s=Es-Wm,u=Q0(e.length),c=Hy(e,a,h=>h.cumulativeScope,r),d=Hy(e,a,h=>h.cumulativeCompletion,r);return o.jsxs(Vo,{title:"Scope vs Completion",description:"The solid scope line and dashed completion line expose the open-backlog gap without relying on color.",children:[o.jsxs("div",{className:"flex items-center gap-4 text-xs font-semibold text-[var(--text-muted)]","aria-hidden":"true",children:[o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"h-0.5 w-5 bg-[var(--accent)]"}),"Scope (solid)"]}),o.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[o.jsx("span",{className:"w-5 border-t-2 border-dashed border-[var(--color-status-done)]"}),"Completion (dashed)"]})]}),o.jsx("div",{className:"mt-2 w-full min-w-0 max-w-full overflow-x-auto [contain:inline-size] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1.5","data-responsive-chart":"horizontal-scroll",children:o.jsxs("svg",{width:"100%",viewBox:`0 0 ${a} ${Es}`,"data-coordinate-width":a,className:"block h-auto max-h-[184px] max-w-full",role:"img","aria-labelledby":"burnup-chart-title burnup-chart-desc",children:[o.jsx("title",{id:"burnup-chart-title",children:"Cumulative scope versus completion"}),o.jsx("desc",{id:"burnup-chart-desc",children:"A solid scope line and dashed completion line show the cumulative open-backlog gap. Exact values are provided in an accessible table."}),o.jsx("line",{x1:pa,y1:Si,x2:pa,y2:s,stroke:"var(--border-strong)"}),o.jsx("line",{x1:pa,y1:s,x2:a-Ku,y2:s,stroke:"var(--border-strong)"}),o.jsx("text",{x:pa-6,y:Si+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:r}),o.jsx("text",{x:pa-6,y:s+4,textAnchor:"end",className:"fill-[var(--text-subtle)] text-[10px]",children:"0"}),o.jsx("path",{d:c,fill:"none",stroke:"var(--accent)",strokeWidth:"2.5"}),o.jsx("path",{d,fill:"none",stroke:"var(--color-status-done)",strokeWidth:"2.5",strokeDasharray:"6 4"}),e.map((h,p)=>{const g=X0(p,e.length,a);return o.jsxs("g",{children:[o.jsx("title",{children:`${h.date}: cumulative scope ${h.cumulativeScope}, cumulative completion ${h.cumulativeCompletion}, open backlog ${h.netBacklog}`}),o.jsx("circle",{cx:g,cy:Fo(h.cumulativeScope,r),r:"2.5",fill:"var(--accent)"}),o.jsx("rect",{x:g-2.5,y:Fo(Math.max(0,h.cumulativeCompletion),r)-2.5,width:"5",height:"5",fill:"var(--color-status-done)"}),u.has(p)?o.jsx("text",{x:g,y:Es-9,textAnchor:"middle",className:"fill-[var(--text-subtle)] text-[10px]",children:K0(h.date)}):null]},h.date)})]})}),o.jsx("div",{className:"sr-only",children:o.jsxs("table",{children:[o.jsx("caption",{children:"Exact cumulative scope, completion, and open backlog values by active UTC day"}),o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Date"}),o.jsx("th",{children:"Scope"}),o.jsx("th",{children:"Completion"}),o.jsx("th",{children:"Open backlog"})]})}),o.jsx("tbody",{children:e.map(h=>o.jsxs("tr",{children:[o.jsx("th",{children:h.date}),o.jsx("td",{children:h.cumulativeScope}),o.jsx("td",{children:h.cumulativeCompletion}),o.jsx("td",{children:h.netBacklog})]},h.date))})]})})]})}function mk({analytics:e,onSelect:a}){const r=Math.max(1,...e.agingBuckets.map(u=>u.count)),s=e.agingBuckets.reduce((u,c)=>u+c.count,0);return o.jsxs(Vo,{title:"Open-task aging",description:"Whole UTC days since creation or the latest reopen.",children:[s===0?o.jsx("p",{className:"mb-3 text-sm text-[var(--text-muted)]",children:"No open tasks have an aging anchor at this cutoff."}):null,o.jsx("ul",{className:"grid gap-2","aria-label":"Open-task aging buckets",children:e.agingBuckets.map(u=>{const c=o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"font-semibold text-[var(--text-muted)]",children:u.label}),o.jsx("span",{className:"h-3 overflow-hidden rounded-full border border-[var(--border)] bg-[var(--surface-card)]",children:o.jsx("span",{className:"block h-full rounded-full bg-[var(--accent)]",style:{width:`${u.count/r*100}%`}})}),o.jsx("span",{className:"text-right font-bold tabular-nums text-[var(--text)]","aria-label":`${u.count} tasks`,children:u.count})]});return o.jsx("li",{children:a&&u.taskIds.length>0?o.jsx("button",{type:"button",className:"grid w-full grid-cols-[3.75rem_minmax(0,1fr)_2rem] items-center gap-2 rounded-lg text-xs hover:bg-[var(--accent-soft)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]","aria-label":`Filter Work Tree to ${u.count} ${u.count===1?"task":"tasks"} aged ${u.label}`,onClick:()=>a({key:`aging:${u.label}`,label:`${u.count} ${u.count===1?"task":"tasks"} aged ${u.label}`,taskIds:u.taskIds}),children:c}):o.jsx("div",{className:"grid grid-cols-[3.75rem_minmax(0,1fr)_2rem] items-center gap-2 text-xs",children:c})},u.label)})}),o.jsx("div",{className:"sr-only",children:o.jsxs("table",{children:[o.jsx("caption",{children:"Exact open-task aging bucket counts"}),o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Age"}),o.jsx("th",{children:"Open tasks"})]})}),o.jsx("tbody",{children:e.agingBuckets.map(u=>o.jsxs("tr",{children:[o.jsx("th",{children:u.label}),o.jsx("td",{children:u.count})]},u.label))})]})})]})}function pk({analytics:e,onSelect:a}){const r=a?{onSelect:a}:{};return o.jsxs("div",{className:"grid min-w-0 max-w-full overflow-hidden gap-3 xl:grid-cols-2",children:[o.jsx(fk,{points:e.dailyPoints,...r}),o.jsx(hk,{points:e.dailyPoints}),o.jsx("div",{className:"min-w-0 xl:col-span-2",children:o.jsx(mk,{analytics:e,...r})})]})}const gk=[7,21,60];function vk(e){return e>0?`+${e}`:String(e)}function ku(e){return e.toFixed(1)}function xk(e){return`${(e*100).toFixed(0)}%`}function yk(e){const{netBacklog:a,activeDays:r}=e.summary;if(r===0)return"No task-flow activity is recorded for this period.";if(a>0)return`Backlog grew by ${a} ${a===1?"task":"tasks"} across the selected active days.`;if(a<0){const s=Math.abs(a);return`Backlog shrank by ${s} ${s===1?"task":"tasks"} across the selected active days.`}return"Backlog stayed level across the selected active days."}function bk({value:e}){return e>0?o.jsx(vj,{className:"h-4 w-4","aria-hidden":"true"}):e<0?o.jsx(uj,{className:"h-4 w-4","aria-hidden":"true"}):o.jsx(eR,{className:"h-4 w-4","aria-hidden":"true"})}function xs({label:e,value:a,detail:r,valueClassName:s="text-[var(--text)]",onSelect:u,selected:c}){return o.jsxs("div",{className:`min-w-28 rounded-xl border bg-[var(--surface-elevated)] px-3 py-2.5 ${c?"border-[var(--accent)] ring-1 ring-[var(--accent)]":"border-[var(--border)]"}`,children:[o.jsx("dt",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--text-subtle)]",children:e}),o.jsx("dd",{className:`mt-1 text-xl font-black tracking-tight ${s}`,children:u?o.jsx("button",{type:"button","aria-pressed":c,"aria-label":`Filter Work Tree by ${e}`,onClick:u,className:"rounded-md underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:a}):a}),r?o.jsx("p",{className:"mt-0.5 text-xs text-[var(--text-muted)]",children:r}):null]})}function wk({phases:e,asOf:a,activeDrilldown:r,onDrilldown:s,onClearDrilldown:u}){const[c,d]=v.useState(21),h=v.useMemo(()=>sk(e),[e]),p=a??new Date().toISOString().slice(0,10),g=v.useMemo(()=>dk(h,{windowDays:c,asOf:p}),[p,h,c]),y=g.summary.netBacklog>0?"text-rose-600 dark:text-rose-400":g.summary.netBacklog<0?"text-emerald-600 dark:text-emerald-400":"text-[var(--text)]",x=g.limitations.notes.join(" "),E=(S,w,j)=>s&&j.length>0?()=>s({key:S,label:w,taskIds:j}):null;return o.jsx($t,{className:"min-w-0 overflow-hidden [contain:inline-size]",children:o.jsxs("section",{"aria-labelledby":"flow-backlog-heading",className:"grid min-w-0 max-w-full gap-4",children:[o.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[o.jsxs("div",{className:"min-w-0",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx(oj,{className:"h-4 w-4 text-[var(--accent)]","aria-hidden":"true"}),o.jsx("h2",{id:"flow-backlog-heading",className:"text-lg font-bold text-[var(--text)]",children:"Flow & Backlog"})]}),o.jsx("p",{className:"mt-1 text-sm text-[var(--text-muted)]","aria-live":"polite",children:yk(g)})]}),o.jsx("div",{role:"group","aria-label":"Active-day period",className:"flex flex-1 w-full min-w-0 items-center gap-1 overflow-x-auto contain-[inline-size] sm:w-auto sm:max-w-full sm:shrink-0 rounded-xl border border-(--border) bg-(--surface-card) p-1 scrollbar-thin [&::-webkit-scrollbar]:h-1.5",children:gk.map(S=>o.jsxs("button",{type:"button","aria-label":`${S} active days`,"aria-pressed":c===S,onClick:()=>d(S),className:`h-8 shrink-0 rounded-lg px-2.5 text-xs font-bold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-1 focus-visible:ring-offset-[var(--surface)] ${c===S?"bg-[var(--accent)] text-white":"text-[var(--text-muted)] hover:bg-[var(--accent-soft)] hover:text-[var(--text)]"}`,children:[o.jsx("span",{children:S}),o.jsx("span",{className:"hidden sm:inline",children:" active days"})]},S))})]}),o.jsx("p",{className:"text-xs text-[var(--text-subtle)]",children:g.calendarRange?o.jsxs(o.Fragment,{children:[o.jsx("span",{children:"UTC range "}),o.jsx("time",{dateTime:g.calendarRange.start,children:g.calendarRange.start}),o.jsx("span",{children:" – "}),o.jsx("time",{dateTime:g.calendarRange.end,children:g.calendarRange.end}),o.jsxs("span",{children:[" ","· ",g.summary.activeDays," active"," ",g.summary.activeDays===1?"day":"days"]})]}):"No UTC activity range is available."}),o.jsxs("dl",{className:"grid min-w-0 grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8",children:[o.jsx(xs,{label:"Added",value:String(g.summary.addedTotal),detail:`${ku(g.summary.addRatePerActiveDay)} / active day`,onSelect:E("window-added",`${g.windowAddedIds.length} ${g.windowAddedIds.length===1?"task":"tasks"} added in the selected window`,g.windowAddedIds),selected:(r==null?void 0:r.key)==="window-added"}),o.jsx(xs,{label:"Closed",value:String(g.summary.closedTotal),detail:`${ku(g.summary.closeRatePerActiveDay)} / active day`,onSelect:E("window-closed",`${g.windowClosedIds.length} ${g.windowClosedIds.length===1?"task":"tasks"} closed in the selected window`,g.windowClosedIds),selected:(r==null?void 0:r.key)==="window-closed"}),g.summary.reopenedTotal>0?o.jsx(xs,{label:"Reopened",value:String(g.summary.reopenedTotal),onSelect:E("window-reopened",`${g.windowReopenedIds.length} ${g.windowReopenedIds.length===1?"task":"tasks"} reopened in the selected window`,g.windowReopenedIds),selected:(r==null?void 0:r.key)==="window-reopened"}):null,o.jsxs("div",{className:"min-w-28 rounded-xl border border-[var(--border)] bg-[var(--surface-elevated)] px-3 py-2.5",children:[o.jsx("dt",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--text-subtle)]",children:"Net change"}),o.jsxs("dd",{className:`mt-1 flex items-center gap-1 text-xl font-black tracking-tight ${y}`,children:[o.jsx(bk,{value:g.summary.netBacklog}),vk(g.summary.netBacklog)]})]}),o.jsx(xs,{label:"Open now",value:String(g.summary.currentOpen),detail:`${g.summary.currentTotal} total`,onSelect:E("current-open",`${g.currentOpenIds.length} currently open ${g.currentOpenIds.length===1?"task":"tasks"}`,g.currentOpenIds),selected:(r==null?void 0:r.key)==="current-open"}),o.jsx(xs,{label:"Add rate",value:ku(g.summary.addRatePerActiveDay),detail:"per active day",onSelect:null,selected:!1}),o.jsx(xs,{label:"Close rate",value:ku(g.summary.closeRatePerActiveDay),detail:"per active day",onSelect:null,selected:!1}),o.jsx(xs,{label:"Closure ratio",value:xk(g.summary.closureRatio),detail:"closed / added",onSelect:null,selected:!1})]}),o.jsx(pk,{analytics:g,...s?{onSelect:s}:{}}),r?o.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 rounded-xl border border-[var(--accent)] bg-[var(--accent-soft)] px-3 py-2 text-sm",role:"status",children:[o.jsxs("span",{className:"font-semibold text-[var(--text)]",children:["Work Tree filter: ",r.label]}),u?o.jsx("button",{type:"button",onClick:u,className:"rounded-lg px-2 py-1 text-xs font-bold text-[var(--accent)] underline decoration-dotted underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]",children:"Clear analytics filter"}):null]}):null,o.jsx("p",{className:"text-xs text-[var(--text-subtle)]",title:x,children:"Current planner files exclude deleted tasks; legacy gaps are inferred from available timestamps."})]})})}function Sk(){for(var e=arguments.length,a=new Array(e),r=0;r<e;r++)a[r]=arguments[r];return v.useMemo(()=>s=>{a.forEach(u=>u(s))},a)}const wd=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ji(e){const a=Object.prototype.toString.call(e);return a==="[object Window]"||a==="[object global]"}function Jm(e){return"nodeType"in e}function va(e){var a,r;return e?ji(e)?e:Jm(e)&&(a=(r=e.ownerDocument)==null?void 0:r.defaultView)!=null?a:window:window}function ep(e){const{Document:a}=va(e);return e instanceof a}function lc(e){return ji(e)?!1:e instanceof va(e).HTMLElement}function Z0(e){return e instanceof va(e).SVGElement}function Ri(e){return e?ji(e)?e.document:Jm(e)?ep(e)?e:lc(e)||Z0(e)?e.ownerDocument:document:document:document}const hr=wd?v.useLayoutEffect:v.useEffect;function Sd(e){const a=v.useRef(e);return hr(()=>{a.current=e}),v.useCallback(function(){for(var r=arguments.length,s=new Array(r),u=0;u<r;u++)s[u]=arguments[u];return a.current==null?void 0:a.current(...s)},[])}function Ek(){const e=v.useRef(null),a=v.useCallback((s,u)=>{e.current=setInterval(s,u)},[]),r=v.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[a,r]}function Yo(e,a){a===void 0&&(a=[e]);const r=v.useRef(e);return hr(()=>{r.current!==e&&(r.current=e)},a),r}function sc(e,a){const r=v.useRef();return v.useMemo(()=>{const s=e(r.current);return r.current=s,s},[...a])}function Zu(e){const a=Sd(e),r=v.useRef(null),s=v.useCallback(u=>{u!==r.current&&(a==null||a(u,r.current)),r.current=u},[]);return[r,s]}function Wu(e){const a=v.useRef();return v.useEffect(()=>{a.current=e},[e]),a.current}let Fh={};function ic(e,a){return v.useMemo(()=>{if(a)return a;const r=Fh[e]==null?0:Fh[e]+1;return Fh[e]=r,e+"-"+r},[e,a])}function W0(e){return function(a){for(var r=arguments.length,s=new Array(r>1?r-1:0),u=1;u<r;u++)s[u-1]=arguments[u];return s.reduce((c,d)=>{const h=Object.entries(d);for(const[p,g]of h){const y=c[p];y!=null&&(c[p]=y+e*g)}return c},{...a})}}const yi=W0(1),Ju=W0(-1);function Nk(e){return"clientX"in e&&"clientY"in e}function Ed(e){if(!e)return!1;const{KeyboardEvent:a}=va(e.target);return a&&e instanceof a}function jk(e){if(!e)return!1;const{TouchEvent:a}=va(e.target);return a&&e instanceof a}function ed(e){if(jk(e)){if(e.touches&&e.touches.length){const{clientX:a,clientY:r}=e.touches[0];return{x:a,y:r}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:a,clientY:r}=e.changedTouches[0];return{x:a,y:r}}}return Nk(e)?{x:e.clientX,y:e.clientY}:null}const Vl=Object.freeze({Translate:{toString(e){if(!e)return;const{x:a,y:r}=e;return"translate3d("+(a?Math.round(a):0)+"px, "+(r?Math.round(r):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:a,scaleY:r}=e;return"scaleX("+a+") scaleY("+r+")"}},Transform:{toString(e){if(e)return[Vl.Translate.toString(e),Vl.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:a,duration:r,easing:s}=e;return a+" "+r+"ms "+s}}}),qy="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function Rk(e){return e.matches(qy)?e:e.querySelector(qy)}const kk={display:"none"};function Tk(e){let{id:a,value:r}=e;return hn.createElement("div",{id:a,style:kk},r)}function Ak(e){let{id:a,announcement:r,ariaLiveType:s="assertive"}=e;const u={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return hn.createElement("div",{id:a,style:u,role:"status","aria-live":s,"aria-atomic":!0},r)}function Dk(){const[e,a]=v.useState("");return{announce:v.useCallback(s=>{s!=null&&a(s)},[]),announcement:e}}const J0=v.createContext(null);function Ck(e){const a=v.useContext(J0);v.useEffect(()=>{if(!a)throw new Error("useDndMonitor must be used within a children of <DndContext>");return a(e)},[e,a])}function Ok(){const[e]=v.useState(()=>new Set),a=v.useCallback(s=>(e.add(s),()=>e.delete(s)),[e]);return[v.useCallback(s=>{let{type:u,event:c}=s;e.forEach(d=>{var h;return(h=d[u])==null?void 0:h.call(d,c)})},[e]),a]}const Mk={draggable:`
314
314
  To pick up a draggable item, press the space bar.
315
315
  While dragging, use the arrow keys to move the item.
316
316
  Press space again to drop the item in its new position, or press escape to cancel.
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700&display=swap";/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-700:oklch(50% .134 242.749);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-status-draft:#94a3b8;--color-status-discovery:#6366f1;--color-status-planned:#0ea5e9;--color-status-in-progress:#f59e0b;--color-status-paused:#ea580c;--color-status-done:#22c55e;--color-status-blocked:#ef4444;--color-status-canceled:#94a3b8;--color-status-waiting:#64748b;--color-status-deferred:#8b5cf6;--color-status-rejected:#f43f5e;--color-status-started:#6366f1;--color-status-closed:#0d9488}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.top-0{top:0}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:0}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[150\]{z-index:150}.z-\[200\]{z-index:200}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-1{margin-block:var(--spacing)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\[32dvh\]{max-height:32dvh}.max-h-\[184px\]{max-height:184px}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.min-h-0{min-height:0}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-52{width:calc(var(--spacing) * 52)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-\[7\.5rem\]{min-width:7.5rem}.min-w-\[40rem\]{min-width:40rem}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing) * 28)}.\[scrollbar-width\:thin\],.scrollbar-thin{scrollbar-width:thin}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[3\.75rem_minmax\(0\,1fr\)_2rem\]{grid-template-columns:3.75rem minmax(0,1fr) 2rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.self-end{align-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[8px\]{border-radius:8px}.rounded-\[9px\]{border-radius:9px}.rounded-\[10px\]{border-radius:10px}.rounded-\[12px\]{border-radius:12px}.rounded-\[14px\]{border-radius:14px}.rounded-\[16px\]{border-radius:16px}.rounded-\[18px\]{border-radius:18px}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--border\){border-color:var(--border)}.border-\[color\:color-mix\(in_srgb\,var\(--color-status-done\)_0\%\,transparent\)\]{border-color:#0000}@supports (color:color-mix(in lab,red,red)){.border-\[color\:color-mix\(in_srgb\,var\(--color-status-done\)_0\%\,transparent\)\]{border-color:color-mix(in srgb,var(--color-status-done) 0%,transparent)}}.border-\[var\(--accent\)\],.border-\[var\(--accent\)\]\/50{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent\)\]\/50{border-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--border-strong\)\]{border-color:var(--border-strong)}.border-\[var\(--color-status-done\)\]{border-color:var(--color-status-done)}.border-\[var\(--danger-soft\)\]{border-color:var(--danger-soft)}.border-\[var\(--text-muted\)\]{border-color:var(--text-muted)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/30{border-color:color-mix(in oklab,var(--color-rose-500) 30%,transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/30{border-color:color-mix(in oklab,var(--color-sky-500) 30%,transparent)}}.border-transparent{border-color:#0000}.bg-\(--surface-card\){background-color:var(--surface-card)}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_8\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 8%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_10\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_10\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 10%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_12\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 12%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_16\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_16\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 16%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_18\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 18%,transparent)}}.bg-\[var\(--accent\)\],.bg-\[var\(--accent\)\]\/5{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent\)\]\/5{background-color:color-mix(in oklab,var(--accent) 5%,transparent)}}.bg-\[var\(--accent-soft\)\]{background-color:var(--accent-soft)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--danger-soft\)\],.bg-\[var\(--danger-soft\)\]\/50{background-color:var(--danger-soft)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--danger-soft\)\]\/50{background-color:color-mix(in oklab,var(--danger-soft) 50%,transparent)}}.bg-\[var\(--surface\)\]{background-color:var(--surface)}.bg-\[var\(--surface-card\)\]{background-color:var(--surface-card)}.bg-\[var\(--surface-elevated\)\],.bg-\[var\(--surface-elevated\)\]\/95{background-color:var(--surface-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--surface-elevated\)\]\/95{background-color:color-mix(in oklab,var(--surface-elevated) 95%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-current{background-color:currentColor}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-\[repeating-linear-gradient\(135deg\,var\(--text-muted\)_0_1px\,transparent_1px_3px\)\]{background-image:repeating-linear-gradient(135deg,var(--text-muted) 0 1px,transparent 1px 3px)}.fill-\[var\(--text-subtle\)\]{fill:var(--text-subtle)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1{padding-left:var(--spacing)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.95em\]{font-size:.95em}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--color-status-blocked\)\]{color:var(--color-status-blocked)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-subtle\)\]{color:var(--text-subtle)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--accent\)\]{accent-color:var(--accent)}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[color\:color-mix\(in_srgb\,var\(--accent\)_55\%\,transparent\)\]{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.ring-\[color\:color-mix\(in_srgb\,var\(--accent\)_55\%\,transparent\)\]{--tw-ring-color:color-mix(in srgb,var(--accent) 55%,transparent)}}.ring-\[var\(--accent\)\]{--tw-ring-color:var(--accent)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[contain\:inline-size\],.contain-\[inline-size\]{contain:inline-size}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media(hover:hover){.group-hover\:border-\[var\(--accent\)\]:is(:where(.group):hover *){border-color:var(--accent)}.group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *){color:var(--accent)}}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-\[var\(--accent\)\]:hover{border-color:var(--accent)}.hover\:bg-\[color-mix\(in_srgb\,var\(--danger-soft\)_88\%\,black_12\%\)\]:hover{background-color:var(--danger-soft)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--danger-soft\)_88\%\,black_12\%\)\]:hover{background-color:color-mix(in srgb,var(--danger-soft) 88%,black 12%)}}.hover\:bg-\[var\(--accent\)\]:hover{background-color:var(--accent)}.hover\:bg-\[var\(--accent-hover\)\]:hover{background-color:var(--accent-hover)}.hover\:bg-\[var\(--accent-soft\)\]:hover{background-color:var(--accent-soft)}.hover\:bg-\[var\(--surface-card\)\]:hover{background-color:var(--surface-card)}.hover\:bg-\[var\(--surface-elevated\)\]:hover,.hover\:bg-\[var\(--surface-elevated\)\]\/65:hover{background-color:var(--surface-elevated)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--surface-elevated\)\]\/65:hover{background-color:color-mix(in oklab,var(--surface-elevated) 65%,transparent)}}.hover\:bg-\[var\(--surface-hover\)\]\/60:hover{background-color:var(--surface-hover)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--surface-hover\)\]\/60:hover{background-color:color-mix(in oklab,var(--surface-hover) 60%,transparent)}}.hover\:bg-\[var\(--surface-strong\)\]:hover{background-color:var(--surface-strong)}.hover\:bg-rose-500\/10:hover{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-rose-500\/10:hover{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.hover\:text-\[var\(--accent\)\]:hover{color:var(--accent)}.hover\:text-\[var\(--text\)\]:hover{color:var(--text)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}}.focus-visible\:bg-\[var\(--surface-hover\)\]\/60:focus-visible{background-color:var(--surface-hover)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-\[var\(--surface-hover\)\]\/60:focus-visible{background-color:color-mix(in oklab,var(--surface-hover) 60%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--accent\)\]:focus-visible{--tw-ring-color:var(--accent)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[var\(--surface\)\]:focus-visible{--tw-ring-offset-color:var(--surface)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-60:disabled{opacity:.6}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media(min-width:40rem){.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:h-4{height:calc(var(--spacing) * 4)}.sm\:h-8{height:calc(var(--spacing) * 8)}.sm\:h-9{height:calc(var(--spacing) * 9)}.sm\:min-h-8{min-height:calc(var(--spacing) * 8)}.sm\:min-h-9{min-height:calc(var(--spacing) * 9)}.sm\:min-h-11{min-height:calc(var(--spacing) * 11)}.sm\:w-4{width:calc(var(--spacing) * 4)}.sm\:w-9{width:calc(var(--spacing) * 9)}.sm\:w-auto{width:auto}.sm\:max-w-full{max-width:100%}.sm\:flex-1{flex:1}.sm\:shrink-0{flex-shrink:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[1fr_1fr_auto\]{grid-template-columns:1fr 1fr auto}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sm\:rounded-\[10px\]{border-radius:10px}.sm\:rounded-\[12px\]{border-radius:12px}.sm\:rounded-\[14px\]{border-radius:14px}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}.sm\:pl-4{padding-left:calc(var(--spacing) * 4)}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-\[10px\]{font-size:10px}}@media(min-width:48rem){.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:max-h-\[calc\(100vh-3rem\)\]{max-height:calc(100vh - 3rem)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_200px_auto_auto\]{grid-template-columns:minmax(0,1fr) 200px auto auto}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:justify-end{justify-content:flex-end}.md\:gap-6{gap:calc(var(--spacing) * 6)}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:p-8{padding:calc(var(--spacing) * 8)}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:contents{display:contents}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,150px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,150px) 124px 44px 44px}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,168px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,168px) 124px 44px 44px}.lg\:items-center{align-items:center}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:block{display:block}.xl\:contents{display:contents}.xl\:hidden{display:none}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,132px\)_minmax\(0\,152px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,132px) minmax(0,152px) 124px 44px 44px}.xl\:items-center{align-items:center}}@media(prefers-color-scheme:dark){.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-rose-400{color:var(--color-rose-400)}.dark\:text-sky-400{color:var(--color-sky-400)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-scrollbar\]\:h-1\.5::-webkit-scrollbar{height:calc(var(--spacing) * 1.5)}}:root{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--radius-panel:24px;--radius-card:20px;--radius-input:14px;--container-width:1180px;--surface-blur:18px;--bg-base:#f8fafc;--bg-gradient-a:#3b82f62e;--bg-gradient-b:#8b5cf629;--surface:#ffffffc2;--surface-strong:#ffffffe6;--surface-elevated:#fffffffa;--border:#94a3b838;--border-strong:#94a3b857;--text:#0f172a;--text-muted:#475569;--text-subtle:#64748b;--accent:#6366f1;--accent-soft:#6366f124;--accent-hover:#4f46e5;--danger-soft:#ef44441f;--color-entity-feature:#8b5cf6;--color-entity-phase:#06b6d4;--color-entity-task:#10b981;--shadow-panel:0 20px 60px -24px #0f172a38;--shadow-card:0 12px 30px -18px #0f172a2e;color-scheme:light}[data-theme=dark]{--bg-base:#08111f;--bg-gradient-a:#3b82f61f;--bg-gradient-b:#8b5cf624;--surface:#0f172abd;--surface-strong:#0f172ae0;--surface-elevated:#0f172af5;--border:#94a3b824;--border-strong:#94a3b847;--text:#f8fafc;--text-muted:#94a3b8;--text-subtle:#64748b;--accent:#818cf8;--accent-soft:#818cf829;--accent-hover:#6366f1;--danger-soft:#ef44442e;--color-entity-feature:#a78bfa;--color-entity-phase:#22d3ee;--color-entity-task:#34d399;--shadow-panel:0 20px 60px -24px #0009;--shadow-card:0 12px 30px -18px #0000006b;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font-sans);color:var(--text);background-color:var(--bg-base);background-image:radial-gradient(50% 55% at 0% 0%,var(--bg-gradient-a) 0%,transparent 70%),radial-gradient(42% 48% at 100% 0%,var(--bg-gradient-b) 0%,transparent 64%);-webkit-font-smoothing:antialiased;background-attachment:fixed;margin:0;line-height:1.5}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}.page-shell{min-height:100vh}.page-container{width:min(100% - 3rem,var(--container-width));margin-inline:auto}.grid>*,.formatted-text{min-width:0}.formatted-text p,.formatted-text li,.formatted-text blockquote,.formatted-text a,.formatted-text code{overflow-wrap:anywhere}.surface-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-panel);-webkit-backdrop-filter:blur(var(--surface-blur)) saturate(140%);box-shadow:var(--shadow-panel)}.surface-card{background:var(--surface-strong);border-radius:var(--radius-card);-webkit-backdrop-filter:blur(14px)saturate(130%);box-shadow:var(--shadow-card)}.field-control{border-radius:var(--radius-input);border:1px solid var(--border-strong);background:var(--surface-elevated);width:100%;min-height:48px;color:var(--text);outline:none;padding:.75rem .95rem}.field-control:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field-textarea{resize:vertical;min-height:120px}.status-chip{border:1px solid var(--border-strong);letter-spacing:.02em;text-transform:capitalize;border-radius:999px;align-items:center;gap:.35rem;padding:.25rem .65rem;font-size:.72rem;font-weight:700;display:inline-flex}.status-draft{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-draft{background:color-mix(in srgb,var(--color-status-draft) 14%,transparent)}}.status-draft{color:var(--color-status-draft)}.status-discovery{background:#6366f124}@supports (color:color-mix(in lab,red,red)){.status-discovery{background:color-mix(in srgb,var(--color-status-discovery) 14%,transparent)}}.status-discovery{color:var(--color-status-discovery)}.status-planned{background:#0ea5e924}@supports (color:color-mix(in lab,red,red)){.status-planned{background:color-mix(in srgb,var(--color-status-planned) 14%,transparent)}}.status-planned{color:var(--color-status-planned)}.status-in-progress{background:#f59e0b29}@supports (color:color-mix(in lab,red,red)){.status-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 16%,transparent)}}.status-in-progress{color:var(--color-status-in-progress)}.status-paused{background:#ea580c24}@supports (color:color-mix(in lab,red,red)){.status-paused{background:color-mix(in srgb,var(--color-status-paused) 14%,transparent)}}.status-paused{color:var(--color-status-paused)}.status-done{background:#22c55e29}@supports (color:color-mix(in lab,red,red)){.status-done{background:color-mix(in srgb,var(--color-status-done) 16%,transparent)}}.status-done{color:var(--color-status-done)}.status-blocked{background:#ef444426}@supports (color:color-mix(in lab,red,red)){.status-blocked{background:color-mix(in srgb,var(--color-status-blocked) 15%,transparent)}}.status-blocked{color:var(--color-status-blocked)}.status-canceled{background:#94a3b81f}@supports (color:color-mix(in lab,red,red)){.status-canceled{background:color-mix(in srgb,var(--color-status-canceled) 12%,transparent)}}.status-canceled{color:var(--color-status-canceled)}.status-rejected{background:#f43f5e1f}@supports (color:color-mix(in lab,red,red)){.status-rejected{background:color-mix(in srgb,var(--color-status-rejected) 12%,transparent)}}.status-rejected{color:var(--color-status-rejected)}.status-deferred{background:#8b5cf61f}@supports (color:color-mix(in lab,red,red)){.status-deferred{background:color-mix(in srgb,var(--color-status-deferred) 12%,transparent)}}.status-deferred{color:var(--color-status-deferred)}.status-waiting{background:#64748b1f}@supports (color:color-mix(in lab,red,red)){.status-waiting{background:color-mix(in srgb,var(--color-status-waiting) 12%,transparent)}}.status-waiting{color:var(--color-status-waiting)}.status-started{background:#6366f11a}@supports (color:color-mix(in lab,red,red)){.status-started{background:color-mix(in srgb,var(--color-status-started) 10%,transparent)}}.status-started{color:var(--color-status-started)}.status-closed{background:#0d94881f}@supports (color:color-mix(in lab,red,red)){.status-closed{background:color-mix(in srgb,var(--color-status-closed) 12%,transparent)}}.status-closed{color:var(--color-status-closed)}.status-pattern-dashed{border-style:dashed;border-color:#6366f1b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed{border-color:color-mix(in srgb,var(--color-status-started) 70%,transparent)}}.status-pattern-dashed-planned{border-style:dashed;border-color:#0ea5e9a6}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-planned{border-color:color-mix(in srgb,var(--color-status-planned) 65%,transparent)}}.status-pattern-dashed-started{border-style:dashed;border-color:#6366f1b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-started{border-color:color-mix(in srgb,var(--color-status-started) 70%,transparent)}}.status-pattern-dashed-paused{border-style:dashed;border-color:#ea580cb3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-paused{border-color:color-mix(in srgb,var(--color-status-paused) 70%,transparent)}}.status-pattern-dashed-waiting{border-style:dashed;border-color:#64748bb3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-waiting{border-color:color-mix(in srgb,var(--color-status-waiting) 70%,transparent)}}.status-pattern-dashed-deferred{border-style:dashed;border-color:#8b5cf6b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-deferred{border-color:color-mix(in srgb,var(--color-status-deferred) 70%,transparent)}}@keyframes ap-status-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--color-status-in-progress) 40%,transparent)}50%{box-shadow:0 0 0 3px color-mix(in srgb,var(--color-status-in-progress) 12%,transparent)}}.status-pattern-pulse{animation:2s ease-in-out infinite ap-status-pulse}.status-pattern-stripe{background-image:repeating-linear-gradient(135deg,#0000 0,#0000 10px,#0d948814 10px,#0d948814 20px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-stripe{background-image:repeating-linear-gradient(135deg,transparent 0 10px,color-mix(in srgb,var(--color-status-closed) 8%,transparent) 10px 20px)}}.status-pattern-hatch{background-image:repeating-linear-gradient(45deg,#0000 0,#0000 8px,#94a3b814 8px,#94a3b814 16px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-hatch{background-image:repeating-linear-gradient(45deg,transparent 0 8px,color-mix(in srgb,var(--color-status-canceled) 8%,transparent) 8px 16px)}}.status-pattern-crosshatch{background-image:repeating-linear-gradient(45deg,#0000 0,#0000 4px,#f43f5e14 4px,#f43f5e14 8px),repeating-linear-gradient(-45deg,#0000 0,#0000 4px,#f43f5e14 4px,#f43f5e14 8px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-crosshatch{background-image:repeating-linear-gradient(45deg,transparent 0 4px,color-mix(in srgb,var(--color-status-rejected) 8%,transparent) 4px 8px),repeating-linear-gradient(-45deg,transparent 0 4px,color-mix(in srgb,var(--color-status-rejected) 8%,transparent) 4px 8px)}}@media(prefers-reduced-motion:reduce){.status-pattern-pulse{animation:none}}.plan-description{background:var(--surface-elevated);border-left:3px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.plan-description{border-left:3px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.plan-description{border-radius:var(--radius-card);color:var(--text);padding:.85rem 1rem}.plan-description p{margin:0}.entity-badge{border:1px solid var(--border-strong);letter-spacing:.03em;text-transform:uppercase;border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .7rem;font-size:.72rem;font-weight:800;display:inline-flex}.entity-badge--feature{color:var(--color-entity-feature);background:var(--color-entity-feature)}@supports (color:color-mix(in lab,red,red)){.entity-badge--feature{background:color-mix(in srgb,var(--color-entity-feature) 14%,transparent)}}.entity-badge--phase{color:var(--color-entity-phase);background:var(--color-entity-phase)}@supports (color:color-mix(in lab,red,red)){.entity-badge--phase{background:color-mix(in srgb,var(--color-entity-phase) 14%,transparent)}}.entity-badge--task{color:var(--color-entity-task);background:var(--color-entity-task)}@supports (color:color-mix(in lab,red,red)){.entity-badge--task{background:color-mix(in srgb,var(--color-entity-task) 14%,transparent)}}.entity-badge--requirement{color:var(--accent);background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.entity-badge--requirement{background:color-mix(in srgb,var(--accent) 14%,transparent)}}.entity-link--feature{color:var(--color-entity-feature)}.entity-link--phase{color:var(--color-entity-phase)}.entity-link--task{color:var(--color-entity-task)}.entity-path-badge{border:1px solid var(--border-strong);background:var(--surface-elevated);font-variant-numeric:tabular-nums;border-radius:7px;align-items:stretch;line-height:1;display:inline-flex;overflow:hidden}.entity-path-seg{letter-spacing:.02em;align-items:center;padding:.24rem .5rem;font-size:.72rem;font-weight:800;display:inline-flex}.entity-path-seg--feature{color:var(--color-entity-feature);background:var(--color-entity-feature)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--feature{background:color-mix(in srgb,var(--color-entity-feature) 14%,transparent)}}.entity-path-seg--phase{color:var(--color-entity-phase);background:var(--color-entity-phase)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--phase{background:color-mix(in srgb,var(--color-entity-phase) 14%,transparent)}}.entity-path-seg--task{color:var(--color-entity-task);background:var(--color-entity-task)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--task{background:color-mix(in srgb,var(--color-entity-task) 14%,transparent)}}.entity-path-seg--link{cursor:pointer;text-decoration:none;transition:filter .15s,transform 50ms}.entity-path-seg--link:hover{filter:brightness(1.15)}.entity-path-seg--link:active{transform:translateY(1px)}.entity-path-seg--link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.entity-path-sep{color:var(--text-subtle);align-items:center;padding-inline:.2rem;font-size:.72rem;font-weight:700;display:inline-flex}.entity-detail-identity{border-inline-start:4px solid var(--entity-detail-color);border-radius:0 var(--radius-control) var(--radius-control) 0;background:linear-gradient(90deg,var(--entity-detail-color),transparent 72%);margin-top:.9rem;padding:.35rem .8rem .45rem}@supports (color:color-mix(in lab,red,red)){.entity-detail-identity{background:linear-gradient(90deg,color-mix(in srgb,var(--entity-detail-color) 10%,transparent),transparent 72%)}}.entity-detail-identity--feature{--entity-detail-color:var(--color-entity-feature)}.entity-detail-identity--phase{--entity-detail-color:var(--color-entity-phase)}.entity-detail-identity--task{--entity-detail-color:var(--color-entity-task)}.entity-detail-kind{color:var(--entity-detail-color);letter-spacing:.01em;align-items:center;gap:.45rem;margin:0;font-size:clamp(1.05rem,1.7vw,1.3rem);font-weight:900;display:flex}.entity-detail-title{min-width:0;color:var(--text);letter-spacing:-.035em;overflow-wrap:anywhere;margin:.2rem 0 0;font-size:clamp(1.65rem,3.1vw,2.35rem);font-weight:900;line-height:1.08}.entity-detail-subtitle{max-width:64rem;color:var(--text-muted);margin:.55rem 0 0}.detail-metrics-row{scrollbar-width:thin;gap:.5rem;padding-block:.1rem .35rem;display:flex;overflow-x:auto}.detail-metric{border:1px solid var(--border);border-radius:calc(var(--radius-control) + 1px);background:var(--surface-card);flex-direction:column;flex:1 0 6.75rem;justify-content:center;min-width:6.75rem;min-height:3.5rem;padding:.55rem .7rem;display:flex}.detail-metric--wide{flex-grow:1.6;flex-basis:13rem;min-width:13rem}.detail-metric-label{color:var(--text-subtle);letter-spacing:.12em;text-transform:uppercase;font-size:.62rem;font-weight:800;line-height:1.15}.detail-metric-value{color:var(--text);overflow-wrap:anywhere;margin-top:.28rem;font-size:.95rem;font-weight:850;line-height:1.15}.copyable-id{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;border-radius:8px;padding:0}.copyable-id:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.copyable-id__icon{opacity:.4;align-items:center;transition:opacity .15s;display:inline-flex}.copyable-id:hover .copyable-id__icon,.copyable-id:focus-visible .copyable-id__icon{opacity:1}.handoff-badge{border:1px solid var(--border);background:var(--surface-card);color:var(--text-muted);border-radius:9999px;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;line-height:1.1;text-decoration:none;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.handoff-badge:hover{background:var(--surface-elevated);color:var(--text);border-color:var(--accent)}.handoff-badge svg{flex:none}.handoff-badge__label{white-space:nowrap;font-weight:500}@media(max-width:640px){:root{font-size:106.25%}}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}button:disabled,select:disabled,input:disabled,textarea:disabled{cursor:not-allowed;opacity:.6}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px}@keyframes ap-progress-glow{0%,to{box-shadow:0 0 color-mix(in srgb,var(--color-status-in-progress) 0%,transparent)}50%{box-shadow:0 0 18px -2px color-mix(in srgb,var(--color-status-in-progress) 28%,transparent)}}.ap-in-progress{background:#f59e0b12;animation:2.6s ease-in-out infinite ap-progress-glow}@supports (color:color-mix(in lab,red,red)){.ap-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 7%,transparent)}}@keyframes ap-dot-ping{0%{opacity:.85;transform:scale(1)}75%,to{opacity:0;transform:scale(2.6)}}.status-item{border-radius:10px;position:relative;overflow:hidden}.ap-progress-dot{flex:none;width:9px;height:9px;margin-inline:6px;display:inline-block;position:relative;overflow:visible}.ap-progress-dot:before{content:"";background:var(--color-status-in-progress);border-radius:999px;position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 0 8px #f59e0bb3}@supports (color:color-mix(in lab,red,red)){.ap-progress-dot:before{box-shadow:0 0 8px color-mix(in srgb,var(--color-status-in-progress) 70%,transparent)}}.ap-progress-dot:after{content:"";background:var(--color-status-in-progress);transform-origin:50%;border-radius:999px;animation:1.9s cubic-bezier(0,0,.2,1) infinite ap-dot-ping;position:absolute;top:0;right:0;bottom:0;left:0}@media(prefers-reduced-motion:reduce){.ap-in-progress{animation:none}.ap-progress-dot:after{opacity:0;animation:none}}.short-id-badge{font-family:var(--font-mono,ui-monospace, monospace);letter-spacing:.04em;color:var(--text-muted);background:var(--accent);border-radius:6px;align-items:center;padding:3px 6px;font-size:10.5px;font-weight:700;line-height:1;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.short-id-badge{background:color-mix(in srgb,var(--accent) 8%,transparent)}}.short-id-badge{border:1px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.short-id-badge{border:1px solid color-mix(in srgb,var(--accent) 24%,transparent)}}.short-id-badge{font-variant-numeric:tabular-nums}.drag-handle{width:28px;height:28px;color:var(--text-subtle);cursor:grab;touch-action:none;opacity:.6;background:0 0;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:opacity .12s,background .12s,color .12s,border-color .12s;display:inline-flex}.drag-handle:hover,.drag-handle:focus-visible{opacity:1;background:var(--surface-elevated);color:var(--text);border-color:var(--border)}.drag-handle:active{cursor:grabbing}.ap-sortable--dragging{opacity:.55;outline:2px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.ap-sortable--dragging{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.ap-sortable--dragging{outline-offset:2px;border-radius:12px}.ap-drag-overlay{border:1px solid var(--accent);box-shadow:0 12px 32px -8px #0006}@supports (color:color-mix(in lab,red,red)){.ap-drag-overlay{border:1px solid color-mix(in srgb,var(--accent) 45%,transparent)}}.ap-drag-overlay{cursor:grabbing;background:var(--surface-elevated);border-radius:12px}.search-bar .ei-placeholder{padding:0 12px}.ap-search-sticky{z-index:20;background:var(--surface-elevated);-webkit-backdrop-filter:saturate(180%)blur(10px);border-bottom:1px solid var(--border);margin-bottom:.75rem;padding-bottom:.5rem;position:sticky;top:0}.status-card-stepper{flex-wrap:wrap;align-items:center;gap:.15rem;min-width:0;display:flex}.status-card{border:1px solid var(--border-strong);background:var(--surface);opacity:.75;border-radius:.5rem;align-items:center;gap:.3rem;min-width:0;padding:.3rem .5rem;display:inline-flex}.status-card.status-card-current{opacity:1;border-width:2px;box-shadow:0 0 0 1px}@supports (color:color-mix(in lab,red,red)){.status-card.status-card-current{box-shadow:0 0 0 1px color-mix(in srgb,currentColor 35%,transparent)}}.status-card-icon{flex-shrink:0;width:.9rem;height:.9rem}.status-card-label{text-transform:capitalize;white-space:nowrap;font-size:.7rem;font-weight:700}.status-card-time{opacity:.8;white-space:nowrap;font-size:.62rem;font-weight:500}.status-card-time-initial{opacity:.6;font-style:italic}.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{background:var(--surface)}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{background:color-mix(in srgb,var(--surface) 60%,transparent)}}.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{border-color:color-mix(in srgb,currentColor 40%,var(--border-strong))}}.status-card.status-in-progress{background:#f59e0b24}@supports (color:color-mix(in lab,red,red)){.status-card.status-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 14%,transparent)}}.status-card.status-in-progress{color:var(--color-status-in-progress)}.status-card.status-paused{background:#ea580c24}@supports (color:color-mix(in lab,red,red)){.status-card.status-paused{background:color-mix(in srgb,var(--color-status-paused) 14%,transparent)}}.status-card.status-paused{color:var(--color-status-paused)}.status-card.status-done{background:#22c55e29}@supports (color:color-mix(in lab,red,red)){.status-card.status-done{background:color-mix(in srgb,var(--color-status-done) 16%,transparent)}}.status-card.status-done{color:var(--color-status-done)}.status-card.status-blocked{background:#ef444429}@supports (color:color-mix(in lab,red,red)){.status-card.status-blocked{background:color-mix(in srgb,var(--color-status-blocked) 16%,transparent)}}.status-card.status-blocked{color:var(--color-status-blocked)}.status-card.status-planned{background:#0ea5e924}@supports (color:color-mix(in lab,red,red)){.status-card.status-planned{background:color-mix(in srgb,var(--color-status-planned) 14%,transparent)}}.status-card.status-planned{color:var(--color-status-planned)}.status-card.status-draft{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft{background:color-mix(in srgb,var(--color-status-draft) 14%,transparent)}}.status-card.status-draft{color:var(--color-status-draft)}.status-card.status-discovery{background:#6366f124}@supports (color:color-mix(in lab,red,red)){.status-card.status-discovery{background:color-mix(in srgb,var(--color-status-discovery) 14%,transparent)}}.status-card.status-discovery{color:var(--color-status-discovery)}.status-card.status-canceled{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-card.status-canceled{background:color-mix(in srgb,var(--color-status-canceled) 14%,transparent)}}.status-card.status-canceled{color:var(--color-status-canceled)}.status-card.status-rejected{background:#f43f5e24}@supports (color:color-mix(in lab,red,red)){.status-card.status-rejected{background:color-mix(in srgb,var(--color-status-rejected) 14%,transparent)}}.status-card.status-rejected{color:var(--color-status-rejected)}.status-card.status-deferred{background:#8b5cf624}@supports (color:color-mix(in lab,red,red)){.status-card.status-deferred{background:color-mix(in srgb,var(--color-status-deferred) 14%,transparent)}}.status-card.status-deferred{color:var(--color-status-deferred)}.status-card.status-waiting{background:#64748b24}@supports (color:color-mix(in lab,red,red)){.status-card.status-waiting{background:color-mix(in srgb,var(--color-status-waiting) 14%,transparent)}}.status-card.status-waiting{color:var(--color-status-waiting)}.status-card.status-card-future{opacity:.55;border-style:dashed!important;border-color:var(--border-strong)!important;color:var(--text-subtle)!important;background:0 0!important}.status-card.status-card-future .status-card-icon{opacity:.6}.status-stepper{align-items:flex-start;gap:0;padding:.9rem 1rem .7rem;display:flex;overflow-x:auto}.status-step{flex-direction:column;flex:1 1 0;align-items:center;gap:.45rem;min-width:5.5rem;display:flex;position:relative}.status-step-label{text-align:center;white-space:nowrap;letter-spacing:.01em;font-size:.68rem;font-weight:700;line-height:1.25}.status-step-date{font-variant-numeric:tabular-nums;color:var(--text-subtle);text-align:center;white-space:nowrap;margin-top:.1rem;font-size:.58rem;line-height:1.2}.status-step--current .status-step-date{color:var(--text-muted)}.status-node{z-index:1;border-radius:9999px;flex-shrink:0;place-items:center;width:2rem;height:2rem;transition:background .2s,box-shadow .2s,border-color .2s;display:grid;position:relative}.status-node-icon{width:1rem;height:1rem}.status-step--completed .status-node{border:2px solid var(--step-color);background:0 0}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-node{border:2px solid color-mix(in srgb,var(--step-color) 45%,transparent)}}.status-step--completed .status-node{color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-node{color:color-mix(in srgb,var(--step-color) 70%,var(--text))}}.status-step--completed .status-step-label{color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-step-label{color:color-mix(in srgb,var(--step-color) 70%,var(--text))}}.status-step--current .status-node{border:2px solid var(--step-color);color:var(--step-color);box-shadow:0 0 0 4px var(--step-color);background:0 0}@supports (color:color-mix(in lab,red,red)){.status-step--current .status-node{box-shadow:0 0 0 4px color-mix(in srgb,var(--step-color) 16%,transparent)}}.status-step--current .status-step-label{color:var(--text);font-weight:800}.status-step--pending .status-node{background:var(--surface);border:2px dashed var(--border-strong);color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--pending .status-node{color:color-mix(in srgb,var(--step-color) 45%,var(--text-subtle))}}.status-step--pending .status-step-label{color:var(--text-subtle)}.status-connector{z-index:0;width:calc(100% - 2rem);height:2px;position:absolute;top:1rem;left:calc(1rem - 50%);transform:translateY(-1px)}.status-connector--traveled{background:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-connector--traveled{background:color-mix(in srgb,var(--step-color) 50%,transparent)}}.status-connector--pending{background:repeating-linear-gradient(90deg,var(--border-strong) 0 5px,transparent 5px 10px)}@media(max-width:640px){.status-step{min-width:4.2rem}.status-step-label{font-size:.62rem}.status-node{width:1.7rem;height:1.7rem}.status-node-icon{width:.85rem;height:.85rem}.status-connector{width:calc(100% - 1.7rem);top:.85rem;left:calc(.85rem - 50%)}}.checklist-num{background:var(--text-subtle);border-radius:.3rem;justify-content:center;align-items:center;min-width:1.6rem;padding:.05rem .3rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.checklist-num{background:color-mix(in srgb,var(--text-subtle) 12%,transparent)}}.checklist-num{color:var(--text-subtle);font-variant-numeric:tabular-nums;letter-spacing:.02em;text-transform:uppercase;margin-right:.15rem;font-size:.62rem;font-weight:800}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Agent Plan</title>
7
7
  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='13' fill='%237b68ee'/%3E%3Ctext x='16' y='17' text-anchor='middle' dominant-baseline='middle' font-size='16' font-weight='bold' fill='white'%3EA%3C/text%3E%3C/svg%3E" />
8
- <script type="module" crossorigin src="/assets/index-CmsfDpZ0.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-DKmMhG5Y.css">
8
+ <script type="module" crossorigin src="/assets/index-BGDVWyuF.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-Cul19VdD.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700&display=swap";/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-700:oklch(50% .134 242.749);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-status-draft:#94a3b8;--color-status-discovery:#6366f1;--color-status-planned:#0ea5e9;--color-status-in-progress:#f59e0b;--color-status-paused:#ea580c;--color-status-done:#22c55e;--color-status-blocked:#ef4444;--color-status-canceled:#94a3b8;--color-status-waiting:#64748b;--color-status-deferred:#8b5cf6;--color-status-rejected:#f43f5e;--color-status-started:#6366f1;--color-status-closed:#0d9488}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.top-0{top:0}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:0}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[150\]{z-index:150}.z-\[200\]{z-index:200}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-1{margin-block:var(--spacing)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\[32dvh\]{max-height:32dvh}.max-h-\[184px\]{max-height:184px}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.min-h-0{min-height:0}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-52{width:calc(var(--spacing) * 52)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-\[7\.5rem\]{min-width:7.5rem}.min-w-\[40rem\]{min-width:40rem}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing) * 28)}.\[scrollbar-width\:thin\]{scrollbar-width:thin}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[3\.75rem_minmax\(0\,1fr\)_2rem\]{grid-template-columns:3.75rem minmax(0,1fr) 2rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.self-end{align-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[8px\]{border-radius:8px}.rounded-\[9px\]{border-radius:9px}.rounded-\[10px\]{border-radius:10px}.rounded-\[12px\]{border-radius:12px}.rounded-\[14px\]{border-radius:14px}.rounded-\[16px\]{border-radius:16px}.rounded-\[18px\]{border-radius:18px}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color\:color-mix\(in_srgb\,var\(--color-status-done\)_0\%\,transparent\)\]{border-color:#0000}@supports (color:color-mix(in lab,red,red)){.border-\[color\:color-mix\(in_srgb\,var\(--color-status-done\)_0\%\,transparent\)\]{border-color:color-mix(in srgb,var(--color-status-done) 0%,transparent)}}.border-\[var\(--accent\)\],.border-\[var\(--accent\)\]\/50{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--accent\)\]\/50{border-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--border-strong\)\]{border-color:var(--border-strong)}.border-\[var\(--color-status-done\)\]{border-color:var(--color-status-done)}.border-\[var\(--danger-soft\)\]{border-color:var(--danger-soft)}.border-\[var\(--text-muted\)\]{border-color:var(--text-muted)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/30{border-color:color-mix(in oklab,var(--color-rose-500) 30%,transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/30{border-color:color-mix(in oklab,var(--color-sky-500) 30%,transparent)}}.border-transparent{border-color:#0000}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_8\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 8%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_10\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_10\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 10%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_12\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 12%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_16\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_16\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 16%,transparent)}}.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_18\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color\:color-mix\(in_srgb\,var\(--accent\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 18%,transparent)}}.bg-\[var\(--accent\)\],.bg-\[var\(--accent\)\]\/5{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--accent\)\]\/5{background-color:color-mix(in oklab,var(--accent) 5%,transparent)}}.bg-\[var\(--accent-soft\)\]{background-color:var(--accent-soft)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--danger-soft\)\],.bg-\[var\(--danger-soft\)\]\/50{background-color:var(--danger-soft)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--danger-soft\)\]\/50{background-color:color-mix(in oklab,var(--danger-soft) 50%,transparent)}}.bg-\[var\(--surface\)\]{background-color:var(--surface)}.bg-\[var\(--surface-card\)\]{background-color:var(--surface-card)}.bg-\[var\(--surface-elevated\)\],.bg-\[var\(--surface-elevated\)\]\/95{background-color:var(--surface-elevated)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--surface-elevated\)\]\/95{background-color:color-mix(in oklab,var(--surface-elevated) 95%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-current{background-color:currentColor}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-\[repeating-linear-gradient\(135deg\,var\(--text-muted\)_0_1px\,transparent_1px_3px\)\]{background-image:repeating-linear-gradient(135deg,var(--text-muted) 0 1px,transparent 1px 3px)}.fill-\[var\(--text-subtle\)\]{fill:var(--text-subtle)}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1{padding-left:var(--spacing)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.95em\]{font-size:.95em}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--color-status-blocked\)\]{color:var(--color-status-blocked)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-subtle\)\]{color:var(--text-subtle)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--accent\)\]{accent-color:var(--accent)}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[color\:color-mix\(in_srgb\,var\(--accent\)_55\%\,transparent\)\]{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.ring-\[color\:color-mix\(in_srgb\,var\(--accent\)_55\%\,transparent\)\]{--tw-ring-color:color-mix(in srgb,var(--accent) 55%,transparent)}}.ring-\[var\(--accent\)\]{--tw-ring-color:var(--accent)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[contain\:inline-size\]{contain:inline-size}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media(hover:hover){.group-hover\:border-\[var\(--accent\)\]:is(:where(.group):hover *){border-color:var(--accent)}.group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *){color:var(--accent)}}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-\[var\(--accent\)\]:hover{border-color:var(--accent)}.hover\:bg-\[color-mix\(in_srgb\,var\(--danger-soft\)_88\%\,black_12\%\)\]:hover{background-color:var(--danger-soft)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--danger-soft\)_88\%\,black_12\%\)\]:hover{background-color:color-mix(in srgb,var(--danger-soft) 88%,black 12%)}}.hover\:bg-\[var\(--accent\)\]:hover{background-color:var(--accent)}.hover\:bg-\[var\(--accent-hover\)\]:hover{background-color:var(--accent-hover)}.hover\:bg-\[var\(--accent-soft\)\]:hover{background-color:var(--accent-soft)}.hover\:bg-\[var\(--surface-card\)\]:hover{background-color:var(--surface-card)}.hover\:bg-\[var\(--surface-elevated\)\]:hover,.hover\:bg-\[var\(--surface-elevated\)\]\/65:hover{background-color:var(--surface-elevated)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--surface-elevated\)\]\/65:hover{background-color:color-mix(in oklab,var(--surface-elevated) 65%,transparent)}}.hover\:bg-\[var\(--surface-hover\)\]\/60:hover{background-color:var(--surface-hover)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--surface-hover\)\]\/60:hover{background-color:color-mix(in oklab,var(--surface-hover) 60%,transparent)}}.hover\:bg-\[var\(--surface-strong\)\]:hover{background-color:var(--surface-strong)}.hover\:bg-rose-500\/10:hover{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-rose-500\/10:hover{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.hover\:text-\[var\(--accent\)\]:hover{color:var(--accent)}.hover\:text-\[var\(--text\)\]:hover{color:var(--text)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}}.focus-visible\:bg-\[var\(--surface-hover\)\]\/60:focus-visible{background-color:var(--surface-hover)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-\[var\(--surface-hover\)\]\/60:focus-visible{background-color:color-mix(in oklab,var(--surface-hover) 60%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--accent\)\]:focus-visible{--tw-ring-color:var(--accent)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[var\(--surface\)\]:focus-visible{--tw-ring-offset-color:var(--surface)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-60:disabled{opacity:.6}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media(min-width:40rem){.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:h-4{height:calc(var(--spacing) * 4)}.sm\:h-8{height:calc(var(--spacing) * 8)}.sm\:h-9{height:calc(var(--spacing) * 9)}.sm\:min-h-8{min-height:calc(var(--spacing) * 8)}.sm\:min-h-9{min-height:calc(var(--spacing) * 9)}.sm\:min-h-11{min-height:calc(var(--spacing) * 11)}.sm\:w-4{width:calc(var(--spacing) * 4)}.sm\:w-9{width:calc(var(--spacing) * 9)}.sm\:w-auto{width:auto}.sm\:max-w-full{max-width:100%}.sm\:flex-1{flex:1}.sm\:shrink-0{flex-shrink:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[1fr_1fr_auto\]{grid-template-columns:1fr 1fr auto}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sm\:rounded-\[10px\]{border-radius:10px}.sm\:rounded-\[12px\]{border-radius:12px}.sm\:rounded-\[14px\]{border-radius:14px}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}.sm\:pl-4{padding-left:calc(var(--spacing) * 4)}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-\[10px\]{font-size:10px}}@media(min-width:48rem){.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:max-h-\[calc\(100vh-3rem\)\]{max-height:calc(100vh - 3rem)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_200px_auto_auto\]{grid-template-columns:minmax(0,1fr) 200px auto auto}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:justify-end{justify-content:flex-end}.md\:gap-6{gap:calc(var(--spacing) * 6)}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:p-8{padding:calc(var(--spacing) * 8)}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:contents{display:contents}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,150px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,150px) 124px 44px 44px}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,168px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,168px) 124px 44px 44px}.lg\:items-center{align-items:center}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:block{display:block}.xl\:contents{display:contents}.xl\:hidden{display:none}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,132px\)_minmax\(0\,152px\)_124px_44px_44px\]{grid-template-columns:minmax(0,1fr) minmax(0,132px) minmax(0,152px) 124px 44px 44px}.xl\:items-center{align-items:center}}@media(prefers-color-scheme:dark){.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-rose-400{color:var(--color-rose-400)}.dark\:text-sky-400{color:var(--color-sky-400)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-scrollbar\]\:h-1\.5::-webkit-scrollbar{height:calc(var(--spacing) * 1.5)}}:root{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--radius-panel:24px;--radius-card:20px;--radius-input:14px;--container-width:1180px;--surface-blur:18px;--bg-base:#f8fafc;--bg-gradient-a:#3b82f62e;--bg-gradient-b:#8b5cf629;--surface:#ffffffc2;--surface-strong:#ffffffe6;--surface-elevated:#fffffffa;--border:#94a3b838;--border-strong:#94a3b857;--text:#0f172a;--text-muted:#475569;--text-subtle:#64748b;--accent:#6366f1;--accent-soft:#6366f124;--accent-hover:#4f46e5;--danger-soft:#ef44441f;--color-entity-feature:#8b5cf6;--color-entity-phase:#06b6d4;--color-entity-task:#10b981;--shadow-panel:0 20px 60px -24px #0f172a38;--shadow-card:0 12px 30px -18px #0f172a2e;color-scheme:light}[data-theme=dark]{--bg-base:#08111f;--bg-gradient-a:#3b82f61f;--bg-gradient-b:#8b5cf624;--surface:#0f172abd;--surface-strong:#0f172ae0;--surface-elevated:#0f172af5;--border:#94a3b824;--border-strong:#94a3b847;--text:#f8fafc;--text-muted:#94a3b8;--text-subtle:#64748b;--accent:#818cf8;--accent-soft:#818cf829;--accent-hover:#6366f1;--danger-soft:#ef44442e;--color-entity-feature:#a78bfa;--color-entity-phase:#22d3ee;--color-entity-task:#34d399;--shadow-panel:0 20px 60px -24px #0009;--shadow-card:0 12px 30px -18px #0000006b;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font-sans);color:var(--text);background-color:var(--bg-base);background-image:radial-gradient(50% 55% at 0% 0%,var(--bg-gradient-a) 0%,transparent 70%),radial-gradient(42% 48% at 100% 0%,var(--bg-gradient-b) 0%,transparent 64%);-webkit-font-smoothing:antialiased;background-attachment:fixed;margin:0;line-height:1.5}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}.page-shell{min-height:100vh}.page-container{width:min(100% - 3rem,var(--container-width));margin-inline:auto}.grid>*,.formatted-text{min-width:0}.formatted-text p,.formatted-text li,.formatted-text blockquote,.formatted-text a,.formatted-text code{overflow-wrap:anywhere}.surface-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-panel);-webkit-backdrop-filter:blur(var(--surface-blur)) saturate(140%);box-shadow:var(--shadow-panel)}.surface-card{background:var(--surface-strong);border-radius:var(--radius-card);-webkit-backdrop-filter:blur(14px)saturate(130%);box-shadow:var(--shadow-card)}.field-control{border-radius:var(--radius-input);border:1px solid var(--border-strong);background:var(--surface-elevated);width:100%;min-height:48px;color:var(--text);outline:none;padding:.75rem .95rem}.field-control:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field-textarea{resize:vertical;min-height:120px}.status-chip{border:1px solid var(--border-strong);letter-spacing:.02em;text-transform:capitalize;border-radius:999px;align-items:center;gap:.35rem;padding:.25rem .65rem;font-size:.72rem;font-weight:700;display:inline-flex}.status-draft{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-draft{background:color-mix(in srgb,var(--color-status-draft) 14%,transparent)}}.status-draft{color:var(--color-status-draft)}.status-discovery{background:#6366f124}@supports (color:color-mix(in lab,red,red)){.status-discovery{background:color-mix(in srgb,var(--color-status-discovery) 14%,transparent)}}.status-discovery{color:var(--color-status-discovery)}.status-planned{background:#0ea5e924}@supports (color:color-mix(in lab,red,red)){.status-planned{background:color-mix(in srgb,var(--color-status-planned) 14%,transparent)}}.status-planned{color:var(--color-status-planned)}.status-in-progress{background:#f59e0b29}@supports (color:color-mix(in lab,red,red)){.status-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 16%,transparent)}}.status-in-progress{color:var(--color-status-in-progress)}.status-paused{background:#ea580c24}@supports (color:color-mix(in lab,red,red)){.status-paused{background:color-mix(in srgb,var(--color-status-paused) 14%,transparent)}}.status-paused{color:var(--color-status-paused)}.status-done{background:#22c55e29}@supports (color:color-mix(in lab,red,red)){.status-done{background:color-mix(in srgb,var(--color-status-done) 16%,transparent)}}.status-done{color:var(--color-status-done)}.status-blocked{background:#ef444426}@supports (color:color-mix(in lab,red,red)){.status-blocked{background:color-mix(in srgb,var(--color-status-blocked) 15%,transparent)}}.status-blocked{color:var(--color-status-blocked)}.status-canceled{background:#94a3b81f}@supports (color:color-mix(in lab,red,red)){.status-canceled{background:color-mix(in srgb,var(--color-status-canceled) 12%,transparent)}}.status-canceled{color:var(--color-status-canceled)}.status-rejected{background:#f43f5e1f}@supports (color:color-mix(in lab,red,red)){.status-rejected{background:color-mix(in srgb,var(--color-status-rejected) 12%,transparent)}}.status-rejected{color:var(--color-status-rejected)}.status-deferred{background:#8b5cf61f}@supports (color:color-mix(in lab,red,red)){.status-deferred{background:color-mix(in srgb,var(--color-status-deferred) 12%,transparent)}}.status-deferred{color:var(--color-status-deferred)}.status-waiting{background:#64748b1f}@supports (color:color-mix(in lab,red,red)){.status-waiting{background:color-mix(in srgb,var(--color-status-waiting) 12%,transparent)}}.status-waiting{color:var(--color-status-waiting)}.status-started{background:#6366f11a}@supports (color:color-mix(in lab,red,red)){.status-started{background:color-mix(in srgb,var(--color-status-started) 10%,transparent)}}.status-started{color:var(--color-status-started)}.status-closed{background:#0d94881f}@supports (color:color-mix(in lab,red,red)){.status-closed{background:color-mix(in srgb,var(--color-status-closed) 12%,transparent)}}.status-closed{color:var(--color-status-closed)}.status-pattern-dashed{border-style:dashed;border-color:#6366f1b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed{border-color:color-mix(in srgb,var(--color-status-started) 70%,transparent)}}.status-pattern-dashed-planned{border-style:dashed;border-color:#0ea5e9a6}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-planned{border-color:color-mix(in srgb,var(--color-status-planned) 65%,transparent)}}.status-pattern-dashed-started{border-style:dashed;border-color:#6366f1b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-started{border-color:color-mix(in srgb,var(--color-status-started) 70%,transparent)}}.status-pattern-dashed-paused{border-style:dashed;border-color:#ea580cb3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-paused{border-color:color-mix(in srgb,var(--color-status-paused) 70%,transparent)}}.status-pattern-dashed-waiting{border-style:dashed;border-color:#64748bb3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-waiting{border-color:color-mix(in srgb,var(--color-status-waiting) 70%,transparent)}}.status-pattern-dashed-deferred{border-style:dashed;border-color:#8b5cf6b3}@supports (color:color-mix(in lab,red,red)){.status-pattern-dashed-deferred{border-color:color-mix(in srgb,var(--color-status-deferred) 70%,transparent)}}@keyframes ap-status-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--color-status-in-progress) 40%,transparent)}50%{box-shadow:0 0 0 3px color-mix(in srgb,var(--color-status-in-progress) 12%,transparent)}}.status-pattern-pulse{animation:2s ease-in-out infinite ap-status-pulse}.status-pattern-stripe{background-image:repeating-linear-gradient(135deg,#0000 0,#0000 10px,#0d948814 10px,#0d948814 20px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-stripe{background-image:repeating-linear-gradient(135deg,transparent 0 10px,color-mix(in srgb,var(--color-status-closed) 8%,transparent) 10px 20px)}}.status-pattern-hatch{background-image:repeating-linear-gradient(45deg,#0000 0,#0000 8px,#94a3b814 8px,#94a3b814 16px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-hatch{background-image:repeating-linear-gradient(45deg,transparent 0 8px,color-mix(in srgb,var(--color-status-canceled) 8%,transparent) 8px 16px)}}.status-pattern-crosshatch{background-image:repeating-linear-gradient(45deg,#0000 0,#0000 4px,#f43f5e14 4px,#f43f5e14 8px),repeating-linear-gradient(-45deg,#0000 0,#0000 4px,#f43f5e14 4px,#f43f5e14 8px)}@supports (color:color-mix(in lab,red,red)){.status-pattern-crosshatch{background-image:repeating-linear-gradient(45deg,transparent 0 4px,color-mix(in srgb,var(--color-status-rejected) 8%,transparent) 4px 8px),repeating-linear-gradient(-45deg,transparent 0 4px,color-mix(in srgb,var(--color-status-rejected) 8%,transparent) 4px 8px)}}@media(prefers-reduced-motion:reduce){.status-pattern-pulse{animation:none}}.plan-description{background:var(--surface-elevated);border-left:3px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.plan-description{border-left:3px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.plan-description{border-radius:var(--radius-card);color:var(--text);padding:.85rem 1rem}.plan-description p{margin:0}.entity-badge{border:1px solid var(--border-strong);letter-spacing:.03em;text-transform:uppercase;border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .7rem;font-size:.72rem;font-weight:800;display:inline-flex}.entity-badge--feature{color:var(--color-entity-feature);background:var(--color-entity-feature)}@supports (color:color-mix(in lab,red,red)){.entity-badge--feature{background:color-mix(in srgb,var(--color-entity-feature) 14%,transparent)}}.entity-badge--phase{color:var(--color-entity-phase);background:var(--color-entity-phase)}@supports (color:color-mix(in lab,red,red)){.entity-badge--phase{background:color-mix(in srgb,var(--color-entity-phase) 14%,transparent)}}.entity-badge--task{color:var(--color-entity-task);background:var(--color-entity-task)}@supports (color:color-mix(in lab,red,red)){.entity-badge--task{background:color-mix(in srgb,var(--color-entity-task) 14%,transparent)}}.entity-badge--requirement{color:var(--accent);background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.entity-badge--requirement{background:color-mix(in srgb,var(--accent) 14%,transparent)}}.entity-link--feature{color:var(--color-entity-feature)}.entity-link--phase{color:var(--color-entity-phase)}.entity-link--task{color:var(--color-entity-task)}.entity-path-badge{border:1px solid var(--border-strong);background:var(--surface-elevated);font-variant-numeric:tabular-nums;border-radius:7px;align-items:stretch;line-height:1;display:inline-flex;overflow:hidden}.entity-path-seg{letter-spacing:.02em;align-items:center;padding:.24rem .5rem;font-size:.72rem;font-weight:800;display:inline-flex}.entity-path-seg--feature{color:var(--color-entity-feature);background:var(--color-entity-feature)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--feature{background:color-mix(in srgb,var(--color-entity-feature) 14%,transparent)}}.entity-path-seg--phase{color:var(--color-entity-phase);background:var(--color-entity-phase)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--phase{background:color-mix(in srgb,var(--color-entity-phase) 14%,transparent)}}.entity-path-seg--task{color:var(--color-entity-task);background:var(--color-entity-task)}@supports (color:color-mix(in lab,red,red)){.entity-path-seg--task{background:color-mix(in srgb,var(--color-entity-task) 14%,transparent)}}.entity-path-seg--link{cursor:pointer;text-decoration:none;transition:filter .15s,transform 50ms}.entity-path-seg--link:hover{filter:brightness(1.15)}.entity-path-seg--link:active{transform:translateY(1px)}.entity-path-seg--link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.entity-path-sep{color:var(--text-subtle);align-items:center;padding-inline:.2rem;font-size:.72rem;font-weight:700;display:inline-flex}.entity-detail-identity{border-inline-start:4px solid var(--entity-detail-color);border-radius:0 var(--radius-control) var(--radius-control) 0;background:linear-gradient(90deg,var(--entity-detail-color),transparent 72%);margin-top:.9rem;padding:.35rem .8rem .45rem}@supports (color:color-mix(in lab,red,red)){.entity-detail-identity{background:linear-gradient(90deg,color-mix(in srgb,var(--entity-detail-color) 10%,transparent),transparent 72%)}}.entity-detail-identity--feature{--entity-detail-color:var(--color-entity-feature)}.entity-detail-identity--phase{--entity-detail-color:var(--color-entity-phase)}.entity-detail-identity--task{--entity-detail-color:var(--color-entity-task)}.entity-detail-kind{color:var(--entity-detail-color);letter-spacing:.01em;align-items:center;gap:.45rem;margin:0;font-size:clamp(1.05rem,1.7vw,1.3rem);font-weight:900;display:flex}.entity-detail-title{min-width:0;color:var(--text);letter-spacing:-.035em;overflow-wrap:anywhere;margin:.2rem 0 0;font-size:clamp(1.65rem,3.1vw,2.35rem);font-weight:900;line-height:1.08}.entity-detail-subtitle{max-width:64rem;color:var(--text-muted);margin:.55rem 0 0}.detail-metrics-row{scrollbar-width:thin;gap:.5rem;padding-block:.1rem .35rem;display:flex;overflow-x:auto}.detail-metric{border:1px solid var(--border);border-radius:calc(var(--radius-control) + 1px);background:var(--surface-card);flex-direction:column;flex:1 0 6.75rem;justify-content:center;min-width:6.75rem;min-height:3.5rem;padding:.55rem .7rem;display:flex}.detail-metric--wide{flex-grow:1.6;flex-basis:13rem;min-width:13rem}.detail-metric-label{color:var(--text-subtle);letter-spacing:.12em;text-transform:uppercase;font-size:.62rem;font-weight:800;line-height:1.15}.detail-metric-value{color:var(--text);overflow-wrap:anywhere;margin-top:.28rem;font-size:.95rem;font-weight:850;line-height:1.15}.copyable-id{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;border-radius:8px;padding:0}.copyable-id:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.copyable-id__icon{opacity:.4;align-items:center;transition:opacity .15s;display:inline-flex}.copyable-id:hover .copyable-id__icon,.copyable-id:focus-visible .copyable-id__icon{opacity:1}.handoff-badge{border:1px solid var(--border);background:var(--surface-card);color:var(--text-muted);border-radius:9999px;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;line-height:1.1;text-decoration:none;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.handoff-badge:hover{background:var(--surface-elevated);color:var(--text);border-color:var(--accent)}.handoff-badge svg{flex:none}.handoff-badge__label{white-space:nowrap;font-weight:500}@media(max-width:640px){:root{font-size:106.25%}}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}button:disabled,select:disabled,input:disabled,textarea:disabled{cursor:not-allowed;opacity:.6}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px}@keyframes ap-progress-glow{0%,to{box-shadow:0 0 color-mix(in srgb,var(--color-status-in-progress) 0%,transparent)}50%{box-shadow:0 0 18px -2px color-mix(in srgb,var(--color-status-in-progress) 28%,transparent)}}.ap-in-progress{background:#f59e0b12;animation:2.6s ease-in-out infinite ap-progress-glow}@supports (color:color-mix(in lab,red,red)){.ap-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 7%,transparent)}}@keyframes ap-dot-ping{0%{opacity:.85;transform:scale(1)}75%,to{opacity:0;transform:scale(2.6)}}.status-item{border-radius:10px;position:relative;overflow:hidden}.ap-progress-dot{flex:none;width:9px;height:9px;margin-inline:6px;display:inline-block;position:relative;overflow:visible}.ap-progress-dot:before{content:"";background:var(--color-status-in-progress);border-radius:999px;position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 0 8px #f59e0bb3}@supports (color:color-mix(in lab,red,red)){.ap-progress-dot:before{box-shadow:0 0 8px color-mix(in srgb,var(--color-status-in-progress) 70%,transparent)}}.ap-progress-dot:after{content:"";background:var(--color-status-in-progress);transform-origin:50%;border-radius:999px;animation:1.9s cubic-bezier(0,0,.2,1) infinite ap-dot-ping;position:absolute;top:0;right:0;bottom:0;left:0}@media(prefers-reduced-motion:reduce){.ap-in-progress{animation:none}.ap-progress-dot:after{opacity:0;animation:none}}.short-id-badge{font-family:var(--font-mono,ui-monospace, monospace);letter-spacing:.04em;color:var(--text-muted);background:var(--accent);border-radius:6px;align-items:center;padding:3px 6px;font-size:10.5px;font-weight:700;line-height:1;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.short-id-badge{background:color-mix(in srgb,var(--accent) 8%,transparent)}}.short-id-badge{border:1px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.short-id-badge{border:1px solid color-mix(in srgb,var(--accent) 24%,transparent)}}.short-id-badge{font-variant-numeric:tabular-nums}.drag-handle{width:28px;height:28px;color:var(--text-subtle);cursor:grab;touch-action:none;opacity:.6;background:0 0;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:opacity .12s,background .12s,color .12s,border-color .12s;display:inline-flex}.drag-handle:hover,.drag-handle:focus-visible{opacity:1;background:var(--surface-elevated);color:var(--text);border-color:var(--border)}.drag-handle:active{cursor:grabbing}.ap-sortable--dragging{opacity:.55;outline:2px solid var(--accent)}@supports (color:color-mix(in lab,red,red)){.ap-sortable--dragging{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.ap-sortable--dragging{outline-offset:2px;border-radius:12px}.ap-drag-overlay{border:1px solid var(--accent);box-shadow:0 12px 32px -8px #0006}@supports (color:color-mix(in lab,red,red)){.ap-drag-overlay{border:1px solid color-mix(in srgb,var(--accent) 45%,transparent)}}.ap-drag-overlay{cursor:grabbing;background:var(--surface-elevated);border-radius:12px}.search-bar .ei-placeholder{padding:0 12px}.ap-search-sticky{z-index:20;background:var(--surface-elevated);-webkit-backdrop-filter:saturate(180%)blur(10px);border-bottom:1px solid var(--border);margin-bottom:.75rem;padding-bottom:.5rem;position:sticky;top:0}.status-card-stepper{flex-wrap:wrap;align-items:center;gap:.15rem;min-width:0;display:flex}.status-card{border:1px solid var(--border-strong);background:var(--surface);opacity:.75;border-radius:.5rem;align-items:center;gap:.3rem;min-width:0;padding:.3rem .5rem;display:inline-flex}.status-card.status-card-current{opacity:1;border-width:2px;box-shadow:0 0 0 1px}@supports (color:color-mix(in lab,red,red)){.status-card.status-card-current{box-shadow:0 0 0 1px color-mix(in srgb,currentColor 35%,transparent)}}.status-card-icon{flex-shrink:0;width:.9rem;height:.9rem}.status-card-label{text-transform:capitalize;white-space:nowrap;font-size:.7rem;font-weight:700}.status-card-time{opacity:.8;white-space:nowrap;font-size:.62rem;font-weight:500}.status-card-time-initial{opacity:.6;font-style:italic}.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{background:var(--surface)}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{background:color-mix(in srgb,var(--surface) 60%,transparent)}}.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft,.status-card.status-discovery,.status-card.status-planned,.status-card.status-in-progress,.status-card.status-paused,.status-card.status-done,.status-card.status-blocked,.status-card.status-canceled,.status-card.status-rejected,.status-card.status-deferred,.status-card.status-waiting{border-color:color-mix(in srgb,currentColor 40%,var(--border-strong))}}.status-card.status-in-progress{background:#f59e0b24}@supports (color:color-mix(in lab,red,red)){.status-card.status-in-progress{background:color-mix(in srgb,var(--color-status-in-progress) 14%,transparent)}}.status-card.status-in-progress{color:var(--color-status-in-progress)}.status-card.status-paused{background:#ea580c24}@supports (color:color-mix(in lab,red,red)){.status-card.status-paused{background:color-mix(in srgb,var(--color-status-paused) 14%,transparent)}}.status-card.status-paused{color:var(--color-status-paused)}.status-card.status-done{background:#22c55e29}@supports (color:color-mix(in lab,red,red)){.status-card.status-done{background:color-mix(in srgb,var(--color-status-done) 16%,transparent)}}.status-card.status-done{color:var(--color-status-done)}.status-card.status-blocked{background:#ef444429}@supports (color:color-mix(in lab,red,red)){.status-card.status-blocked{background:color-mix(in srgb,var(--color-status-blocked) 16%,transparent)}}.status-card.status-blocked{color:var(--color-status-blocked)}.status-card.status-planned{background:#0ea5e924}@supports (color:color-mix(in lab,red,red)){.status-card.status-planned{background:color-mix(in srgb,var(--color-status-planned) 14%,transparent)}}.status-card.status-planned{color:var(--color-status-planned)}.status-card.status-draft{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-card.status-draft{background:color-mix(in srgb,var(--color-status-draft) 14%,transparent)}}.status-card.status-draft{color:var(--color-status-draft)}.status-card.status-discovery{background:#6366f124}@supports (color:color-mix(in lab,red,red)){.status-card.status-discovery{background:color-mix(in srgb,var(--color-status-discovery) 14%,transparent)}}.status-card.status-discovery{color:var(--color-status-discovery)}.status-card.status-canceled{background:#94a3b824}@supports (color:color-mix(in lab,red,red)){.status-card.status-canceled{background:color-mix(in srgb,var(--color-status-canceled) 14%,transparent)}}.status-card.status-canceled{color:var(--color-status-canceled)}.status-card.status-rejected{background:#f43f5e24}@supports (color:color-mix(in lab,red,red)){.status-card.status-rejected{background:color-mix(in srgb,var(--color-status-rejected) 14%,transparent)}}.status-card.status-rejected{color:var(--color-status-rejected)}.status-card.status-deferred{background:#8b5cf624}@supports (color:color-mix(in lab,red,red)){.status-card.status-deferred{background:color-mix(in srgb,var(--color-status-deferred) 14%,transparent)}}.status-card.status-deferred{color:var(--color-status-deferred)}.status-card.status-waiting{background:#64748b24}@supports (color:color-mix(in lab,red,red)){.status-card.status-waiting{background:color-mix(in srgb,var(--color-status-waiting) 14%,transparent)}}.status-card.status-waiting{color:var(--color-status-waiting)}.status-card.status-card-future{opacity:.55;border-style:dashed!important;border-color:var(--border-strong)!important;color:var(--text-subtle)!important;background:0 0!important}.status-card.status-card-future .status-card-icon{opacity:.6}.status-stepper{align-items:flex-start;gap:0;padding:.9rem 1rem .7rem;display:flex;overflow-x:auto}.status-step{flex-direction:column;flex:1 1 0;align-items:center;gap:.45rem;min-width:5.5rem;display:flex;position:relative}.status-step-label{text-align:center;white-space:nowrap;letter-spacing:.01em;font-size:.68rem;font-weight:700;line-height:1.25}.status-step-date{font-variant-numeric:tabular-nums;color:var(--text-subtle);text-align:center;white-space:nowrap;margin-top:.1rem;font-size:.58rem;line-height:1.2}.status-step--current .status-step-date{color:var(--text-muted)}.status-node{z-index:1;border-radius:9999px;flex-shrink:0;place-items:center;width:2rem;height:2rem;transition:background .2s,box-shadow .2s,border-color .2s;display:grid;position:relative}.status-node-icon{width:1rem;height:1rem}.status-step--completed .status-node{border:2px solid var(--step-color);background:0 0}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-node{border:2px solid color-mix(in srgb,var(--step-color) 45%,transparent)}}.status-step--completed .status-node{color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-node{color:color-mix(in srgb,var(--step-color) 70%,var(--text))}}.status-step--completed .status-step-label{color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--completed .status-step-label{color:color-mix(in srgb,var(--step-color) 70%,var(--text))}}.status-step--current .status-node{border:2px solid var(--step-color);color:var(--step-color);box-shadow:0 0 0 4px var(--step-color);background:0 0}@supports (color:color-mix(in lab,red,red)){.status-step--current .status-node{box-shadow:0 0 0 4px color-mix(in srgb,var(--step-color) 16%,transparent)}}.status-step--current .status-step-label{color:var(--text);font-weight:800}.status-step--pending .status-node{background:var(--surface);border:2px dashed var(--border-strong);color:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-step--pending .status-node{color:color-mix(in srgb,var(--step-color) 45%,var(--text-subtle))}}.status-step--pending .status-step-label{color:var(--text-subtle)}.status-connector{z-index:0;width:calc(100% - 2rem);height:2px;position:absolute;top:1rem;left:calc(1rem - 50%);transform:translateY(-1px)}.status-connector--traveled{background:var(--step-color)}@supports (color:color-mix(in lab,red,red)){.status-connector--traveled{background:color-mix(in srgb,var(--step-color) 50%,transparent)}}.status-connector--pending{background:repeating-linear-gradient(90deg,var(--border-strong) 0 5px,transparent 5px 10px)}@media(max-width:640px){.status-step{min-width:4.2rem}.status-step-label{font-size:.62rem}.status-node{width:1.7rem;height:1.7rem}.status-node-icon{width:.85rem;height:.85rem}.status-connector{width:calc(100% - 1.7rem);top:.85rem;left:calc(.85rem - 50%)}}.checklist-num{background:var(--text-subtle);border-radius:.3rem;justify-content:center;align-items:center;min-width:1.6rem;padding:.05rem .3rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.checklist-num{background:color-mix(in srgb,var(--text-subtle) 12%,transparent)}}.checklist-num{color:var(--text-subtle);font-variant-numeric:tabular-nums;letter-spacing:.02em;text-transform:uppercase;margin-right:.15rem;font-size:.62rem;font-weight:800}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}