1import{_ as C,a as S,b as $}from"./CmyYFo5J.js";import{r as z}from"./B0mzCWae.js";import{B as n,h as s,e,n as x,F as u,V as m,y as l,k as v,Y as d,l as r,Z as f,g as I,j as b,c as _,f as M,ag as R,H,a1 as P,a3 as A,Q as B,R as L,S as D}from"./9NY2bupj.js";import{_ as j}from"./Cj5sfZzc.js";import{r as y}from"./DHKMVAXa.js";import{_ as O}from"./Dhm5AIkW.js";import{r as N}from"./CXj8lVn_.js";import{r as V}from"./Cj_hJFFy.js";import{r as T}from"./CW5ZZ149.js";import{r as E}from"./CiJsCqM5.js";import{r as U}from"./n3p-bMNj.js";import{r as F}from"./minMzRlU.js";import{u as G,e as q}from"./BpLouHf7.js";import"./CYsvLvgt.js";import"./DLZxPeKZ.js";import"./BEk1ufW8.js";function W(c,o){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none","stroke-width":"1.5",viewBox:"0 0 24 24"},[e("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M3 20L21 4"})])}function Y(c,o){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none","stroke-width":"1.5",viewBox:"0 0 24 24"},[e("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M21 3.6V20.4C21 20.7314 20.7314 21 20.4 21H3.6C3.26863 21 3 20.7314 3 20.4V3.6C3 3.26863 3.26863 3 3.6 3H20.4C20.7314 3 21 3.26863 21 3.6Z"})])}function Z(c,o){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none","stroke-width":"1.5",viewBox:"0 0 24 24"},[e("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round",d:"M11.4752 2.94682C11.7037 2.53464 12.2963 2.53464 12.5248 2.94682L21.8985 19.8591C22.1202 20.259 21.831 20.75 21.3738 20.75H2.62625C2.16902 20.75 1.87981 20.259 2.10146 19.8591L11.4752 2.94682Z"})])}function K(c,o){return n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none","stroke-width":"1.5",viewBox:"0 0 24 24"},[e("path",{stroke:"currentColor","stroke-width":"1.5",d:"M9 3H3.6C3.26863 3 3 3.26863 3 3.6V20.4C3 20.7314 3.26863 21 3.6 21H9M9 3V21M9 3H15M9 21H15M15 3H20.4C20.7314 3 21 3.26863 21 3.6V20.4C21 20.7314 20.7314 21 20.4 21H15M15 3V21"})])}const Q={style:{padding:"28px 32px 32px","border-radius":"18px",background:"#fff",border:"1px solid var(--border-light)","box-shadow":"var(--shadow-md)",position:"relative",overflow:"hidden"}},J={class:"flex flex-wrap",style:{gap:"8px","margin-bottom":"14px",position:"relative","z-index":"2"}},X={class:"roadmap-lanes",style:{display:"grid","grid-template-columns":"1fr 1fr 1fr 110px",gap:"10px",position:"relative","z-index":"2"}},ee={class:"flex items-center justify-between",style:{"margin-bottom":"2px"}},te={style:{"font-size":"12.5px","font-weight":"600",color:"var(--fg-light)","letter-spacing":"-0.005em"}},ae={class:"font-mono",style:{"font-size":"9.5px",color:"var(--fg-light-subtle)","letter-spacing":"0.06em"}},ne={style:{height:"4px","border-radius":"2px",background:"rgba(10, 10, 11, 0.06)",overflow:"hidden"}},se={class:"flex flex-col",style:{gap:"6px","margin-top":"4px"}},oe={class:"flex-1",style:{"font-size":"12.5px","font-weight":"500",color:"var(--fg-light)","letter-spacing":"-0.005em","min-width":"0",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},re={key:0,class:"inline-flex items-center justify-center",style:{width:"14px",height:"14px","border-radius":"50%",background:"var(--accent)",color:"#fff"},"aria-hidden":"true"},ie=x({__name:"RoadmapDiagram",setup(c){const o=[{l:"Linear",c:"#5E6AD2"},{l:"GitHub",c:"#1F2328"},{l:"ClickUp",c:"#7B68EE"},{l:"Azure DevOps",c:"#0078D4"}],h=[{t:"Now",c:"var(--accent)",w:"85%",items:[{t:"AI auto-tagging",src:0,accent:!0},{t:"Slack v2",src:1},{t:"Bulk re-categorise",src:2}]},{t:"Next",c:"#8B5CF6",w:"55%",items:[{t:"Mobile SDK",src:3},{t:"Public webhooks",src:0}]},{t:"Later",c:"#94A3B8",w:"25%",items:[{t:"Custom embeddings",src:1}]}];return(g,t)=>(n(),s("div",Q,[t[3]||(t[3]=e("div",{"aria-hidden":"true",style:{position:"absolute",right:"-80px",top:"-80px",width:"320px",height:"320px","border-radius":"50%",background:"radial-gradient(circle, rgba(0, 179, 164, 0.08), transparent 65%)","pointer-events":"none"}},null,-1)),e("div",J,[t[0]||(t[0]=e("span",{class:"font-mono",style:{"font-size":"10px",color:"var(--fg-light-subtle)","letter-spacing":"0.08em","text-transform":"uppercase","font-weight":"600","margin-right":"8px","align-self":"center"}},"Sync from",-1)),(n(),s(u,null,m(o,a=>e("span",{key:a.l,class:"inline-flex items-center",style:{gap:"6px",padding:"5px 10px",background:"#fff",border:"1px solid var(--border-light)","border-radius":"999px","font-size":"12px","font-weight":"500",color:"var(--fg-light)","letter-spacing":"-0.005em"}},[e("span",{style:l([{width:"6px",height:"6px","border-radius":"50%"},{background:a.c}]),"aria-hidden":"true"},null,4),v(" "+d(a.l),1)])),64)),t[1]||(t[1]=e("span",{class:"font-mono inline-flex items-center",style:{"margin-left":"auto",gap:"8px",padding:"5px 12px","border-radius":"999px",background:"var(--accent-soft)",color:"var(--accent)","font-size":"10px","letter-spacing":"0.08em","text-transform":"uppercase","font-weight":"600"}},[e("span",{class:"live-dot",style:{background:"var(--accent)"}}),v(" Auto-synced ")],-1))]),e("div",X,[(n(),s(u,null,m(h,a=>e("div",{key:a.t,class:"flex flex-col",style:{padding:"14px",border:"1px solid var(--border-light)","border-radius":"12px",background:"var(--bg-light-alt)",gap:"10px","min-height":"220px"}},[e("div",ee,[e("span",te,d(a.t),1),e("span",ae,d(a.items.length)+" ITEMS",1)]),e("div",ne,[e("div",{style:l([{height:"100%","border-radius":"2px"},{width:a.w,background:a.c}])},null,4)]),e("div",se,[(n(!0),s(u,null,m(a.items,(i,p)=>(n(),s("div",{key:p,class:"flex items-center",style:l([{gap:"8px",padding:"8px 10px",background:"#fff","border-radius":"8px","box-shadow":"var(--shadow-sm)"},{border:i.accent?"1px solid rgba(0,179,164,0.30)":"1px solid var(--border-light)"}])},[e("span",{style:l([{width:"6px",height:"6px","border-radius":"50%","flex-shrink":"0"},{background:o[i.src].c}]),"aria-hidden":"true"},null,4),e("span",oe,d(i.t),1),i.accent?(n(),s("span",re,[r(f(z),{style:{width:"10px",height:"10px"},"stroke-width":"3"})])):I("",!0)],4))),128))])])),64)),t[2]||(t[2]=b('<div class="flex flex-col" style="background:var(--fg-light);color:#fff;border-radius:12px;padding:14px;justify-content:space-between;min-height:220px;position:relative;overflow:hidden;" data-v-c78bf118><div aria-hidden="true" style="position:absolute;inset:0;background:radial-gradient(circle at 50% 80%, rgba(0, 179, 164, 0.30), transparent 70%);pointer-events:none;" data-v-c78bf118></div><div style="position:relative;z-index:2;" data-v-c78bf118><div class="font-mono" style="font-size:10px;letter-spacing:0.08em;text-transform:uppercase;color:rgba(245, 245, 245, 0.55);font-weight:600;margin-bottom:6px;" data-v-c78bf118>This week</div><div style="font-size:24px;font-weight:500;letter-spacing:-0.02em;color:#fff;line-height:1;" data-v-c78bf118>14</div><div style="font-size:12px;color:rgba(245, 245, 245, 0.65);margin-top:4px;" data-v-c78bf118>shipped</div></div><div class="font-mono inline-flex items-center" style="position:relative;z-index:2;gap:6px;font-size:10px;letter-spacing:0.08em;text-transform:uppercase;color:var(--accent);font-weight:600;" data-v-c78bf118><span class="live-dot" style="background:var(--accent);" data-v-c78bf118></span> Live </div></div>',1))])]))}}),le=Object.assign(_(ie,[["__scopeId","data-v-c78bf118"]]),{__name:"RoadmapDiagram"}),de=x({__name:"RoadmapSync",setup(c){const o=[{tint:"violet",label:"Dev-tool sync",title:"Status, owners, dates: synced.",body:"When a Linear issue moves to In Progress, the public roadmap updates instantly. Same for GitHub, ClickUp, DevOps.",cta:"See all integrations",href:"/integrations"},{tint:"teal",label:"Public / private",title:"Share what matters.",body:"Public lanes build trust; private lanes plan with your team. Toggle per item and never expose what's not ready.",cta:"Tour the demo roadmap",href:"https://demo.sleekplan.app/roadmap"},{tint:"amber",label:"Subscribers",title:"Users hear when it ships.",body:"Every public roadmap item is linked back to the feedback that asked for it. Subscribers get notified the moment status changes.",cta:"Learn about subscribers",href:"#",badge:"Loop"}];
1return(h,g)=>{const t=le,a=j;return n(),M(a,{eyebrow:"Sync with your dev tools","headline-prefix":"Your tools ship it.","headline-accent":"Your roadmap shows it.",dek:"Connect Linear, GitHub, ClickUp or Azure DevOps and watch statuses flow automatically into your public roadmap, without anyone copy-pasting between tools.",cards:o},{default:R(()=>[r(t)]),_:1})}}}),ce=Object.assign(de,{__name:"RoadmapSync"}),pe={style:{background:"var(--bg-light-alt)","padding-top":"96px","padding-bottom":"96px"}},ue={class:"container"},me={class:"reveal status-map","data-delay":"1"},he={class:"col-head head-left"},ge={class:"status-name min-w-0 flex-1 truncate"},fe={class:"font-mono inline-flex items-center shrink-0",style:{gap:"5px",padding:"2px 7px","border-radius":"999px",background:"var(--bg-light-alt)",color:"var(--fg-light-subtle)","font-size":"9.5px","letter-spacing":"0.06em","text-transform":"uppercase"}},ve={class:"status-count font-mono shrink-0"},xe={class:"inline-flex items-center justify-center",style:{width:"30px",height:"30px","border-radius":"50%",background:"#fff",border:"1px solid var(--border-light-strong)",color:"var(--fg-light-subtle)"}},be={class:"status-name min-w-0 flex-1 truncate"},ye={class:"status-count font-mono shrink-0"},_e=x({__name:"RoadmapInternalStatus",setup(c){const o=[{name:"Planned",color:"#8B5CF6",lanes:[{internal:"Scoping",count:6}]},{name:"In progress",color:"#F59E0B",lanes:[{internal:"In design",count:4},{internal:"In review",count:3}]}],h=g=>g.lanes.reduce((t,a)=>t+a.count,0);return(g,t)=>(n(),s("section",pe,[e("div",ue,[t[3]||(t[3]=b('<div class="reveal" style="margin-bottom:48px;max-width:720px;" data-v-415ddcd1><div class="inline-flex items-center font-mono" style="gap:8px;font-size:11px;letter-spacing:0.10em;text-transform:uppercase;color:var(--fg-light-subtle);margin-bottom:20px;" data-v-415ddcd1><span class="rounded-full" style="width:6px;height:6px;background:var(--accent);" aria-hidden="true" data-v-415ddcd1></span> Internal statuses </div><h2 style="font-size:clamp(32px, 4vw, 52px);line-height:1.04;letter-spacing:-0.028em;font-weight:500;margin:0;color:var(--fg-light);text-wrap:balance;" data-v-415ddcd1> One promise in public. <span style="color:var(--fg-light-muted);" data-v-415ddcd1>All the detail in private.</span></h2><p style="font-size:16px;line-height:1.55;color:var(--fg-light-muted);margin:20px 0 0;letter-spacing:-0.005em;max-width:58ch;" data-v-415ddcd1> A public status is a promise your customer reads. "In design" and "In review" are not promises, they're your week. Mark a status internal, pick the public one it shows as, and everyone outside your team sees only that. </p></div>',1)),e("div",me,[e("div",he,[r(f(y),{class:"w-[11px] h-[11px]","aria-hidden":"true"}),t[0]||(t[0]=v(" What your team sees ",-1))]),(n(),s(u,null,m(o,(a,i)=>e("div",{key:`lanes-${a.name}`,class:"lane-group",style:l({gridColumn:1,gridRow:i+2})},[(n(!0),s(u,null,m(a.lanes,p=>(n(),s("div",{key:p.internal,class:"status-card flex items-center"},[e("span",{class:"rounded-full shrink-0",style:l({width:"7px",height:"7px",background:a.color}),"aria-hidden":"true"},null,4),e("span",ge,d(p.internal),1),e("span",fe,[r(f(y),{class:"w-[9px] h-[9px]","aria-hidden":"true"}),t[1]||(t[1]=v(" Internal ",-1))]),e("span",ve,d(p.count),1)]))),128))],4)),64)),e("div",{class:"status-arrow",style:l({gridColumn:2,gridRow:`2 / span ${o.length}`}),"aria-hidden":"true"},[e("span",xe,[r(f(H),{class:"w-[13px] h-[13px]"})])],4),t[2]||(t[2]=e("div",{class:"col-head head-right"},"What your customers see",-1)),(n(),s(u,null,m(o,(a,i)=>e("div",{key:`public-${a.name}`,class:"status-card public-card flex items-center",style:l({gridColumn:3,gridRow:i+2})},[e("span",{class:"rounded-full shrink-0",style:l({width:"7px",height:"7px",background:a.color}),"aria-hidden":"true"},null,4),e("span",be,d(a.name),1),e("span",ye,d(h(a)),1)],4)),64))]),t[4]||(t[4]=b('<div class="reveal rules-grid" data-delay="2" data-v-415ddcd1><div data-v-415ddcd1><div class="rule-title" data-v-415ddcd1>Many to one</div><p class="rule-body" data-v-415ddcd1> Several internal statuses can resolve to the same public one. Split your workflow as finely as you like without adding a single column to the public roadmap. </p></div><div data-v-415ddcd1><div class="rule-title" data-v-415ddcd1>One hop, never a chain</div><p class="rule-body" data-v-415ddcd1> An internal status must point at a public one, never at another internal status. Sleekplan refuses to save a chain, so there'
1s no way to leak by accident. </p></div><div data-v-415ddcd1><div class="rule-title" data-v-415ddcd1>Everywhere, not just the board</div><p class="rule-body" data-v-415ddcd1> The public status is what lands on the board, the portal, the widget, the roadmap and the email your customer gets. Your team's notifications still name the real one. </p></div></div>',1))])]))}}),we=Object.assign(_(_e,[["__scopeId","data-v-415ddcd1"]]),{__name:"RoadmapInternalStatus"}),Ne=x({__name:"roadmap",setup(c){P({title:"Product Roadmap Tool: Plan public, ship private",meta:[{name:"description",content:"Public or internal roadmaps that stay in sync with Linear, GitHub, ClickUp and Azure DevOps. No copy-paste, no stale lanes."}]}),G([q({name:"Sleekplan Roadmap",applicationCategory:"BusinessApplication",operatingSystem:"Web"})]),A();const o=[{icon:W,title:"Linear sync",description:"Issues, projects and cycles flow into roadmap lanes automatically."},{icon:B,title:"GitHub sync",description:"Milestones and PRs update status the moment they're merged."},{icon:Z,title:"ClickUp sync",description:"Tasks, sprints and statuses kept in lockstep."},{icon:Y,title:"Azure DevOps",description:"Work items and pipeline state mirrored onto the roadmap."},{icon:L,title:"Now · Next · Later",description:"Three default lanes, fully customisable per workspace."},{icon:V,title:"Custom status tags",description:"Name, colour and reorder every status to match your workflow."},{icon:K,title:"Multiple views",description:"Group by status, month or quarter. Pick the lens that fits the meeting."},{icon:T,title:"Estimated dates",description:"Set a target month/year to manage expectations transparently."},{icon:y,title:"Private lanes",description:"Plan internally; flip a switch to make a lane public when ready."},{icon:D,title:"Internal owners",description:"Assign teammates to roadmap items. Internal only, never exposed publicly."},{icon:N,title:"Status notifications",description:"Subscribers get an email the moment something moves to Shipped."},{icon:F,title:"Custom domain",description:"Host the roadmap at roadmap.your-domain.com."},{icon:E,title:"Internal statuses",description:'Track "In design" and "In review" privately; customers see the one public status you map them to.'},{icon:U,title:"Many-to-one mapping",description:"Several internal statuses can resolve to a single public promise. Your workflow stays yours."}];return(h,g)=>{const t=C,a=ce,i=we,p=S,w=$,k=O;return n(),s("div",null,[r(t,{module:"Roadmap","headline-prefix":"Plan in public,","headline-accent":"ship in private",dek:"Public or internal roadmaps that stay in sync with Linear, GitHub, ClickUp and Azure DevOps. No copy-paste.",cta1:{label:"Start free",href:"https://app.sleekplan.com/sign-up/"},cta2:{label:"See a live roadmap",href:"https://demo.sleekplan.app/roadmap"},image:"/images/roadmap-admin-hero.png","image-alt":"Sleekplan Roadmap admin view: kanban columns for Under Consideration, Planned, In Progress and In Review"}),r(a),r(i),r(p,{eyebrow:"Capabilities","headline-prefix":"Plan in public.","headline-accent":"Or in private.",items:o}),r(w,{active:"roadmap"}),r(k)])}}});export{Ne as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.