viteboard 0.1.8 → 0.1.9
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Cs=Object.defineProperty;var ks=(i,t,e)=>t in i?Cs(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var u=(i,t,e)=>ks(i,typeof t!="symbol"?t+"":t,e);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function e(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(s){if(s.ep)return;s.ep=!0;const o=e(s);fetch(s.href,o)}})();const $="/__api";class se extends Error{constructor(e,n){super(e);u(this,"currentRevision");this.name="RevisionConflictError",this.currentRevision=n}}async function P(i){var t;if(!i.ok){let e="";try{e=((t=await i.json())==null?void 0:t.error)??""}catch{}throw new Error(`${i.status} ${i.statusText}${e?` — ${e}`:""}`)}return i.json()}function D(i={}){return i}const k={async getWorkspace(){return P(await fetch(`${$}/workspace`,D()))},async removeProject(i){await P(await fetch(`${$}/workspace/project?id=${encodeURIComponent(i)}`,D({method:"DELETE"})))},async pickAndAddProject(){return P(await fetch(`${$}/workspace/pick-project`,D({method:"POST"})))},async addProject(i,t){return P(await fetch(`${$}/workspace/project`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootPath:i,label:t})})))},async ensureProjectDocsRoot(i){return(await P(await fetch(`${$}/workspace/project/docs-root`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:i})})))).root},async getTree(i){return(await P(await fetch(`${$}/tree?rootId=${encodeURIComponent(i)}`,D()))).tree},async getProjectTree(i){return(await P(await fetch(`${$}/project-tree?projectId=${encodeURIComponent(i)}`,D()))).tree},async createDocsFolder(i,t){await P(await fetch(`${$}/workspace/project/create-docs-folder`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:i,parentPath:t})})))},async readFile(i,t){return(await P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D()))).content},async readFileWithRevision(i,t){return P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D()))},async writeFile(i,t,e,n){const s=await fetch(`${$}/file`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,path:t,content:e,expectedRevision:n})}));if(s.status===409){const a=await s.json();throw new se(a.error??"File changed on disk",a.currentRevision??null)}return(await P(s)).revision},async createDirectory(i,t){await P(await fetch(`${$}/directory`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,path:t})})))},async getBoard(i,t){const e=await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D());return e.status===404?null:(await P(e)).doc},async getBoardWithRevision(i,t){const e=await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D());return e.status===404?null:P(e)},async saveBoard(i,t,e,n){const s=await fetch(`${$}/board`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,id:t,doc:e,expectedRevision:n})}));if(s.status===409){const a=await s.json();throw new se(a.error??"Board changed on disk",a.currentRevision??null)}return(await P(s)).revision},async deleteFile(i,t){await P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D({method:"DELETE"})))},async renameFile(i,t,e,n=!1){await P(await fetch(`${$}/file`,D({method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,oldPath:t,newPath:e,ignoreMissing:n})})))},async deleteBoard(i,t){await P(await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D({method:"DELETE"})))},assetUrl(i,t){return`${$}/asset?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`},async uploadAsset(i,t,e,n){return(await P(await fetch(`${$}/asset`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,name:t,base64:e,mimeType:n})})))).path},async cleanupManagedAssets(i,t=[]){return(await P(await fetch(`${$}/asset/cleanup`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,preservePaths:t})})))).removed}};function Es(i,t){const e=i.find(o=>o.type==="dir"&&o.name===t);if(!e||e.type!=="dir")return[];const n=[],s=o=>{for(const a of o)a.type==="file"?n.push(a):s(a.children)};return s(e.children),n}function Ue(i){for(const t of i){if(t.type==="file"&&t.name.endsWith(".md"))return t.path;if(t.type==="dir"){const e=Ue(t.children);if(e)return e}}return null}function wt(i){const t=[];for(const e of i.replace(/\\/g,"/").split("/")){const n=e.trim();if(!(!n||n===".")){if(n===".."){t.length>0&&t.pop();continue}t.push(n)}}return t.join("/")}function qn(i){const t=wt(i),e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}function Ss(i,t){if(/^(https?:|mailto:|tel:|#|data:)/.test(t))return t;if(t.startsWith("/"))return wt(t);const e=qn(i);return wt(e?`${e}/${t}`:t)}function Ke(i,t){const e=qn(i),n=e?e.split("/").filter(Boolean):[],s=wt(t).split("/").filter(Boolean);let o=0;for(;o<n.length&&o<s.length&&n[o]===s[o];)o++;const a=n.slice(o).map(()=>".."),r=s.slice(o);return[...a,...r].join("/")||s[s.length-1]||""}const Ts=["sticky","task","rectangle","ellipse","text","line","arrow","connector","image","screenshot","frame","templateGroup"];function ce(i){const t=new Set;for(const e of i.elements){const n=e.data.assetId;typeof n=="string"&&t.add(n)}return{...i.schemaUrl?{$schema:i.schemaUrl}:{},version:1,id:i.boardId,title:i.title,createdAt:i.createdAt,updatedAt:Date.now(),viewport:{...i.viewport},theme:i.theme,elements:i.elements,assetIds:[...t]}}function Y(i){return typeof i=="number"&&Number.isFinite(i)}function Yn(i){if(typeof i!="object"||i===null)return null;const t=i;return typeof t.id!="string"||typeof t.type!="string"||!Ts.includes(t.type)||!Y(t.x)||!Y(t.y)||!Y(t.width)||!Y(t.height)?null:{id:t.id,type:t.type,x:t.x,y:t.y,width:t.width,height:t.height,rotation:Y(t.rotation)?t.rotation:0,zIndex:Y(t.zIndex)?t.zIndex:0,locked:t.locked===!0,hidden:t.hidden===!0,createdAt:Y(t.createdAt)?t.createdAt:Date.now(),updatedAt:Y(t.updatedAt)?t.updatedAt:Date.now(),style:typeof t.style=="object"&&t.style!==null?t.style:{},data:typeof t.data=="object"&&t.data!==null?t.data:{}}}function we(i){if(typeof i!="object"||i===null)return null;const t=i;if(t.version!==1||typeof t.id!="string"||!Array.isArray(t.elements))return null;const e=[];for(const s of t.elements){const o=Yn(s);o&&e.push(o)}const n=t.viewport??{};return{...typeof t.$schema=="string"?{$schema:t.$schema}:{},version:1,id:t.id,title:typeof t.title=="string"?t.title.slice(0,200):"Imported Board",createdAt:Y(t.createdAt)?t.createdAt:Date.now(),updatedAt:Y(t.updatedAt)?t.updatedAt:Date.now(),viewport:{offsetX:Y(n.offsetX)?n.offsetX:0,offsetY:Y(n.offsetY)?n.offsetY:0,scale:Y(n.scale)&&n.scale>.01&&n.scale<=40?n.scale:1},theme:t.theme==="dark"?"dark":"light",elements:e,assetIds:Array.isArray(t.assetIds)?t.assetIds.filter(s=>typeof s=="string"):[]}}const Bs="/board-v1.schema.json",Ms=".board.json";function G(i){return i.replace(/\.board\.json$/,"")}function Is(i){return i.trim().replace(/^\/+/,"").replace(/\.board\.json$/,"")}function Rs(i,t){return re(i,t)[0]??""}function re(i,t){const e=i.trim(),n=Is(i);if(!n)return[];if(e.startsWith("./")||e.startsWith("../")){const r=t.lastIndexOf("/"),c=r===-1?"":t.slice(0,r);return[wt(c?`${c}/${n}`:n)]}if(e.startsWith("/")){const r=t.lastIndexOf("/"),c=r===-1?"":t.slice(0,r),l=wt(c?`${c}/${n}`:n),d=[n];if(l&&l!==n&&d.push(l),c){const h=c.includes("/")?c.slice(0,c.lastIndexOf("/")):"",p=wt(h?`${h}/${n}`:n);p&&!d.includes(p)&&d.push(p)}return d}const s=t.lastIndexOf("/"),o=s===-1?"":t.slice(0,s),a=wt(o?`${o}/${n}`:n);return a&&a!==n?[a,n]:[n]}function nn(i){return i.toLowerCase().replace(/[^\w\s-]/g,"").trim().replace(/\s+/g,"-").slice(0,48)||"board"}function Ls(i){return new Promise((t,e)=>{const n=new FileReader;n.onload=()=>{const s=n.result;t(s.slice(s.indexOf(",")+1))},n.onerror=()=>e(n.error),n.readAsDataURL(i)})}const J={async listIds(i){const t=await k.getTree(i);return $s(t).map(e=>G(e.path))},async list(i){const t=await this.listIds(i),e=[];for(const n of t){const s=await this.load(i,n);s&&e.push({id:n,title:s.title,elementCount:s.elements.length,updatedAt:s.updatedAt,filePath:`${n}.board.json`})}return e.sort((n,s)=>s.updatedAt-n.updatedAt),e},async load(i,t){const e=await k.getBoard(i,t);if(e)return we(e)??void 0},async save(i,t){await k.saveBoard(i,t.id,t)},async delete(i,t){await k.deleteBoard(i,t)},async move(i,t,e){const n=await this.load(i,t);if(!n)throw new Error("Board not found");const s=t.split("/").pop()??t,o=e.replace(/^\/+|\/+$/g,""),a=o?`${o}/${s}`:s;if(a===t)return t;if(new Set(await this.listIds(i)).has(a))throw new Error("A board already exists there");const c=Date.now();return await k.saveBoard(i,a,{...n,id:a,updatedAt:c}),await k.deleteBoard(i,t),a},async rename(i,t,e){const n=await this.load(i,t);if(!n)throw new Error("Board not found");const s=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",o=nn(e),a=s?`${s}/${o}`:o,r=Date.now();if(a===t)return await k.saveBoard(i,t,{...n,title:e.trim()||n.title,updatedAt:r}),t;if(new Set(await this.listIds(i)).has(a))throw new Error("A board already exists with that name");return await k.saveBoard(i,a,{...n,id:a,title:e.trim()||n.title,updatedAt:r}),await k.deleteBoard(i,t),a},async create(i,t,e,n=""){const s=new Set(await this.listIds(i)),o=nn(t);let r=`${n?`${n.replace(/^\/+|\/+$/g,"")}/`:""}${o}`;s.has(r)&&(r=`${r}-${Date.now().toString(36)}`);const c=Date.now(),l={$schema:Bs,version:1,id:r,title:t.trim()||"Untitled Board",createdAt:c,updatedAt:c,viewport:{offsetX:0,offsetY:0,scale:1},theme:e,elements:[],assetIds:[]};return await k.saveBoard(i,r,l),r},async uploadImage(i,t,e){const n=await Ls(t);return k.uploadAsset(i,e??"image.png",n,t.type)},async cleanupUnusedAssets(i,t=[]){return k.cleanupManagedAssets(i,t)}};function $s(i){const t=[],e=n=>{for(const s of n)s.type==="file"?s.name.endsWith(Ms)&&t.push(s):e(s.children)};return e(i),t}const Ps=new Set(["capabilities","assets"]);class Ds{constructor(t,e){u(this,"element");u(this,"header");u(this,"nav");u(this,"footer");u(this,"links",new Map);u(this,"collapsibles",new Map);u(this,"collapsedState",new Map);u(this,"callbacks");u(this,"contextMenu");u(this,"draggedItem");u(this,"dropExpandTimer");u(this,"dropExpandTarget");u(this,"lastWorkspace",{projects:[]});u(this,"lastTreesByRoot",new Map);u(this,"lastTreesByProject",new Map);u(this,"rawModeProjects",new Set);u(this,"lastActiveHash","");u(this,"forceNextActiveSync",!0);this.callbacks=e,this.element=document.createElement("aside"),this.element.className="sidebar",this.header=document.createElement("div"),this.header.className="sidebar-header";const n=document.createElement("a");n.className="sidebar-brand",n.href="#/",n.textContent="ViteBoard",this.header.appendChild(n),this.nav=document.createElement("nav"),this.nav.className="sidebar-nav",this.footer=document.createElement("div"),this.footer.className="sidebar-footer";const s=document.createElement("button");s.className="sidebar-add-repo",s.type="button",s.textContent="Add Repo",s.title="Add a local project root",s.addEventListener("click",()=>this.callbacks.onAddRepo()),this.footer.appendChild(s),this.element.append(this.header,this.nav,this.footer),t.appendChild(this.element),document.addEventListener("pointerdown",o=>{this.contextMenu&&(this.contextMenu.contains(o.target)||this.closeContextMenu())},!0)}refresh(t,e,n){this.lastWorkspace=t,this.lastTreesByRoot=e,n&&(this.lastTreesByProject=n),this.render()}render(){const t=this.lastWorkspace,e=this.lastTreesByRoot;if(this.lastTreesByProject,this.nav.replaceChildren(),this.links.clear(),this.collapsibles.clear(),t.projects.length===0){const s=document.createElement("div");s.className="nav-group",s.appendChild(this.groupLabel("Workspace"));const o=document.createElement("div");o.className="nav-label nav-empty-copy",o.textContent="Add a project root to discover docs folders.",s.appendChild(o),this.nav.appendChild(s)}else for(const s of t.projects)this.nav.appendChild(this.projectSection(s,e));const n=document.createElement("div");n.className="nav-group",n.appendChild(this.groupLabel("System")),n.appendChild(this.link("#/tokens","Tokens","tokens-root")),this.nav.appendChild(n),this.setActive(location.hash,{forceSyncAncestors:this.forceNextActiveSync}),this.forceNextActiveSync=!1}setActive(t,e={}){var s,o;for(const a of new Set(this.links.values()))a.classList.remove("active");const n=this.links.get(t);if(n)n.classList.add("active");else if(t.startsWith("#/root/")){const a=t.match(/^#\/root\/([^/]+)\/(boards|capabilities|docs)(?:\/(.+))?$/);if(a){const[,r,c]=a,l=decodeURIComponent(r);c==="boards"?(s=this.links.get(Hs(l)))==null||s.classList.add("active"):c==="capabilities"&&((o=this.links.get(Fs(l)))==null||o.classList.add("active"))}}(e.forceSyncAncestors||t!==this.lastActiveHash)&&this.syncCollapsed(t),this.lastActiveHash=t}toggleRawMode(t){this.rawModeProjects.has(t)?this.rawModeProjects.delete(t):this.rawModeProjects.add(t),this.forceNextActiveSync=!0,this.render()}syncCollapsed(t){const e=this.ancestorKeys(t);for(const n of e)this.applyCollapsed(n,!1)}ancestorKeys(t){const e=new Set,n=t.match(/^#\/project\/([^/]+)(?:\/boards)?$/);if(n)return e.add(decodeURIComponent(n[1])),e;const s=t.match(/^#\/root\/([^/]+)\/(docs|boards|capabilities)(?:\/(.+))?$/);if(!s)return e;const o=decodeURIComponent(s[1]),a=s[2],r=s[3]?decodeURIComponent(s[3]):"";let c,l;for(const p of this.lastWorkspace.projects){const m=p.docsRoots.find(g=>g.id===o);if(m){c=p.id,l=m.displayPath;break}}if(!c||!l)return e;e.add(c),e.add(o);const d=l.split("/").filter(Boolean).slice(0,-1);let h="";for(const p of d){h=h?`${h}/${p}`:p;const m=`folder:${c}:${h}`;this.collapsibles.has(m)&&e.add(m)}if((a==="docs"||a==="capabilities")&&r){const m=(a==="capabilities"?`capabilities/${r}`:r).split("/");for(let g=1;g<m.length;g++){const y=m.slice(0,g).join("/"),b=`doc:${o}:${y}`;this.collapsibles.has(b)&&e.add(b)}}return e}projectSection(t,e){const{id:n,label:s,docsRoots:o}=t,a=this.rawModeProjects.has(n),r=document.createElement("div");r.className="nav-repo-body";const c=document.createElement("div");c.className="nav-group nav-repo-group";const l=document.createElement("div");l.className="nav-repo-header-row";const d=document.createElement("button");d.className="nav-repo-header",d.type="button";const h=document.createElement("span");h.className="nav-repo-chevron",h.textContent="›";const p=document.createElement("span");p.className="nav-repo-label-text",p.textContent=s;const m=!a&&o.find(v=>xt(v.displayPath)==="docs"),g=document.createElement("span");g.className="nav-tree-badge",g.textContent="DOCS",g.hidden=!m;const y=document.createElement("button");y.className="nav-repo-more",y.type="button",y.title="Project options",y.innerHTML='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="8" cy="3" r="1.3"/><circle cx="8" cy="8" r="1.3"/><circle cx="8" cy="13" r="1.3"/></svg>',y.addEventListener("click",v=>{v.stopPropagation();const S=y.getBoundingClientRect();this.showContextMenu(S.right+4,S.top,s,[{icon:a?Et:At,iconClass:a?"nav-ctx-doc":"nav-ctx-dir",label:a?"View: Docs":"View: Raw",action:()=>this.toggleRawMode(n)},{icon:$e,iconClass:"nav-ctx-edit",label:"Wiki",action:()=>{location.hash=`#/project/${encodeURIComponent(n)}`}},{kind:"divider"},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateProjectDoc(n)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateProjectBoard(n)},{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateProjectDirectory(n)},{kind:"divider"},{icon:Vt,iconClass:"nav-ctx-delete",label:"Remove from workspace",action:()=>this.callbacks.onRemoveProject(n,s),danger:!0}])}),d.append(h,p,g),l.append(d,y),this.registerCollapsible(n,r,c,d,!0),d.addEventListener("click",()=>this.toggleCollapsible(n)),l.addEventListener("contextmenu",v=>{v.preventDefault(),v.stopPropagation(),y.click()});const b=Os(t,this.lastTreesByProject.get(n)??[],e),x=a?b:Xe(ve(b));if(x.length===0){const v=document.createElement("div");v.className="nav-label nav-empty-copy",v.textContent="No folders found.",r.appendChild(v)}else r.appendChild(this.renderCanonicalNodes(t,x,0,a));return c.append(l,r),c}renderCanonicalNodes(t,e,n,s){const o=document.createElement("div");for(const a of Us(e)){if(a.kind==="doc"||a.kind==="board"||a.kind==="capability"||a.kind==="file"){o.appendChild(this.renderCanonicalFile(a,n));continue}const r=document.createElement("div");r.className="nav-tree-group",r.style.setProperty("--tree-depth",String(n));const c=document.createElement("div");c.className="nav-tree-children";const l=document.createElement("button");l.className="nav-tree-row nav-tree-folder"+(a.kind==="docsRoot"?" nav-tree-docs-root":"")+(a.docsContainerRoot?" nav-tree-docs-container":"")+(a.root?"":" nav-tree-scaffold"),l.type="button",l.style.setProperty("--tree-depth",String(n));const d=document.createElement("span");d.className="nav-repo-chevron",d.textContent="›";const h=_s(a);h&&l.classList.add("nav-tree-capability-folder");const p=document.createElement("span");if(p.textContent=a.name,l.appendChild(d),h&&l.insertAdjacentHTML("beforeend",Re),l.appendChild(p),a.kind==="docsRoot"||a.docsContainerRoot){const g=document.createElement("span");g.className="nav-tree-badge",g.textContent="DOCS",l.appendChild(g)}const m=a.kind==="docsRoot"||a.docsContainerRoot?(a.docsContainerRoot??a.root).id:a.root?`doc:${a.root.id}:${a.contentPath??""}`:`folder:${t.id}:${a.projectPath}`;if(this.registerCollapsible(m,c,r,l,!0),l.addEventListener("click",()=>this.toggleCollapsible(m)),a.kind==="docsRoot"||a.docsContainerRoot){const g=a.docsContainerRoot??a.root;l.addEventListener("contextmenu",y=>{y.preventDefault(),y.stopPropagation(),this.openDirContextMenu(y.clientX,y.clientY,g,"")}),this.enableDirectoryDropTarget(r,g.id,"")}else if(a.root){const g=a.root,y=a.contentPath??"";this.enableDragSource(l,{kind:"dir",rootId:g.id,path:y}),this.enableDirectoryDropTarget(r,g.id,y),r.addEventListener("contextmenu",b=>{b.preventDefault(),b.stopPropagation(),this.openDirContextMenu(b.clientX,b.clientY,g,y)})}else l.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.showContextMenu(g.clientX,g.clientY,a.name,[{icon:At,iconClass:"nav-ctx-dir",label:"Create docs folder here",action:()=>this.callbacks.onCreateDocsFolder(t.id,a.projectPath)}])});c.appendChild(this.renderCanonicalNodes(t,a.children,n+1,s)),r.append(l,c),o.appendChild(r)}return o}renderCanonicalFile(t,e){if(t.kind==="file"){if(t.root&&t.contentPath&&ie(t.contentPath)){const l=document.createElement("button");return l.className="nav-link nav-tree-row nav-tree-file nav-tree-capability-file",l.type="button",l.style.setProperty("--tree-depth",String(e)),l.insertAdjacentHTML("afterbegin",Le),l.appendChild(document.createTextNode(t.name)),l.addEventListener("click",d=>{d.preventDefault(),this.callbacks.onOpenTextFile(t.root.id,t.contentPath)}),l.addEventListener("contextmenu",d=>{d.preventDefault(),d.stopPropagation(),this.openTextFileContextMenu(d.clientX,d.clientY,t.root,t.contentPath)}),l}const c=document.createElement("div");return c.className="nav-tree-row nav-tree-file",c.style.setProperty("--tree-depth",String(e)),c.textContent=t.name,c}const n=t.root,s=t.contentPath,o=t.kind==="doc"?sn(n.id,s):t.kind==="board"?on(n.id,G(s)):js(n.id,s),a=t.kind==="doc"&&t.name==="index.md"?"Overview":Nt(t.kind==="board"?G(t.name):t.name),r=this.link(o,a,`${t.kind}:${n.id}:${s}`);return r.classList.add("nav-tree-row",`nav-tree-${t.kind}`),r.style.setProperty("--tree-depth",String(e)),r.insertAdjacentHTML("afterbegin",t.kind==="board"?Dt:t.kind==="capability"?Re:Et),this.enableDragSource(r,t.kind==="board"?{kind:"board",rootId:n.id,boardId:G(s)}:t.kind==="capability"?{kind:"capability",rootId:n.id,path:s}:{kind:"doc",rootId:n.id,path:s}),r.addEventListener("contextmenu",c=>{c.preventDefault(),c.stopPropagation(),t.kind==="board"?this.openBoardContextMenu(c.clientX,c.clientY,n,G(s)):t.kind==="doc"&&this.openDocContextMenu(c.clientX,c.clientY,n,s)}),r}renderBrowseNode(t,e,n){if(e.type==="file"){const p=document.createElement("div");return p.className="nav-browse-file",p.textContent=e.name,p}if(e.name==="docs"){const p=t.docsRoots.find(m=>m.displayPath===e.path||m.displayPath.endsWith("/"+e.path));if(p){const m=n.get(p.id)??[];return this.docsRootSection(p,m)}}const o=Gn(e),a=`browse:${t.id}:${e.path}`,r=document.createElement("div");r.className=o?"nav-subgroup nav-collapsible-dir":"nav-subgroup nav-browse-dir";const c=document.createElement("div");c.className="nav-dir-body";const l=document.createElement("button");l.className=o?"nav-dir-toggle nav-dir-project":"nav-browse-dir-toggle",l.type="button";const d=document.createElement("span");d.className="nav-repo-chevron",d.textContent="›";const h=document.createElement("span");if(h.textContent=e.name,l.append(d,h),l.addEventListener("click",()=>this.toggleCollapsible(a)),o){const p=t.docsRoots.find(m=>m.displayPath.startsWith(e.path+"/")||m.displayPath===e.path);p&&l.addEventListener("contextmenu",m=>{m.preventDefault(),m.stopPropagation(),this.openDirContextMenu(m.clientX,m.clientY,p,"")})}else l.addEventListener("contextmenu",p=>{p.preventDefault(),p.stopPropagation(),this.showContextMenu(p.clientX,p.clientY,e.name,[{icon:At,iconClass:"nav-ctx-dir",label:"Create /docs/",action:()=>this.callbacks.onCreateDocsFolder(t.id,e.path)}])});for(const p of e.children)p.type==="dir"&&c.appendChild(this.renderBrowseNode(t,p,n));return this.registerCollapsible(a,c,r,l,!0),r.append(l,c),r}renderPathNodes(t,e,n,s=""){const o=document.createElement("div");for(const a of t)if(a.kind==="root")o.appendChild(this.docsRootSection(a.root,e.get(a.root.id)??[]));else{const r=s?`${s}/${a.segment}`:a.segment,c=`pathseg:${n}:${r}`,l=this.renderPathNodes(a.children,e,n,r);l.classList.add("nav-dir-body");const d=document.createElement("div");d.className="nav-subgroup nav-collapsible-dir";const h=Zn(a),{row:p,toggle:m}=this.createDirectoryRow(a.segment,`#/project/${encodeURIComponent(n)}`,`${a.segment} wiki`,()=>this.toggleCollapsible(c),!0);h&&d.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.openDirContextMenu(g.clientX,g.clientY,h,"")}),this.registerCollapsible(c,l,d,m,!0),d.append(p,l),o.appendChild(d)}return o}docsRootSection(t,e){const n=document.createElement("div");n.className="nav-subgroup nav-docs-root";const s=t.displayPath.split("/").pop()??t.displayPath;if(s.toLowerCase()!=="docs"){const a=document.createElement("div");a.className="nav-root-path-label",a.textContent=s,n.appendChild(a),a.addEventListener("contextmenu",r=>{r.preventDefault(),r.stopPropagation(),this.openDirContextMenu(r.clientX,r.clientY,t,"")})}return n.addEventListener("contextmenu",a=>{var r;(r=a.target)!=null&&r.closest(".nav-link, .nav-dir-toggle")||(a.preventDefault(),a.stopPropagation(),this.openDirContextMenu(a.clientX,a.clientY,t,""))}),this.enableDirectoryDropTarget(n,t.id,""),n.appendChild(this.docsNodes(t,As(e),"",e)),n}createDirectoryRow(t,e,n,s,o=!1){const a=document.createElement("div");a.className="nav-dir-header-row";const r=document.createElement("button");r.className=o?"nav-dir-toggle nav-dir-project":"nav-dir-toggle nav-dir-docs",r.type="button";const c=document.createElement("span");c.className="nav-repo-chevron",c.innerHTML='<svg viewBox="0 0 16 16" width="10" height="10" fill="currentColor"><path d="M6 4l4 4-4 4"/></svg>';const l=document.createElement("span");l.textContent=t,r.append(c,l),r.addEventListener("click",s);const d=document.createElement("a");return d.className="nav-repo-wiki-link nav-dir-wiki-link",d.href=e,d.title=n,d.innerHTML='<svg viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="2" width="10" height="10" rx="2"/><path d="M5 5h4M5 7h4M5 9h2"/></svg>',d.addEventListener("click",h=>h.stopPropagation()),this.links.set(e,d),a.append(r,d),{row:a,toggle:r}}docsNodes(t,e,n,s){const o=document.createElement("div"),a=Kn(e),r=Ns(s,n),c=[...a.map(l=>({kind:l.type==="file"&&ie(l.path)?"file":"doc",node:l})),...r.map(l=>({kind:"board",name:Nt(G(l.path).split("/").pop()??G(l.path)),boardId:G(l.path)}))].sort((l,d)=>{const h=l.kind==="doc"&&l.node.type==="file"&&l.node.name==="index.md",p=d.kind==="doc"&&d.node.type==="file"&&d.node.name==="index.md";if(h!==p)return h?-1:1;const m=(l.kind==="doc"||l.kind==="file")&&l.node.type==="file"&&_e(l.node.name),g=(d.kind==="doc"||d.kind==="file")&&d.node.type==="file"&&_e(d.node.name);if(m!==g)return m?-1:1;const y=(l.kind==="doc"||l.kind==="file")&&l.node.type==="dir",b=(d.kind==="doc"||d.kind==="file")&&d.node.type==="dir";if(y!==b)return y?-1:1;const x=l.kind==="board"?l.name:l.node.name,v=d.kind==="board"?d.name:d.node.name;return x.localeCompare(v)});for(const l of c)if(l.kind==="board"){const d=document.createElement("a");d.className="nav-link nav-link-board",d.href=on(t.id,l.boardId),d.insertAdjacentHTML("afterbegin",Dt),d.appendChild(document.createTextNode(l.name));const h=`board:${t.id}:${l.boardId}`;this.links.set(h,d),this.links.set(d.href,d),this.enableDragSource(d,{kind:"board",rootId:t.id,boardId:l.boardId}),d.addEventListener("contextmenu",p=>{p.preventDefault(),p.stopPropagation(),this.openBoardContextMenu(p.clientX,p.clientY,t,l.boardId)}),o.appendChild(d)}else{const{node:d}=l;if(d.type==="file"){if(l.kind==="file"){const m=document.createElement("button");m.className="nav-link nav-tree-file nav-tree-capability-file",m.type="button",m.insertAdjacentHTML("afterbegin",Le),m.appendChild(document.createTextNode(d.name)),m.addEventListener("click",()=>this.callbacks.onOpenTextFile(t.id,d.path)),m.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.openTextFileContextMenu(g.clientX,g.clientY,t,d.path)}),o.appendChild(m);continue}if(!d.name.endsWith(".md"))continue;const h=d.name==="index.md"?"Overview":Nt(d.name),p=this.link(sn(t.id,d.path),h,`doc:${t.id}:${d.path}`);p.insertAdjacentHTML("afterbegin",Et),this.enableDragSource(p,{kind:"doc",rootId:t.id,path:d.path}),p.addEventListener("contextmenu",m=>{m.preventDefault(),m.stopPropagation(),this.openDocContextMenu(m.clientX,m.clientY,t,d.path)}),o.appendChild(p)}else{const h=`doc:${t.id}:${d.path}`,p=this.docsNodes(t,d.children,d.path,s);p.classList.add("nav-dir-body");const m=document.createElement("div");m.className="nav-subgroup nav-collapsible-dir";const{row:g,toggle:y}=this.createDirectoryRow(Nt(d.name),`#/root/${encodeURIComponent(t.id)}/directory/${encodeURIComponent(d.path)}`,`${d.name} wiki`,b=>{b.button===0&&this.toggleCollapsible(h)},!1);this.enableDragSource(y,{kind:"dir",rootId:t.id,path:d.path}),m.addEventListener("contextmenu",b=>{b.preventDefault(),b.stopPropagation(),this.openDirContextMenu(b.clientX,b.clientY,t,d.path)}),this.enableDirectoryDropTarget(m,t.id,d.path),this.registerCollapsible(h,p,m,y,!0),m.append(g,p),o.appendChild(m)}}return o}enableDragSource(t,e){t.draggable=!0,t.addEventListener("dragstart",n=>{var s,o;this.closeContextMenu(),this.draggedItem=e,t.classList.add("nav-dragging"),(s=n.dataTransfer)==null||s.setData("application/x-docs-nav-item",JSON.stringify(e)),(o=n.dataTransfer)==null||o.setData("text/plain",Xs(e)),n.dataTransfer&&(n.dataTransfer.effectAllowed="move")}),t.addEventListener("dragend",()=>{t.classList.remove("nav-dragging"),this.draggedItem=void 0,this.clearDropTargets()})}enableDirectoryDropTarget(t,e,n){t.addEventListener("dragover",s=>{const o=this.currentDragItem(s);!o||!this.canDropItem(o,e,n)||(s.preventDefault(),s.stopPropagation(),s.dataTransfer&&(s.dataTransfer.dropEffect="move"),t.classList.add("nav-drop-target"),this.scheduleDropExpand(t))}),t.addEventListener("dragleave",s=>{t.contains(s.relatedTarget)||(t.classList.remove("nav-drop-target"),this.clearDropExpand(t))}),t.addEventListener("drop",s=>{const o=this.currentDragItem(s);!o||!this.canDropItem(o,e,n)||(s.preventDefault(),s.stopPropagation(),this.clearDropExpand(t),this.clearDropTargets(),this.moveDraggedItem(o,n))})}scheduleDropExpand(t){this.dropExpandTarget===t||!t.dataset.collapsibleKey||(this.clearDropExpand(),this.dropExpandTarget=t,this.dropExpandTimer=window.setTimeout(()=>{const e=t.dataset.collapsibleKey;e&&this.applyCollapsed(e,!1),t.classList.add("nav-drop-auto-expanded"),this.dropExpandTimer=void 0},650))}clearDropExpand(t){var e;t&&this.dropExpandTarget!==t||(this.dropExpandTimer!==void 0&&window.clearTimeout(this.dropExpandTimer),this.dropExpandTimer=void 0,(e=this.dropExpandTarget)==null||e.classList.remove("nav-drop-auto-expanded"),this.dropExpandTarget=void 0)}currentDragItem(t){var n;if(this.draggedItem)return this.draggedItem;const e=(n=t.dataTransfer)==null?void 0:n.getData("application/x-docs-nav-item");if(e)try{const s=JSON.parse(e);if(s&&(s.kind==="doc"||s.kind==="capability"||s.kind==="board"||s.kind==="dir")&&typeof s.rootId=="string")return s}catch{}}canDropItem(t,e,n){if(t.rootId!==e)return!1;const s=xt(n);if(t.kind==="doc")return Ct(t.path)!==s;if(t.kind==="capability")return s==="capabilities"||s.startsWith("capabilities/")&&Ct(t.path)!==s;if(t.kind==="board")return Ct(t.boardId)!==s;const o=xt(t.path);return!o||o===s||Ct(o)===s?!1:!s.startsWith(`${o}/`)}moveDraggedItem(t,e){const n=xt(e);t.kind==="doc"||t.kind==="capability"?this.callbacks.onMoveDoc(t.rootId,t.path,n):t.kind==="board"?this.callbacks.onMoveBoard(t.rootId,t.boardId,n):this.callbacks.onMoveDirectory(t.rootId,t.path,n)}clearDropTargets(){this.clearDropExpand(),this.element.querySelectorAll(".nav-drop-target").forEach(t=>{t.classList.remove("nav-drop-target")})}startInlineRename(t,e,n){const s=document.createElement("input");s.className="nav-inline-input",s.value=e.replace(/\.md$/,"");const o=t.parentElement;if(!o)return;t.style.display="none",o.insertBefore(s,t.nextSibling),s.focus(),s.select();let a=!1;const r=c=>{if(!a&&(a=!0,s.remove(),t.style.display="",c)){const l=s.value.trim();l&&l!==e.replace(/\.md$/,"")&&n(l)}};s.addEventListener("keydown",c=>{c.stopPropagation(),c.key==="Enter"&&(c.preventDefault(),r(!0)),c.key==="Escape"&&(c.preventDefault(),r(!1))}),s.addEventListener("blur",()=>r(!0))}startInlineCreate(t,e,n){const s=document.createElement("input");s.className="nav-inline-input",s.placeholder=e,t.insertBefore(s,t.firstChild),s.focus();let o=!1;const a=r=>{if(!o&&(o=!0,s.remove(),r)){const c=s.value.trim();c&&n(c)}};s.addEventListener("keydown",r=>{r.stopPropagation(),r.key==="Enter"&&(r.preventDefault(),a(!0)),r.key==="Escape"&&(r.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0))}registerCollapsible(t,e,n,s,o){this.collapsibles.set(t,{body:e,group:n,btn:s}),n.dataset.collapsibleKey=t,this.applyCollapsed(t,this.collapsedState.get(t)??o)}applyCollapsed(t,e){const n=this.collapsibles.get(t);n&&(this.collapsedState.set(t,e),n.body.hidden=e,n.group.classList.toggle("collapsed",e),n.btn.setAttribute("aria-expanded",String(!e)))}toggleCollapsible(t){const e=this.collapsibles.get(t);e&&this.applyCollapsed(t,!e.body.hidden)}openDirContextMenu(t,e,n,s){const o=s?Nt(s.split("/").pop()??s):n.displayPath.split("/").pop()??n.displayPath,a=[{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateDirectory(n.id,s)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateBoard(n.id,s)},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateDoc(n.id,s)},{icon:Re,iconClass:"nav-ctx-cap",label:"New Capability",action:()=>this.callbacks.onCreateCapability(n.id,s)}];s&&a.push({icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDirectory(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDirectory(n.id,s)}),this.showContextMenu(t,e,o,a)}openEmptyProjectContextMenu(t,e,n,s){this.showContextMenu(t,e,s,[{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateProjectDirectory(n)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateProjectBoard(n)},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateProjectDoc(n)}])}openDocContextMenu(t,e,n,s){const o=s.split("/").pop()??s;this.showContextMenu(t,e,o,[{icon:Et,iconClass:"nav-ctx-doc",label:"Open",action:()=>this.callbacks.onOpenDoc(n.id,s)},{icon:$e,iconClass:"nav-ctx-edit",label:"Edit",action:()=>this.callbacks.onEditDoc(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDoc(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDoc(n.id,s),danger:!0}])}openTextFileContextMenu(t,e,n,s){const o=s.split("/").pop()??s;this.showContextMenu(t,e,o,[{icon:Le,iconClass:"nav-ctx-doc",label:"Open",action:()=>this.callbacks.onOpenTextFile(n.id,s)},{icon:$e,iconClass:"nav-ctx-edit",label:"Edit",action:()=>this.callbacks.onOpenTextFile(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDoc(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDoc(n.id,s),danger:!0}])}openBoardContextMenu(t,e,n,s){const o=Nt(s.split("/").pop()??s);this.showContextMenu(t,e,o,[{icon:Dt,iconClass:"nav-ctx-board",label:"Open",action:()=>this.callbacks.onOpenBoard(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameBoard(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteBoard(n.id,s),danger:!0}])}showContextMenu(t,e,n,s){this.closeContextMenu();const o=document.createElement("div");o.className="nav-context-menu",o.addEventListener("pointerdown",c=>c.stopPropagation());const a=document.createElement("div");a.className="nav-context-label",a.textContent=n,o.appendChild(a);const r=document.createElement("div");r.className="nav-context-divider",o.appendChild(r);for(const c of s){if(c.kind==="divider"){const p=document.createElement("div");p.className="nav-context-divider",o.appendChild(p);continue}const l=document.createElement("button");l.className="nav-context-item"+(c.danger?" nav-context-item-danger":""),l.type="button";const d=document.createElement("span");d.className=`nav-ctx-icon ${c.iconClass}`,d.innerHTML=c.icon;const h=document.createElement("span");h.textContent=c.label,l.append(d,h),l.addEventListener("click",()=>{this.closeContextMenu(),c.action()}),o.appendChild(l)}o.style.position="fixed",o.style.left=`${t}px`,o.style.top=`${e}px`,document.body.appendChild(o),this.contextMenu=o,requestAnimationFrame(()=>{if(!this.contextMenu)return;const c=o.getBoundingClientRect();c.right>window.innerWidth&&(o.style.left=`${Math.max(0,t-c.width)}px`),c.bottom>window.innerHeight&&(o.style.top=`${Math.max(0,e-c.height)}px`)})}closeContextMenu(){var t;(t=this.contextMenu)==null||t.remove(),this.contextMenu=void 0}groupLabel(t){const e=document.createElement("div");return e.className="nav-label",e.textContent=t,e}link(t,e,n){const s=document.createElement("a");return s.className="nav-link",s.href=t,s.textContent=e,this.links.set(n,s),this.links.set(t,s),s}}const Dt='<svg class="nav-node-icon nav-node-icon-board" viewBox="0 0 16 16" aria-hidden="true"><rect x="1" y="1" width="6" height="6" rx="1"/><rect x="9" y="1" width="6" height="6" rx="1"/><rect x="1" y="9" width="6" height="6" rx="1"/><rect x="9" y="9" width="6" height="6" rx="1"/></svg>',Re='<svg class="nav-node-icon nav-node-icon-capability" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 1l2 4.5 4.5 0.7-3.3 3.1 0.8 4.7-4-2.1-4 2.1 0.8-4.7L1.5 6.2l4.5-0.7z"/></svg>',Et='<svg class="nav-node-icon nav-node-icon-doc" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 1.5h6.5l3 3V14.5H3z"/><path d="M9.5 1.5V4.5h3" stroke="none"/><line x1="5" y1="7" x2="11" y2="7" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="9.5" x2="11" y2="9.5" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="12" x2="9" y2="12" stroke="var(--bg-canvas)" stroke-width="0.8"/></svg>',Le='<svg class="nav-node-icon nav-node-icon-doc" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 1.5h6.5l3 3V14.5H3z"/><path d="M9.5 1.5V4.5h3" stroke="none"/><line x1="5" y1="7" x2="11" y2="7" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="9.5" x2="11" y2="9.5" stroke="var(--bg-canvas)" stroke-width="0.8"/></svg>',At='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.45" stroke-linecap="round" stroke-linejoin="round"><path d="M2 4.5h4l1.4 1.6H14v6.4a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z"/><path d="M2 4.5v-1a1 1 0 0 1 1-1h3l1.4 2"/></svg>',$e='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M11 2l3 3-8 8H3v-3z"/></svg>',le='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h12M8 3v9M5 6l3-3 3 3"/></svg>',Vt='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 4h12M5 4V2h6v2M6 7v5M10 7v5M3 4l1 9a1 1 0 001 1h6a1 1 0 001-1l1-9"/></svg>';function Kn(i){return i.filter(t=>t.type==="file"?t.name.endsWith(".md")||ie(t.path):!Ps.has(t.name)).map(t=>t.type==="file"?t:{...t,children:Kn(t.children)})}function As(i){const t=i.find(e=>e.type==="dir"&&e.name.toLowerCase()==="docs");return!t||t.type!=="dir"?i:i.filter(e=>e!==t).concat(t.children)}function Ns(i,t){const e=t?`${t}/`:"";return zs(i).filter(n=>e?n.path.startsWith(e)?!n.path.slice(e.length).includes("/"):!1:!n.path.includes("/"))}function zs(i){const t=[],e=n=>{for(const s of n)s.type==="file"?s.name.endsWith(".board.json")&&t.push(s):e(s.children)};return e(i),t}function sn(i,t){return`#/root/${encodeURIComponent(i)}/docs/${encodeURIComponent(t)}`}function Hs(i){return`#/root/${encodeURIComponent(i)}/boards`}function on(i,t){return`#/root/${encodeURIComponent(i)}/boards/${encodeURIComponent(t)}`}function Fs(i){return`#/root/${encodeURIComponent(i)}/capabilities`}function js(i,t){return`#/root/${encodeURIComponent(i)}/capabilities/${encodeURIComponent(Ws(t))}`}function Ws(i){return i.replace(/^capabilities\//,"")}function Os(i,t,e){const n=new Map,s=[],o=c=>{const l=xt(c),d=n.get(l);if(d)return d;const h=Ct(l),p={id:`folder:${i.id}:${l}`,kind:"folder",name:l.split("/").pop()??i.label,projectPath:l,children:[]};return n.set(l,p),l&&h?o(h).children.push(p):s.push(p),p},a=c=>{for(const l of c)if(l.type==="dir")o(l.path),a(l.children);else{const d={id:`file:${i.id}:${l.path}`,kind:"file",name:l.name,projectPath:l.path,children:[]};n.set(l.path,d);const h=Ct(l.path);h?o(h).children.push(d):s.push(d)}};a(t);for(const c of i.docsRoots){const l=xt(c.displayPath),d=o(l);d.kind="docsRoot",d.id=`root:${c.id}`,d.root=c,d.contentPath="";const h=p=>{for(const m of p){const g=[l,m.path].filter(Boolean).join("/");if(m.type==="dir"){const E=o(g);E.kind!=="docsRoot"&&(E.root=c,E.contentPath=m.path),h(m.children);continue}const y=m.name.endsWith(".board.json"),b=Vn(m.path),x=ie(m.path);if(!m.name.endsWith(".md")&&!y&&!x)continue;const v=Ct(g),S=n.get(g),w=S??{id:"",kind:"file",name:m.name,projectPath:g,children:[]};w.id=`${y?"board":b?"capability":x?"file":"doc"}:${c.id}:${m.path}`,w.kind=y?"board":b?"capability":x?"file":"doc",w.root=c,w.contentPath=m.path,S||(n.set(g,w),v?o(v).children.push(w):s.push(w))}};h(e.get(c.id)??[])}const r=(c,l)=>{const d=c.kind==="docsRoot"?c.root:c.root??l;if(d&&(c.kind==="folder"||c.kind==="file")&&!c.contentPath){c.root=d;const h=xt(d.displayPath);c.contentPath=c.projectPath.slice(h.length).replace(/^\//,"")}for(const h of c.children)r(h,d)};for(const c of s)r(c);return s}function Us(i){return[...i].sort((t,e)=>{const n=s=>s.kind==="doc"&&s.name==="index.md"?0:(s.kind==="doc"||s.kind==="file")&&_e(s.name)?1:s.kind==="doc"?2:s.kind==="capability"?3:s.kind==="board"?4:s.kind==="folder"&&s.root&&!s.docsContainerRoot?5:s.kind==="folder"&&s.docsContainerRoot?6:s.kind==="folder"&&!s.root?7:s.kind==="docsRoot"?8:9;return n(t)-n(e)||t.name.localeCompare(e.name,void 0,{sensitivity:"accent"})})}function _e(i){return/^readme\.(md|txt)$/i.test(i)}function ve(i,t,e=!1){const n=[];for(const s of i){if(s.kind==="docsRoot"){n.push({...s,children:ve(s.children,!1,!0)});continue}if(e){if(s.kind==="file"){ie(s.contentPath??"")&&n.push(s);continue}if(s.kind==="folder"){const o=ve(s.children,!1,!0);(s.name!=="assets"||o.length>0)&&n.push({...s,children:o})}else n.push(s);continue}if(s.kind==="folder"){const o=ve(s.children);o.length>0&&n.push({...s,children:o})}}return n}function Xe(i){var e;const t=[];for(const n of i){if(n.kind==="docsRoot"){t.push(...Xe(n.children));continue}if(n.kind!=="folder"){t.push(n);continue}const s=(e=n.children.find(o=>o.kind==="docsRoot"))==null?void 0:e.root;t.push({...n,docsContainerRoot:s,children:Xe(n.children)})}return t}function Nt(i){const t=i.replace(/\.md$/,"").replace(/[-_]/g," ");return t.charAt(0).toUpperCase()+t.slice(1)}function Vn(i){if(!i.startsWith("capabilities/")||!i.endsWith(".md"))return!1;const t=i.slice(13);return t.includes("/")?t.endsWith("/index.md"):!0}function ie(i){return!i.startsWith("capabilities/")||i.endsWith(".board.json")?!1:!Vn(i)}function _s(i){var t;return i.kind!=="folder"||!((t=i.contentPath)!=null&&t.startsWith("capabilities/"))?null:i.children.find(e=>e.kind==="capability"&&Ct(e.contentPath??"")===i.contentPath)??null}function Gn(i){if(i.type==="file")return!1;for(const t of i.children)if(t.type==="dir"&&t.name==="docs"||t.type==="dir"&&Gn(t))return!0;return!1}function xt(i){return i.replace(/^\/+|\/+$/g,"")}function Ct(i){const t=xt(i),e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}function Xs(i){return i.kind==="doc"||i.kind==="capability"?i.path:i.kind==="board"?i.boardId:i.path}function Zn(i){if(i.kind==="root")return i.root;for(const t of i.children){const e=Zn(t);if(e)return e}return null}function ne(i,t={}){const{frontmatter:e,body:n}=qs(i);try{const s=Jn(n.split(`
|
|
1
|
+
var Cs=Object.defineProperty;var ks=(i,t,e)=>t in i?Cs(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var u=(i,t,e)=>ks(i,typeof t!="symbol"?t+"":t,e);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function e(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(s){if(s.ep)return;s.ep=!0;const o=e(s);fetch(s.href,o)}})();const $="/__api";class se extends Error{constructor(e,n){super(e);u(this,"currentRevision");this.name="RevisionConflictError",this.currentRevision=n}}async function P(i){var t;if(!i.ok){let e="";try{e=((t=await i.json())==null?void 0:t.error)??""}catch{}throw new Error(`${i.status} ${i.statusText}${e?` — ${e}`:""}`)}return i.json()}function D(i={}){return i}const k={async getWorkspace(){return P(await fetch(`${$}/workspace`,D()))},async removeProject(i){await P(await fetch(`${$}/workspace/project?id=${encodeURIComponent(i)}`,D({method:"DELETE"})))},async pickAndAddProject(){return P(await fetch(`${$}/workspace/pick-project`,D({method:"POST"})))},async addProject(i,t){return P(await fetch(`${$}/workspace/project`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootPath:i,label:t})})))},async ensureProjectDocsRoot(i){return(await P(await fetch(`${$}/workspace/project/docs-root`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:i})})))).root},async getTree(i){return(await P(await fetch(`${$}/tree?rootId=${encodeURIComponent(i)}`,D()))).tree},async getProjectTree(i){return(await P(await fetch(`${$}/project-tree?projectId=${encodeURIComponent(i)}`,D()))).tree},async createDocsFolder(i,t){await P(await fetch(`${$}/workspace/project/create-docs-folder`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:i,parentPath:t})})))},async readFile(i,t){return(await P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D()))).content},async readFileWithRevision(i,t){return P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D()))},async writeFile(i,t,e,n){const s=await fetch(`${$}/file`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,path:t,content:e,expectedRevision:n})}));if(s.status===409){const a=await s.json();throw new se(a.error??"File changed on disk",a.currentRevision??null)}return(await P(s)).revision},async createDirectory(i,t){await P(await fetch(`${$}/directory`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,path:t})})))},async getBoard(i,t){const e=await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D());return e.status===404?null:(await P(e)).doc},async getBoardWithRevision(i,t){const e=await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D());return e.status===404?null:P(e)},async saveBoard(i,t,e,n){const s=await fetch(`${$}/board`,D({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,id:t,doc:e,expectedRevision:n})}));if(s.status===409){const a=await s.json();throw new se(a.error??"Board changed on disk",a.currentRevision??null)}return(await P(s)).revision},async deleteFile(i,t){await P(await fetch(`${$}/file?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`,D({method:"DELETE"})))},async renameFile(i,t,e,n=!1){await P(await fetch(`${$}/file`,D({method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,oldPath:t,newPath:e,ignoreMissing:n})})))},async deleteBoard(i,t){await P(await fetch(`${$}/board?rootId=${encodeURIComponent(i)}&id=${encodeURIComponent(t)}`,D({method:"DELETE"})))},assetUrl(i,t){return`${$}/asset?rootId=${encodeURIComponent(i)}&path=${encodeURIComponent(t)}`},async uploadAsset(i,t,e,n){return(await P(await fetch(`${$}/asset`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,name:t,base64:e,mimeType:n})})))).path},async cleanupManagedAssets(i,t=[]){return(await P(await fetch(`${$}/asset/cleanup`,D({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rootId:i,preservePaths:t})})))).removed}};function Es(i,t){const e=i.find(o=>o.type==="dir"&&o.name===t);if(!e||e.type!=="dir")return[];const n=[],s=o=>{for(const a of o)a.type==="file"?n.push(a):s(a.children)};return s(e.children),n}function Ue(i){for(const t of i){if(t.type==="file"&&t.name.endsWith(".md"))return t.path;if(t.type==="dir"){const e=Ue(t.children);if(e)return e}}return null}function wt(i){const t=[];for(const e of i.replace(/\\/g,"/").split("/")){const n=e.trim();if(!(!n||n===".")){if(n===".."){t.length>0&&t.pop();continue}t.push(n)}}return t.join("/")}function qn(i){const t=wt(i),e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}function Ss(i,t){if(/^(https?:|mailto:|tel:|#|data:)/.test(t))return t;if(t.startsWith("/"))return wt(t);const e=qn(i);return wt(e?`${e}/${t}`:t)}function Ke(i,t){const e=qn(i),n=e?e.split("/").filter(Boolean):[],s=wt(t).split("/").filter(Boolean);let o=0;for(;o<n.length&&o<s.length&&n[o]===s[o];)o++;const a=n.slice(o).map(()=>".."),r=s.slice(o);return[...a,...r].join("/")||s[s.length-1]||""}const Ts=["sticky","task","rectangle","ellipse","text","line","arrow","connector","image","screenshot","frame","templateGroup"];function ce(i){const t=new Set;for(const e of i.elements){const n=e.data.assetId;typeof n=="string"&&t.add(n)}return{...i.schemaUrl?{$schema:i.schemaUrl}:{},version:1,id:i.boardId,title:i.title,createdAt:i.createdAt,updatedAt:Date.now(),viewport:{...i.viewport},theme:i.theme,elements:i.elements,assetIds:[...t]}}function Y(i){return typeof i=="number"&&Number.isFinite(i)}function Yn(i){if(typeof i!="object"||i===null)return null;const t=i;return typeof t.id!="string"||typeof t.type!="string"||!Ts.includes(t.type)||!Y(t.x)||!Y(t.y)||!Y(t.width)||!Y(t.height)?null:{id:t.id,type:t.type,x:t.x,y:t.y,width:t.width,height:t.height,rotation:Y(t.rotation)?t.rotation:0,zIndex:Y(t.zIndex)?t.zIndex:0,locked:t.locked===!0,hidden:t.hidden===!0,createdAt:Y(t.createdAt)?t.createdAt:Date.now(),updatedAt:Y(t.updatedAt)?t.updatedAt:Date.now(),style:typeof t.style=="object"&&t.style!==null?t.style:{},data:typeof t.data=="object"&&t.data!==null?t.data:{}}}function we(i){if(typeof i!="object"||i===null)return null;const t=i;if(t.version!==1||typeof t.id!="string"||!Array.isArray(t.elements))return null;const e=[];for(const s of t.elements){const o=Yn(s);o&&e.push(o)}const n=t.viewport??{};return{...typeof t.$schema=="string"?{$schema:t.$schema}:{},version:1,id:t.id,title:typeof t.title=="string"?t.title.slice(0,200):"Imported Board",createdAt:Y(t.createdAt)?t.createdAt:Date.now(),updatedAt:Y(t.updatedAt)?t.updatedAt:Date.now(),viewport:{offsetX:Y(n.offsetX)?n.offsetX:0,offsetY:Y(n.offsetY)?n.offsetY:0,scale:Y(n.scale)&&n.scale>.01&&n.scale<=40?n.scale:1},theme:t.theme==="dark"?"dark":"light",elements:e,assetIds:Array.isArray(t.assetIds)?t.assetIds.filter(s=>typeof s=="string"):[]}}const Bs="/board-v1.schema.json",Ms=".board.json";function G(i){return i.replace(/\.board\.json$/,"")}function Is(i){return i.trim().replace(/^\/+/,"").replace(/\.board\.json$/,"")}function Rs(i,t){return re(i,t)[0]??""}function re(i,t){const e=i.trim(),n=Is(i);if(!n)return[];if(e.startsWith("./")||e.startsWith("../")){const r=t.lastIndexOf("/"),c=r===-1?"":t.slice(0,r);return[wt(c?`${c}/${n}`:n)]}if(e.startsWith("/")){const r=t.lastIndexOf("/"),c=r===-1?"":t.slice(0,r),l=wt(c?`${c}/${n}`:n),d=[n];if(l&&l!==n&&d.push(l),c){const h=c.includes("/")?c.slice(0,c.lastIndexOf("/")):"",p=wt(h?`${h}/${n}`:n);p&&!d.includes(p)&&d.push(p)}return d}const s=t.lastIndexOf("/"),o=s===-1?"":t.slice(0,s),a=wt(o?`${o}/${n}`:n);return a&&a!==n?[a,n]:[n]}function nn(i){return i.toLowerCase().replace(/[^\w\s-]/g,"").trim().replace(/\s+/g,"-").slice(0,48)||"board"}function Ls(i){return new Promise((t,e)=>{const n=new FileReader;n.onload=()=>{const s=n.result;t(s.slice(s.indexOf(",")+1))},n.onerror=()=>e(n.error),n.readAsDataURL(i)})}const J={async listIds(i){const t=await k.getTree(i);return $s(t).map(e=>G(e.path))},async list(i){const t=await this.listIds(i),e=[];for(const n of t){const s=await this.load(i,n);s&&e.push({id:n,title:s.title,elementCount:s.elements.length,updatedAt:s.updatedAt,filePath:`${n}.board.json`})}return e.sort((n,s)=>s.updatedAt-n.updatedAt),e},async load(i,t){const e=await k.getBoard(i,t);if(e)return we(e)??void 0},async save(i,t){await k.saveBoard(i,t.id,t)},async delete(i,t){await k.deleteBoard(i,t)},async move(i,t,e){const n=await this.load(i,t);if(!n)throw new Error("Board not found");const s=t.split("/").pop()??t,o=e.replace(/^\/+|\/+$/g,""),a=o?`${o}/${s}`:s;if(a===t)return t;if(new Set(await this.listIds(i)).has(a))throw new Error("A board already exists there");const c=Date.now();return await k.saveBoard(i,a,{...n,id:a,updatedAt:c}),await k.deleteBoard(i,t),a},async rename(i,t,e){const n=await this.load(i,t);if(!n)throw new Error("Board not found");const s=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",o=nn(e),a=s?`${s}/${o}`:o,r=Date.now();if(a===t)return await k.saveBoard(i,t,{...n,title:e.trim()||n.title,updatedAt:r}),t;if(new Set(await this.listIds(i)).has(a))throw new Error("A board already exists with that name");return await k.saveBoard(i,a,{...n,id:a,title:e.trim()||n.title,updatedAt:r}),await k.deleteBoard(i,t),a},async create(i,t,e,n=""){const s=new Set(await this.listIds(i)),o=nn(t);let r=`${n?`${n.replace(/^\/+|\/+$/g,"")}/`:""}${o}`;s.has(r)&&(r=`${r}-${Date.now().toString(36)}`);const c=Date.now(),l={$schema:Bs,version:1,id:r,title:t.trim()||"Untitled Board",createdAt:c,updatedAt:c,viewport:{offsetX:0,offsetY:0,scale:1},theme:e,elements:[],assetIds:[]};return await k.saveBoard(i,r,l),r},async uploadImage(i,t,e){const n=await Ls(t);return k.uploadAsset(i,e??"image.png",n,t.type)},async cleanupUnusedAssets(i,t=[]){return k.cleanupManagedAssets(i,t)}};function $s(i){const t=[],e=n=>{for(const s of n)s.type==="file"?s.name.endsWith(Ms)&&t.push(s):e(s.children)};return e(i),t}const Ps=new Set(["capabilities","assets"]);class Ds{constructor(t,e){u(this,"element");u(this,"header");u(this,"nav");u(this,"footer");u(this,"links",new Map);u(this,"collapsibles",new Map);u(this,"collapsedState",new Map);u(this,"callbacks");u(this,"contextMenu");u(this,"draggedItem");u(this,"dropExpandTimer");u(this,"dropExpandTarget");u(this,"lastWorkspace",{projects:[]});u(this,"lastTreesByRoot",new Map);u(this,"lastTreesByProject",new Map);u(this,"rawModeProjects",new Set);u(this,"lastActiveHash","");u(this,"forceNextActiveSync",!0);this.callbacks=e,this.element=document.createElement("aside"),this.element.className="sidebar",this.header=document.createElement("div"),this.header.className="sidebar-header";const n=document.createElement("a");n.className="sidebar-brand",n.href="#/",n.textContent="ViteBoard",this.header.appendChild(n),this.nav=document.createElement("nav"),this.nav.className="sidebar-nav",this.footer=document.createElement("div"),this.footer.className="sidebar-footer";const s=document.createElement("button");s.className="sidebar-add-repo",s.type="button",s.textContent="Add Repo",s.title="Add a local project root",s.addEventListener("click",()=>this.callbacks.onAddRepo()),this.footer.appendChild(s),this.element.append(this.header,this.nav,this.footer),t.appendChild(this.element),document.addEventListener("pointerdown",o=>{this.contextMenu&&(this.contextMenu.contains(o.target)||this.closeContextMenu())},!0)}refresh(t,e,n){this.lastWorkspace=t,this.lastTreesByRoot=e,n&&(this.lastTreesByProject=n),this.render()}render(){const t=this.lastWorkspace,e=this.lastTreesByRoot;if(this.lastTreesByProject,this.nav.replaceChildren(),this.links.clear(),this.collapsibles.clear(),t.projects.length===0){const s=document.createElement("div");s.className="nav-group",s.appendChild(this.groupLabel("Workspace"));const o=document.createElement("div");o.className="nav-label nav-empty-copy",o.textContent="Add a project root to discover docs folders.",s.appendChild(o),this.nav.appendChild(s)}else for(const s of t.projects)this.nav.appendChild(this.projectSection(s,e));const n=document.createElement("div");n.className="nav-group",n.appendChild(this.groupLabel("System")),n.appendChild(this.link("#/tokens","Tokens","tokens-root")),this.nav.appendChild(n),this.setActive(location.hash,{forceSyncAncestors:this.forceNextActiveSync}),this.forceNextActiveSync=!1}setActive(t,e={}){var s,o;for(const a of new Set(this.links.values()))a.classList.remove("active");const n=this.links.get(t);if(n)n.classList.add("active");else if(t.startsWith("#/root/")){const a=t.match(/^#\/root\/([^/]+)\/(boards|capabilities|docs)(?:\/(.+))?$/);if(a){const[,r,c]=a,l=decodeURIComponent(r);c==="boards"?(s=this.links.get(Hs(l)))==null||s.classList.add("active"):c==="capabilities"&&((o=this.links.get(Fs(l)))==null||o.classList.add("active"))}}(e.forceSyncAncestors||t!==this.lastActiveHash)&&this.syncCollapsed(t),this.lastActiveHash=t}toggleRawMode(t){this.rawModeProjects.has(t)?this.rawModeProjects.delete(t):this.rawModeProjects.add(t),this.forceNextActiveSync=!0,this.render()}syncCollapsed(t){const e=this.ancestorKeys(t);for(const n of e)this.applyCollapsed(n,!1)}ancestorKeys(t){const e=new Set,n=t.match(/^#\/project\/([^/]+)(?:\/boards)?$/);if(n)return e.add(decodeURIComponent(n[1])),e;const s=t.match(/^#\/root\/([^/]+)\/(docs|boards|capabilities)(?:\/(.+))?$/);if(!s)return e;const o=decodeURIComponent(s[1]),a=s[2],r=s[3]?decodeURIComponent(s[3]):"";let c,l;for(const p of this.lastWorkspace.projects){const m=p.docsRoots.find(g=>g.id===o);if(m){c=p.id,l=m.displayPath;break}}if(!c||!l)return e;e.add(c),e.add(o);const d=l.split("/").filter(Boolean).slice(0,-1);let h="";for(const p of d){h=h?`${h}/${p}`:p;const m=`folder:${c}:${h}`;this.collapsibles.has(m)&&e.add(m)}if((a==="docs"||a==="capabilities")&&r){const m=(a==="capabilities"?`capabilities/${r}`:r).split("/");for(let g=1;g<m.length;g++){const y=m.slice(0,g).join("/"),b=`doc:${o}:${y}`;this.collapsibles.has(b)&&e.add(b)}}return e}projectSection(t,e){const{id:n,label:s,docsRoots:o}=t,a=this.rawModeProjects.has(n),r=document.createElement("div");r.className="nav-repo-body";const c=document.createElement("div");c.className="nav-group nav-repo-group";const l=document.createElement("div");l.className="nav-repo-header-row";const d=document.createElement("button");d.className="nav-repo-header",d.type="button";const h=document.createElement("span");h.className="nav-repo-chevron",h.textContent="›";const p=document.createElement("span");p.className="nav-repo-label-text",p.textContent=s;const m=!a&&o.find(v=>xt(v.displayPath)==="docs"),g=document.createElement("span");g.className="nav-tree-badge",g.textContent="DOCS",g.hidden=!m;const y=document.createElement("button");y.className="nav-repo-more",y.type="button",y.title="Project options",y.innerHTML='<svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor"><circle cx="8" cy="3" r="1.3"/><circle cx="8" cy="8" r="1.3"/><circle cx="8" cy="13" r="1.3"/></svg>',y.addEventListener("click",v=>{v.stopPropagation();const S=y.getBoundingClientRect();this.showContextMenu(S.right+4,S.top,s,[{icon:a?Et:At,iconClass:a?"nav-ctx-doc":"nav-ctx-dir",label:a?"View: Docs":"View: Raw",action:()=>this.toggleRawMode(n)},{icon:$e,iconClass:"nav-ctx-edit",label:"Wiki",action:()=>{location.hash=`#/project/${encodeURIComponent(n)}`}},{kind:"divider"},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateProjectDoc(n)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateProjectBoard(n)},{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateProjectDirectory(n)},{kind:"divider"},{icon:Vt,iconClass:"nav-ctx-delete",label:"Remove from workspace",action:()=>this.callbacks.onRemoveProject(n,s),danger:!0}])}),d.append(h,p,g),l.append(d,y),this.registerCollapsible(n,r,c,d,!0),d.addEventListener("click",()=>this.toggleCollapsible(n)),l.addEventListener("contextmenu",v=>{v.preventDefault(),v.stopPropagation(),y.click()});const b=Os(t,this.lastTreesByProject.get(n)??[],e),x=a?b:Xe(ve(b));if(x.length===0){const v=document.createElement("div");v.className="nav-label nav-empty-copy",v.textContent="No folders found.",r.appendChild(v)}else r.appendChild(this.renderCanonicalNodes(t,x,0,a));return c.append(l,r),c}renderCanonicalNodes(t,e,n,s){const o=document.createElement("div");for(const a of Us(e)){if(a.kind==="doc"||a.kind==="board"||a.kind==="capability"||a.kind==="file"){o.appendChild(this.renderCanonicalFile(a,n));continue}const r=document.createElement("div");r.className="nav-tree-group",r.style.setProperty("--tree-depth",String(n));const c=document.createElement("div");c.className="nav-tree-children",c.style.setProperty("--tree-depth",String(n+1));const l=document.createElement("button");l.className="nav-tree-row nav-tree-folder"+(a.kind==="docsRoot"?" nav-tree-docs-root":"")+(a.docsContainerRoot?" nav-tree-docs-container":"")+(a.root?"":" nav-tree-scaffold"),l.type="button",l.style.setProperty("--tree-depth",String(n));const d=document.createElement("span");d.className="nav-repo-chevron",d.textContent="›";const h=_s(a);h&&l.classList.add("nav-tree-capability-folder");const p=document.createElement("span");if(p.textContent=a.name,l.appendChild(d),h&&l.insertAdjacentHTML("beforeend",Re),l.appendChild(p),a.kind==="docsRoot"||a.docsContainerRoot){const g=document.createElement("span");g.className="nav-tree-badge",g.textContent="DOCS",l.appendChild(g)}const m=a.kind==="docsRoot"||a.docsContainerRoot?(a.docsContainerRoot??a.root).id:a.root?`doc:${a.root.id}:${a.contentPath??""}`:`folder:${t.id}:${a.projectPath}`;if(this.registerCollapsible(m,c,r,l,!0),l.addEventListener("click",()=>this.toggleCollapsible(m)),a.kind==="docsRoot"||a.docsContainerRoot){const g=a.docsContainerRoot??a.root;l.addEventListener("contextmenu",y=>{y.preventDefault(),y.stopPropagation(),this.openDirContextMenu(y.clientX,y.clientY,g,"")}),this.enableDirectoryDropTarget(r,g.id,"")}else if(a.root){const g=a.root,y=a.contentPath??"";this.enableDragSource(l,{kind:"dir",rootId:g.id,path:y}),this.enableDirectoryDropTarget(r,g.id,y),r.addEventListener("contextmenu",b=>{b.preventDefault(),b.stopPropagation(),this.openDirContextMenu(b.clientX,b.clientY,g,y)})}else l.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.showContextMenu(g.clientX,g.clientY,a.name,[{icon:At,iconClass:"nav-ctx-dir",label:"Create docs folder here",action:()=>this.callbacks.onCreateDocsFolder(t.id,a.projectPath)}])});c.appendChild(this.renderCanonicalNodes(t,a.children,n+1,s)),r.append(l,c),o.appendChild(r)}return o}renderCanonicalFile(t,e){if(t.kind==="file"){if(t.root&&t.contentPath&&ie(t.contentPath)){const l=document.createElement("button");return l.className="nav-link nav-tree-row nav-tree-file nav-tree-capability-file",l.type="button",l.style.setProperty("--tree-depth",String(e)),l.insertAdjacentHTML("afterbegin",Le),l.appendChild(document.createTextNode(t.name)),l.addEventListener("click",d=>{d.preventDefault(),this.callbacks.onOpenTextFile(t.root.id,t.contentPath)}),l.addEventListener("contextmenu",d=>{d.preventDefault(),d.stopPropagation(),this.openTextFileContextMenu(d.clientX,d.clientY,t.root,t.contentPath)}),l}const c=document.createElement("div");return c.className="nav-tree-row nav-tree-file",c.style.setProperty("--tree-depth",String(e)),c.textContent=t.name,c}const n=t.root,s=t.contentPath,o=t.kind==="doc"?sn(n.id,s):t.kind==="board"?on(n.id,G(s)):js(n.id,s),a=t.kind==="doc"&&t.name==="index.md"?"Overview":Nt(t.kind==="board"?G(t.name):t.name),r=this.link(o,a,`${t.kind}:${n.id}:${s}`);return r.classList.add("nav-tree-row",`nav-tree-${t.kind}`),r.style.setProperty("--tree-depth",String(e)),r.insertAdjacentHTML("afterbegin",t.kind==="board"?Dt:t.kind==="capability"?Re:Et),this.enableDragSource(r,t.kind==="board"?{kind:"board",rootId:n.id,boardId:G(s)}:t.kind==="capability"?{kind:"capability",rootId:n.id,path:s}:{kind:"doc",rootId:n.id,path:s}),r.addEventListener("contextmenu",c=>{c.preventDefault(),c.stopPropagation(),t.kind==="board"?this.openBoardContextMenu(c.clientX,c.clientY,n,G(s)):t.kind==="doc"&&this.openDocContextMenu(c.clientX,c.clientY,n,s)}),r}renderBrowseNode(t,e,n){if(e.type==="file"){const p=document.createElement("div");return p.className="nav-browse-file",p.textContent=e.name,p}if(e.name==="docs"){const p=t.docsRoots.find(m=>m.displayPath===e.path||m.displayPath.endsWith("/"+e.path));if(p){const m=n.get(p.id)??[];return this.docsRootSection(p,m)}}const o=Gn(e),a=`browse:${t.id}:${e.path}`,r=document.createElement("div");r.className=o?"nav-subgroup nav-collapsible-dir":"nav-subgroup nav-browse-dir";const c=document.createElement("div");c.className="nav-dir-body";const l=document.createElement("button");l.className=o?"nav-dir-toggle nav-dir-project":"nav-browse-dir-toggle",l.type="button";const d=document.createElement("span");d.className="nav-repo-chevron",d.textContent="›";const h=document.createElement("span");if(h.textContent=e.name,l.append(d,h),l.addEventListener("click",()=>this.toggleCollapsible(a)),o){const p=t.docsRoots.find(m=>m.displayPath.startsWith(e.path+"/")||m.displayPath===e.path);p&&l.addEventListener("contextmenu",m=>{m.preventDefault(),m.stopPropagation(),this.openDirContextMenu(m.clientX,m.clientY,p,"")})}else l.addEventListener("contextmenu",p=>{p.preventDefault(),p.stopPropagation(),this.showContextMenu(p.clientX,p.clientY,e.name,[{icon:At,iconClass:"nav-ctx-dir",label:"Create /docs/",action:()=>this.callbacks.onCreateDocsFolder(t.id,e.path)}])});for(const p of e.children)p.type==="dir"&&c.appendChild(this.renderBrowseNode(t,p,n));return this.registerCollapsible(a,c,r,l,!0),r.append(l,c),r}renderPathNodes(t,e,n,s=""){const o=document.createElement("div");for(const a of t)if(a.kind==="root")o.appendChild(this.docsRootSection(a.root,e.get(a.root.id)??[]));else{const r=s?`${s}/${a.segment}`:a.segment,c=`pathseg:${n}:${r}`,l=this.renderPathNodes(a.children,e,n,r);l.classList.add("nav-dir-body");const d=document.createElement("div");d.className="nav-subgroup nav-collapsible-dir";const h=Zn(a),{row:p,toggle:m}=this.createDirectoryRow(a.segment,`#/project/${encodeURIComponent(n)}`,`${a.segment} wiki`,()=>this.toggleCollapsible(c),!0);h&&d.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.openDirContextMenu(g.clientX,g.clientY,h,"")}),this.registerCollapsible(c,l,d,m,!0),d.append(p,l),o.appendChild(d)}return o}docsRootSection(t,e){const n=document.createElement("div");n.className="nav-subgroup nav-docs-root";const s=t.displayPath.split("/").pop()??t.displayPath;if(s.toLowerCase()!=="docs"){const a=document.createElement("div");a.className="nav-root-path-label",a.textContent=s,n.appendChild(a),a.addEventListener("contextmenu",r=>{r.preventDefault(),r.stopPropagation(),this.openDirContextMenu(r.clientX,r.clientY,t,"")})}return n.addEventListener("contextmenu",a=>{var r;(r=a.target)!=null&&r.closest(".nav-link, .nav-dir-toggle")||(a.preventDefault(),a.stopPropagation(),this.openDirContextMenu(a.clientX,a.clientY,t,""))}),this.enableDirectoryDropTarget(n,t.id,""),n.appendChild(this.docsNodes(t,As(e),"",e)),n}createDirectoryRow(t,e,n,s,o=!1){const a=document.createElement("div");a.className="nav-dir-header-row";const r=document.createElement("button");r.className=o?"nav-dir-toggle nav-dir-project":"nav-dir-toggle nav-dir-docs",r.type="button";const c=document.createElement("span");c.className="nav-repo-chevron",c.innerHTML='<svg viewBox="0 0 16 16" width="10" height="10" fill="currentColor"><path d="M6 4l4 4-4 4"/></svg>';const l=document.createElement("span");l.textContent=t,r.append(c,l),r.addEventListener("click",s);const d=document.createElement("a");return d.className="nav-repo-wiki-link nav-dir-wiki-link",d.href=e,d.title=n,d.innerHTML='<svg viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="2" width="10" height="10" rx="2"/><path d="M5 5h4M5 7h4M5 9h2"/></svg>',d.addEventListener("click",h=>h.stopPropagation()),this.links.set(e,d),a.append(r,d),{row:a,toggle:r}}docsNodes(t,e,n,s){const o=document.createElement("div"),a=Kn(e),r=Ns(s,n),c=[...a.map(l=>({kind:l.type==="file"&&ie(l.path)?"file":"doc",node:l})),...r.map(l=>({kind:"board",name:Nt(G(l.path).split("/").pop()??G(l.path)),boardId:G(l.path)}))].sort((l,d)=>{const h=l.kind==="doc"&&l.node.type==="file"&&l.node.name==="index.md",p=d.kind==="doc"&&d.node.type==="file"&&d.node.name==="index.md";if(h!==p)return h?-1:1;const m=(l.kind==="doc"||l.kind==="file")&&l.node.type==="file"&&_e(l.node.name),g=(d.kind==="doc"||d.kind==="file")&&d.node.type==="file"&&_e(d.node.name);if(m!==g)return m?-1:1;const y=(l.kind==="doc"||l.kind==="file")&&l.node.type==="dir",b=(d.kind==="doc"||d.kind==="file")&&d.node.type==="dir";if(y!==b)return y?-1:1;const x=l.kind==="board"?l.name:l.node.name,v=d.kind==="board"?d.name:d.node.name;return x.localeCompare(v)});for(const l of c)if(l.kind==="board"){const d=document.createElement("a");d.className="nav-link nav-link-board",d.href=on(t.id,l.boardId),d.insertAdjacentHTML("afterbegin",Dt),d.appendChild(document.createTextNode(l.name));const h=`board:${t.id}:${l.boardId}`;this.links.set(h,d),this.links.set(d.href,d),this.enableDragSource(d,{kind:"board",rootId:t.id,boardId:l.boardId}),d.addEventListener("contextmenu",p=>{p.preventDefault(),p.stopPropagation(),this.openBoardContextMenu(p.clientX,p.clientY,t,l.boardId)}),o.appendChild(d)}else{const{node:d}=l;if(d.type==="file"){if(l.kind==="file"){const m=document.createElement("button");m.className="nav-link nav-tree-file nav-tree-capability-file",m.type="button",m.insertAdjacentHTML("afterbegin",Le),m.appendChild(document.createTextNode(d.name)),m.addEventListener("click",()=>this.callbacks.onOpenTextFile(t.id,d.path)),m.addEventListener("contextmenu",g=>{g.preventDefault(),g.stopPropagation(),this.openTextFileContextMenu(g.clientX,g.clientY,t,d.path)}),o.appendChild(m);continue}if(!d.name.endsWith(".md"))continue;const h=d.name==="index.md"?"Overview":Nt(d.name),p=this.link(sn(t.id,d.path),h,`doc:${t.id}:${d.path}`);p.insertAdjacentHTML("afterbegin",Et),this.enableDragSource(p,{kind:"doc",rootId:t.id,path:d.path}),p.addEventListener("contextmenu",m=>{m.preventDefault(),m.stopPropagation(),this.openDocContextMenu(m.clientX,m.clientY,t,d.path)}),o.appendChild(p)}else{const h=`doc:${t.id}:${d.path}`,p=this.docsNodes(t,d.children,d.path,s);p.classList.add("nav-dir-body");const m=document.createElement("div");m.className="nav-subgroup nav-collapsible-dir";const{row:g,toggle:y}=this.createDirectoryRow(Nt(d.name),`#/root/${encodeURIComponent(t.id)}/directory/${encodeURIComponent(d.path)}`,`${d.name} wiki`,b=>{b.button===0&&this.toggleCollapsible(h)},!1);this.enableDragSource(y,{kind:"dir",rootId:t.id,path:d.path}),m.addEventListener("contextmenu",b=>{b.preventDefault(),b.stopPropagation(),this.openDirContextMenu(b.clientX,b.clientY,t,d.path)}),this.enableDirectoryDropTarget(m,t.id,d.path),this.registerCollapsible(h,p,m,y,!0),m.append(g,p),o.appendChild(m)}}return o}enableDragSource(t,e){t.draggable=!0,t.addEventListener("dragstart",n=>{var s,o;this.closeContextMenu(),this.draggedItem=e,t.classList.add("nav-dragging"),(s=n.dataTransfer)==null||s.setData("application/x-docs-nav-item",JSON.stringify(e)),(o=n.dataTransfer)==null||o.setData("text/plain",Xs(e)),n.dataTransfer&&(n.dataTransfer.effectAllowed="move")}),t.addEventListener("dragend",()=>{t.classList.remove("nav-dragging"),this.draggedItem=void 0,this.clearDropTargets()})}enableDirectoryDropTarget(t,e,n){t.addEventListener("dragover",s=>{const o=this.currentDragItem(s);!o||!this.canDropItem(o,e,n)||(s.preventDefault(),s.stopPropagation(),s.dataTransfer&&(s.dataTransfer.dropEffect="move"),t.classList.add("nav-drop-target"),this.scheduleDropExpand(t))}),t.addEventListener("dragleave",s=>{t.contains(s.relatedTarget)||(t.classList.remove("nav-drop-target"),this.clearDropExpand(t))}),t.addEventListener("drop",s=>{const o=this.currentDragItem(s);!o||!this.canDropItem(o,e,n)||(s.preventDefault(),s.stopPropagation(),this.clearDropExpand(t),this.clearDropTargets(),this.moveDraggedItem(o,n))})}scheduleDropExpand(t){this.dropExpandTarget===t||!t.dataset.collapsibleKey||(this.clearDropExpand(),this.dropExpandTarget=t,this.dropExpandTimer=window.setTimeout(()=>{const e=t.dataset.collapsibleKey;e&&this.applyCollapsed(e,!1),t.classList.add("nav-drop-auto-expanded"),this.dropExpandTimer=void 0},650))}clearDropExpand(t){var e;t&&this.dropExpandTarget!==t||(this.dropExpandTimer!==void 0&&window.clearTimeout(this.dropExpandTimer),this.dropExpandTimer=void 0,(e=this.dropExpandTarget)==null||e.classList.remove("nav-drop-auto-expanded"),this.dropExpandTarget=void 0)}currentDragItem(t){var n;if(this.draggedItem)return this.draggedItem;const e=(n=t.dataTransfer)==null?void 0:n.getData("application/x-docs-nav-item");if(e)try{const s=JSON.parse(e);if(s&&(s.kind==="doc"||s.kind==="capability"||s.kind==="board"||s.kind==="dir")&&typeof s.rootId=="string")return s}catch{}}canDropItem(t,e,n){if(t.rootId!==e)return!1;const s=xt(n);if(t.kind==="doc")return Ct(t.path)!==s;if(t.kind==="capability")return s==="capabilities"||s.startsWith("capabilities/")&&Ct(t.path)!==s;if(t.kind==="board")return Ct(t.boardId)!==s;const o=xt(t.path);return!o||o===s||Ct(o)===s?!1:!s.startsWith(`${o}/`)}moveDraggedItem(t,e){const n=xt(e);t.kind==="doc"||t.kind==="capability"?this.callbacks.onMoveDoc(t.rootId,t.path,n):t.kind==="board"?this.callbacks.onMoveBoard(t.rootId,t.boardId,n):this.callbacks.onMoveDirectory(t.rootId,t.path,n)}clearDropTargets(){this.clearDropExpand(),this.element.querySelectorAll(".nav-drop-target").forEach(t=>{t.classList.remove("nav-drop-target")})}startInlineRename(t,e,n){const s=document.createElement("input");s.className="nav-inline-input",s.value=e.replace(/\.md$/,"");const o=t.parentElement;if(!o)return;t.style.display="none",o.insertBefore(s,t.nextSibling),s.focus(),s.select();let a=!1;const r=c=>{if(!a&&(a=!0,s.remove(),t.style.display="",c)){const l=s.value.trim();l&&l!==e.replace(/\.md$/,"")&&n(l)}};s.addEventListener("keydown",c=>{c.stopPropagation(),c.key==="Enter"&&(c.preventDefault(),r(!0)),c.key==="Escape"&&(c.preventDefault(),r(!1))}),s.addEventListener("blur",()=>r(!0))}startInlineCreate(t,e,n){const s=document.createElement("input");s.className="nav-inline-input",s.placeholder=e,t.insertBefore(s,t.firstChild),s.focus();let o=!1;const a=r=>{if(!o&&(o=!0,s.remove(),r)){const c=s.value.trim();c&&n(c)}};s.addEventListener("keydown",r=>{r.stopPropagation(),r.key==="Enter"&&(r.preventDefault(),a(!0)),r.key==="Escape"&&(r.preventDefault(),a(!1))}),s.addEventListener("blur",()=>a(!0))}registerCollapsible(t,e,n,s,o){this.collapsibles.set(t,{body:e,group:n,btn:s}),n.dataset.collapsibleKey=t,this.applyCollapsed(t,this.collapsedState.get(t)??o)}applyCollapsed(t,e){const n=this.collapsibles.get(t);n&&(this.collapsedState.set(t,e),n.body.hidden=e,n.group.classList.toggle("collapsed",e),n.btn.setAttribute("aria-expanded",String(!e)))}toggleCollapsible(t){const e=this.collapsibles.get(t);e&&this.applyCollapsed(t,!e.body.hidden)}openDirContextMenu(t,e,n,s){const o=s?Nt(s.split("/").pop()??s):n.displayPath.split("/").pop()??n.displayPath,a=[{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateDirectory(n.id,s)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateBoard(n.id,s)},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateDoc(n.id,s)},{icon:Re,iconClass:"nav-ctx-cap",label:"New Capability",action:()=>this.callbacks.onCreateCapability(n.id,s)}];s&&a.push({icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDirectory(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDirectory(n.id,s)}),this.showContextMenu(t,e,o,a)}openEmptyProjectContextMenu(t,e,n,s){this.showContextMenu(t,e,s,[{icon:At,iconClass:"nav-ctx-dir",label:"New Directory",action:()=>this.callbacks.onCreateProjectDirectory(n)},{icon:Dt,iconClass:"nav-ctx-board",label:"New Board",action:()=>this.callbacks.onCreateProjectBoard(n)},{icon:Et,iconClass:"nav-ctx-doc",label:"New Doc",action:()=>this.callbacks.onCreateProjectDoc(n)}])}openDocContextMenu(t,e,n,s){const o=s.split("/").pop()??s;this.showContextMenu(t,e,o,[{icon:Et,iconClass:"nav-ctx-doc",label:"Open",action:()=>this.callbacks.onOpenDoc(n.id,s)},{icon:$e,iconClass:"nav-ctx-edit",label:"Edit",action:()=>this.callbacks.onEditDoc(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDoc(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDoc(n.id,s),danger:!0}])}openTextFileContextMenu(t,e,n,s){const o=s.split("/").pop()??s;this.showContextMenu(t,e,o,[{icon:Le,iconClass:"nav-ctx-doc",label:"Open",action:()=>this.callbacks.onOpenTextFile(n.id,s)},{icon:$e,iconClass:"nav-ctx-edit",label:"Edit",action:()=>this.callbacks.onOpenTextFile(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameDoc(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteDoc(n.id,s),danger:!0}])}openBoardContextMenu(t,e,n,s){const o=Nt(s.split("/").pop()??s);this.showContextMenu(t,e,o,[{icon:Dt,iconClass:"nav-ctx-board",label:"Open",action:()=>this.callbacks.onOpenBoard(n.id,s)},{kind:"divider"},{icon:le,iconClass:"nav-ctx-rename",label:"Rename",action:()=>this.callbacks.onRenameBoard(n.id,s)},{icon:Vt,iconClass:"nav-ctx-delete",label:"Delete",action:()=>this.callbacks.onDeleteBoard(n.id,s),danger:!0}])}showContextMenu(t,e,n,s){this.closeContextMenu();const o=document.createElement("div");o.className="nav-context-menu",o.addEventListener("pointerdown",c=>c.stopPropagation());const a=document.createElement("div");a.className="nav-context-label",a.textContent=n,o.appendChild(a);const r=document.createElement("div");r.className="nav-context-divider",o.appendChild(r);for(const c of s){if(c.kind==="divider"){const p=document.createElement("div");p.className="nav-context-divider",o.appendChild(p);continue}const l=document.createElement("button");l.className="nav-context-item"+(c.danger?" nav-context-item-danger":""),l.type="button";const d=document.createElement("span");d.className=`nav-ctx-icon ${c.iconClass}`,d.innerHTML=c.icon;const h=document.createElement("span");h.textContent=c.label,l.append(d,h),l.addEventListener("click",()=>{this.closeContextMenu(),c.action()}),o.appendChild(l)}o.style.position="fixed",o.style.left=`${t}px`,o.style.top=`${e}px`,document.body.appendChild(o),this.contextMenu=o,requestAnimationFrame(()=>{if(!this.contextMenu)return;const c=o.getBoundingClientRect();c.right>window.innerWidth&&(o.style.left=`${Math.max(0,t-c.width)}px`),c.bottom>window.innerHeight&&(o.style.top=`${Math.max(0,e-c.height)}px`)})}closeContextMenu(){var t;(t=this.contextMenu)==null||t.remove(),this.contextMenu=void 0}groupLabel(t){const e=document.createElement("div");return e.className="nav-label",e.textContent=t,e}link(t,e,n){const s=document.createElement("a");return s.className="nav-link",s.href=t,s.textContent=e,this.links.set(n,s),this.links.set(t,s),s}}const Dt='<svg class="nav-node-icon nav-node-icon-board" viewBox="0 0 16 16" aria-hidden="true"><rect x="1" y="1" width="6" height="6" rx="1"/><rect x="9" y="1" width="6" height="6" rx="1"/><rect x="1" y="9" width="6" height="6" rx="1"/><rect x="9" y="9" width="6" height="6" rx="1"/></svg>',Re='<svg class="nav-node-icon nav-node-icon-capability" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 1l2 4.5 4.5 0.7-3.3 3.1 0.8 4.7-4-2.1-4 2.1 0.8-4.7L1.5 6.2l4.5-0.7z"/></svg>',Et='<svg class="nav-node-icon nav-node-icon-doc" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 1.5h6.5l3 3V14.5H3z"/><path d="M9.5 1.5V4.5h3" stroke="none"/><line x1="5" y1="7" x2="11" y2="7" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="9.5" x2="11" y2="9.5" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="12" x2="9" y2="12" stroke="var(--bg-canvas)" stroke-width="0.8"/></svg>',Le='<svg class="nav-node-icon nav-node-icon-doc" viewBox="0 0 16 16" aria-hidden="true"><path d="M3 1.5h6.5l3 3V14.5H3z"/><path d="M9.5 1.5V4.5h3" stroke="none"/><line x1="5" y1="7" x2="11" y2="7" stroke="var(--bg-canvas)" stroke-width="0.8"/><line x1="5" y1="9.5" x2="11" y2="9.5" stroke="var(--bg-canvas)" stroke-width="0.8"/></svg>',At='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.45" stroke-linecap="round" stroke-linejoin="round"><path d="M2 4.5h4l1.4 1.6H14v6.4a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z"/><path d="M2 4.5v-1a1 1 0 0 1 1-1h3l1.4 2"/></svg>',$e='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M11 2l3 3-8 8H3v-3z"/></svg>',le='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h12M8 3v9M5 6l3-3 3 3"/></svg>',Vt='<svg class="nav-ctx-svg" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 4h12M5 4V2h6v2M6 7v5M10 7v5M3 4l1 9a1 1 0 001 1h6a1 1 0 001-1l1-9"/></svg>';function Kn(i){return i.filter(t=>t.type==="file"?t.name.endsWith(".md")||ie(t.path):!Ps.has(t.name)).map(t=>t.type==="file"?t:{...t,children:Kn(t.children)})}function As(i){const t=i.find(e=>e.type==="dir"&&e.name.toLowerCase()==="docs");return!t||t.type!=="dir"?i:i.filter(e=>e!==t).concat(t.children)}function Ns(i,t){const e=t?`${t}/`:"";return zs(i).filter(n=>e?n.path.startsWith(e)?!n.path.slice(e.length).includes("/"):!1:!n.path.includes("/"))}function zs(i){const t=[],e=n=>{for(const s of n)s.type==="file"?s.name.endsWith(".board.json")&&t.push(s):e(s.children)};return e(i),t}function sn(i,t){return`#/root/${encodeURIComponent(i)}/docs/${encodeURIComponent(t)}`}function Hs(i){return`#/root/${encodeURIComponent(i)}/boards`}function on(i,t){return`#/root/${encodeURIComponent(i)}/boards/${encodeURIComponent(t)}`}function Fs(i){return`#/root/${encodeURIComponent(i)}/capabilities`}function js(i,t){return`#/root/${encodeURIComponent(i)}/capabilities/${encodeURIComponent(Ws(t))}`}function Ws(i){return i.replace(/^capabilities\//,"")}function Os(i,t,e){const n=new Map,s=[],o=c=>{const l=xt(c),d=n.get(l);if(d)return d;const h=Ct(l),p={id:`folder:${i.id}:${l}`,kind:"folder",name:l.split("/").pop()??i.label,projectPath:l,children:[]};return n.set(l,p),l&&h?o(h).children.push(p):s.push(p),p},a=c=>{for(const l of c)if(l.type==="dir")o(l.path),a(l.children);else{const d={id:`file:${i.id}:${l.path}`,kind:"file",name:l.name,projectPath:l.path,children:[]};n.set(l.path,d);const h=Ct(l.path);h?o(h).children.push(d):s.push(d)}};a(t);for(const c of i.docsRoots){const l=xt(c.displayPath),d=o(l);d.kind="docsRoot",d.id=`root:${c.id}`,d.root=c,d.contentPath="";const h=p=>{for(const m of p){const g=[l,m.path].filter(Boolean).join("/");if(m.type==="dir"){const E=o(g);E.kind!=="docsRoot"&&(E.root=c,E.contentPath=m.path),h(m.children);continue}const y=m.name.endsWith(".board.json"),b=Vn(m.path),x=ie(m.path);if(!m.name.endsWith(".md")&&!y&&!x)continue;const v=Ct(g),S=n.get(g),w=S??{id:"",kind:"file",name:m.name,projectPath:g,children:[]};w.id=`${y?"board":b?"capability":x?"file":"doc"}:${c.id}:${m.path}`,w.kind=y?"board":b?"capability":x?"file":"doc",w.root=c,w.contentPath=m.path,S||(n.set(g,w),v?o(v).children.push(w):s.push(w))}};h(e.get(c.id)??[])}const r=(c,l)=>{const d=c.kind==="docsRoot"?c.root:c.root??l;if(d&&(c.kind==="folder"||c.kind==="file")&&!c.contentPath){c.root=d;const h=xt(d.displayPath);c.contentPath=c.projectPath.slice(h.length).replace(/^\//,"")}for(const h of c.children)r(h,d)};for(const c of s)r(c);return s}function Us(i){return[...i].sort((t,e)=>{const n=s=>s.kind==="doc"&&s.name==="index.md"?0:(s.kind==="doc"||s.kind==="file")&&_e(s.name)?1:s.kind==="doc"?2:s.kind==="capability"?3:s.kind==="board"?4:s.kind==="folder"&&s.root&&!s.docsContainerRoot?5:s.kind==="folder"&&s.docsContainerRoot?6:s.kind==="folder"&&!s.root?7:s.kind==="docsRoot"?8:9;return n(t)-n(e)||t.name.localeCompare(e.name,void 0,{sensitivity:"accent"})})}function _e(i){return/^readme\.(md|txt)$/i.test(i)}function ve(i,t,e=!1){const n=[];for(const s of i){if(s.kind==="docsRoot"){n.push({...s,children:ve(s.children,!1,!0)});continue}if(e){if(s.kind==="file"){ie(s.contentPath??"")&&n.push(s);continue}if(s.kind==="folder"){const o=ve(s.children,!1,!0);(s.name!=="assets"||o.length>0)&&n.push({...s,children:o})}else n.push(s);continue}if(s.kind==="folder"){const o=ve(s.children);o.length>0&&n.push({...s,children:o})}}return n}function Xe(i){var e;const t=[];for(const n of i){if(n.kind==="docsRoot"){t.push(...Xe(n.children));continue}if(n.kind!=="folder"){t.push(n);continue}const s=(e=n.children.find(o=>o.kind==="docsRoot"))==null?void 0:e.root;t.push({...n,docsContainerRoot:s,children:Xe(n.children)})}return t}function Nt(i){const t=i.replace(/\.md$/,"").replace(/[-_]/g," ");return t.charAt(0).toUpperCase()+t.slice(1)}function Vn(i){if(!i.startsWith("capabilities/")||!i.endsWith(".md"))return!1;const t=i.slice(13);return t.includes("/")?t.endsWith("/index.md"):!0}function ie(i){return!i.startsWith("capabilities/")||i.endsWith(".board.json")?!1:!Vn(i)}function _s(i){var t;return i.kind!=="folder"||!((t=i.contentPath)!=null&&t.startsWith("capabilities/"))?null:i.children.find(e=>e.kind==="capability"&&Ct(e.contentPath??"")===i.contentPath)??null}function Gn(i){if(i.type==="file")return!1;for(const t of i.children)if(t.type==="dir"&&t.name==="docs"||t.type==="dir"&&Gn(t))return!0;return!1}function xt(i){return i.replace(/^\/+|\/+$/g,"")}function Ct(i){const t=xt(i),e=t.lastIndexOf("/");return e===-1?"":t.slice(0,e)}function Xs(i){return i.kind==="doc"||i.kind==="capability"?i.path:i.kind==="board"?i.boardId:i.path}function Zn(i){if(i.kind==="root")return i.root;for(const t of i.children){const e=Zn(t);if(e)return e}return null}function ne(i,t={}){const{frontmatter:e,body:n}=qs(i);try{const s=Jn(n.split(`
|
|
2
2
|
`),t);return{frontmatter:e,html:s}}catch(s){return console.error("Markdown render failed",s),{frontmatter:e,html:`<div class="md-error"><strong>Could not render this document.</strong><pre>${Ut(String(s))}</pre></div>`}}}function qs(i){const t={};if(!i.startsWith("---"))return{frontmatter:t,body:i};const e=i.indexOf(`
|
|
3
3
|
---`,3);if(e===-1)return{frontmatter:t,body:i};const n=i.slice(3,e).trim();for(const o of n.split(`
|
|
4
4
|
`)){const a=o.indexOf(":");a!==-1&&(t[o.slice(0,a).trim()]=o.slice(a+1).trim())}const s=i.slice(e+4).replace(/^\n+/,"");return{frontmatter:t,body:s}}function Jn(i,t){const e=[];let n=0,s=0;const o=i.length*4+1e3;for(;n<i.length;){if(++s>o)throw new Error(`renderBlocks exceeded ${o} iterations at line ${n} — aborting to avoid an infinite loop`);const a=i[n];if(a.trim()===""){n++;continue}const r=a.match(/^(`{3,})\s*(\w+)?\s*$/);if(r){const d=r[1].length,h=(r[2]??"").toLowerCase(),p=new RegExp("^`{"+d+",}\\s*$"),m=[];for(n++;n<i.length&&!p.test(i[n]);)m.push(i[n]),n++;n++,h==="board"?e.push(Vs(ts(m.join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--brand-100: #ffffff;--brand-200: #4dabf7;--brand-300: #0078d4;--brand-400: #495057;--brand-500: #0078d4;--brand-600: #005a9e;--neutral-100: #f3f2f1;--neutral-200: #eaeaea;--neutral-300: #d1d1d1;--neutral-400: #c8c8c8;--neutral-500: #6e6e6e;--neutral-600: #7a7a7a;--neutral-700: #495057;--neutral-800: #4a4a4a;--neutral-900: #0f0f0f;--neutral-000: #ffffff;--success-main: #28a745;--success-bg: #e6f4ea;--success-text: #1e7e34;--warning-main: #dc2626;--warning-bg: #fef2f2;--warning-text: #ffffff;--error-main: #cd0000;--error-bg: #ffe5e5;--error-text: #b91c1c;--info-main: #1080a6;--info-bg: #e0f7fa;--info-text: #0369a1;--bg-canvas: var(--neutral-100);--bg-toolbar: rgba(255, 255, 255, .92);--bg-panel: var(--brand-100);--bg-hover: rgba(0, 0, 0, .05);--bg-active: rgba(0, 120, 212, .12);--surface-raised: var(--brand-100);--accent: var(--neutral-500);--accent-quiet: rgba(110, 110, 110, .14);--accent-soft: rgba(110, 110, 110, .08);--accent-secondary: var(--brand-300);--accent-secondary-quiet: rgba(0, 120, 212, .13);--focus-glow: rgba(0, 120, 212, .26);--text-primary: var(--neutral-900);--text-secondary: #6e6e6e;--border-subtle: rgba(0, 0, 0, .08);--selection: var(--accent);--shadow-soft: 0 4px 24px rgba(0, 0, 0, .08), 0 1px 3px rgba(0, 0, 0, .06);--shadow-modal: 0 12px 48px rgba(0, 0, 0, .18);--grid-dot: rgba(110, 110, 110, .16);--danger: var(--error-main)}[data-theme=dark]{--bg-canvas: #0d0d0d;--bg-toolbar: rgba(20, 22, 23, .94);--bg-panel: #1a1a1a;--bg-hover: rgba(255, 255, 255, .055);--bg-active: rgba(97, 218, 251, .12);--surface-raised: #212121;--accent: #61dafb;--accent-quiet: rgba(97, 218, 251, .14);--accent-soft: rgba(97, 218, 251, .075);--accent-secondary: #73d0f4;--accent-secondary-quiet: rgba(97, 218, 251, .18);--focus-glow: rgba(97, 218, 251, .28);--text-primary: #f6f6f3;--text-secondary: #a7aaa8;--border-subtle: rgba(255, 255, 255, .09);--selection: var(--accent);--shadow-soft: 0 16px 46px rgba(0, 0, 0, .52), 0 1px 1px rgba(255, 255, 255, .03);--shadow-modal: 0 22px 70px rgba(0, 0, 0, .72);--grid-dot: rgba(97, 218, 251, .1)}*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--bg-canvas);color:var(--text-primary)}#app{position:fixed;top:0;right:0;bottom:0;left:0}.canvas-stack{position:absolute;top:0;right:0;bottom:0;left:0}.canvas-stack canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block}.bottom-tool-cluster{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:10px;z-index:125}.toolbar{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:6px;background:var(--bg-toolbar);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:var(--shadow-soft);z-index:100}.bottom-tool-cluster .toolbar{position:relative;inset:auto;transform:none;z-index:1}.shape-tool-group{position:relative;display:flex}.shape-tool-popover{position:absolute;left:50%;bottom:calc(100% + 12px);transform:translate(-50%) translateY(8px) scale(.96);transform-origin:bottom center;display:grid;grid-template-columns:repeat(3,38px);gap:4px;padding:6px;background:var(--bg-toolbar);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:var(--shadow-soft);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);opacity:0;pointer-events:none;transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.shape-tool-group.open .shape-tool-popover{opacity:1;pointer-events:auto;transform:translate(-50%) translateY(0) scale(1)}.shape-option-btn{width:38px;height:38px}.shape-tool-popover:after{content:"";position:absolute;left:50%;bottom:-5px;width:10px;height:10px;transform:translate(-50%) rotate(45deg);background:var(--bg-toolbar);border-right:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle)}.context-tool-popover{position:relative;width:0;height:52px;transform:translate(-14px) scale(.96);transform-origin:left center;display:flex;align-items:center;gap:8px;padding:6px 0;background:var(--bg-toolbar);border:1px solid transparent;border-radius:999px;box-shadow:var(--shadow-soft);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);opacity:0;overflow:hidden;pointer-events:none;z-index:0;transition:width .26s cubic-bezier(.2,.8,.2,1),padding .26s cubic-bezier(.2,.8,.2,1),opacity .18s ease,transform .24s cubic-bezier(.2,.8,.2,1),border-color .18s ease}.context-tool-popover.is-visible{padding:6px 10px;border-color:var(--border-subtle);opacity:1;pointer-events:auto;transform:translate(0) scale(1)}.sticky-color-popover.is-visible{width:286px}.text-size-popover.is-visible{width:300px}.shape-style-popover.is-visible{width:386px}.sticky-color-btn,.shape-fill-btn{width:24px;height:24px;border:1px solid rgba(0,0,0,.16);border-radius:999px;background:var(--swatch);box-shadow:inset 0 0 0 1px #ffffff6b;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .12s ease,border-color .12s ease}.shape-text-color-btn{flex:0 0 auto;width:32px;height:32px;border:1px solid var(--border-subtle);border-radius:999px;background:var(--surface-raised);color:var(--text-primary);font-size:12px;font-weight:800;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .12s ease,border-color .12s ease,background .12s ease}.shape-text-color-btn[aria-label="White text"]{background:#fff;color:#252829}.shape-text-color-btn[aria-label="Black text"]{background:#252829;color:#fff}.context-tool-divider{width:1px;height:28px;background:var(--border-subtle);opacity:0;transform:scaleY(.65);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.text-size-btn{flex:1 1 0;min-width:0;height:38px;padding:0 8px;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:750;line-height:1;text-align:center;white-space:nowrap;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),background .12s ease,color .12s ease,border-color .12s ease}.context-tool-popover.is-visible .sticky-color-btn,.context-tool-popover.is-visible .shape-fill-btn,.context-tool-popover.is-visible .shape-text-color-btn,.context-tool-popover.is-visible .text-size-btn,.context-tool-popover.is-visible .context-tool-divider{opacity:1;transform:translate(0) scale(1)}.context-tool-popover.is-visible>:nth-child(2){transition-delay:15ms}.context-tool-popover.is-visible>:nth-child(3){transition-delay:.03s}.context-tool-popover.is-visible>:nth-child(4){transition-delay:45ms}.context-tool-popover.is-visible>:nth-child(5){transition-delay:.06s}.context-tool-popover.is-visible>:nth-child(6){transition-delay:75ms}.context-tool-popover.is-visible>:nth-child(7){transition-delay:.09s}.context-tool-popover.is-visible>:nth-child(8){transition-delay:.105s}.sticky-color-btn:hover,.shape-fill-btn:hover{transform:translateY(-1px) scale(1.04);box-shadow:inset 0 0 0 1px #ffffff85,0 4px 12px #00000029}.sticky-color-btn:focus-visible,.shape-fill-btn:focus-visible{outline:2px solid var(--selection);outline-offset:3px}.text-size-btn:hover,.text-size-btn:focus-visible{background:var(--bg-hover);color:var(--text-primary);outline:none}.shape-text-color-btn:hover,.shape-text-color-btn:focus-visible{border-color:color-mix(in srgb,var(--selection) 45%,var(--border-subtle));box-shadow:0 4px 12px #00000024;outline:none}.sticky-color-btn.active,.shape-fill-btn.active{border-color:var(--brand-500);box-shadow:inset 0 0 0 1px #ffffff8a,0 0 0 3px #428d3033}.shape-text-color-btn.active{border-color:var(--brand-500);box-shadow:0 0 0 3px #428d3033}.text-size-btn.active{border-color:color-mix(in srgb,var(--selection) 36%,var(--border-subtle));background:var(--bg-active);color:var(--text-primary)}[data-theme=dark] .sticky-color-btn,[data-theme=dark] .shape-fill-btn{border-color:#ffffff2e;box-shadow:inset 0 0 0 1px #00000029}.layer-menu{position:fixed;min-width:176px;padding:6px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:12px;box-shadow:var(--shadow-modal);z-index:150}.layer-menu-label{padding:8px 10px 5px;color:var(--text-secondary);font-size:11px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.layer-menu button{width:100%;height:34px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:var(--text-primary);font:inherit;font-size:13px;font-weight:650;text-align:left;cursor:pointer}.layer-menu button:hover,.layer-menu button:focus-visible{background:var(--bg-hover);outline:none}.layer-menu-divider{height:1px;margin:5px 6px;background:var(--border-subtle)}.toolbar-divider{width:1px;height:24px;background:var(--border-subtle);margin:0 4px}.tool-btn{position:relative;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border:none;border-radius:9px;background:transparent;color:var(--text-primary);cursor:pointer;transition:background .12s ease}.tool-btn:hover{background:var(--bg-hover)}.tool-btn:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.tool-btn.active{background:var(--bg-active);color:var(--selection)}.tool-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.tool-btn .tooltip{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%);white-space:nowrap;padding:5px 9px;font-size:11.5px;font-weight:500;border-radius:7px;background:var(--text-primary);color:var(--bg-panel);pointer-events:none;opacity:0;transition:opacity .12s ease}.tool-btn:hover .tooltip{opacity:1}.tooltip kbd{font-family:inherit;opacity:.65;margin-left:5px}.top-left{position:fixed;top:14px;left:14px;z-index:100;display:flex;align-items:center;gap:8px}.board-title{height:40px;padding:0 11px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:10px;box-shadow:var(--shadow-soft);font-size:13px;font-weight:600;color:var(--text-primary);border:1px solid var(--border-subtle);outline:none;min-width:60px;max-width:calc(100vw - 460px)}.board-title:focus{border-color:var(--selection)}.board-title-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:13px;font-weight:600;font-family:inherit}.top-right{position:fixed;top:14px;right:14px;z-index:100;display:flex;align-items:center;gap:8px}.control-group{display:flex;align-items:center;gap:2px;padding:4px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-soft)}.control-btn{display:flex;align-items:center;justify-content:center;height:30px;min-width:30px;padding:0 8px;border:none;border-radius:7px;background:transparent;color:var(--text-primary);font-size:12px;font-weight:500;cursor:pointer;transition:background .12s ease;position:relative}.control-btn:hover{background:var(--bg-hover)}.control-btn.danger-control:hover{color:var(--danger)}.control-btn:focus-visible{outline:2px solid var(--selection)}.control-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.zoom-label{font-variant-numeric:tabular-nums;min-width:48px;text-align:center}.board-live-status{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;background:var(--bg-toolbar);border:1px solid var(--border-subtle);box-shadow:var(--shadow-soft);font-size:12px;font-weight:600;color:var(--text-secondary)}.board-live-status[data-state=saved]{color:var(--success-text)}.board-live-status[data-state=stale]{color:var(--warning-main)}.board-live-status[data-state=error]{color:var(--danger)}.perf-overlay{position:fixed;top:60px;right:14px;z-index:99;padding:12px 14px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-soft);font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:11px;line-height:1.7;color:var(--text-primary);white-space:pre;pointer-events:none;display:none}.perf-overlay.visible{display:block}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:200;display:flex;align-items:center;justify-content:center}.modal{background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:16px;box-shadow:var(--shadow-modal);width:520px;max-width:calc(100vw - 40px);max-height:calc(100vh - 80px);overflow-y:auto;padding:24px}.modal h2{font-size:16px;font-weight:600;margin-bottom:16px}.modal-close{float:right;border:none;background:transparent;color:var(--text-secondary);font-size:18px;cursor:pointer;line-height:1;padding:2px 6px;border-radius:6px}.modal-close:hover{background:var(--bg-hover)}.modal .board-title{height:38px;max-width:none;padding:0 10px;background:var(--bg-panel);-webkit-backdrop-filter:none;backdrop-filter:none;border:1px solid var(--border-subtle);border-radius:8px;box-shadow:none;font-size:13px;font-weight:500}.modal .board-title:focus{border-color:color-mix(in srgb,var(--accent) 48%,var(--border-subtle));box-shadow:none}.command-palette{position:fixed;top:0;right:0;bottom:0;left:0;z-index:650;display:none;align-items:flex-start;justify-content:center;padding-top:min(120px,14vh);background:#0f172a47}.command-palette.visible{display:flex}.command-panel{width:min(640px,calc(100vw - 32px));max-height:min(620px,calc(100vh - 80px));overflow:hidden;border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-raised);box-shadow:var(--shadow-modal)}.command-search{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--border-subtle);color:var(--text-secondary)}.command-search svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.command-search input{flex:1 1 auto;min-width:0;border:none;outline:none;background:transparent;color:var(--text-primary);font:inherit;font-size:15px}.command-results{max-height:min(520px,calc(100vh - 160px));overflow-y:auto;padding:6px}.command-result{display:block;padding:10px 12px;border-radius:8px;color:var(--text-primary);text-decoration:none}.command-result:hover,.command-result.active{background:var(--bg-active)}.command-result-title{font-size:14px;font-weight:600;line-height:1.35}.command-result-meta,.command-result-summary{margin-top:3px;font-size:12px;line-height:1.45;color:var(--text-secondary)}.command-result-summary{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.command-result mark{border-radius:4px;padding:0 2px;background:var(--accent-quiet);color:inherit}.command-empty{padding:28px 16px;text-align:center;color:var(--text-secondary);font-size:13px}.template-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.template-card{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid var(--border-subtle);border-radius:10px;background:transparent;color:var(--text-primary);cursor:pointer;text-align:left;transition:border-color .12s ease,background .12s ease}.template-card:hover{border-color:var(--selection);background:var(--bg-hover)}.template-card .t-name{font-size:13px;font-weight:600}.template-card .t-desc{font-size:11.5px;color:var(--text-secondary);line-height:1.4}.storage-row{display:flex;justify-content:space-between;padding:8px 0;font-size:13px;border-bottom:1px solid var(--border-subtle)}.storage-row span:last-child{color:var(--text-secondary);font-variant-numeric:tabular-nums}.modal-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.modal-copy{color:var(--text-secondary);font-size:13.5px;line-height:1.6}.btn{padding:8px 14px;border:1px solid var(--border-subtle);border-radius:8px;background:transparent;color:var(--text-primary);font-size:12.5px;font-weight:500;cursor:pointer;transition:background .12s ease}.btn:hover{background:var(--bg-hover)}.btn.danger{color:var(--danger);border-color:var(--danger)}.btn.primary{background:var(--accent-secondary);border-color:var(--selection);color:#fff}.stress-panel{position:fixed;bottom:84px;left:50%;transform:translate(-50%);z-index:99;display:none;flex-wrap:wrap;gap:6px;max-width:640px;justify-content:center;padding:10px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:12px;box-shadow:var(--shadow-soft)}.stress-panel.visible{display:flex}.stress-panel .btn{font-size:11.5px;padding:6px 10px}.text-editor{position:absolute;z-index:50;border:1.5px solid var(--selection);border-radius:4px;background:transparent;color:inherit;resize:none;overflow:hidden;outline:none;padding:0;line-height:1.35}.toast{position:fixed;bottom:84px;left:50%;transform:translate(-50%) translateY(8px);z-index:300;padding:10px 18px;background:var(--text-primary);color:var(--bg-panel);border-radius:10px;font-size:13px;font-weight:500;box-shadow:var(--shadow-soft);opacity:0;transition:opacity .2s ease,transform .2s ease;pointer-events:none}.toast.visible{opacity:1;transform:translate(-50%) translateY(0)}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.shell{--sidebar-width: 270px;display:flex;width:100%;height:100%;overflow:hidden}.shell-main{flex:1 1 auto;min-width:0;height:100%;display:flex;flex-direction:column}.shell.sidebar-collapsed .sidebar{display:none}.shell-topbar{position:relative;flex:0 0 auto;height:58px;display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--border-subtle);background:color-mix(in srgb,var(--bg-panel) 94%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.topbar-icon-btn,.topbar-search,.topbar-cart,.topbar-edit,.topbar-machine,.topbar-theme{height:34px;border:1px solid var(--border-subtle);border-radius:8px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.topbar-icon-btn{width:34px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.topbar-icon-btn:hover,.topbar-search:hover,.topbar-cart:hover,.topbar-edit:hover,.topbar-machine:hover,.topbar-theme:hover{background:var(--bg-hover);color:var(--text-primary)}.topbar-icon-btn:focus-visible,.topbar-search:focus-visible,.topbar-cart:focus-visible,.topbar-edit:focus-visible,.topbar-machine:focus-visible,.topbar-theme:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.topbar-icon-btn svg,.topbar-search svg,.topbar-edit svg,.topbar-theme svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.topbar-search{width:min(360px,42vw);display:inline-flex;align-items:center;gap:9px;padding:0 8px 0 10px;text-align:left;font-size:13px}.topbar-search span{flex:1 1 auto;min-width:0}.topbar-search kbd{flex:0 0 auto;padding:2px 6px;border-radius:5px;background:var(--bg-hover);color:var(--text-secondary);font:11px/1.3 SF Mono,ui-monospace,Menlo,monospace}.topbar-cart{display:inline-flex;align-items:center;gap:8px;padding:0 10px 0 12px;font-size:13px;font-weight:500}.topbar-search{margin-right:auto}.topbar-cart[hidden]{display:none}.topbar-cart:disabled{opacity:.58;cursor:default}.topbar-cart strong{min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--accent-quiet);color:var(--selection);font-size:12px}.topbar-edit{display:inline-flex;align-items:center;gap:7px;padding:0 12px;font-size:13px;font-weight:500;margin-left:auto}.topbar-machine{display:inline-flex;align-items:center;gap:7px;padding:0 12px;font-size:13px;font-weight:500;border-color:color-mix(in srgb,var(--selection) 28%,var(--border-subtle))}.topbar-machine[hidden],.topbar-edit[hidden],.shell-topbar.editing-doc .topbar-cart{display:none}.topbar-cart-popover{position:absolute;top:calc(100% + 8px);right:58px;z-index:800;display:none;width:330px;filter:drop-shadow(0 16px 36px rgba(0,0,0,.16))}.topbar-cart-popover.visible{display:block}.topbar-cart-popover .capability-cart{position:static}.content.cart-popover-open .capability-layout>.capability-cart{visibility:hidden}.sidebar{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);height:100%;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:var(--surface-raised);padding:0 12px}.sidebar-resize-handle{flex:0 0 6px;width:6px;border:none;background:transparent;color:transparent;cursor:ew-resize;padding:0;display:inline-flex;align-items:center;justify-content:center;position:relative}.sidebar-resize-handle:before{content:"";width:1px;height:100%;background:transparent;transition:background .12s ease}.sidebar-resize-handle:hover{background:transparent}.sidebar-resize-handle:hover:before,body.sidebar-resizing .sidebar-resize-handle:before{background:color-mix(in srgb,var(--selection) 55%,var(--border-subtle))}.sidebar-resize-handle svg{width:10px;height:10px;stroke:transparent;fill:none;stroke-width:1.8}.shell.sidebar-collapsed .sidebar-resize-handle{display:none}.sidebar-header{display:flex;align-items:center;height:58px;padding:0 12px;border-bottom:1px solid transparent}.sidebar-brand{font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--text-primary);text-decoration:none;border:none;background:none;cursor:pointer;padding:0;font-family:inherit}.sidebar-nav{flex:1 1 auto;min-height:0;overflow-y:auto;padding-bottom:18px;scrollbar-width:thin;scrollbar-color:transparent transparent}.sidebar:hover .sidebar-nav{scrollbar-color:color-mix(in srgb,var(--border-subtle) 88%,transparent) transparent}.sidebar-nav::-webkit-scrollbar{width:10px}.sidebar-nav::-webkit-scrollbar-thumb{background:transparent;border-radius:999px}.sidebar:hover .sidebar-nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--border-subtle) 88%,transparent)}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.wiki-project-empty{display:grid;gap:12px}.wiki-project-empty p{margin:0}.sidebar-footer{flex:0 0 auto;padding:10px 0 14px;border-top:1px solid var(--border-subtle);background:var(--surface-raised)}.sidebar-add-repo{width:100%;height:36px;border:1px dashed color-mix(in srgb,var(--selection) 38%,var(--border-subtle));border-radius:8px;background:transparent;color:var(--text-secondary);font-size:13px;font-weight:600;cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.sidebar-add-repo:hover{background:var(--accent-soft);border-color:color-mix(in srgb,var(--selection) 58%,var(--border-subtle));color:var(--text-primary)}.nav-group{margin-bottom:18px}.nav-section-head,.nav-root-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.nav-repo-group{margin-bottom:10px}.nav-repo-header,.nav-dir-toggle{width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border:0;border-radius:7px;background:transparent;color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.06em;text-align:left;text-transform:uppercase;cursor:pointer}.nav-repo-header-row{display:flex;align-items:center;gap:4px;position:relative}.nav-repo-header-row .nav-repo-header{flex:1 1 auto;min-width:0}.nav-count-pill{flex:0 0 auto;padding:3px 8px;border:1px solid var(--border-subtle);border-radius:999px;background:color-mix(in srgb,var(--surface-raised) 82%,var(--accent-soft));color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.nav-dir-toggle{padding:4px 6px;font-size:11px;text-transform:none;letter-spacing:0;font-weight:650}.nav-dir-project{opacity:.85;color:var(--text-secondary)}.nav-dir-project:hover{opacity:1}.nav-dir-docs{opacity:1;color:var(--text-secondary);font-weight:600}.nav-repo-header,.nav-dir-toggle{transition:background .12s ease,color .12s ease,opacity .12s ease}.nav-repo-header:hover,.nav-dir-toggle:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-repo-header:focus-visible,.nav-dir-toggle:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.nav-repo-header>span:not(.nav-repo-chevron),.nav-dir-toggle>span:not(.nav-repo-chevron){flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-repo-chevron{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:12px;transform:rotate(90deg);transition:transform .12s ease}.nav-repo-group.collapsed .nav-repo-chevron{transform:rotate(0)}.nav-collapsible-dir.collapsed>.nav-dir-header-row .nav-dir-toggle .nav-repo-chevron{transform:rotate(0)}.nav-dir-header-row{display:flex;align-items:center;gap:4px;position:relative}.nav-dir-header-row .nav-dir-toggle{flex:1 1 auto;min-width:0}.nav-dir-header-row .nav-dir-wiki-link{flex:0 0 auto}.nav-repo-body[hidden],.nav-dir-body[hidden]{display:none}.nav-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);padding:6px 8px}.nav-empty-copy{font-size:12px;font-weight:500;text-transform:none;letter-spacing:.01em;line-height:1.45}.nav-subgroup{margin:2px 0 2px 8px}.nav-subgroup .nav-label{font-size:11px;text-transform:none;letter-spacing:0;font-weight:600;color:var(--text-secondary);opacity:.85}.nav-docs-root{margin:0 0 2px}.nav-root-path-label{padding:4px 8px 3px;font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary);opacity:.6;cursor:default;-webkit-user-select:none;user-select:none}.nav-root-path-label:hover{opacity:1;color:var(--text-secondary)}.nav-path-seg-toggle{font-size:12px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-secondary);opacity:.9}.nav-link{display:flex;align-items:center;padding:6px 10px;margin:1px 0;border-radius:7px;font-size:13px;line-height:1.4;color:var(--text-secondary);text-decoration:none;border-left:2px solid transparent;transition:background .12s ease,color .12s ease}.nav-link:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-link-muted{font-size:12px;opacity:.82}.nav-link.active{background:var(--bg-active);color:var(--selection);font-weight:600}.nav-tree-group,.nav-tree-children{margin:0;padding:0}.nav-tree-row{--tree-depth: 0;width:100%;min-height:28px;display:flex;align-items:center;gap:6px;padding:4px 8px 4px calc(8px + var(--tree-depth) * 16px);border:0;border-radius:6px;background:transparent;color:var(--text-secondary);font:inherit;font-size:13px;line-height:1.35;text-align:left;text-decoration:none}button.nav-tree-row{cursor:pointer}.nav-tree-row:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-tree-row:focus-visible{outline:2px solid var(--selection);outline-offset:-1px}.nav-tree-row.active{background:var(--bg-active);color:var(--selection);font-weight:600}.nav-tree-folder{font-weight:550}.nav-tree-docs-root{color:var(--text-primary);font-weight:650}.nav-tree-badge{margin-left:auto;color:var(--selection);font-size:9px;font-weight:700;letter-spacing:.06em}.nav-tree-doc{color:var(--text-secondary)}.nav-tree-board{color:var(--nav-board-color)}.nav-tree-capability,.nav-tree-capability-folder{color:var(--nav-cap-color)}.nav-tree-file,.nav-tree-scaffold{opacity:.52}.nav-tree-file{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-tree-capability-file{cursor:pointer;opacity:.76}.nav-tree-capability-file:hover{opacity:1}.nav-tree-scaffold:hover{opacity:.8}.nav-tree-group.collapsed>.nav-tree-row .nav-repo-chevron{transform:rotate(0)}.nav-tree-group.nav-drop-target>.nav-tree-row{position:relative;background:color-mix(in srgb,var(--selection) 13%,var(--surface-raised));color:var(--text-primary);outline:2px solid var(--selection);outline-offset:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--selection) 17%,transparent)}.nav-tree-group.nav-drop-target>.nav-tree-row:after{content:"Drop into";margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--selection);color:var(--bg-canvas);font-size:10px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.nav-tree-group.nav-drop-target.nav-drop-auto-expanded>.nav-tree-children{position:relative;margin:3px 0;border:1px dashed color-mix(in srgb,var(--selection) 68%,transparent);border-radius:5px;background:color-mix(in srgb,var(--selection) 5%,transparent)}[data-theme=dark] .nav-link.active{color:var(--neutral-100)}.nav-node-icon{flex:0 0 auto;width:13px;height:13px;margin-right:5px;vertical-align:middle;fill:currentColor;stroke:none;opacity:.85;position:relative;top:-1px}.nav-node-icon-doc{fill:#4285f4;opacity:1}.nav-node-icon-board{fill:#8b5cf6;opacity:1}[data-theme=dark] .nav-node-icon-board{fill:#a78bfa}.nav-node-icon-capability{fill:#f59e0b;opacity:1}[data-theme=dark] .nav-node-icon-capability{fill:#fbbf24}:root{--nav-board-color: #8b5cf6;--nav-board-bg: rgba(139, 92, 246, .08);--nav-board-bg-active: rgba(139, 92, 246, .15);--nav-cap-color: #8a6800;--nav-cap-bg: rgba(138, 104, 0, .08);--nav-cap-bg-active: rgba(138, 104, 0, .15)}[data-theme=dark]{--nav-board-color: #a78bfa;--nav-board-bg: rgba(167, 139, 250, .08);--nav-board-bg-active: rgba(167, 139, 250, .14);--nav-cap-color: #d4a800;--nav-cap-bg: rgba(212, 168, 0, .08);--nav-cap-bg-active: rgba(212, 168, 0, .14)}.nav-link-board{display:flex;align-items:center;color:var(--nav-board-color)}.nav-link-board:hover{background:var(--nav-board-bg);color:var(--nav-board-color)}.nav-link-board.active{background:var(--nav-board-bg-active);color:var(--nav-board-color);font-weight:600}.nav-link-capability{display:flex;align-items:center;color:var(--nav-cap-color)}.nav-link-capability:hover{background:var(--nav-cap-bg);color:var(--nav-cap-color)}.nav-link-capability.active{background:var(--nav-cap-bg-active);color:var(--nav-cap-color);font-weight:600}.nav-project-boards-row{margin-top:4px;padding-top:4px;border-top:1px solid var(--border-subtle)}.nav-context-menu{z-index:900;min-width:168px;padding:5px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-modal);-webkit-user-select:none;user-select:none}.nav-context-label{padding:5px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.nav-context-divider{height:1px;margin:4px 5px;background:var(--border-subtle)}.nav-context-item{width:100%;display:flex;align-items:center;gap:8px;height:32px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--text-primary);font:inherit;font-size:13px;text-align:left;cursor:pointer;white-space:nowrap}.nav-context-item:hover,.nav-context-item:focus-visible{background:var(--bg-hover);outline:none}.nav-context-item-danger{color:var(--danger)}.nav-context-item-danger:hover,.nav-context-item-danger:focus-visible{background:color-mix(in srgb,var(--danger) 8%,transparent)}.nav-dragging{opacity:.48;cursor:grabbing!important}.nav-link[draggable=true],.nav-dir-toggle[draggable=true]{cursor:pointer}.nav-drop-target>.nav-dir-toggle,.nav-drop-target>.nav-dir-header-row,.nav-drop-target.nav-repo-header,.nav-drop-target.nav-docs-root{background:color-mix(in srgb,var(--accent) 20%,transparent)!important;outline:2px solid var(--accent)!important;outline-offset:-2px;box-shadow:inset 0 0 8px color-mix(in srgb,var(--accent) 30%,transparent);border-radius:6px;position:relative}@keyframes dropPulse{0%,to{outline-color:var(--accent)}50%{outline-color:color-mix(in srgb,var(--accent) 60%,transparent)}}.nav-drop-target>.nav-dir-toggle,.nav-drop-target>.nav-dir-header-row,.nav-drop-target.nav-repo-header,.nav-drop-target.nav-docs-root{animation:dropPulse 1s ease-in-out infinite}.nav-ctx-icon{flex:0 0 auto;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center}.nav-ctx-icon svg.nav-node-icon{width:13px;height:13px;fill:currentColor;stroke:none}.nav-ctx-svg{width:14px;height:14px}.nav-ctx-doc,.nav-ctx-dir{color:var(--text-secondary)}.nav-ctx-board{color:var(--nav-board-color)}.nav-ctx-cap{color:var(--nav-cap-color)}.nav-ctx-edit,.nav-ctx-rename{color:var(--text-secondary)}.nav-ctx-delete{color:var(--danger)}.content-scroll{flex:1 1 auto;min-height:0;overflow-y:auto}.content{max-width:820px;margin:0 auto;padding:36px 40px 120px}.content.content-wide{max-width:1240px}.external-doc-eyebrow{margin:0 0 18px;color:var(--text-secondary);font-size:12px;font-weight:650;letter-spacing:.05em;text-transform:uppercase}.external-repo-overview .page-bar{align-items:flex-start}.repo-source-pill{flex:0 0 auto;padding:6px 10px;border:1px solid var(--border-subtle);border-radius:999px;color:var(--text-secondary);font-size:12px;font-weight:600}.external-doc-dir-list{display:grid;gap:22px}.external-doc-dir h2{margin:0 0 10px;color:var(--text-secondary);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.external-doc-file-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}.external-doc-card{display:flex;flex-direction:column;gap:4px;min-height:82px;padding:14px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-raised);color:var(--text-primary);text-decoration:none;transition:border-color .12s ease,background .12s ease,transform .12s ease}.external-doc-card:hover{border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));background:color-mix(in srgb,var(--accent) 4%,var(--surface-raised));transform:translateY(-1px)}.external-doc-card strong{font-size:14px;line-height:1.3}.external-doc-card span{color:var(--text-secondary);font-size:12px;line-height:1.35;overflow-wrap:anywhere}.page-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px}.page-bar h1{margin:0}.page-bar-label{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.page-lead{color:var(--text-secondary);font-size:14px;line-height:1.6;margin:4px 0 24px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}.card{position:relative;display:flex;flex-direction:column;gap:10px;min-height:190px;padding:18px;border:1px solid var(--border-subtle);border-radius:8px;text-decoration:none;color:var(--text-primary);background:var(--surface-raised);transition:border-color .12s ease,background .12s ease,transform .12s ease}.card:is(button){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;text-align:left;font:inherit;cursor:pointer}.card:hover{border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));transform:translateY(-1px)}.card.selected{border-color:color-mix(in srgb,var(--selection) 72%,var(--border-subtle));background:color-mix(in srgb,var(--accent) 5%,var(--surface-raised))}.card.selected:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;border-radius:8px 0 0 8px;background:var(--selection)}.card-title{max-width:92%;font-size:16px;font-weight:650;line-height:1.25;letter-spacing:0}.card-title a{color:inherit;text-decoration:none}.card-title a:hover{color:var(--selection)}.card-desc{font-size:13px;color:var(--text-secondary);line-height:1.55}.card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.card-actions{padding-top:4px}.card-actions .btn{height:30px;padding:0 11px;border-radius:999px;font-size:12px}.card-actions .capability-add-btn.primary{background:transparent;border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));color:var(--selection)}.card-actions .capability-add-btn.primary:hover{background:var(--accent-soft)}.card-actions .capability-add-btn:not(.primary){border-color:transparent;background:var(--bg-hover);color:var(--text-secondary)}.tag{font-size:11px;padding:3px 8px;border-radius:999px;background:var(--accent-secondary-quiet);color:color-mix(in srgb,var(--accent-secondary) 72%,var(--text-primary))}.empty-note{grid-column:1 / -1;padding:32px;text-align:center;color:var(--text-secondary);border:1px dashed var(--border-subtle);border-radius:12px}.capability-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:28px;align-items:start}.capability-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.capability-library h1{font-size:32px;letter-spacing:0;margin-bottom:6px}.capability-library .page-lead{max-width:680px;margin-bottom:28px}.capability-meta-tags{margin:0 0 18px}.capability-entry-section{margin-top:6px}.capability-entry-lead{max-width:760px;margin-top:0;margin-bottom:18px}.capability-files-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.board-library .page-lead{max-width:760px}.board-grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:18px}.token-library .page-bar{margin-bottom:6px}.token-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.token-section{margin-top:30px}.token-section h2{margin:0 0 14px;font-size:17px;font-weight:700}.token-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.token-card{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 44px;align-items:stretch;min-height:72px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-raised);overflow:hidden;transition:border-color .12s ease,background .12s ease}.token-card:hover{border-color:color-mix(in srgb,var(--selection) 36%,var(--border-subtle))}.token-card.selected{border-color:var(--brand-500);background:color-mix(in srgb,var(--accent) 4%,var(--surface-raised))}.token-card input{position:absolute;opacity:0;pointer-events:none}.token-select-zone{display:grid;grid-template-columns:42px minmax(0,1fr);gap:12px;align-items:center;padding:10px;cursor:pointer}.token-copy-btn{display:flex;align-items:center;justify-content:center;width:44px;border:none;border-left:1px solid var(--border-subtle);background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease}.token-copy-btn:hover{background:var(--accent-soft);color:var(--selection)}.token-copy-btn:focus-visible{outline:2px solid var(--selection);outline-offset:-2px}.token-copy-btn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.token-swatch{width:42px;height:42px;border:1px solid var(--border-subtle);border-radius:7px;box-shadow:inset 0 0 0 1px #00000005}[data-theme=dark] .card,[data-theme=dark] .token-card,[data-theme=dark] .capability-cart,[data-theme=dark] .command-panel,[data-theme=dark] .modal{border-color:#ffffff14;box-shadow:0 1px #ffffff06,0 18px 48px #0000005c}[data-theme=dark] .card:hover,[data-theme=dark] .token-card:hover{border-color:color-mix(in srgb,var(--accent) 38%,rgba(255,255,255,.12))}[data-theme=dark] .shell-topbar,[data-theme=dark] .sidebar{border-color:#ffffff13}[data-theme=dark] .nav-link.active{background:#a3a27e29;color:#fff}[data-theme=dark] .btn.primary{color:#111312}.token-copy{min-width:0;display:grid;gap:2px}.token-copy strong{font-size:13px;line-height:1.25}.token-copy code{color:var(--text-secondary);font:12px/1.25 SF Mono,ui-monospace,Menlo,monospace;background:transparent}.token-copy small{color:var(--text-secondary);font-size:11.5px;line-height:1.3}.capability-cart{position:sticky;top:18px;border:1px solid var(--border-subtle);border-radius:8px;background:color-mix(in srgb,var(--bg-panel) 96%,var(--bg-hover));overflow:hidden;box-shadow:0 1px #00000005}.capability-cart-head,.capability-cart-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px;border-bottom:1px solid var(--border-subtle)}.capability-cart-actions{border-top:1px solid var(--border-subtle);border-bottom:none}.capability-cart-head h2{margin:0;font-size:13px;font-weight:650;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.capability-cart-count{min-width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--accent-quiet);color:var(--selection);font-size:12px;font-weight:700}.capability-cart-body{display:flex;flex-direction:column;gap:4px;max-height:420px;overflow-y:auto;padding:8px}.capability-cart-empty{padding:22px 12px;color:var(--text-secondary);font-size:12.5px;line-height:1.5}.capability-cart-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px;border-radius:8px;background:var(--surface-raised);border:1px solid transparent}.capability-cart-item:hover{border-color:var(--border-subtle)}.capability-cart-item-title{font-size:13px;font-weight:600;line-height:1.35}.capability-cart-item-meta{margin-top:2px;font-size:11px;color:var(--text-secondary);line-height:1.35}.capability-cart-remove{border:none;background:transparent;color:var(--text-secondary);font-size:11.5px;cursor:pointer;padding:1px 0}.capability-cart-remove:hover{color:var(--danger)}.markdown-body{font-size:15px;line-height:1.7;color:var(--text-primary)}.markdown-body h1{font-size:30px;font-weight:700;margin:8px 0 20px;letter-spacing:-.015em}.markdown-body h2{font-size:22px;font-weight:650;margin:36px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--border-subtle)}.markdown-body h3{font-size:17px;font-weight:650;margin:26px 0 10px}.markdown-body h4{font-size:15px;font-weight:650;margin:20px 0 8px}.markdown-body p{margin:14px 0}.markdown-body a{color:var(--selection);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body ul,.markdown-body ol{margin:14px 0;padding-left:26px}.markdown-body li{margin:5px 0}.markdown-body li.task{list-style:none;margin-left:-22px}.markdown-body li.task input{margin-right:8px}.markdown-body blockquote{margin:16px 0;padding:4px 16px;border-left:3px solid var(--selection);background:var(--bg-hover);border-radius:0 8px 8px 0;color:var(--text-secondary)}.markdown-body code{font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:.86em;background:var(--bg-hover);padding:2px 6px;border-radius:5px}.markdown-body pre.code-block{position:relative;margin:16px 0;padding:16px;background:var(--bg-hover);border:1px solid var(--border-subtle);border-radius:10px;overflow-x:auto}.markdown-body pre.code-block code{background:none;padding:0;font-size:13px;line-height:1.6}.code-copy-btn{position:absolute;top:10px;right:10px;height:26px;padding:0 9px;border:1px solid var(--border-subtle);border-radius:7px;background:color-mix(in srgb,var(--bg-panel) 92%,var(--surface-raised));color:var(--text-secondary);font-size:11.5px;font-weight:600;cursor:pointer}.code-copy-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.markdown-body img{max-width:100%;border-radius:8px}.markdown-body hr{border:none;border-top:1px solid var(--border-subtle);margin:32px 0}.markdown-body .markdown-table-scroll{width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;margin:18px 0}.markdown-body table{width:max-content;min-width:100%;border-collapse:collapse;margin:0;font-size:13.5px}.markdown-body th,.markdown-body td{border:1px solid var(--border-subtle);padding:8px 12px;text-align:left;white-space:normal;word-break:break-word;overflow-wrap:anywhere;max-width:min(28rem,40vw)}.markdown-body th{background:var(--bg-hover);font-weight:600}.markdown-body .md-error{margin:16px 0;padding:14px 16px;border:1px solid #ef4444;border-radius:10px;background:#ef444414;color:var(--text-primary)}.markdown-body .md-error pre{margin:8px 0 0;font-size:12px;white-space:pre-wrap;color:var(--text-secondary)}.board-embed{margin:24px 0}.board-embed-frame{position:relative;width:100%;border:1px solid var(--border-subtle);border-radius:12px;overflow:hidden;background:var(--bg-canvas);box-shadow:var(--shadow-soft);display:flex;align-items:center;justify-content:center}.board-embed-frame canvas{display:block}.board-embed-frame.error{color:var(--text-secondary);font-size:13px}.board-embed-msg{padding:24px}.board-embed-open{position:absolute;bottom:10px;right:10px;padding:5px 10px;font-size:12px;font-weight:500;border-radius:8px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border-subtle);color:var(--text-primary);text-decoration:none;opacity:0;transition:opacity .15s ease}.board-embed-frame:hover .board-embed-open{opacity:1}.board-embed figcaption{margin-top:8px;font-size:12.5px;color:var(--text-secondary);text-align:center}.board-editor-host{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500}.top-left .back-btn{height:40px;width:auto;gap:6px;padding:0 12px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);box-shadow:var(--shadow-soft);font-size:13px;font-weight:500}.top-left .back-btn span{line-height:1}.embed-select-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;cursor:crosshair;background:#0f172a2e}.embed-select-rect{position:absolute;border:1.5px solid var(--selection);background:color-mix(in srgb,var(--selection) 16%,transparent);box-shadow:0 0 0 9999px #0f172a1f;pointer-events:none}.embed-select-hint{position:fixed;top:16px;left:50%;transform:translate(-50%);padding:8px 14px;border-radius:10px;font-size:13px;font-weight:500;color:#fff;background:#0f172ad1;pointer-events:none}.doc-page{position:relative}.doc-actions{display:flex;justify-content:flex-end;gap:8px;margin-bottom:8px}.btn.doc-edit{background:transparent;border-color:var(--border-subtle);color:var(--text-secondary);font-weight:500}.btn.doc-edit:hover{background:var(--bg-hover);color:var(--text-primary)}.capability-doc-actions{align-items:center}.capability-doc-actions .capability-detail-btn,.capability-doc-actions .capability-detail-btn.primary{height:34px;padding:0 13px;border-radius:999px;background:transparent;border-color:color-mix(in srgb,var(--selection) 34%,var(--border-subtle));color:var(--text-primary);font-size:12.5px;font-weight:500}.capability-doc-actions .capability-detail-btn:hover,.capability-doc-actions .capability-detail-btn.primary:hover{background:var(--accent-soft);color:var(--text-primary)}.capability-doc-actions .capability-detail-btn.is-selected{background:var(--accent-secondary);border-color:var(--accent-secondary);color:#fff}.capability-doc-actions .capability-detail-btn.is-selected:hover{background:color-mix(in srgb,var(--accent-secondary) 88%,#000);color:#fff}.markdown-body figure.board-embed.embed-chip{display:flex;align-items:center;gap:8px;padding:12px 16px;border:1px dashed var(--border-subtle);border-radius:10px;background:var(--bg-hover);color:var(--text-secondary);font-size:13px;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none}.markdown-body figure.board-embed.embed-chip:hover,.markdown-body figure.board-embed.embed-chip.selected,.markdown-body figure.board-embed.embed-chip:focus{border-color:color-mix(in srgb,var(--selection) 54%,var(--border-subtle));background:var(--accent-soft);color:var(--text-primary)}.embed-chip-icon{font-size:15px}.embed-chip-remove{margin-left:auto;color:var(--text-secondary);font-size:12px;font-weight:600;opacity:0;transition:opacity .12s ease}.embed-chip:hover .embed-chip-remove,.embed-chip.selected .embed-chip-remove,.embed-chip:focus .embed-chip-remove{opacity:.85}.doc-editor-surface .embed-caret-spacer{min-height:1.35em}.doc-editor{position:fixed;top:0;right:0;bottom:0;left:0;z-index:700;display:flex;flex-direction:column;background:var(--bg-canvas)}.doc-editor-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 16px;border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas)}.doc-editor-bar-left{display:flex;align-items:center;gap:12px;min-width:0}.doc-editor-done{padding:7px 16px;border:1px solid var(--border-subtle);background:transparent;color:var(--text-secondary);border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;transition:background .12s ease,color .12s ease}.doc-editor-done:hover{background:var(--bg-hover);color:var(--text-primary)}.doc-editor-path{font-size:12.5px;color:var(--text-secondary);font-family:SF Mono,ui-monospace,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc-editor-status{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary);opacity:.6;white-space:nowrap}.doc-editor-status[data-state=stale]{color:var(--warning-main);opacity:1;font-weight:600}.doc-editor-status[data-state=error]{color:var(--danger);opacity:1;font-weight:600}.status-action-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid currentColor;background:transparent;color:inherit;border-radius:999px;padding:2px 8px;font:inherit;font-weight:600;cursor:pointer}.doc-editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:7px 16px;border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas);position:sticky;top:0;z-index:1}.doc-editor-tb-group{display:flex;align-items:center;gap:3px;padding:3px;border:1px solid var(--border-subtle);border-radius:10px;background:color-mix(in srgb,var(--surface-raised) 72%,transparent)}.doc-editor-tb-btn{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 8px;border:none;border-radius:8px;background:transparent;color:var(--text-secondary);font-size:13px;font-weight:600;cursor:pointer;transition:background .12s ease,color .12s ease}.doc-editor-tb-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.doc-editor-tb-btn.active{background:var(--accent-secondary-quiet);color:var(--text-primary);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent-secondary) 28%,transparent)}.doc-editor-tb-btn:focus-visible{outline:2px solid var(--selection);outline-offset:2px}.doc-editor-tb-btn.icon svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.doc-editor-scroll{flex:1 1 auto;overflow-y:auto}.doc-editor-surface{max-width:820px;margin:0 auto;padding:36px 40px 160px;min-height:100%;outline:none;background:transparent}.doc-editor-surface:focus{outline:none}.doc-editor-surface img{cursor:default}.doc-editor-surface:empty:before{content:"Start writing...";color:var(--text-secondary);opacity:.55}.doc-editor-surface a{cursor:text}.doc-editor-surface pre.code-block{position:relative}.doc-editor-surface pre.code-block:focus-within{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--selection) 34%,transparent)}.text-file-editor-scroll{padding:0}.text-file-editor-textarea{width:100%;min-height:100%;padding:24px 28px 160px;border:none;background:transparent;color:var(--text-primary);font:14px/1.6 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;resize:none;-moz-tab-size:2;tab-size:2}.text-file-editor-textarea:focus{outline:none}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:20px;font-size:12px;font-weight:500;color:var(--text-secondary)}.breadcrumb-link{color:var(--text-secondary);text-decoration:none;padding:2px 4px;border-radius:4px;transition:color .1s ease,background .1s ease}.breadcrumb-link:hover{color:var(--text-primary);background:var(--bg-hover)}.breadcrumb-sep{color:var(--text-secondary);opacity:.4;-webkit-user-select:none;user-select:none;padding:0 2px}.breadcrumb-current{color:var(--text-primary);font-weight:600}.page-nav{display:flex;align-items:stretch;justify-content:space-between;gap:12px;margin-top:56px;padding-top:20px;border-top:1px solid var(--border-subtle)}.page-nav-prev,.page-nav-next{display:flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--border-subtle);border-radius:10px;text-decoration:none;color:var(--text-secondary);background:var(--surface-raised);font-size:13px;font-weight:500;min-width:0;max-width:48%;transition:border-color .12s ease,background .12s ease,color .12s ease}.page-nav-prev:hover,.page-nav-next:hover{border-color:color-mix(in srgb,var(--selection) 45%,var(--border-subtle));background:var(--bg-hover);color:var(--text-primary)}.page-nav-prev{margin-right:auto}.page-nav-next{margin-left:auto;flex-direction:row-reverse}.page-nav-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.page-nav-arrow{flex:0 0 auto;font-size:15px;line-height:1;color:var(--text-secondary);transition:color .12s ease}.page-nav-prev:hover .page-nav-arrow,.page-nav-next:hover .page-nav-arrow{color:var(--text-primary)}.page-nav-spacer{flex:1}.sidebar-brand{border:none;background:none;cursor:pointer;font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--text-primary);text-decoration:none;padding:0;transition:color .12s ease}.sidebar-brand:hover{color:var(--selection)}.sidebar-brand:focus-visible{outline:2px solid var(--selection);outline-offset:3px;border-radius:4px}.sidebar-docs-mode .sidebar-brand{color:var(--selection)}.sidebar-docs-mode .sidebar-brand:after{content:" ·";opacity:.4}.docs-mode-back-row{padding:8px 0 4px}.docs-mode-back{display:flex;align-items:center;gap:6px;border:none;background:none;cursor:pointer;font-size:12px;font-weight:600;color:var(--text-secondary);padding:5px 8px;border-radius:7px;width:100%;text-align:left;transition:background .1s ease,color .1s ease}.docs-mode-back:hover{background:var(--bg-hover);color:var(--text-primary)}.docs-mode-back svg{width:12px;height:12px;flex:0 0 auto}.docs-mode-tree{padding-left:0}.home-page{padding-top:8px}.home-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:36px;align-items:start}.home-guide{min-width:0}.home-hero-title{font-size:30px;font-weight:750;letter-spacing:-.02em;line-height:1.1;margin:0 0 8px;color:var(--text-primary)}.home-hero-sub{font-size:14px;line-height:1.65;color:var(--text-secondary);margin:0 0 32px}.home-agent-callout{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0 0 28px;padding:12px 14px;border:1px solid var(--border-subtle);border-radius:10px;background:color-mix(in srgb,var(--surface-raised) 88%,var(--accent-soft))}.home-agent-copy{margin:0;font-size:13px;color:var(--text-secondary);line-height:1.5}.home-agent-btn{flex:0 0 auto}.home-feature{margin-bottom:28px;padding-bottom:28px;border-bottom:1px solid var(--border-subtle)}.home-feature:last-of-type{border-bottom:none}.home-feature-header{margin-bottom:8px}.home-feature-badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;border:1px solid var(--border-subtle);background:var(--accent-soft);color:var(--text-secondary)}.home-feature-badge-board{background:var(--nav-board-bg);color:var(--nav-board-color);border-color:color-mix(in srgb,var(--nav-board-color) 25%,var(--border-subtle))}.home-feature-badge-capability{background:var(--nav-cap-bg);color:var(--nav-cap-color);border-color:color-mix(in srgb,var(--nav-cap-color) 25%,var(--border-subtle))}.home-feature-badge-doc{background:var(--accent-soft);color:var(--text-secondary)}.home-feature-body{font-size:13.5px;line-height:1.65;color:var(--text-secondary);margin:0 0 10px}.home-feature-list{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:4px}.home-feature-list li{font-size:13px;line-height:1.55;color:var(--text-secondary)}.home-shortcut-title{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary);margin:32px 0 10px}.home-shortcut-table{display:grid;gap:1px;background:var(--border-subtle);border:1px solid var(--border-subtle);border-radius:10px;overflow:hidden}.home-shortcut-row{display:flex;align-items:center;gap:16px;padding:7px 12px;background:var(--surface-raised)}.home-shortcut-row:hover{background:var(--bg-hover)}.home-shortcut-key{flex:0 0 auto;min-width:200px;font:11.5px/1.4 SF Mono,ui-monospace,Menlo,monospace;color:var(--text-primary);background:transparent;border:none;padding:0}.home-shortcut-desc{font-size:12.5px;color:var(--text-secondary)}.home-panel{position:sticky;top:24px;border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-raised);overflow:hidden}.home-panel-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-subtle)}.home-panel-title{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary)}.home-panel-add{padding:4px 10px;font-size:12px;height:auto}.home-panel-empty{padding:20px 14px;font-size:13px;color:var(--text-secondary);line-height:1.5}.home-panel-project{border-bottom:1px solid var(--border-subtle)}.home-panel-project:last-child{border-bottom:none}.home-panel-project-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:10px 14px 6px;text-decoration:none;border-bottom:1px solid var(--border-subtle);transition:background .1s ease}.home-panel-project-head:hover{background:var(--bg-hover)}.home-panel-project-name{font-size:13px;font-weight:650;color:var(--text-primary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-panel-project-meta{flex:0 0 auto;font-size:11px;color:var(--text-secondary);white-space:nowrap}.home-panel-roots{display:flex;flex-direction:column}.home-panel-root{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:5px 14px;text-decoration:none;transition:background .1s ease;border-bottom:1px solid color-mix(in srgb,var(--border-subtle) 50%,transparent)}.home-panel-root:last-of-type{border-bottom:none}.home-panel-root:hover{background:var(--bg-hover)}.home-panel-root-path{font-size:11.5px;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-panel-root:hover .home-panel-root-path{color:var(--text-primary)}.home-panel-root-meta{flex:0 0 auto;font-size:10.5px;color:var(--text-secondary);opacity:.7;white-space:nowrap}.home-panel-more{display:block;padding:6px 14px 8px;font-size:11.5px;color:var(--text-secondary);text-decoration:none}.home-panel-more:hover{color:var(--text-primary)}.nav-repo-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-repo-wiki-link{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;color:var(--text-secondary);opacity:0;transition:opacity .12s ease,background .12s ease;text-decoration:none}.nav-repo-header:hover .nav-repo-wiki-link,.nav-dir-toggle:hover .nav-repo-wiki-link,.nav-dir-header-row:hover .nav-dir-wiki-link,.nav-repo-wiki-link:focus-visible{opacity:1}.nav-dir-project~.nav-dir-wiki-link{opacity:0}.nav-dir-header-row:hover .nav-dir-project~.nav-dir-wiki-link{opacity:.7}.nav-repo-wiki-link:hover{background:var(--bg-active);color:var(--text-primary)}.nav-repo-wiki-link svg{width:12px;height:12px}.wiki-page{padding-top:4px}.wiki-head{margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--border-subtle)}.wiki-back{display:inline-block;font-size:12px;color:var(--text-secondary);text-decoration:none;margin-bottom:10px}.wiki-back:hover{color:var(--text-primary)}.wiki-title{font-size:26px;font-weight:750;letter-spacing:-.01em;margin:0 0 16px}.wiki-stats{display:flex;gap:24px;flex-wrap:wrap}.wiki-stat{text-align:left}.wiki-stat-val{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text-primary);line-height:1}.wiki-stat-label{font-size:11px;color:var(--text-secondary);margin-top:2px;text-transform:uppercase;letter-spacing:.05em;font-weight:600}.wiki-root-section{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid var(--border-subtle)}.wiki-root-section:last-child{border-bottom:none}.wiki-root-head{margin-bottom:12px}.wiki-root-path{font-size:12px;font-weight:700;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);letter-spacing:.01em}.wiki-root-empty{font-size:12px;color:var(--text-secondary);font-style:italic}.wiki-root-cols{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.wiki-col-head{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);margin-bottom:6px;padding-bottom:5px;border-bottom:1px solid var(--border-subtle)}.wiki-col-list{display:flex;flex-direction:column;gap:1px}.wiki-col-item{display:block;padding:4px 6px;border-radius:5px;font-size:12.5px;text-decoration:none;color:var(--text-secondary);transition:background .1s ease,color .1s ease;text-transform:capitalize}.wiki-col-item:hover{background:var(--bg-hover);color:var(--text-primary)}.wiki-col-item-board{color:var(--nav-board-color)}.wiki-col-item-board:hover{background:var(--nav-board-bg);color:var(--nav-board-color)}.wiki-col-item-cap{color:var(--nav-cap-color)}.wiki-col-item-cap:hover{background:var(--nav-cap-bg);color:var(--nav-cap-color)}.wiki-col-item-path{display:block;font-size:10.5px;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);opacity:.6;margin-top:1px}@media (max-width: 720px){.sidebar{flex-basis:220px;width:220px}.shell-topbar{padding:10px 12px}.topbar-search{width:auto;flex:1 1 auto}.topbar-search kbd,.topbar-edit span{display:none}.topbar-edit{width:34px;padding:0;justify-content:center}.capability-layout{grid-template-columns:1fr}.capability-cart{position:static}.content{padding:32px 20px 100px}.doc-editor-surface{padding:24px 18px 140px}}.nav-repo-more{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;padding:0;margin-left:auto;margin-right:2px;background:transparent;border:none;border-radius:4px;color:var(--text-secondary);cursor:pointer;opacity:0;transition:opacity .12s ease,background .12s ease}.nav-repo-header-row:hover .nav-repo-more{opacity:.5}.nav-repo-more:focus-visible{outline:2px solid var(--selection);outline-offset:1px;opacity:1}.nav-repo-more:hover{background:var(--bg-hover);opacity:1!important}.nav-browse-dir-toggle{display:flex;align-items:center;gap:4px;width:100%;padding:4px 8px;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);font-size:13px;cursor:pointer;text-align:left;opacity:.45;transition:opacity .12s ease,background .12s ease}.nav-browse-dir-toggle:hover{background:var(--bg-hover);opacity:.75}.nav-inline-input{display:block;width:100%;padding:4px 8px;margin:1px 0;font:inherit;font-size:13px;color:var(--text-primary);background:var(--bg-canvas);border:1px solid var(--brand-300);border-radius:4px;outline:none;box-shadow:0 0 0 2px #0078d426}.nav-inline-input::placeholder{color:var(--text-secondary);opacity:.6}
|
|
1
|
+
:root{--brand-100: #ffffff;--brand-200: #4dabf7;--brand-300: #0078d4;--brand-400: #495057;--brand-500: #0078d4;--brand-600: #005a9e;--neutral-100: #f3f2f1;--neutral-200: #eaeaea;--neutral-300: #d1d1d1;--neutral-400: #c8c8c8;--neutral-500: #6e6e6e;--neutral-600: #7a7a7a;--neutral-700: #495057;--neutral-800: #4a4a4a;--neutral-900: #0f0f0f;--neutral-000: #ffffff;--success-main: #28a745;--success-bg: #e6f4ea;--success-text: #1e7e34;--warning-main: #dc2626;--warning-bg: #fef2f2;--warning-text: #ffffff;--error-main: #cd0000;--error-bg: #ffe5e5;--error-text: #b91c1c;--info-main: #1080a6;--info-bg: #e0f7fa;--info-text: #0369a1;--bg-canvas: var(--neutral-100);--bg-toolbar: rgba(255, 255, 255, .92);--bg-panel: var(--brand-100);--bg-hover: rgba(0, 0, 0, .05);--bg-active: rgba(0, 120, 212, .12);--surface-raised: var(--brand-100);--accent: var(--neutral-500);--accent-quiet: rgba(110, 110, 110, .14);--accent-soft: rgba(110, 110, 110, .08);--accent-secondary: var(--brand-300);--accent-secondary-quiet: rgba(0, 120, 212, .13);--focus-glow: rgba(0, 120, 212, .26);--text-primary: var(--neutral-900);--text-secondary: #6e6e6e;--border-subtle: rgba(0, 0, 0, .08);--selection: var(--accent);--shadow-soft: 0 4px 24px rgba(0, 0, 0, .08), 0 1px 3px rgba(0, 0, 0, .06);--shadow-modal: 0 12px 48px rgba(0, 0, 0, .18);--grid-dot: rgba(110, 110, 110, .16);--danger: var(--error-main)}[data-theme=dark]{--bg-canvas: #0d0d0d;--bg-toolbar: rgba(20, 22, 23, .94);--bg-panel: #1a1a1a;--bg-hover: rgba(255, 255, 255, .055);--bg-active: rgba(97, 218, 251, .12);--surface-raised: #212121;--accent: #61dafb;--accent-quiet: rgba(97, 218, 251, .14);--accent-soft: rgba(97, 218, 251, .075);--accent-secondary: #73d0f4;--accent-secondary-quiet: rgba(97, 218, 251, .18);--focus-glow: rgba(97, 218, 251, .28);--text-primary: #f6f6f3;--text-secondary: #a7aaa8;--border-subtle: rgba(255, 255, 255, .09);--selection: var(--accent);--shadow-soft: 0 16px 46px rgba(0, 0, 0, .52), 0 1px 1px rgba(255, 255, 255, .03);--shadow-modal: 0 22px 70px rgba(0, 0, 0, .72);--grid-dot: rgba(97, 218, 251, .1)}*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--bg-canvas);color:var(--text-primary)}#app{position:fixed;top:0;right:0;bottom:0;left:0}.canvas-stack{position:absolute;top:0;right:0;bottom:0;left:0}.canvas-stack canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block}.bottom-tool-cluster{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:10px;z-index:125}.toolbar{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:6px;background:var(--bg-toolbar);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:var(--shadow-soft);z-index:100}.bottom-tool-cluster .toolbar{position:relative;inset:auto;transform:none;z-index:1}.shape-tool-group{position:relative;display:flex}.shape-tool-popover{position:absolute;left:50%;bottom:calc(100% + 12px);transform:translate(-50%) translateY(8px) scale(.96);transform-origin:bottom center;display:grid;grid-template-columns:repeat(3,38px);gap:4px;padding:6px;background:var(--bg-toolbar);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:var(--shadow-soft);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);opacity:0;pointer-events:none;transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.shape-tool-group.open .shape-tool-popover{opacity:1;pointer-events:auto;transform:translate(-50%) translateY(0) scale(1)}.shape-option-btn{width:38px;height:38px}.shape-tool-popover:after{content:"";position:absolute;left:50%;bottom:-5px;width:10px;height:10px;transform:translate(-50%) rotate(45deg);background:var(--bg-toolbar);border-right:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle)}.context-tool-popover{position:relative;width:0;height:52px;transform:translate(-14px) scale(.96);transform-origin:left center;display:flex;align-items:center;gap:8px;padding:6px 0;background:var(--bg-toolbar);border:1px solid transparent;border-radius:999px;box-shadow:var(--shadow-soft);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);opacity:0;overflow:hidden;pointer-events:none;z-index:0;transition:width .26s cubic-bezier(.2,.8,.2,1),padding .26s cubic-bezier(.2,.8,.2,1),opacity .18s ease,transform .24s cubic-bezier(.2,.8,.2,1),border-color .18s ease}.context-tool-popover.is-visible{padding:6px 10px;border-color:var(--border-subtle);opacity:1;pointer-events:auto;transform:translate(0) scale(1)}.sticky-color-popover.is-visible{width:286px}.text-size-popover.is-visible{width:300px}.shape-style-popover.is-visible{width:386px}.sticky-color-btn,.shape-fill-btn{width:24px;height:24px;border:1px solid rgba(0,0,0,.16);border-radius:999px;background:var(--swatch);box-shadow:inset 0 0 0 1px #ffffff6b;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .12s ease,border-color .12s ease}.shape-text-color-btn{flex:0 0 auto;width:32px;height:32px;border:1px solid var(--border-subtle);border-radius:999px;background:var(--surface-raised);color:var(--text-primary);font-size:12px;font-weight:800;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .12s ease,border-color .12s ease,background .12s ease}.shape-text-color-btn[aria-label="White text"]{background:#fff;color:#252829}.shape-text-color-btn[aria-label="Black text"]{background:#252829;color:#fff}.context-tool-divider{width:1px;height:28px;background:var(--border-subtle);opacity:0;transform:scaleY(.65);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1)}.text-size-btn{flex:1 1 0;min-width:0;height:38px;padding:0 8px;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:750;line-height:1;text-align:center;white-space:nowrap;cursor:pointer;opacity:0;transform:translate(-6px) scale(.88);transition:opacity .16s ease,transform .2s cubic-bezier(.2,.8,.2,1),background .12s ease,color .12s ease,border-color .12s ease}.context-tool-popover.is-visible .sticky-color-btn,.context-tool-popover.is-visible .shape-fill-btn,.context-tool-popover.is-visible .shape-text-color-btn,.context-tool-popover.is-visible .text-size-btn,.context-tool-popover.is-visible .context-tool-divider{opacity:1;transform:translate(0) scale(1)}.context-tool-popover.is-visible>:nth-child(2){transition-delay:15ms}.context-tool-popover.is-visible>:nth-child(3){transition-delay:.03s}.context-tool-popover.is-visible>:nth-child(4){transition-delay:45ms}.context-tool-popover.is-visible>:nth-child(5){transition-delay:.06s}.context-tool-popover.is-visible>:nth-child(6){transition-delay:75ms}.context-tool-popover.is-visible>:nth-child(7){transition-delay:.09s}.context-tool-popover.is-visible>:nth-child(8){transition-delay:.105s}.sticky-color-btn:hover,.shape-fill-btn:hover{transform:translateY(-1px) scale(1.04);box-shadow:inset 0 0 0 1px #ffffff85,0 4px 12px #00000029}.sticky-color-btn:focus-visible,.shape-fill-btn:focus-visible{outline:2px solid var(--selection);outline-offset:3px}.text-size-btn:hover,.text-size-btn:focus-visible{background:var(--bg-hover);color:var(--text-primary);outline:none}.shape-text-color-btn:hover,.shape-text-color-btn:focus-visible{border-color:color-mix(in srgb,var(--selection) 45%,var(--border-subtle));box-shadow:0 4px 12px #00000024;outline:none}.sticky-color-btn.active,.shape-fill-btn.active{border-color:var(--brand-500);box-shadow:inset 0 0 0 1px #ffffff8a,0 0 0 3px #428d3033}.shape-text-color-btn.active{border-color:var(--brand-500);box-shadow:0 0 0 3px #428d3033}.text-size-btn.active{border-color:color-mix(in srgb,var(--selection) 36%,var(--border-subtle));background:var(--bg-active);color:var(--text-primary)}[data-theme=dark] .sticky-color-btn,[data-theme=dark] .shape-fill-btn{border-color:#ffffff2e;box-shadow:inset 0 0 0 1px #00000029}.layer-menu{position:fixed;min-width:176px;padding:6px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:12px;box-shadow:var(--shadow-modal);z-index:150}.layer-menu-label{padding:8px 10px 5px;color:var(--text-secondary);font-size:11px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.layer-menu button{width:100%;height:34px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:var(--text-primary);font:inherit;font-size:13px;font-weight:650;text-align:left;cursor:pointer}.layer-menu button:hover,.layer-menu button:focus-visible{background:var(--bg-hover);outline:none}.layer-menu-divider{height:1px;margin:5px 6px;background:var(--border-subtle)}.toolbar-divider{width:1px;height:24px;background:var(--border-subtle);margin:0 4px}.tool-btn{position:relative;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border:none;border-radius:9px;background:transparent;color:var(--text-primary);cursor:pointer;transition:background .12s ease}.tool-btn:hover{background:var(--bg-hover)}.tool-btn:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.tool-btn.active{background:var(--bg-active);color:var(--selection)}.tool-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.tool-btn .tooltip{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%);white-space:nowrap;padding:5px 9px;font-size:11.5px;font-weight:500;border-radius:7px;background:var(--text-primary);color:var(--bg-panel);pointer-events:none;opacity:0;transition:opacity .12s ease}.tool-btn:hover .tooltip{opacity:1}.tooltip kbd{font-family:inherit;opacity:.65;margin-left:5px}.top-left{position:fixed;top:14px;left:14px;z-index:100;display:flex;align-items:center;gap:8px}.board-title{height:40px;padding:0 11px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:10px;box-shadow:var(--shadow-soft);font-size:13px;font-weight:600;color:var(--text-primary);border:1px solid var(--border-subtle);outline:none;min-width:60px;max-width:calc(100vw - 460px)}.board-title:focus{border-color:var(--selection)}.board-title-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:13px;font-weight:600;font-family:inherit}.top-right{position:fixed;top:14px;right:14px;z-index:100;display:flex;align-items:center;gap:8px}.control-group{display:flex;align-items:center;gap:2px;padding:4px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-soft)}.control-btn{display:flex;align-items:center;justify-content:center;height:30px;min-width:30px;padding:0 8px;border:none;border-radius:7px;background:transparent;color:var(--text-primary);font-size:12px;font-weight:500;cursor:pointer;transition:background .12s ease;position:relative}.control-btn:hover{background:var(--bg-hover)}.control-btn.danger-control:hover{color:var(--danger)}.control-btn:focus-visible{outline:2px solid var(--selection)}.control-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.zoom-label{font-variant-numeric:tabular-nums;min-width:48px;text-align:center}.board-live-status{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;background:var(--bg-toolbar);border:1px solid var(--border-subtle);box-shadow:var(--shadow-soft);font-size:12px;font-weight:600;color:var(--text-secondary)}.board-live-status[data-state=saved]{color:var(--success-text)}.board-live-status[data-state=stale]{color:var(--warning-main)}.board-live-status[data-state=error]{color:var(--danger)}.perf-overlay{position:fixed;top:60px;right:14px;z-index:99;padding:12px 14px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-soft);font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:11px;line-height:1.7;color:var(--text-primary);white-space:pre;pointer-events:none;display:none}.perf-overlay.visible{display:block}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:200;display:flex;align-items:center;justify-content:center}.modal{background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:16px;box-shadow:var(--shadow-modal);width:520px;max-width:calc(100vw - 40px);max-height:calc(100vh - 80px);overflow-y:auto;padding:24px}.modal h2{font-size:16px;font-weight:600;margin-bottom:16px}.modal-close{float:right;border:none;background:transparent;color:var(--text-secondary);font-size:18px;cursor:pointer;line-height:1;padding:2px 6px;border-radius:6px}.modal-close:hover{background:var(--bg-hover)}.modal .board-title{height:38px;max-width:none;padding:0 10px;background:var(--bg-panel);-webkit-backdrop-filter:none;backdrop-filter:none;border:1px solid var(--border-subtle);border-radius:8px;box-shadow:none;font-size:13px;font-weight:500}.modal .board-title:focus{border-color:color-mix(in srgb,var(--accent) 48%,var(--border-subtle));box-shadow:none}.command-palette{position:fixed;top:0;right:0;bottom:0;left:0;z-index:650;display:none;align-items:flex-start;justify-content:center;padding-top:min(120px,14vh);background:#0f172a47}.command-palette.visible{display:flex}.command-panel{width:min(640px,calc(100vw - 32px));max-height:min(620px,calc(100vh - 80px));overflow:hidden;border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-raised);box-shadow:var(--shadow-modal)}.command-search{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--border-subtle);color:var(--text-secondary)}.command-search svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.command-search input{flex:1 1 auto;min-width:0;border:none;outline:none;background:transparent;color:var(--text-primary);font:inherit;font-size:15px}.command-results{max-height:min(520px,calc(100vh - 160px));overflow-y:auto;padding:6px}.command-result{display:block;padding:10px 12px;border-radius:8px;color:var(--text-primary);text-decoration:none}.command-result:hover,.command-result.active{background:var(--bg-active)}.command-result-title{font-size:14px;font-weight:600;line-height:1.35}.command-result-meta,.command-result-summary{margin-top:3px;font-size:12px;line-height:1.45;color:var(--text-secondary)}.command-result-summary{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.command-result mark{border-radius:4px;padding:0 2px;background:var(--accent-quiet);color:inherit}.command-empty{padding:28px 16px;text-align:center;color:var(--text-secondary);font-size:13px}.template-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.template-card{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid var(--border-subtle);border-radius:10px;background:transparent;color:var(--text-primary);cursor:pointer;text-align:left;transition:border-color .12s ease,background .12s ease}.template-card:hover{border-color:var(--selection);background:var(--bg-hover)}.template-card .t-name{font-size:13px;font-weight:600}.template-card .t-desc{font-size:11.5px;color:var(--text-secondary);line-height:1.4}.storage-row{display:flex;justify-content:space-between;padding:8px 0;font-size:13px;border-bottom:1px solid var(--border-subtle)}.storage-row span:last-child{color:var(--text-secondary);font-variant-numeric:tabular-nums}.modal-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.modal-copy{color:var(--text-secondary);font-size:13.5px;line-height:1.6}.btn{padding:8px 14px;border:1px solid var(--border-subtle);border-radius:8px;background:transparent;color:var(--text-primary);font-size:12.5px;font-weight:500;cursor:pointer;transition:background .12s ease}.btn:hover{background:var(--bg-hover)}.btn.danger{color:var(--danger);border-color:var(--danger)}.btn.primary{background:var(--accent-secondary);border-color:var(--selection);color:#fff}.stress-panel{position:fixed;bottom:84px;left:50%;transform:translate(-50%);z-index:99;display:none;flex-wrap:wrap;gap:6px;max-width:640px;justify-content:center;padding:10px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);border-radius:12px;box-shadow:var(--shadow-soft)}.stress-panel.visible{display:flex}.stress-panel .btn{font-size:11.5px;padding:6px 10px}.text-editor{position:absolute;z-index:50;border:1.5px solid var(--selection);border-radius:4px;background:transparent;color:inherit;resize:none;overflow:hidden;outline:none;padding:0;line-height:1.35}.toast{position:fixed;bottom:84px;left:50%;transform:translate(-50%) translateY(8px);z-index:300;padding:10px 18px;background:var(--text-primary);color:var(--bg-panel);border-radius:10px;font-size:13px;font-weight:500;box-shadow:var(--shadow-soft);opacity:0;transition:opacity .2s ease,transform .2s ease;pointer-events:none}.toast.visible{opacity:1;transform:translate(-50%) translateY(0)}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.shell{--sidebar-width: 270px;display:flex;width:100%;height:100%;overflow:hidden}.shell-main{flex:1 1 auto;min-width:0;height:100%;display:flex;flex-direction:column}.shell.sidebar-collapsed .sidebar{display:none}.shell-topbar{position:relative;flex:0 0 auto;height:58px;display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--border-subtle);background:color-mix(in srgb,var(--bg-panel) 94%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.topbar-icon-btn,.topbar-search,.topbar-cart,.topbar-edit,.topbar-machine,.topbar-theme{height:34px;border:1px solid var(--border-subtle);border-radius:8px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.topbar-icon-btn{width:34px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.topbar-icon-btn:hover,.topbar-search:hover,.topbar-cart:hover,.topbar-edit:hover,.topbar-machine:hover,.topbar-theme:hover{background:var(--bg-hover);color:var(--text-primary)}.topbar-icon-btn:focus-visible,.topbar-search:focus-visible,.topbar-cart:focus-visible,.topbar-edit:focus-visible,.topbar-machine:focus-visible,.topbar-theme:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.topbar-icon-btn svg,.topbar-search svg,.topbar-edit svg,.topbar-theme svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.topbar-search{width:min(360px,42vw);display:inline-flex;align-items:center;gap:9px;padding:0 8px 0 10px;text-align:left;font-size:13px}.topbar-search span{flex:1 1 auto;min-width:0}.topbar-search kbd{flex:0 0 auto;padding:2px 6px;border-radius:5px;background:var(--bg-hover);color:var(--text-secondary);font:11px/1.3 SF Mono,ui-monospace,Menlo,monospace}.topbar-cart{display:inline-flex;align-items:center;gap:8px;padding:0 10px 0 12px;font-size:13px;font-weight:500}.topbar-search{margin-right:auto}.topbar-cart[hidden]{display:none}.topbar-cart:disabled{opacity:.58;cursor:default}.topbar-cart strong{min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--accent-quiet);color:var(--selection);font-size:12px}.topbar-edit{display:inline-flex;align-items:center;gap:7px;padding:0 12px;font-size:13px;font-weight:500;margin-left:auto}.topbar-machine{display:inline-flex;align-items:center;gap:7px;padding:0 12px;font-size:13px;font-weight:500;border-color:color-mix(in srgb,var(--selection) 28%,var(--border-subtle))}.topbar-machine[hidden],.topbar-edit[hidden],.shell-topbar.editing-doc .topbar-cart{display:none}.topbar-cart-popover{position:absolute;top:calc(100% + 8px);right:58px;z-index:800;display:none;width:330px;filter:drop-shadow(0 16px 36px rgba(0,0,0,.16))}.topbar-cart-popover.visible{display:block}.topbar-cart-popover .capability-cart{position:static}.content.cart-popover-open .capability-layout>.capability-cart{visibility:hidden}.sidebar{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);height:100%;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:var(--surface-raised);padding:0 12px}.sidebar-resize-handle{flex:0 0 6px;width:6px;border:none;background:transparent;color:transparent;cursor:ew-resize;padding:0;display:inline-flex;align-items:center;justify-content:center;position:relative}.sidebar-resize-handle:before{content:"";width:1px;height:100%;background:transparent;transition:background .12s ease}.sidebar-resize-handle:hover{background:transparent}.sidebar-resize-handle:hover:before,body.sidebar-resizing .sidebar-resize-handle:before{background:color-mix(in srgb,var(--selection) 55%,var(--border-subtle))}.sidebar-resize-handle svg{width:10px;height:10px;stroke:transparent;fill:none;stroke-width:1.8}.shell.sidebar-collapsed .sidebar-resize-handle{display:none}.sidebar-header{display:flex;align-items:center;height:58px;padding:0 12px;border-bottom:1px solid transparent}.sidebar-brand{font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--text-primary);text-decoration:none;border:none;background:none;cursor:pointer;padding:0;font-family:inherit}.sidebar-nav{flex:1 1 auto;min-height:0;overflow-y:auto;padding-bottom:18px;scrollbar-width:thin;scrollbar-color:transparent transparent}.sidebar:hover .sidebar-nav{scrollbar-color:color-mix(in srgb,var(--border-subtle) 88%,transparent) transparent}.sidebar-nav::-webkit-scrollbar{width:10px}.sidebar-nav::-webkit-scrollbar-thumb{background:transparent;border-radius:999px}.sidebar:hover .sidebar-nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--border-subtle) 88%,transparent)}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.wiki-project-empty{display:grid;gap:12px}.wiki-project-empty p{margin:0}.sidebar-footer{flex:0 0 auto;padding:10px 0 14px;border-top:1px solid var(--border-subtle);background:var(--surface-raised)}.sidebar-add-repo{width:100%;height:36px;border:1px dashed color-mix(in srgb,var(--selection) 38%,var(--border-subtle));border-radius:8px;background:transparent;color:var(--text-secondary);font-size:13px;font-weight:600;cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.sidebar-add-repo:hover{background:var(--accent-soft);border-color:color-mix(in srgb,var(--selection) 58%,var(--border-subtle));color:var(--text-primary)}.nav-group{margin-bottom:18px}.nav-section-head,.nav-root-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.nav-repo-group{margin-bottom:10px}.nav-repo-header,.nav-dir-toggle{width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border:0;border-radius:7px;background:transparent;color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.06em;text-align:left;text-transform:uppercase;cursor:pointer}.nav-repo-header-row{display:flex;align-items:center;gap:4px;position:relative}.nav-repo-header-row .nav-repo-header{flex:1 1 auto;min-width:0}.nav-count-pill{flex:0 0 auto;padding:3px 8px;border:1px solid var(--border-subtle);border-radius:999px;background:color-mix(in srgb,var(--surface-raised) 82%,var(--accent-soft));color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.nav-dir-toggle{padding:4px 6px;font-size:11px;text-transform:none;letter-spacing:0;font-weight:650}.nav-dir-project{opacity:.85;color:var(--text-secondary)}.nav-dir-project:hover{opacity:1}.nav-dir-docs{opacity:1;color:var(--text-secondary);font-weight:600}.nav-repo-header,.nav-dir-toggle{transition:background .12s ease,color .12s ease,opacity .12s ease}.nav-repo-header:hover,.nav-dir-toggle:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-repo-header:focus-visible,.nav-dir-toggle:focus-visible{outline:2px solid var(--selection);outline-offset:1px}.nav-repo-header>span:not(.nav-repo-chevron),.nav-dir-toggle>span:not(.nav-repo-chevron){flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-repo-chevron{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:12px;transform:rotate(90deg);transition:transform .12s ease}.nav-repo-group.collapsed .nav-repo-chevron{transform:rotate(0)}.nav-collapsible-dir.collapsed>.nav-dir-header-row .nav-dir-toggle .nav-repo-chevron{transform:rotate(0)}.nav-dir-header-row{display:flex;align-items:center;gap:4px;position:relative}.nav-dir-header-row .nav-dir-toggle{flex:1 1 auto;min-width:0}.nav-dir-header-row .nav-dir-wiki-link{flex:0 0 auto}.nav-repo-body[hidden],.nav-dir-body[hidden]{display:none}.nav-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);padding:6px 8px}.nav-empty-copy{font-size:12px;font-weight:500;text-transform:none;letter-spacing:.01em;line-height:1.45}.nav-subgroup{margin:2px 0 2px 8px}.nav-subgroup .nav-label{font-size:11px;text-transform:none;letter-spacing:0;font-weight:600;color:var(--text-secondary);opacity:.85}.nav-docs-root{margin:0 0 2px}.nav-root-path-label{padding:4px 8px 3px;font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary);opacity:.6;cursor:default;-webkit-user-select:none;user-select:none}.nav-root-path-label:hover{opacity:1;color:var(--text-secondary)}.nav-path-seg-toggle{font-size:12px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-secondary);opacity:.9}.nav-link{display:flex;align-items:center;padding:6px 10px;margin:1px 0;border-radius:7px;font-size:13px;line-height:1.4;color:var(--text-secondary);text-decoration:none;border-left:2px solid transparent;transition:background .12s ease,color .12s ease}.nav-link:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-link-muted{font-size:12px;opacity:.82}.nav-link.active{background:var(--bg-active);color:var(--selection);font-weight:600}.nav-tree-group,.nav-tree-children{margin:0;padding:0}.nav-tree-children{position:relative}.nav-tree-children:before{content:"";position:absolute;left:calc(-4px + var(--tree-depth, 1) * 16px);top:2px;bottom:2px;width:1px;pointer-events:none;background:color-mix(in srgb,var(--text-secondary) 22%,transparent);opacity:.62;border-radius:999px}.nav-tree-group.collapsed>.nav-tree-children:before,.nav-tree-children:empty:before{display:none}.nav-tree-row{--tree-depth: 0;width:100%;min-height:28px;display:flex;align-items:center;gap:6px;padding:4px 8px 4px calc(8px + var(--tree-depth) * 16px);border:0;border-radius:6px;background:transparent;color:var(--text-secondary);font:inherit;font-size:13px;line-height:1.35;text-align:left;text-decoration:none}button.nav-tree-row{cursor:pointer}.nav-tree-row:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-tree-row:focus-visible{outline:2px solid var(--selection);outline-offset:-1px}.nav-tree-row.active{background:var(--bg-active);color:var(--selection);font-weight:600}.nav-tree-folder{font-weight:550}.nav-tree-docs-root{color:var(--text-primary);font-weight:650}.nav-tree-badge{margin-left:auto;color:var(--selection);font-size:9px;font-weight:700;letter-spacing:.06em}.nav-tree-doc{color:var(--text-secondary)}.nav-tree-board{color:var(--nav-board-color)}.nav-tree-capability,.nav-tree-capability-folder{color:var(--nav-cap-color)}.nav-tree-file,.nav-tree-scaffold{opacity:.52}.nav-tree-file{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-tree-capability-file{cursor:pointer;opacity:.76}.nav-tree-capability-file:hover{opacity:1}.nav-tree-scaffold:hover{opacity:.8}.nav-tree-group.collapsed>.nav-tree-row .nav-repo-chevron{transform:rotate(0)}.nav-tree-group.nav-drop-target>.nav-tree-row{position:relative;background:color-mix(in srgb,var(--selection) 13%,var(--surface-raised));color:var(--text-primary);outline:2px solid var(--selection);outline-offset:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--selection) 17%,transparent)}.nav-tree-group.nav-drop-target>.nav-tree-row:after{content:"Drop into";margin-left:auto;padding:2px 6px;border-radius:4px;background:var(--selection);color:var(--bg-canvas);font-size:10px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.nav-tree-group.nav-drop-target.nav-drop-auto-expanded>.nav-tree-children{position:relative;margin:3px 0;border:1px dashed color-mix(in srgb,var(--selection) 68%,transparent);border-radius:5px;background:color-mix(in srgb,var(--selection) 5%,transparent)}[data-theme=dark] .nav-link.active{color:var(--neutral-100)}.nav-node-icon{flex:0 0 auto;width:13px;height:13px;margin-right:5px;vertical-align:middle;fill:currentColor;stroke:none;opacity:.85;position:relative;top:-1px}.nav-node-icon-doc{fill:#4285f4;opacity:1}.nav-node-icon-board{fill:#8b5cf6;opacity:1}[data-theme=dark] .nav-node-icon-board{fill:#a78bfa}.nav-node-icon-capability{fill:#f59e0b;opacity:1}[data-theme=dark] .nav-node-icon-capability{fill:#fbbf24}:root{--nav-board-color: #8b5cf6;--nav-board-bg: rgba(139, 92, 246, .08);--nav-board-bg-active: rgba(139, 92, 246, .15);--nav-cap-color: #8a6800;--nav-cap-bg: rgba(138, 104, 0, .08);--nav-cap-bg-active: rgba(138, 104, 0, .15)}[data-theme=dark]{--nav-board-color: #a78bfa;--nav-board-bg: rgba(167, 139, 250, .08);--nav-board-bg-active: rgba(167, 139, 250, .14);--nav-cap-color: #d4a800;--nav-cap-bg: rgba(212, 168, 0, .08);--nav-cap-bg-active: rgba(212, 168, 0, .14)}.nav-link-board{display:flex;align-items:center;color:var(--nav-board-color)}.nav-link-board:hover{background:var(--nav-board-bg);color:var(--nav-board-color)}.nav-link-board.active{background:var(--nav-board-bg-active);color:var(--nav-board-color);font-weight:600}.nav-link-capability{display:flex;align-items:center;color:var(--nav-cap-color)}.nav-link-capability:hover{background:var(--nav-cap-bg);color:var(--nav-cap-color)}.nav-link-capability.active{background:var(--nav-cap-bg-active);color:var(--nav-cap-color);font-weight:600}.nav-project-boards-row{margin-top:4px;padding-top:4px;border-top:1px solid var(--border-subtle)}.nav-context-menu{z-index:900;min-width:168px;padding:5px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:10px;box-shadow:var(--shadow-modal);-webkit-user-select:none;user-select:none}.nav-context-label{padding:5px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.nav-context-divider{height:1px;margin:4px 5px;background:var(--border-subtle)}.nav-context-item{width:100%;display:flex;align-items:center;gap:8px;height:32px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--text-primary);font:inherit;font-size:13px;text-align:left;cursor:pointer;white-space:nowrap}.nav-context-item:hover,.nav-context-item:focus-visible{background:var(--bg-hover);outline:none}.nav-context-item-danger{color:var(--danger)}.nav-context-item-danger:hover,.nav-context-item-danger:focus-visible{background:color-mix(in srgb,var(--danger) 8%,transparent)}.nav-dragging{opacity:.48;cursor:grabbing!important}.nav-link[draggable=true],.nav-dir-toggle[draggable=true]{cursor:pointer}.nav-drop-target>.nav-dir-toggle,.nav-drop-target>.nav-dir-header-row,.nav-drop-target.nav-repo-header,.nav-drop-target.nav-docs-root{background:color-mix(in srgb,var(--accent) 20%,transparent)!important;outline:2px solid var(--accent)!important;outline-offset:-2px;box-shadow:inset 0 0 8px color-mix(in srgb,var(--accent) 30%,transparent);border-radius:6px;position:relative}@keyframes dropPulse{0%,to{outline-color:var(--accent)}50%{outline-color:color-mix(in srgb,var(--accent) 60%,transparent)}}.nav-drop-target>.nav-dir-toggle,.nav-drop-target>.nav-dir-header-row,.nav-drop-target.nav-repo-header,.nav-drop-target.nav-docs-root{animation:dropPulse 1s ease-in-out infinite}.nav-ctx-icon{flex:0 0 auto;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center}.nav-ctx-icon svg.nav-node-icon{width:13px;height:13px;fill:currentColor;stroke:none}.nav-ctx-svg{width:14px;height:14px}.nav-ctx-doc,.nav-ctx-dir{color:var(--text-secondary)}.nav-ctx-board{color:var(--nav-board-color)}.nav-ctx-cap{color:var(--nav-cap-color)}.nav-ctx-edit,.nav-ctx-rename{color:var(--text-secondary)}.nav-ctx-delete{color:var(--danger)}.content-scroll{flex:1 1 auto;min-height:0;overflow-y:auto}.content{max-width:820px;margin:0 auto;padding:36px 40px 120px}.content.content-wide{max-width:1240px}.external-doc-eyebrow{margin:0 0 18px;color:var(--text-secondary);font-size:12px;font-weight:650;letter-spacing:.05em;text-transform:uppercase}.external-repo-overview .page-bar{align-items:flex-start}.repo-source-pill{flex:0 0 auto;padding:6px 10px;border:1px solid var(--border-subtle);border-radius:999px;color:var(--text-secondary);font-size:12px;font-weight:600}.external-doc-dir-list{display:grid;gap:22px}.external-doc-dir h2{margin:0 0 10px;color:var(--text-secondary);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.external-doc-file-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}.external-doc-card{display:flex;flex-direction:column;gap:4px;min-height:82px;padding:14px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-raised);color:var(--text-primary);text-decoration:none;transition:border-color .12s ease,background .12s ease,transform .12s ease}.external-doc-card:hover{border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));background:color-mix(in srgb,var(--accent) 4%,var(--surface-raised));transform:translateY(-1px)}.external-doc-card strong{font-size:14px;line-height:1.3}.external-doc-card span{color:var(--text-secondary);font-size:12px;line-height:1.35;overflow-wrap:anywhere}.page-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px}.page-bar h1{margin:0}.page-bar-label{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.page-lead{color:var(--text-secondary);font-size:14px;line-height:1.6;margin:4px 0 24px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}.card{position:relative;display:flex;flex-direction:column;gap:10px;min-height:190px;padding:18px;border:1px solid var(--border-subtle);border-radius:8px;text-decoration:none;color:var(--text-primary);background:var(--surface-raised);transition:border-color .12s ease,background .12s ease,transform .12s ease}.card:is(button){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;text-align:left;font:inherit;cursor:pointer}.card:hover{border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));transform:translateY(-1px)}.card.selected{border-color:color-mix(in srgb,var(--selection) 72%,var(--border-subtle));background:color-mix(in srgb,var(--accent) 5%,var(--surface-raised))}.card.selected:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;border-radius:8px 0 0 8px;background:var(--selection)}.card-title{max-width:92%;font-size:16px;font-weight:650;line-height:1.25;letter-spacing:0}.card-title a{color:inherit;text-decoration:none}.card-title a:hover{color:var(--selection)}.card-desc{font-size:13px;color:var(--text-secondary);line-height:1.55}.card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.card-actions{padding-top:4px}.card-actions .btn{height:30px;padding:0 11px;border-radius:999px;font-size:12px}.card-actions .capability-add-btn.primary{background:transparent;border-color:color-mix(in srgb,var(--selection) 42%,var(--border-subtle));color:var(--selection)}.card-actions .capability-add-btn.primary:hover{background:var(--accent-soft)}.card-actions .capability-add-btn:not(.primary){border-color:transparent;background:var(--bg-hover);color:var(--text-secondary)}.tag{font-size:11px;padding:3px 8px;border-radius:999px;background:var(--accent-secondary-quiet);color:color-mix(in srgb,var(--accent-secondary) 72%,var(--text-primary))}.empty-note{grid-column:1 / -1;padding:32px;text-align:center;color:var(--text-secondary);border:1px dashed var(--border-subtle);border-radius:12px}.capability-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:28px;align-items:start}.capability-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.capability-library h1{font-size:32px;letter-spacing:0;margin-bottom:6px}.capability-library .page-lead{max-width:680px;margin-bottom:28px}.capability-meta-tags{margin:0 0 18px}.capability-entry-section{margin-top:6px}.capability-entry-lead{max-width:760px;margin-top:0;margin-bottom:18px}.capability-files-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.board-library .page-lead{max-width:760px}.board-grid{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:18px}.token-library .page-bar{margin-bottom:6px}.token-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.token-section{margin-top:30px}.token-section h2{margin:0 0 14px;font-size:17px;font-weight:700}.token-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.token-card{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 44px;align-items:stretch;min-height:72px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface-raised);overflow:hidden;transition:border-color .12s ease,background .12s ease}.token-card:hover{border-color:color-mix(in srgb,var(--selection) 36%,var(--border-subtle))}.token-card.selected{border-color:var(--brand-500);background:color-mix(in srgb,var(--accent) 4%,var(--surface-raised))}.token-card input{position:absolute;opacity:0;pointer-events:none}.token-select-zone{display:grid;grid-template-columns:42px minmax(0,1fr);gap:12px;align-items:center;padding:10px;cursor:pointer}.token-copy-btn{display:flex;align-items:center;justify-content:center;width:44px;border:none;border-left:1px solid var(--border-subtle);background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease}.token-copy-btn:hover{background:var(--accent-soft);color:var(--selection)}.token-copy-btn:focus-visible{outline:2px solid var(--selection);outline-offset:-2px}.token-copy-btn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.token-swatch{width:42px;height:42px;border:1px solid var(--border-subtle);border-radius:7px;box-shadow:inset 0 0 0 1px #00000005}[data-theme=dark] .card,[data-theme=dark] .token-card,[data-theme=dark] .capability-cart,[data-theme=dark] .command-panel,[data-theme=dark] .modal{border-color:#ffffff14;box-shadow:0 1px #ffffff06,0 18px 48px #0000005c}[data-theme=dark] .card:hover,[data-theme=dark] .token-card:hover{border-color:color-mix(in srgb,var(--accent) 38%,rgba(255,255,255,.12))}[data-theme=dark] .shell-topbar,[data-theme=dark] .sidebar{border-color:#ffffff13}[data-theme=dark] .nav-link.active{background:#a3a27e29;color:#fff}[data-theme=dark] .btn.primary{color:#111312}.token-copy{min-width:0;display:grid;gap:2px}.token-copy strong{font-size:13px;line-height:1.25}.token-copy code{color:var(--text-secondary);font:12px/1.25 SF Mono,ui-monospace,Menlo,monospace;background:transparent}.token-copy small{color:var(--text-secondary);font-size:11.5px;line-height:1.3}.capability-cart{position:sticky;top:18px;border:1px solid var(--border-subtle);border-radius:8px;background:color-mix(in srgb,var(--bg-panel) 96%,var(--bg-hover));overflow:hidden;box-shadow:0 1px #00000005}.capability-cart-head,.capability-cart-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px;border-bottom:1px solid var(--border-subtle)}.capability-cart-actions{border-top:1px solid var(--border-subtle);border-bottom:none}.capability-cart-head h2{margin:0;font-size:13px;font-weight:650;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.capability-cart-count{min-width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--accent-quiet);color:var(--selection);font-size:12px;font-weight:700}.capability-cart-body{display:flex;flex-direction:column;gap:4px;max-height:420px;overflow-y:auto;padding:8px}.capability-cart-empty{padding:22px 12px;color:var(--text-secondary);font-size:12.5px;line-height:1.5}.capability-cart-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px;border-radius:8px;background:var(--surface-raised);border:1px solid transparent}.capability-cart-item:hover{border-color:var(--border-subtle)}.capability-cart-item-title{font-size:13px;font-weight:600;line-height:1.35}.capability-cart-item-meta{margin-top:2px;font-size:11px;color:var(--text-secondary);line-height:1.35}.capability-cart-remove{border:none;background:transparent;color:var(--text-secondary);font-size:11.5px;cursor:pointer;padding:1px 0}.capability-cart-remove:hover{color:var(--danger)}.markdown-body{font-size:15px;line-height:1.7;color:var(--text-primary)}.markdown-body h1{font-size:30px;font-weight:700;margin:8px 0 20px;letter-spacing:-.015em}.markdown-body h2{font-size:22px;font-weight:650;margin:36px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--border-subtle)}.markdown-body h3{font-size:17px;font-weight:650;margin:26px 0 10px}.markdown-body h4{font-size:15px;font-weight:650;margin:20px 0 8px}.markdown-body p{margin:14px 0}.markdown-body a{color:var(--selection);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body ul,.markdown-body ol{margin:14px 0;padding-left:26px}.markdown-body li{margin:5px 0}.markdown-body li.task{list-style:none;margin-left:-22px}.markdown-body li.task input{margin-right:8px}.markdown-body blockquote{margin:16px 0;padding:4px 16px;border-left:3px solid var(--selection);background:var(--bg-hover);border-radius:0 8px 8px 0;color:var(--text-secondary)}.markdown-body code{font-family:SF Mono,ui-monospace,Menlo,monospace;font-size:.86em;background:var(--bg-hover);padding:2px 6px;border-radius:5px}.markdown-body pre.code-block{position:relative;margin:16px 0;padding:16px;background:var(--bg-hover);border:1px solid var(--border-subtle);border-radius:10px;overflow-x:auto}.markdown-body pre.code-block code{background:none;padding:0;font-size:13px;line-height:1.6}.code-copy-btn{position:absolute;top:10px;right:10px;height:26px;padding:0 9px;border:1px solid var(--border-subtle);border-radius:7px;background:color-mix(in srgb,var(--bg-panel) 92%,var(--surface-raised));color:var(--text-secondary);font-size:11.5px;font-weight:600;cursor:pointer}.code-copy-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.markdown-body img{max-width:100%;border-radius:8px}.markdown-body hr{border:none;border-top:1px solid var(--border-subtle);margin:32px 0}.markdown-body .markdown-table-scroll{width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;margin:18px 0}.markdown-body table{width:max-content;min-width:100%;border-collapse:collapse;margin:0;font-size:13.5px}.markdown-body th,.markdown-body td{border:1px solid var(--border-subtle);padding:8px 12px;text-align:left;white-space:normal;word-break:break-word;overflow-wrap:anywhere;max-width:min(28rem,40vw)}.markdown-body th{background:var(--bg-hover);font-weight:600}.markdown-body .md-error{margin:16px 0;padding:14px 16px;border:1px solid #ef4444;border-radius:10px;background:#ef444414;color:var(--text-primary)}.markdown-body .md-error pre{margin:8px 0 0;font-size:12px;white-space:pre-wrap;color:var(--text-secondary)}.board-embed{margin:24px 0}.board-embed-frame{position:relative;width:100%;border:1px solid var(--border-subtle);border-radius:12px;overflow:hidden;background:var(--bg-canvas);box-shadow:var(--shadow-soft);display:flex;align-items:center;justify-content:center}.board-embed-frame canvas{display:block}.board-embed-frame.error{color:var(--text-secondary);font-size:13px}.board-embed-msg{padding:24px}.board-embed-open{position:absolute;bottom:10px;right:10px;padding:5px 10px;font-size:12px;font-weight:500;border-radius:8px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border-subtle);color:var(--text-primary);text-decoration:none;opacity:0;transition:opacity .15s ease}.board-embed-frame:hover .board-embed-open{opacity:1}.board-embed figcaption{margin-top:8px;font-size:12.5px;color:var(--text-secondary);text-align:center}.board-editor-host{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500}.top-left .back-btn{height:40px;width:auto;gap:6px;padding:0 12px;background:var(--bg-toolbar);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border-subtle);box-shadow:var(--shadow-soft);font-size:13px;font-weight:500}.top-left .back-btn span{line-height:1}.embed-select-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;cursor:crosshair;background:#0f172a2e}.embed-select-rect{position:absolute;border:1.5px solid var(--selection);background:color-mix(in srgb,var(--selection) 16%,transparent);box-shadow:0 0 0 9999px #0f172a1f;pointer-events:none}.embed-select-hint{position:fixed;top:16px;left:50%;transform:translate(-50%);padding:8px 14px;border-radius:10px;font-size:13px;font-weight:500;color:#fff;background:#0f172ad1;pointer-events:none}.doc-page{position:relative}.doc-actions{display:flex;justify-content:flex-end;gap:8px;margin-bottom:8px}.btn.doc-edit{background:transparent;border-color:var(--border-subtle);color:var(--text-secondary);font-weight:500}.btn.doc-edit:hover{background:var(--bg-hover);color:var(--text-primary)}.capability-doc-actions{align-items:center}.capability-doc-actions .capability-detail-btn,.capability-doc-actions .capability-detail-btn.primary{height:34px;padding:0 13px;border-radius:999px;background:transparent;border-color:color-mix(in srgb,var(--selection) 34%,var(--border-subtle));color:var(--text-primary);font-size:12.5px;font-weight:500}.capability-doc-actions .capability-detail-btn:hover,.capability-doc-actions .capability-detail-btn.primary:hover{background:var(--accent-soft);color:var(--text-primary)}.capability-doc-actions .capability-detail-btn.is-selected{background:var(--accent-secondary);border-color:var(--accent-secondary);color:#fff}.capability-doc-actions .capability-detail-btn.is-selected:hover{background:color-mix(in srgb,var(--accent-secondary) 88%,#000);color:#fff}.markdown-body figure.board-embed.embed-chip{display:flex;align-items:center;gap:8px;padding:12px 16px;border:1px dashed var(--border-subtle);border-radius:10px;background:var(--bg-hover);color:var(--text-secondary);font-size:13px;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none}.markdown-body figure.board-embed.embed-chip:hover,.markdown-body figure.board-embed.embed-chip.selected,.markdown-body figure.board-embed.embed-chip:focus{border-color:color-mix(in srgb,var(--selection) 54%,var(--border-subtle));background:var(--accent-soft);color:var(--text-primary)}.embed-chip-icon{font-size:15px}.embed-chip-remove{margin-left:auto;color:var(--text-secondary);font-size:12px;font-weight:600;opacity:0;transition:opacity .12s ease}.embed-chip:hover .embed-chip-remove,.embed-chip.selected .embed-chip-remove,.embed-chip:focus .embed-chip-remove{opacity:.85}.doc-editor-surface .embed-caret-spacer{min-height:1.35em}.doc-editor{position:fixed;top:0;right:0;bottom:0;left:0;z-index:700;display:flex;flex-direction:column;background:var(--bg-canvas)}.doc-editor-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 16px;border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas)}.doc-editor-bar-left{display:flex;align-items:center;gap:12px;min-width:0}.doc-editor-done{padding:7px 16px;border:1px solid var(--border-subtle);background:transparent;color:var(--text-secondary);border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;transition:background .12s ease,color .12s ease}.doc-editor-done:hover{background:var(--bg-hover);color:var(--text-primary)}.doc-editor-path{font-size:12.5px;color:var(--text-secondary);font-family:SF Mono,ui-monospace,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc-editor-status{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary);opacity:.6;white-space:nowrap}.doc-editor-status[data-state=stale]{color:var(--warning-main);opacity:1;font-weight:600}.doc-editor-status[data-state=error]{color:var(--danger);opacity:1;font-weight:600}.status-action-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid currentColor;background:transparent;color:inherit;border-radius:999px;padding:2px 8px;font:inherit;font-weight:600;cursor:pointer}.doc-editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:7px 16px;border-bottom:1px solid var(--border-subtle);background:var(--bg-canvas);position:sticky;top:0;z-index:1}.doc-editor-tb-group{display:flex;align-items:center;gap:3px;padding:3px;border:1px solid var(--border-subtle);border-radius:10px;background:color-mix(in srgb,var(--surface-raised) 72%,transparent)}.doc-editor-tb-btn{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 8px;border:none;border-radius:8px;background:transparent;color:var(--text-secondary);font-size:13px;font-weight:600;cursor:pointer;transition:background .12s ease,color .12s ease}.doc-editor-tb-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.doc-editor-tb-btn.active{background:var(--accent-secondary-quiet);color:var(--text-primary);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent-secondary) 28%,transparent)}.doc-editor-tb-btn:focus-visible{outline:2px solid var(--selection);outline-offset:2px}.doc-editor-tb-btn.icon svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.doc-editor-scroll{flex:1 1 auto;overflow-y:auto}.doc-editor-surface{max-width:820px;margin:0 auto;padding:36px 40px 160px;min-height:100%;outline:none;background:transparent}.doc-editor-surface:focus{outline:none}.doc-editor-surface img{cursor:default}.doc-editor-surface:empty:before{content:"Start writing...";color:var(--text-secondary);opacity:.55}.doc-editor-surface a{cursor:text}.doc-editor-surface pre.code-block{position:relative}.doc-editor-surface pre.code-block:focus-within{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--selection) 34%,transparent)}.text-file-editor-scroll{padding:0}.text-file-editor-textarea{width:100%;min-height:100%;padding:24px 28px 160px;border:none;background:transparent;color:var(--text-primary);font:14px/1.6 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;resize:none;-moz-tab-size:2;tab-size:2}.text-file-editor-textarea:focus{outline:none}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:20px;font-size:12px;font-weight:500;color:var(--text-secondary)}.breadcrumb-link{color:var(--text-secondary);text-decoration:none;padding:2px 4px;border-radius:4px;transition:color .1s ease,background .1s ease}.breadcrumb-link:hover{color:var(--text-primary);background:var(--bg-hover)}.breadcrumb-sep{color:var(--text-secondary);opacity:.4;-webkit-user-select:none;user-select:none;padding:0 2px}.breadcrumb-current{color:var(--text-primary);font-weight:600}.page-nav{display:flex;align-items:stretch;justify-content:space-between;gap:12px;margin-top:56px;padding-top:20px;border-top:1px solid var(--border-subtle)}.page-nav-prev,.page-nav-next{display:flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--border-subtle);border-radius:10px;text-decoration:none;color:var(--text-secondary);background:var(--surface-raised);font-size:13px;font-weight:500;min-width:0;max-width:48%;transition:border-color .12s ease,background .12s ease,color .12s ease}.page-nav-prev:hover,.page-nav-next:hover{border-color:color-mix(in srgb,var(--selection) 45%,var(--border-subtle));background:var(--bg-hover);color:var(--text-primary)}.page-nav-prev{margin-right:auto}.page-nav-next{margin-left:auto;flex-direction:row-reverse}.page-nav-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.page-nav-arrow{flex:0 0 auto;font-size:15px;line-height:1;color:var(--text-secondary);transition:color .12s ease}.page-nav-prev:hover .page-nav-arrow,.page-nav-next:hover .page-nav-arrow{color:var(--text-primary)}.page-nav-spacer{flex:1}.sidebar-brand{border:none;background:none;cursor:pointer;font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--text-primary);text-decoration:none;padding:0;transition:color .12s ease}.sidebar-brand:hover{color:var(--selection)}.sidebar-brand:focus-visible{outline:2px solid var(--selection);outline-offset:3px;border-radius:4px}.sidebar-docs-mode .sidebar-brand{color:var(--selection)}.sidebar-docs-mode .sidebar-brand:after{content:" ·";opacity:.4}.docs-mode-back-row{padding:8px 0 4px}.docs-mode-back{display:flex;align-items:center;gap:6px;border:none;background:none;cursor:pointer;font-size:12px;font-weight:600;color:var(--text-secondary);padding:5px 8px;border-radius:7px;width:100%;text-align:left;transition:background .1s ease,color .1s ease}.docs-mode-back:hover{background:var(--bg-hover);color:var(--text-primary)}.docs-mode-back svg{width:12px;height:12px;flex:0 0 auto}.docs-mode-tree{padding-left:0}.home-page{padding-top:8px}.home-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:36px;align-items:start}.home-guide{min-width:0}.home-hero-title{font-size:30px;font-weight:750;letter-spacing:-.02em;line-height:1.1;margin:0 0 8px;color:var(--text-primary)}.home-hero-sub{font-size:14px;line-height:1.65;color:var(--text-secondary);margin:0 0 32px}.home-agent-callout{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0 0 28px;padding:12px 14px;border:1px solid var(--border-subtle);border-radius:10px;background:color-mix(in srgb,var(--surface-raised) 88%,var(--accent-soft))}.home-agent-copy{margin:0;font-size:13px;color:var(--text-secondary);line-height:1.5}.home-agent-btn{flex:0 0 auto}.home-feature{margin-bottom:28px;padding-bottom:28px;border-bottom:1px solid var(--border-subtle)}.home-feature:last-of-type{border-bottom:none}.home-feature-header{margin-bottom:8px}.home-feature-badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;border:1px solid var(--border-subtle);background:var(--accent-soft);color:var(--text-secondary)}.home-feature-badge-board{background:var(--nav-board-bg);color:var(--nav-board-color);border-color:color-mix(in srgb,var(--nav-board-color) 25%,var(--border-subtle))}.home-feature-badge-capability{background:var(--nav-cap-bg);color:var(--nav-cap-color);border-color:color-mix(in srgb,var(--nav-cap-color) 25%,var(--border-subtle))}.home-feature-badge-doc{background:var(--accent-soft);color:var(--text-secondary)}.home-feature-body{font-size:13.5px;line-height:1.65;color:var(--text-secondary);margin:0 0 10px}.home-feature-list{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:4px}.home-feature-list li{font-size:13px;line-height:1.55;color:var(--text-secondary)}.home-shortcut-title{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary);margin:32px 0 10px}.home-shortcut-table{display:grid;gap:1px;background:var(--border-subtle);border:1px solid var(--border-subtle);border-radius:10px;overflow:hidden}.home-shortcut-row{display:flex;align-items:center;gap:16px;padding:7px 12px;background:var(--surface-raised)}.home-shortcut-row:hover{background:var(--bg-hover)}.home-shortcut-key{flex:0 0 auto;min-width:200px;font:11.5px/1.4 SF Mono,ui-monospace,Menlo,monospace;color:var(--text-primary);background:transparent;border:none;padding:0}.home-shortcut-desc{font-size:12.5px;color:var(--text-secondary)}.home-panel{position:sticky;top:24px;border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-raised);overflow:hidden}.home-panel-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border-subtle)}.home-panel-title{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-secondary)}.home-panel-add{padding:4px 10px;font-size:12px;height:auto}.home-panel-empty{padding:20px 14px;font-size:13px;color:var(--text-secondary);line-height:1.5}.home-panel-project{border-bottom:1px solid var(--border-subtle)}.home-panel-project:last-child{border-bottom:none}.home-panel-project-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:10px 14px 6px;text-decoration:none;border-bottom:1px solid var(--border-subtle);transition:background .1s ease}.home-panel-project-head:hover{background:var(--bg-hover)}.home-panel-project-name{font-size:13px;font-weight:650;color:var(--text-primary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-panel-project-meta{flex:0 0 auto;font-size:11px;color:var(--text-secondary);white-space:nowrap}.home-panel-roots{display:flex;flex-direction:column}.home-panel-root{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:5px 14px;text-decoration:none;transition:background .1s ease;border-bottom:1px solid color-mix(in srgb,var(--border-subtle) 50%,transparent)}.home-panel-root:last-of-type{border-bottom:none}.home-panel-root:hover{background:var(--bg-hover)}.home-panel-root-path{font-size:11.5px;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-panel-root:hover .home-panel-root-path{color:var(--text-primary)}.home-panel-root-meta{flex:0 0 auto;font-size:10.5px;color:var(--text-secondary);opacity:.7;white-space:nowrap}.home-panel-more{display:block;padding:6px 14px 8px;font-size:11.5px;color:var(--text-secondary);text-decoration:none}.home-panel-more:hover{color:var(--text-primary)}.nav-repo-label-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-repo-wiki-link{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;color:var(--text-secondary);opacity:0;transition:opacity .12s ease,background .12s ease;text-decoration:none}.nav-repo-header:hover .nav-repo-wiki-link,.nav-dir-toggle:hover .nav-repo-wiki-link,.nav-dir-header-row:hover .nav-dir-wiki-link,.nav-repo-wiki-link:focus-visible{opacity:1}.nav-dir-project~.nav-dir-wiki-link{opacity:0}.nav-dir-header-row:hover .nav-dir-project~.nav-dir-wiki-link{opacity:.7}.nav-repo-wiki-link:hover{background:var(--bg-active);color:var(--text-primary)}.nav-repo-wiki-link svg{width:12px;height:12px}.wiki-page{padding-top:4px}.wiki-head{margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--border-subtle)}.wiki-back{display:inline-block;font-size:12px;color:var(--text-secondary);text-decoration:none;margin-bottom:10px}.wiki-back:hover{color:var(--text-primary)}.wiki-title{font-size:26px;font-weight:750;letter-spacing:-.01em;margin:0 0 16px}.wiki-stats{display:flex;gap:24px;flex-wrap:wrap}.wiki-stat{text-align:left}.wiki-stat-val{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text-primary);line-height:1}.wiki-stat-label{font-size:11px;color:var(--text-secondary);margin-top:2px;text-transform:uppercase;letter-spacing:.05em;font-weight:600}.wiki-root-section{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid var(--border-subtle)}.wiki-root-section:last-child{border-bottom:none}.wiki-root-head{margin-bottom:12px}.wiki-root-path{font-size:12px;font-weight:700;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);letter-spacing:.01em}.wiki-root-empty{font-size:12px;color:var(--text-secondary);font-style:italic}.wiki-root-cols{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.wiki-col-head{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);margin-bottom:6px;padding-bottom:5px;border-bottom:1px solid var(--border-subtle)}.wiki-col-list{display:flex;flex-direction:column;gap:1px}.wiki-col-item{display:block;padding:4px 6px;border-radius:5px;font-size:12.5px;text-decoration:none;color:var(--text-secondary);transition:background .1s ease,color .1s ease;text-transform:capitalize}.wiki-col-item:hover{background:var(--bg-hover);color:var(--text-primary)}.wiki-col-item-board{color:var(--nav-board-color)}.wiki-col-item-board:hover{background:var(--nav-board-bg);color:var(--nav-board-color)}.wiki-col-item-cap{color:var(--nav-cap-color)}.wiki-col-item-cap:hover{background:var(--nav-cap-bg);color:var(--nav-cap-color)}.wiki-col-item-path{display:block;font-size:10.5px;font-family:SF Mono,ui-monospace,Menlo,monospace;color:var(--text-secondary);opacity:.6;margin-top:1px}@media (max-width: 720px){.sidebar{flex-basis:220px;width:220px}.shell-topbar{padding:10px 12px}.topbar-search{width:auto;flex:1 1 auto}.topbar-search kbd,.topbar-edit span{display:none}.topbar-edit{width:34px;padding:0;justify-content:center}.capability-layout{grid-template-columns:1fr}.capability-cart{position:static}.content{padding:32px 20px 100px}.doc-editor-surface{padding:24px 18px 140px}}.nav-repo-more{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;padding:0;margin-left:auto;margin-right:2px;background:transparent;border:none;border-radius:4px;color:var(--text-secondary);cursor:pointer;opacity:0;transition:opacity .12s ease,background .12s ease}.nav-repo-header-row:hover .nav-repo-more{opacity:.5}.nav-repo-more:focus-visible{outline:2px solid var(--selection);outline-offset:1px;opacity:1}.nav-repo-more:hover{background:var(--bg-hover);opacity:1!important}.nav-browse-dir-toggle{display:flex;align-items:center;gap:4px;width:100%;padding:4px 8px;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);font-size:13px;cursor:pointer;text-align:left;opacity:.45;transition:opacity .12s ease,background .12s ease}.nav-browse-dir-toggle:hover{background:var(--bg-hover);opacity:.75}.nav-inline-input{display:block;width:100%;padding:4px 8px;margin:1px 0;font:inherit;font-size:13px;color:var(--text-primary);background:var(--bg-canvas);border:1px solid var(--brand-300);border-radius:4px;outline:none;box-shadow:0 0 0 2px #0078d426}.nav-inline-input::placeholder{color:var(--text-secondary);opacity:.6}
|
package/dist/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<link rel="describedby" href="/llms.txt" />
|
|
7
7
|
<link rel="alternate" type="application/json" href="/.well-known/viteboard.json" />
|
|
8
8
|
<title>ViteBoard</title>
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-CE8x3f28.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DvhOK1J_.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
package/package.json
CHANGED