@skill-map/cli 0.20.1 → 0.22.0

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.
Files changed (37) hide show
  1. package/dist/cli/tutorial/sm-tutorial.md +93 -14
  2. package/dist/cli.js +7660 -6354
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.js +1244 -1065
  5. package/dist/index.js.map +1 -1
  6. package/dist/kernel/index.d.ts +300 -194
  7. package/dist/kernel/index.js +1244 -1065
  8. package/dist/kernel/index.js.map +1 -1
  9. package/dist/migrations/001_initial.sql +13 -0
  10. package/dist/ui/chunk-25AWRVIC.js +965 -0
  11. package/dist/ui/chunk-GETTEQ3S.js +123 -0
  12. package/dist/ui/{chunk-4NLC7QD2.js → chunk-GXRWH2VL.js} +1 -1
  13. package/dist/ui/chunk-HC6PNQMW.js +251 -0
  14. package/dist/ui/chunk-HJHWJTFH.js +1 -0
  15. package/dist/ui/chunk-MF2M6GYF.js +1 -0
  16. package/dist/ui/{chunk-EZZF5RL5.js → chunk-MPMBTIUR.js} +2 -2
  17. package/dist/ui/{chunk-6GUHSAP5.js → chunk-OPPQMCMQ.js} +1 -1
  18. package/dist/ui/chunk-V3SZQETX.js +61 -0
  19. package/dist/ui/{chunk-E4ALROJS.js → chunk-VVOEPDQD.js} +1 -1
  20. package/dist/ui/{chunk-6BZZQV42.js → chunk-W2EFGI3J.js} +1 -1
  21. package/dist/ui/index.html +2 -10
  22. package/dist/ui/main-Q2WC254P.js +2 -0
  23. package/dist/ui/media/fa-brands-400-AHOAZHCU.woff2 +0 -0
  24. package/dist/ui/media/fa-regular-400-VRZYIBIZ.woff2 +0 -0
  25. package/dist/ui/media/fa-solid-900-MDEYK55F.woff2 +0 -0
  26. package/dist/ui/media/fa-v4compatibility-ETEVP6IB.woff2 +0 -0
  27. package/dist/ui/styles-M2FETVAG.css +1 -0
  28. package/migrations/001_initial.sql +13 -0
  29. package/package.json +6 -5
  30. package/dist/ui/chunk-FWX4RRDF.js +0 -125
  31. package/dist/ui/chunk-GGMXMGRJ.js +0 -1
  32. package/dist/ui/chunk-K5PULFK7.js +0 -1
  33. package/dist/ui/chunk-OJ6W6OIB.js +0 -61
  34. package/dist/ui/chunk-PTCD42GB.js +0 -247
  35. package/dist/ui/chunk-ZSRIBCAW.js +0 -965
  36. package/dist/ui/main-5FJWWH5I.js +0 -1
  37. package/dist/ui/styles-VJ5Q6D2X.css +0 -1
@@ -1 +0,0 @@
1
- import{a as q,b as ze,c as We}from"./chunk-K5PULFK7.js";import{a as Se,b as Ae,c as Ce,d as Te,e as Ee,f as xe,g as Re,h as Me,i as De,k as $e,l as Fe,m as Ne,p as S,q as je,r as Ue}from"./chunk-OJ6W6OIB.js";import{a as A,b as Be,c as He,d as Ke,e as Qe}from"./chunk-GGMXMGRJ.js";import{$b as _e,$c as X,B as me,Ba as ge,Ea as he,Ha as fe,Ia as ve,J as w,Ja as x,Kc as Le,Lc as Oe,Ma as D,N as j,Na as $,O as s,S as W,Sa as g,Sb as m,T as B,Ta as l,Ua as c,Va as f,X as H,aa as ue,ad as Y,ba as _,c as de,ca as K,cb as G,d as pe,eb as R,ed as Z,f as z,fd as d,gb as I,ja as Q,m as O,na as a,qc as Ie,rc as ke,sb as ye,sc as F,tc as Pe,ub as be,uc as we,va as J,vb as u,wb as h,xb as V}from"./chunk-ZSRIBCAW.js";import"./chunk-3R7E3HPC.js";import"./chunk-Q7L6LLAK.js";var Je=[{path:"",pathMatch:"full",redirectTo:"graph"},{path:"graph",loadComponent:()=>import("./chunk-PTCD42GB.js").then(n=>n.GraphView),data:{title:"Graph"}},{path:"list",loadComponent:()=>import("./chunk-EZZF5RL5.js").then(n=>n.ListView),data:{title:"List"}},{path:"**",redirectTo:"graph"}];var k={errors:{unknownMode:n=>`SKILL_MAP_MODE: unknown value "${n}"`,restPrefix:n=>`BFF error [${n}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(n,e)=>`Demo bundle fetch failed for "${n}": ${e}`,demoParseFailed:(n,e)=>`Demo bundle parse failed for "${n}": ${e}`,graphFormatNotInDemo:n=>`Graph format "${n}" is not bundled in demo mode (only "ascii").`}};var v={connected:n=>`[ws] connected to ${n}`,closed:(n,e)=>`[ws] closed (code=${n}, reason="${e}")`,malformedFrame:n=>`[ws] malformed frame dropped: ${n}`,socketError:n=>`[ws] socket error: ${n}`,reconnectScheduled:(n,e)=>`[ws] reconnect attempt ${e} scheduled in ${n}ms`,reconnectGiveUp:n=>`[ws] giving up after ${n} failed reconnect attempts`};var Ge=[1e3,2e3,4e3,8e3,16e3,3e4],ce=10,st=new Set([1e3,1001]);function at(){return typeof window>"u"||!window.location?"ws://127.0.0.1:4242/ws":`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`}var C=class n{mode=s(A);destroyRef=s(H);subject=new pe;socket=null;reconnectTimer=null;reconnectAttempt=0;disposed=!1;socketFactory=e=>new WebSocket(e);url=at();events$;_setSocketFactory(e){this.socketFactory=e}_setUrl(e){this.url=e}constructor(){this.mode!=="live"?this.events$=z:this.events$=new de(e=>{!this.socket&&!this.disposed&&this.connect();let t=this.subject.subscribe(e);return()=>t.unsubscribe()}).pipe(me({resetOnRefCountZero:!1})),this.destroyRef.onDestroy(()=>this.disconnect())}disconnect(){if(!this.disposed){if(this.disposed=!0,this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.socket){try{this.socket.close(1e3,"client disconnect")}catch{}this.socket=null}this.subject.complete()}}ngOnDestroy(){this.disconnect()}connect(){if(this.disposed)return;let e;try{e=this.socketFactory(this.url)}catch(t){let i=t instanceof Error?t.message:String(t);console.warn(v.socketError(i)),this.scheduleReconnect();return}this.socket=e,e.onopen=()=>{this.reconnectAttempt=0,console.info(v.connected(this.url))},e.onmessage=t=>{this.handleFrame(t.data)},e.onerror=t=>{let i=typeof t=="object"&&t!==null&&"message"in t?String(t.message??"unknown"):"unknown";console.warn(v.socketError(i))},e.onclose=t=>{console.info(v.closed(t.code,t.reason)),this.socket=null,!this.disposed&&(st.has(t.code)||this.scheduleReconnect())}}handleFrame(e){if(typeof e!="string"){console.warn(v.malformedFrame("non-string frame"));return}let t;try{t=JSON.parse(e)}catch(i){let r=i instanceof Error?i.message:String(i);console.warn(v.malformedFrame(r));return}if(!We(t)){console.warn(v.malformedFrame("envelope shape"));return}this.subject.next(t)}scheduleReconnect(){if(this.disposed)return;if(this.reconnectAttempt>=ce){console.warn(v.reconnectGiveUp(ce)),this.subject.error(new Error(v.reconnectGiveUp(ce)));return}let e=Math.min(this.reconnectAttempt,Ge.length-1),t=Ge[e];this.reconnectAttempt+=1,console.info(v.reconnectScheduled(t,this.reconnectAttempt)),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}get _reconnectAttempt(){return this.reconnectAttempt}static \u0275fac=function(t){return new(t||n)};static \u0275prov=w({token:n,factory:n.\u0275fac,providedIn:"root"})};function ee(n){let e=new TextEncoder().encode(n),t="";for(let i=0;i<e.length;i++)t+=String.fromCharCode(e[i]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var p="/api",te=class n{http;ws;kindRegistry;contributionsRegistry;constructor(e,t,i,r){this.http=e??s(F),this.ws=t??s(C),this.kindRegistry=i??s(S),this.contributionsRegistry=r??s(q)}async health(){return this.getJson(`${p}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${p}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async runScan(){return this.patchJson(`${p}/scan`,{},"POST")}async listNodes(e={}){let t=ct(e),i=await this.getJson(`${p}/nodes${t}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),i}async getNode(e,t={}){let i=ee(e),r=t.includeBody?"?include=body":"";try{let o=await this.getJson(`${p}/nodes/${i}${r}`);return this.ingestRegistry(o.kindRegistry),this.ingestContributionsRegistry(o.contributionsRegistry),o}catch(o){if(o instanceof d&&o.code==="not-found")return null;throw o}}async listLinks(e={}){let t=dt(e),i=await this.getJson(`${p}/links${t}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),i}async listIssues(e={}){let t=pt(e),i=await this.getJson(`${p}/issues${t}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),i}async loadGraph(e="ascii"){let t=`${p}/graph?format=${encodeURIComponent(e)}`;try{return await O(this.http.get(t,{responseType:"text"}))}catch(i){throw this.translateError(i)}}async loadConfig(){let e=await this.getJson(`${p}/config`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),e.value}async listPlugins(){let e=await this.getJson(`${p}/plugins`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),e}async setPluginEnabled(e,t){let i=await this.patchJson(`${p}/plugins/${encodeURIComponent(e)}`,{enabled:t});return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),i}async setPluginExtensionEnabled(e,t,i){let r=await this.patchJson(`${p}/plugins/${encodeURIComponent(e)}/extensions/${encodeURIComponent(t)}`,{enabled:i});return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),r}async getPreferences(){return await this.getJson(`${p}/preferences`)}async setPreferences(e){return await this.patchJson(`${p}/preferences`,e)}async getProjectPreferences(){return await this.getJson(`${p}/project-preferences`)}async setProjectPreferences(e){return await this.patchJson(`${p}/project-preferences`,e)}async setFavorite(e){let t=ee(e);try{await O(this.http.put(`${p}/favorites/${t}`,null))}catch(i){throw this.translateError(i)}}async unsetFavorite(e){let t=ee(e);try{await O(this.http.delete(`${p}/favorites/${t}`))}catch(i){throw this.translateError(i)}}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}ingestContributionsRegistry(e){this.contributionsRegistry.setRegistry(e)}async lookupContribution(e,t,i){let r=new URLSearchParams({path:i});try{return(await this.getJson(`${p}/contributions/${encodeURIComponent(e)}/${encodeURIComponent(t)}?${r.toString()}`)).items[0]??null}catch{return null}}events(){return this.ws.events$}async getJson(e){try{return await O(this.http.get(e))}catch(t){throw this.translateError(t)}}async patchJson(e,t,i="PATCH"){try{let r=i==="POST"?this.http.post(e,t):this.http.patch(e,t);return await O(r)}catch(r){throw this.translateError(r)}}translateError(e){if(e instanceof d)return e;if(e instanceof ke){let i=mt(e.error);return i?new d(i.error.code,i.error.message,i.error.details):new d("internal",e.message||k.errors.malformedResponse)}let t=e instanceof Error?e.message:String(e);return new d("internal",t)}static \u0275fac=function(t){return new(t||n)(j(F),j(C),j(S),j(q))};static \u0275prov=w({token:n,factory:n.\u0275fac,providedIn:"root"})};function ct(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.hasIssues!==void 0&&e.set("hasIssues",String(n.hasIssues)),n.path&&e.set("path",n.path),n.limit!==void 0&&e.set("limit",String(n.limit)),n.offset!==void 0&&e.set("offset",String(n.offset));let t=e.toString();return t?`?${t}`:""}function dt(n){let e=new URLSearchParams;n.kind&&n.kind.length>0&&e.set("kind",n.kind.join(",")),n.from&&e.set("from",n.from),n.to&&e.set("to",n.to);let t=e.toString();return t?`?${t}`:""}function pt(n){let e=new URLSearchParams;n.severity&&e.set("severity",n.severity),n.analyzerId&&e.set("analyzerId",n.analyzerId),n.node&&e.set("node",n.node);let t=e.toString();return t?`?${t}`:""}function mt(n){if(typeof n!="object"||n===null)return null;let e=n;if(e.ok!==!1)return null;let t=e.error;if(typeof t!="object"||t===null)return null;let i=t;return typeof i.code!="string"||typeof i.message!="string"?null:{ok:!1,error:{code:i.code,message:i.message,details:i.details}}}var ut="data.json",gt="data.meta.json",ne=class{constructor(e=globalThis.fetch.bind(globalThis),t){this.fetchImpl=e;this.kindRegistry=t??s(S)}metaPromise=null;dataPromise=null;kindRegistry;async health(){return(await this.loadMeta()).health}async loadScan(){let[e,t]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(t.nodes.kindRegistry),e}async listNodes(e={}){let t=await this.loadMeta();if(ht(e))return this.kindRegistry.ingest(t.nodes.kindRegistry),t.nodes;let i=await this.loadData(),r=i.issues,o=i.nodes;if(e.kind&&e.kind.length>0){let T=new Set(e.kind);o=o.filter(E=>T.has(E.kind))}if(e.path){let T=yt(e.path);o=o.filter(E=>T.test(E.path))}if(e.hasIssues===!0){let T=Ve(r);o=o.filter(E=>T.has(E.path))}else if(e.hasIssues===!1){let T=Ve(r);o=o.filter(E=>!T.has(E.path))}let y=o.length,P=e.offset??0,N=e.limit??1e3,b=o.slice(P,P+N);return this.kindRegistry.ingest(t.nodes.kindRegistry),{schemaVersion:"1",kind:"nodes",items:b,filters:{kind:e.kind??null,hasIssues:e.hasIssues??null,path:e.path?[e.path]:null},counts:{total:y,returned:b.length,page:{offset:P,limit:N}},kindRegistry:t.nodes.kindRegistry}}async getNode(e,t={}){let[i,r]=await Promise.all([this.loadData(),this.loadMeta()]),o=i.nodes.find(b=>b.path===e);if(!o)return null;let y=i.links.filter(b=>b.target===e),P=i.links.filter(b=>b.source===e),N=i.issues.filter(b=>b.nodeIds.includes(e));return this.kindRegistry.ingest(r.nodes.kindRegistry),{schemaVersion:"1",kind:"node",item:o,links:{incoming:y,outgoing:P},issues:N,kindRegistry:r.nodes.kindRegistry}}async listLinks(e={}){let t=await this.loadMeta();if(ft(e))return this.kindRegistry.ingest(t.links.kindRegistry),t.links;let r=(await this.loadData()).links;if(e.kind&&e.kind.length>0){let o=new Set(e.kind);r=r.filter(y=>o.has(y.kind))}return e.from&&(r=r.filter(o=>o.source===e.from)),e.to&&(r=r.filter(o=>o.target===e.to)),this.kindRegistry.ingest(t.links.kindRegistry),{schemaVersion:"1",kind:"links",items:r,filters:{kind:e.kind??null,from:e.from??null,to:e.to??null},counts:{total:r.length,returned:r.length},kindRegistry:t.links.kindRegistry}}async listIssues(e={}){let t=await this.loadMeta();if(vt(e))return this.kindRegistry.ingest(t.issues.kindRegistry),t.issues;let r=(await this.loadData()).issues;return e.severity&&(r=r.filter(o=>o.severity===e.severity)),e.analyzerId&&(r=r.filter(o=>o.analyzerId===e.analyzerId)),e.node&&(r=r.filter(o=>o.nodeIds.includes(e.node))),this.kindRegistry.ingest(t.issues.kindRegistry),{schemaVersion:"1",kind:"issues",items:r,filters:{severity:e.severity??null,analyzerId:e.analyzerId??null,node:e.node??null},counts:{total:r.length,returned:r.length},kindRegistry:t.issues.kindRegistry}}async loadGraph(e="ascii"){if(e!=="ascii")throw new d("bad-query",k.errors.graphFormatNotInDemo(e));return(await this.loadMeta()).graph.ascii}async loadConfig(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.config.kindRegistry),e.config.value}async listPlugins(){let e=await this.loadMeta();return this.kindRegistry.ingest(e.plugins.kindRegistry),e.plugins}async setFavorite(e){throw new d("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async unsetFavorite(e){throw new d("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async setPluginEnabled(e,t){throw new d("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async setPluginExtensionEnabled(e,t,i){throw new d("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async runScan(){throw new d("demo-readonly","Manual scan is not available in demo mode (static bundle is immutable).")}async getPreferences(){return{updateCheck:{enabled:!0}}}async setPreferences(e){throw new d("demo-readonly","Preference toggles are not available in demo mode (static bundle is immutable).")}async getProjectPreferences(){return{scan:{includeHome:!1,extraRoots:[],referencePaths:[]}}}async setProjectPreferences(e){throw new d("demo-readonly","Project preferences are not available in demo mode (static bundle is immutable).")}async lookupContribution(){return null}events(){return z}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(gt)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(ut)),this.dataPromise}async fetchJson(e){let t;try{t=await this.fetchImpl(e)}catch(i){let r=i instanceof Error?i.message:String(i);throw new d("internal",k.errors.demoFetchFailed(e,r))}if(!t.ok)throw new d("internal",k.errors.demoFetchFailed(e,`HTTP ${t.status}`));try{return await t.json()}catch(i){let r=i instanceof Error?i.message:String(i);throw new d("internal",k.errors.demoParseFailed(e,r))}}};function ht(n){return!(n.kind&&n.kind.length>0||n.hasIssues!==void 0||n.path||n.offset!==void 0&&n.offset!==0||n.limit!==void 0)}function ft(n){return!(n.kind&&n.kind.length>0||n.from||n.to)}function vt(n){return!(n.severity||n.analyzerId||n.node)}function Ve(n){let e=new Set;for(let t of n)for(let i of t.nodeIds)e.add(i);return e}function yt(n){let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${t}$`)}function Xe(){let n=s(A);if(n==="live")return new te(s(F),s(C));if(n==="demo")return new ne;let e=n;throw new Error(k.errors.unknownMode(String(e)))}var Ye={providers:[ue(),Re(Je,Me()),Pe(we()),Oe({}),he(async()=>{let n=s(Le),[{default:e},{definePreset:t}]=await Promise.all([import("./chunk-FWFBO7KA.js"),import("./chunk-UJOZYR5I.js")]),i=t(e,{semantic:{primary:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#4C1D95",900:"#2E1065",950:"#1E0A4D"}}});n.setThemeConfig({theme:{preset:i,options:{darkModeSelector:".app-dark"}}})}),{provide:A,useFactory:Be},{provide:Z,useFactory:Xe}]};var ie={brand:"skill-map",beta:"Beta",nav:{graph:"Graph",list:"List",searchLabel:"Search nodes (coming soon)",searchTooltip:"Search \u2014 coming soon"},actions:{},badge:{nodes:"nodes",graphInfo:(n,e)=>`${n.toLocaleString()} nodes \xB7 ${e.toLocaleString()} links`,graphInfoA11y:(n,e)=>`Graph contains ${n} nodes and ${e} links`},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The graph and inspector need room to breathe. Pop this open on a screen at least 768px wide \u2014 see you there."}};var M={toggleToAuto:"Switch to auto theme (follow system)",toggleToLight:"Switch to light theme",toggleToDark:"Switch to dark theme",currentAuto:"Auto theme (follows system)",currentLight:"Light theme",currentDark:"Dark theme"};var L={available:"Update available",tooltip:n=>`v${n} is available. Run \`npm i -g @skill-map/cli@latest\` to update.`,a11yLabel:n=>`Update available: version ${n}`,versionLabel:n=>`v${n}`,versionTooltip:n=>`skill-map CLI v${n}`,versionA11yLabel:n=>`Running version ${n}`};var re="sm-debug-slots",bt="debug-slots",_t="is-debug-slots",oe=class n{visible=_(!1);constructor(){this.visible.set(this.resolveInitial()),K(()=>{let e=this.visible();document.documentElement.classList.toggle(_t,e)})}toggle(){let e=!this.visible();this.visible.set(e);try{localStorage.setItem(re,e?"1":"0")}catch{}}resolveInitial(){let t=new URLSearchParams(window.location.search).get(bt);if(t==="1"||t==="true"){try{localStorage.setItem(re,"1")}catch{}return!0}if(t==="0"||t==="false"){try{localStorage.setItem(re,"0")}catch{}return!1}try{return localStorage.getItem(re)==="1"}catch{return!1}}static \u0275fac=function(t){return new(t||n)};static \u0275prov=w({token:n,factory:n.\u0275fac,providedIn:"root"})};var Ze="search",qe="kinds",et="stabilities",tt="hasIssues",nt="staleOnly",se=class n{filters=s(Ue);router=s(Te);activatedRoute=s(Ae);kindRegistry=s(S);destroyRef=s(H);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.pipe(De(this.destroyRef)).subscribe(e=>{if(e instanceof Se){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),K(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),t=new URLSearchParams;for(let[i,r]of Object.entries(e.queryParams))Array.isArray(r)?t.set(i,r.join(",")):r!=null&&t.set(i,String(r));return this.activatedRoute,t}applyUrlToFilters(e){let t=e.get(Ze)??"";t!==this.filters.searchText()&&this.filters.setSearchText(t);let i=It(e.get(qe),this.kindRegistry.kinds().map(P=>P.name));it(i,this.filters.selectedKinds())||this.filters.setKinds(i);let r=kt(e.get(et));it(r,this.filters.selectedStabilities())||this.filters.setStabilities(r);let o=e.get(tt)==="true";o!==this.filters.hasIssuesOnly()&&this.filters.setHasIssuesOnly(o);let y=e.get(nt)==="true";y!==this.filters.staleOnly()&&this.filters.setStaleOnly(y)}computeQueryParams(){let e=this.filters.searchText().trim(),t=this.filters.selectedKinds(),i=this.filters.selectedStabilities(),r=this.filters.hasIssuesOnly(),o=this.filters.staleOnly();return{[Ze]:e.length>0?e:null,[qe]:t.length>0?t.join(","):null,[et]:i.length>0?i.join(","):null,[tt]:r?"true":null,[nt]:o?"true":null}}writeQueryParams(e){let t=this.currentParams(),i=new Map(Object.entries(e)),r=!1;for(let[o,y]of i)if((t.get(o)??null)!==y){r=!0;break}r&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(t){return new(t||n)};static \u0275prov=w({token:n,factory:n.\u0275fac,providedIn:"root"})};function It(n,e){if(!n)return[];let t=new Set(e);return n.split(",").map(i=>i.trim()).filter(i=>t.has(i))}function kt(n){if(!n)return[];let e=new Set(je);return n.split(",").map(t=>t.trim()).filter(t=>e.has(t))}function it(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}var rt={body:"You are viewing a static demo of skill-map's UI. Install it:",installCommand:"npm i -g @skill-map/cli",homeCta:"\u2190 Back to skill-map.dev",homeHref:"/",dismissAria:"Dismiss demo banner"};function St(n,e){if(n&1){let t=G();l(0,"div",0),f(1,"span",1),l(2,"p",2),u(3),l(4,"code",3),u(5),c()(),l(6,"a",4),u(7),c(),l(8,"p-button",5),R("onClick",function(){W(t);let r=I();return B(r.dismiss())}),c()()}if(n&2){let t=I();a(3),V(" ",t.texts.body," "),a(2),h(t.texts.installCommand),a(),g("href",t.texts.homeHref,Q),a(),h(t.texts.homeCta),a(),g("ariaLabel",t.texts.dismissAria)("text",!0)("rounded",!0)}}var ot="sm.demoBannerDismissed",ae=class n{mode=s(A);texts=rt;dismissed=_(this.readDismissed());visible=m(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(ot,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(ot)==="1"}catch{return!1}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=J({type:n,selectors:[["sm-demo-banner"]],decls:1,vars:1,consts:[["role","status","data-testid","demo-banner",1,"demo-banner"],["aria-hidden","true",1,"demo-banner__icon","pi","pi-info-circle"],[1,"demo-banner__body"],["data-testid","demo-banner-install",1,"demo-banner__cmd"],["data-testid","demo-banner-home",1,"demo-banner__home",3,"href"],["icon","pi pi-times","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(t,i){t&1&&D(0,St,9,7,"div",0),t&2&&$(i.visible()?0:-1)},dependencies:[Y,X],styles:["[_nghost-%COMP%]{display:block}.demo-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--p-highlight-background);color:var(--p-text-color);font-size:.875rem}.demo-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--p-primary-color)}.demo-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.demo-banner__cmd[_ngcontent-%COMP%]{font-family:var(--font-family-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:.25rem;padding:.05rem .4rem;font-size:.85em;margin-left:.25rem}.demo-banner__home[_ngcontent-%COMP%]{color:var(--p-primary-color);font-weight:500;text-decoration:none;white-space:nowrap}.demo-banner__home[_ngcontent-%COMP%]:hover, .demo-banner__home[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}"],changeDetection:0})};var At=()=>[import("./chunk-FWX4RRDF.js").then(n=>n.SettingsModal)];function Ct(n,e){if(n&1&&(l(0,"span",10),u(1),c()),n&2){let t=I();g("pTooltip",t.versionTooltip()),x("aria-label",t.versionA11y()),a(),h(t.versionLabel())}}function Tt(n,e){if(n&1&&(l(0,"a",12),f(1,"i",27),l(2,"span"),u(3),c()()),n&2){let t=I();g("pTooltip",t.updateChipTooltip()),x("aria-label",t.updateChipA11y()),a(3),h(t.updateChipText)}}function Et(n,e){if(n&1&&(l(0,"p",13),u(1),c()),n&2){let t=I();a(),h(t.rootLabel())}}function xt(n,e){if(n&1){let t=G();l(0,"sm-settings-modal",28),R("visibleChange",function(r){W(t);let o=I();return B(o.settingsOpen.set(r))}),c()}if(n&2){let t=I();g("visible",t.settingsOpen())}}var le=class n{loader=s(Ne);theme=s(Qe);dataSource=s(Z);_filterUrlSync=s(se);_debugSlots=s(oe);updateCheck=s(Ke);texts=ie;settingsTexts=He;settingsOpen=_(!1);openSettings(){this.settingsOpen.set(!0)}scanning=_(!1);scanError=_(null);async triggerScan(){if(!this.scanning()){this.scanning.set(!0),this.scanError.set(null);try{await this.dataSource.runScan(),await this.loader.load()}catch(e){let t=e instanceof d||e instanceof Error?e.message:String(e);this.scanError.set(t),console.warn(`triggerScan failed: ${t}`)}finally{this.scanning.set(!1)}}}updateChipText=L.available;updateChipTooltip=m(()=>L.tooltip(this.updateCheck.latest()??""));updateChipA11y=m(()=>L.a11yLabel(this.updateCheck.latest()??""));versionLabel=m(()=>L.versionLabel(this.updateCheck.current()??""));versionTooltip=m(()=>L.versionTooltip(this.updateCheck.current()??""));versionA11y=m(()=>L.versionA11yLabel(this.updateCheck.current()??""));count=this.loader.count;linkCount=m(()=>this.loader.scan()?.links?.length??0);graphInfoTooltip=m(()=>ie.badge.graphInfo(this.count(),this.linkCount()));graphInfoA11y=m(()=>ie.badge.graphInfoA11y(this.count(),this.linkCount()));rootLabel=m(()=>{let e=this.healthCwd();if(e&&e!==".")return e;let t=this.loader.scan()?.roots??[];if(t.length===0)return"";let i=t[0].replace(/[\\/]+$/,"");return!i||i==="."?"":i});healthCwd=_(null);isDevMode=_e();themeMode=this.theme.mode;markSrc=m(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=m(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"pi pi-moon"}});themeLabel=m(()=>{switch(this.themeMode()){case"auto":return M.toggleToLight;case"light":return M.toggleToDark;case"dark":return M.toggleToAuto}});themeTooltip=m(()=>{switch(this.themeMode()){case"auto":return M.currentAuto;case"light":return M.currentLight;case"dark":return M.currentDark}});ngOnInit(){this.loader.load(),this.updateCheck.load(),this.loadHealth()}async loadHealth(){try{let e=await this.dataSource.health();this.healthCwd.set(e.cwd)}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`App: /api/health probe failed (${t})`)}}toggleTheme(){this.theme.toggle()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=J({type:n,selectors:[["app-root"]],decls:41,vars:33,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"pi","pi-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["alt","","aria-hidden","true",1,"shell__brand-mark",3,"src"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],[1,"shell__beta"],["href","https://www.npmjs.com/package/@skill-map/cli","target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"pTooltip"],[1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["routerLink","/graph","routerLinkActive","is-active","data-testid","nav-graph"],["routerLink","/list","routerLinkActive","is-active","data-testid","nav-list"],["type","button","tooltipPosition","bottom","disabled","","data-testid","nav-search",1,"shell__nav-search",3,"pTooltip"],["aria-hidden","true",1,"pi","pi-search"],[1,"shell__actions"],["data-debug-slot","topbar.actions.indicator",1,"sm-debug-slot"],["slot","topbar.actions.indicator",3,"node"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true"],["severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-cog","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["aria-hidden","true",1,"pi","pi-arrow-circle-up"],[3,"visibleChange","visible"]],template:function(t,i){if(t&1&&(l(0,"div",0)(1,"div",1),f(2,"i",2),l(3,"h2",3),u(4),c(),l(5,"p",4),u(6),c(),l(7,"p",5),u(8),c()()(),l(9,"div",6),f(10,"sm-demo-banner"),l(11,"header",7)(12,"div",8),f(13,"img",9),l(14,"div")(15,"h1"),u(16),D(17,Ct,2,3,"span",10),l(18,"span",11),u(19),c(),D(20,Tt,4,3,"a",12),c(),D(21,Et,2,1,"p",13),c()(),l(22,"nav",14)(23,"a",15),u(24),c(),l(25,"a",16),u(26),c(),l(27,"button",17),f(28,"i",18),c()(),l(29,"div",19)(30,"div",20),f(31,"sm-view-contributions-host",21),c(),l(32,"button",22),R("click",function(){return i.triggerScan()}),f(33,"i",23),c(),l(34,"p-button",24),R("onClick",function(){return i.toggleTheme()}),c(),l(35,"p-button",25),R("onClick",function(){return i.openSettings()}),c()()(),l(36,"main",26),f(37,"router-outlet"),c(),ge(38,xt,1,1),fe(39,38,At),c()),t&2){let r;a(4),h(i.texts.viewportWarning.title),a(2),h(i.texts.viewportWarning.subtitle),a(2),h(i.texts.viewportWarning.body),a(5),g("src",i.markSrc(),Q),a(3),V(" ",i.texts.brand," "),a(),$((r=i.updateCheck.current())?17:-1,r),a(),x("aria-label",i.texts.beta),a(),h(i.texts.beta),a(),$(i.updateCheck.isOutdated()&&!i.isDevMode?20:-1),a(),$(i.rootLabel()?21:-1),a(),x("aria-label",i.texts.a11y.viewSwitcher),a(2),h(i.texts.nav.graph),a(2),h(i.texts.nav.list),a(),g("pTooltip",i.texts.nav.searchTooltip),x("aria-label",i.texts.nav.searchLabel),a(4),g("node",null),a(),ye("is-spinning",i.scanning()),g("pTooltip",i.graphInfoTooltip())("disabled",i.scanning()),x("aria-label",i.graphInfoA11y()),a(),be(i.scanning()?"pi pi-refresh pi-spin":"pi pi-refresh"),a(),g("icon",i.themeIcon())("ariaLabel",i.themeLabel())("pTooltip",i.themeTooltip())("text",!0)("rounded",!0),a(),g("ariaLabel",i.settingsTexts.a11y.triggerLabel)("pTooltip",i.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),a(4),ve(i.settingsOpen())}},dependencies:[Ce,Ee,xe,Y,X,Fe,$e,ae,ze],styles:["[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2rem;padding:.75rem 1.5rem;background:var(--shell-topbar-bg);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__beta[_ngcontent-%COMP%]{font-family:Stardos Stencil,Geist,system-ui,sans-serif;font-weight:700;font-size:11px;line-height:1;letter-spacing:.12em;text-transform:uppercase;color:#ad322b;border:1.5px solid #ad322b;border-radius:3px;padding:3px 7px 2px;margin-left:6px;transform:rotate(-4deg);transform-origin:center;opacity:.92;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle}.app-dark[_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%]{color:#cf4640;border-color:#cf4640}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:3px;font-family:var(--p-monospace-font-family, ui-monospace, monospace);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px 2px;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:999px;text-decoration:none;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;margin-left:.25rem;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:not-allowed;opacity:.55;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);opacity:1}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:999px;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{display:none}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}"],changeDetection:0})};Ie(le,Ye).catch(n=>console.error(n));
@@ -1 +0,0 @@
1
- :root{--ff-white: #ffffff;--ff-black: #000000;--ff-gray-0: #ffffff;--ff-gray-25: #fcfcfc;--ff-gray-50: #f8f8f7;--ff-gray-75: #f2f2f0;--ff-gray-100: #e9e9e6;--ff-gray-150: #dcdcd7;--ff-gray-200: #c9c9c1;--ff-gray-300: #afafa5;--ff-gray-400: #8d8d81;--ff-gray-500: #69695f;--ff-gray-600: #505048;--ff-gray-700: #3c3c36;--ff-gray-800: #272722;--ff-gray-900: #1b1b18;--ff-gray-950: #141412;--ff-gray-1000: #0f0f0d;--ff-alpha-black-04: rgba(15, 15, 13, .04);--ff-alpha-black-06: rgba(15, 15, 13, .06);--ff-alpha-black-08: rgba(15, 15, 13, .08);--ff-alpha-black-10: rgba(15, 15, 13, .1);--ff-alpha-black-12: rgba(15, 15, 13, .12);--ff-alpha-black-15: rgba(15, 15, 13, .15);--ff-alpha-black-20: rgba(15, 15, 13, .2);--ff-alpha-black-30: rgba(15, 15, 13, .3);--ff-alpha-black-40: rgba(15, 15, 13, .4);--ff-alpha-black-60: rgba(15, 15, 13, .6);--ff-alpha-white-04: rgba(255, 255, 255, .04);--ff-alpha-white-06: rgba(255, 255, 255, .06);--ff-alpha-white-08: rgba(255, 255, 255, .08);--ff-alpha-white-10: rgba(255, 255, 255, .1);--ff-alpha-white-12: rgba(255, 255, 255, .12);--ff-alpha-white-15: rgba(255, 255, 255, .15);--ff-alpha-white-20: rgba(255, 255, 255, .2);--ff-alpha-white-30: rgba(255, 255, 255, .3);--ff-alpha-white-40: rgba(255, 255, 255, .4);--ff-alpha-white-60: rgba(255, 255, 255, .6);--ff-blue-100: #e8f2ff;--ff-blue-200: #bad8ff;--ff-blue-300: #7db7ff;--ff-blue-400: #4176ff;--ff-blue-500: #2759db;--ff-blue-600: #1b3f9e;--ff-green-100: #e7f7ef;--ff-green-300: #71c795;--ff-green-400: #2b9b5f;--ff-green-500: #1e7748;--ff-yellow-100: #fff5de;--ff-yellow-300: #e1b354;--ff-yellow-400: #bb8121;--ff-yellow-500: #916112;--ff-red-100: #feeceb;--ff-red-300: #e48d85;--ff-red-400: #c55245;--ff-red-500: #9e3a2f;--ff-radius-4: 4px;--ff-radius-6: 6px;--ff-radius-pill: 999px;--ff-font-family-sans: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ff-font-family-mono: ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;--ff-font-size-xs: 12px;--ff-font-size-sm: 14px;--ff-font-size-md: 16px;--ff-font-size-lg: 18px;--ff-shadow-1: 0 1px 2px rgba(15, 15, 13, .05), 0 8px 20px rgba(15, 15, 13, .04);--ff-shadow-2: 0 10px 28px rgba(15, 15, 13, .08), 0 3px 10px rgba(15, 15, 13, .05);--ff-shadow-3: 0 18px 48px rgba(15, 15, 13, .12), 0 6px 16px rgba(15, 15, 13, .08)}:root{--ff-color-surface-page: var(--ff-gray-25);--ff-color-surface-canvas: var(--ff-gray-25);--ff-color-surface-card: var(--ff-white);--ff-color-surface-group: rgba(65, 118, 255, .14);--ff-color-surface-group-active: rgba(65, 118, 255, .2);--ff-color-surface-muted: var(--ff-gray-50);--ff-color-surface-soft: var(--ff-gray-75);--ff-color-surface-accent-soft: rgba(65, 118, 255, .1);--ff-color-border-default: var(--ff-alpha-black-12);--ff-color-border-subtle: var(--ff-alpha-black-08);--ff-color-border-strong: var(--ff-alpha-black-20);--ff-color-border-accent: var(--ff-blue-500);--ff-color-text-primary: var(--ff-gray-800);--ff-color-text-secondary: var(--ff-gray-500);--ff-color-text-tertiary: var(--ff-gray-400);--ff-color-text-inverse: var(--ff-white);--ff-color-accent: var(--ff-blue-500);--ff-color-accent-strong: var(--ff-blue-600);--ff-color-success: var(--ff-green-400);--ff-color-warning: var(--ff-yellow-400);--ff-color-danger: var(--ff-red-400);--ff-color-disabled-surface: var(--ff-gray-100);--ff-color-disabled-border: var(--ff-alpha-black-10);--ff-color-disabled-text: var(--ff-gray-300);--ff-color-selection-fill: rgba(65, 118, 255, .12);--ff-color-selection-stroke: rgba(65, 118, 255, .28);--ff-color-grid: var(--ff-alpha-black-08);--ff-color-grid-strong: var(--ff-alpha-black-15);--ff-color-connector-connected: var(--ff-blue-500);--ff-color-connection: var(--ff-gray-600);--ff-color-connection-muted: var(--ff-gray-300);--ff-color-connection-hover: var(--ff-alpha-black-12);--ff-color-grouping-drop-target-border: var(--ff-gray-800);--ff-color-grouping-drop-target-border-active: var(--ff-gray-800);--ff-color-waypoint-fill: var(--ff-white);--ff-color-waypoint-stroke: var(--ff-blue-500);--ff-color-waypoint-candidate-fill: var(--ff-white);--ff-color-waypoint-candidate-stroke: var(--ff-green-400);--ff-color-minimap-surface: var(--ff-white);--ff-color-minimap-node: var(--ff-gray-700);--ff-color-minimap-view: rgba(65, 118, 255, .14);--ff-color-magnetic-line: var(--ff-blue-500);--ff-color-magnetic-rect-fill: rgba(65, 118, 255, .08);--ff-color-magnetic-rect-border: rgba(65, 118, 255, .24);--ff-radius-node: var(--ff-radius-4);--ff-radius-group: var(--ff-radius-4);--ff-radius-control: var(--ff-radius-4);--ff-radius-socket-square: var(--ff-radius-6);--ff-radius-pill: var(--ff-radius-pill);--ff-font-sans: var(--ff-font-family-sans);--ff-font-mono: var(--ff-font-family-mono);--ff-font-size-body: var(--ff-font-size-sm);--ff-font-size-label: var(--ff-font-size-xs);--ff-shadow-surface: var(--ff-shadow-1);--ff-shadow-floating: var(--ff-shadow-2)}.dark,[data-theme=dark]{--ff-color-surface-page: var(--ff-gray-1000);--ff-color-surface-canvas: var(--ff-gray-1000);--ff-color-surface-card: var(--ff-gray-950);--ff-color-surface-group: rgba(125, 183, 255, .18);--ff-color-surface-group-active: rgba(125, 183, 255, .24);--ff-color-surface-muted: var(--ff-gray-900);--ff-color-surface-soft: var(--ff-gray-900);--ff-color-surface-accent-soft: rgba(125, 183, 255, .14);--ff-color-border-default: var(--ff-alpha-white-12);--ff-color-border-subtle: var(--ff-alpha-white-08);--ff-color-border-strong: var(--ff-alpha-white-20);--ff-color-border-accent: var(--ff-blue-300);--ff-color-text-primary: var(--ff-gray-100);--ff-color-text-secondary: var(--ff-gray-300);--ff-color-text-tertiary: var(--ff-gray-400);--ff-color-text-inverse: var(--ff-gray-1000);--ff-color-accent: var(--ff-blue-300);--ff-color-accent-strong: var(--ff-blue-200);--ff-color-success: var(--ff-green-300);--ff-color-warning: var(--ff-yellow-300);--ff-color-danger: var(--ff-red-300);--ff-color-disabled-surface: var(--ff-gray-800);--ff-color-disabled-border: var(--ff-alpha-white-10);--ff-color-disabled-text: var(--ff-gray-500);--ff-color-selection-fill: rgba(125, 183, 255, .16);--ff-color-selection-stroke: rgba(125, 183, 255, .34);--ff-color-grid: var(--ff-alpha-white-08);--ff-color-grid-strong: var(--ff-alpha-white-15);--ff-color-connector-connected: var(--ff-blue-300);--ff-color-connection: var(--ff-gray-200);--ff-color-connection-muted: var(--ff-gray-500);--ff-color-connection-hover: var(--ff-alpha-white-12);--ff-color-grouping-drop-target-border: var(--ff-gray-100);--ff-color-grouping-drop-target-border-active: var(--ff-gray-100);--ff-color-waypoint-fill: var(--ff-gray-950);--ff-color-waypoint-stroke: var(--ff-blue-300);--ff-color-waypoint-candidate-fill: var(--ff-white);--ff-color-waypoint-candidate-stroke: var(--ff-green-300);--ff-color-minimap-surface: var(--ff-gray-950);--ff-color-minimap-node: var(--ff-gray-200);--ff-color-minimap-view: rgba(125, 183, 255, .18);--ff-color-magnetic-line: var(--ff-blue-300);--ff-color-magnetic-rect-fill: rgba(125, 183, 255, .1);--ff-color-magnetic-rect-border: rgba(125, 183, 255, .24);--ff-shadow-surface: 0 1px 2px rgba(0, 0, 0, .28), 0 8px 20px rgba(0, 0, 0, .14);--ff-shadow-floating: 0 14px 36px rgba(0, 0, 0, .26), 0 4px 12px rgba(0, 0, 0, .16)}:root{--ff-flow-background-color: var(--ff-color-surface-page);--ff-flow-text-color: var(--ff-color-text-primary);--ff-flow-font-family: var(--ff-font-sans);--ff-flow-font-size: var(--ff-font-size-body);--ff-canvas-background-color: var(--ff-color-surface-canvas);--ff-node-background-color: var(--ff-color-surface-card);--ff-node-background-color-inverse: var(--ff-color-text-primary);--ff-node-border-color: var(--ff-color-border-default);--ff-node-border-color-selected: var(--ff-color-border-accent);--ff-node-color: var(--ff-color-text-primary);--ff-node-border-radius: var(--ff-radius-node);--ff-node-shadow: var(--ff-shadow-surface);--ff-node-shadow-selected: var(--ff-shadow-floating);--ff-node-width: 120px;--ff-node-min-height: 56px;--ff-node-padding: 24px;--ff-group-background-color: var(--ff-color-surface-group);--ff-group-background-color-active: var(--ff-color-surface-group-active);--ff-group-border-color: var(--ff-color-border-subtle);--ff-group-border-color-selected: var(--ff-color-border-accent);--ff-group-border-color-active: var(--ff-color-border-accent);--ff-group-color: var(--ff-color-text-secondary);--ff-group-border-radius: var(--ff-radius-group);--ff-group-min-width: 180px;--ff-group-min-height: 120px;--ff-group-padding: 24px;--ff-grouping-drop-target-border-color: var(--ff-color-grouping-drop-target-border);--ff-grouping-drop-target-border-style: dashed;--ff-grouping-drop-target-border-width: 1px;--ff-grouping-drop-target-border-color-active: var(--ff-color-grouping-drop-target-border-active);--ff-grouping-drop-target-border-style-active: dashed;--ff-grouping-drop-target-border-width-active: 2px;--ff-handle-background-color: var(--ff-color-surface-card);--ff-handle-border-color: var(--ff-color-border-strong);--ff-handle-color: var(--ff-color-text-secondary);--ff-handle-size: 12px;--ff-handle-radius: var(--ff-radius-control);--ff-rotate-handle-size: 16px;--ff-connector-background-color: var(--ff-color-surface-card);--ff-connector-border-color: var(--ff-color-border-default);--ff-connector-connected-color: var(--ff-color-connector-connected);--ff-connector-accent-color: var(--ff-color-accent);--ff-connector-disabled-color: var(--ff-color-disabled-surface);--ff-connector-disabled-border-color: var(--ff-color-disabled-border);--ff-connector-size: 16px;--ff-connector-node-ring-color: var(--ff-canvas-background-color);--ff-outlet-background-color: var(--ff-color-surface-muted);--ff-outlet-border-color: var(--ff-color-border-default);--ff-outlet-color: var(--ff-color-accent);--ff-outlet-disabled-background-color: var(--ff-color-disabled-surface);--ff-outlet-disabled-border-color: var(--ff-color-disabled-border);--ff-outlet-disabled-color: var(--ff-color-disabled-text);--ff-outlet-border-radius: var(--ff-radius-pill);--ff-outlet-padding-y: 6px;--ff-outlet-padding-x: 12px;--ff-connection-color: var(--ff-color-connection);--ff-snap-connection-color: var(--ff-color-connection-muted);--ff-connection-hover-color: var(--ff-color-connection-hover);--ff-connection-selected-color: var(--ff-color-accent);--ff-connection-label-color: var(--ff-color-text-secondary);--ff-connection-content-color: var(--ff-node-color);--ff-connection-content-background-color: var(--ff-node-background-color);--ff-connection-content-border-color: var(--ff-node-border-color);--ff-connection-content-border-color-selected: var(--ff-connection-selected-color);--ff-connection-content-border-radius: var(--ff-node-border-radius);--ff-connection-content-font-size: 13px;--ff-connection-content-padding-y: 2px;--ff-connection-content-padding-x: 8px;--ff-connection-width: 2px;--ff-connection-hit-width: 14px;--ff-connection-drag-handle-fill: var(--ff-color-surface-card);--ff-connection-drag-handle-stroke: var(--ff-color-accent);--ff-marker-color: var(--ff-connection-color);--ff-waypoint-fill: var(--ff-color-waypoint-fill);--ff-waypoint-stroke: var(--ff-color-waypoint-stroke);--ff-waypoint-candidate-fill: var(--ff-color-waypoint-candidate-fill);--ff-waypoint-candidate-stroke: var(--ff-color-waypoint-candidate-stroke);--ff-background-line-color: var(--ff-color-grid);--ff-background-dot-color: var(--ff-color-grid-strong);--ff-selection-area-color: var(--ff-color-selection-fill);--ff-selection-area-border-color: var(--ff-color-selection-stroke);--ff-minimap-background-color: var(--ff-color-minimap-surface);--ff-minimap-border-color: var(--ff-color-border-default);--ff-minimap-node-color: var(--ff-color-minimap-node);--ff-minimap-node-selected-color: var(--ff-color-accent);--ff-minimap-view-color: var(--ff-color-minimap-view);--ff-minimap-view-border-color: var(--ff-color-selection-stroke);--ff-minimap-border-radius: var(--ff-radius-node);--ff-minimap-shadow: var(--ff-shadow-floating);--ff-magnetic-line-color: var(--ff-color-magnetic-line);--ff-magnetic-rect-fill: var(--ff-color-magnetic-rect-fill);--ff-magnetic-rect-border-color: var(--ff-color-magnetic-rect-border);--ff-external-item-background-color: var(--ff-color-surface-card);--ff-external-item-border-color: var(--ff-color-border-default);--ff-external-item-color: var(--ff-color-text-primary);--ff-external-item-disabled-color: var(--ff-color-disabled-text);--ff-external-item-disabled-background-color: var(--ff-color-disabled-surface);--ff-external-item-border-radius: var(--ff-radius-node);--ff-external-item-shadow: var(--ff-shadow-surface);--ff-external-item-preview-shadow: var(--ff-shadow-floating);--ff-external-item-placeholder-background-color: var(--ff-color-surface-soft);--ff-external-item-placeholder-border-color: var(--ff-color-border-subtle)}f-flow,.f-flow{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none;color:var(--ff-flow-text-color);background:var(--ff-flow-background-color);font-family:var(--ff-flow-font-family);font-size:var(--ff-flow-font-size);line-height:1.4}f-flow .f-canvas,.f-flow .f-canvas{background:var(--ff-canvas-background-color)}f-flow .f-node,.f-flow .f-node{width:var(--ff-node-width);min-height:var(--ff-node-min-height);padding:var(--ff-node-padding);box-sizing:border-box;color:var(--ff-node-color);text-align:center;background:var(--ff-node-background-color);border:1px solid var(--ff-node-border-color);border-radius:var(--ff-node-border-radius);box-shadow:var(--ff-node-shadow)}f-flow .f-node .node-content,.f-flow .f-node .node-content{width:100%;height:100%;overflow:hidden}f-flow .f-node.f-selected,.f-flow .f-node.f-selected{border-color:var(--ff-node-border-color-selected);box-shadow:var(--ff-node-shadow-selected)}f-flow .f-node.f-dragging,.f-flow .f-node.f-dragging{box-shadow:var(--ff-node-shadow-selected)}f-flow .f-group,.f-flow .f-group{min-width:var(--ff-group-min-width);min-height:var(--ff-group-min-height);padding:var(--ff-group-padding);box-sizing:border-box;color:var(--ff-group-color);background:var(--ff-group-background-color);border:1px solid var(--ff-group-border-color);border-radius:var(--ff-group-border-radius)}f-flow .f-group.f-selected,.f-flow .f-group.f-selected{border-color:var(--ff-group-border-color-selected)}f-flow .f-drag-handle,.f-flow .f-drag-handle{cursor:move}f-flow .f-drag-handle img,.f-flow .f-drag-handle img{pointer-events:none}f-flow .f-resize-handle,.f-flow .f-resize-handle{position:absolute;width:var(--ff-handle-size);height:var(--ff-handle-size);box-sizing:border-box;border:1px solid var(--ff-handle-border-color);border-radius:var(--ff-handle-radius);background:var(--ff-handle-background-color)}f-flow .f-resize-handle.f-resize-handle-left,.f-flow .f-resize-handle.f-resize-handle-left{left:0;top:50%;transform:translate(-50%,-50%);cursor:col-resize}f-flow .f-resize-handle.f-resize-handle-left-top,.f-flow .f-resize-handle.f-resize-handle-left-top{left:0;top:0;transform:translate(-50%,-50%);cursor:nwse-resize}f-flow .f-resize-handle.f-resize-handle-top,.f-flow .f-resize-handle.f-resize-handle-top{left:50%;top:0;transform:translate(-50%,-50%);cursor:row-resize}f-flow .f-resize-handle.f-resize-handle-right-top,.f-flow .f-resize-handle.f-resize-handle-right-top{right:0;top:0;transform:translate(50%,-50%);cursor:nesw-resize}f-flow .f-resize-handle.f-resize-handle-right,.f-flow .f-resize-handle.f-resize-handle-right{right:0;top:50%;transform:translate(50%,-50%);cursor:col-resize}f-flow .f-resize-handle.f-resize-handle-right-bottom,.f-flow .f-resize-handle.f-resize-handle-right-bottom{right:0;bottom:0;transform:translate(50%,50%);cursor:nwse-resize}f-flow .f-resize-handle.f-resize-handle-bottom,.f-flow .f-resize-handle.f-resize-handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%);cursor:row-resize}f-flow .f-resize-handle.f-resize-handle-left-bottom,.f-flow .f-resize-handle.f-resize-handle-left-bottom{left:0;bottom:0;transform:translate(-50%,50%);cursor:nesw-resize}f-flow .f-rotate-handle,.f-flow .f-rotate-handle{position:absolute;left:50%;top:-40px;display:inline-flex;align-items:center;justify-content:center;width:var(--ff-rotate-handle-size);height:var(--ff-rotate-handle-size);box-sizing:border-box;border:1px solid var(--ff-handle-border-color);border-radius:50%;background:var(--ff-handle-background-color);transform:translate(-50%);cursor:grab}f-flow .f-node-input:not(.f-node),f-flow .f-node-output:not(.f-node),.f-flow .f-node-input:not(.f-node),.f-flow .f-node-output:not(.f-node){position:absolute;width:var(--ff-connector-size);height:var(--ff-connector-size);box-sizing:border-box;border:1px solid var(--ff-connector-border-color);border-radius:50%;background:var(--ff-connector-background-color);box-shadow:0 0 0 2px var(--ff-connector-node-ring-color);pointer-events:all}f-flow .f-node-input:not(.f-node).left,f-flow .f-node-output:not(.f-node).left,.f-flow .f-node-input:not(.f-node).left,.f-flow .f-node-output:not(.f-node).left{left:calc(var(--ff-connector-size) / -2);top:50%;transform:translateY(-50%)}f-flow .f-node-input:not(.f-node).right,f-flow .f-node-output:not(.f-node).right,.f-flow .f-node-input:not(.f-node).right,.f-flow .f-node-output:not(.f-node).right{right:calc(var(--ff-connector-size) / -2);top:50%;transform:translateY(-50%)}f-flow .f-node-input:not(.f-node).top,f-flow .f-node-output:not(.f-node).top,.f-flow .f-node-input:not(.f-node).top,.f-flow .f-node-output:not(.f-node).top{top:calc(var(--ff-connector-size) / -2);left:50%;transform:translate(-50%)}f-flow .f-node-input:not(.f-node).top-left,f-flow .f-node-output:not(.f-node).top-left,.f-flow .f-node-input:not(.f-node).top-left,.f-flow .f-node-output:not(.f-node).top-left{top:calc(var(--ff-connector-size) / -2);left:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).top-right,f-flow .f-node-output:not(.f-node).top-right,.f-flow .f-node-input:not(.f-node).top-right,.f-flow .f-node-output:not(.f-node).top-right{top:calc(var(--ff-connector-size) / -2);right:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).bottom,f-flow .f-node-output:not(.f-node).bottom,.f-flow .f-node-input:not(.f-node).bottom,.f-flow .f-node-output:not(.f-node).bottom{bottom:calc(var(--ff-connector-size) / -2);left:50%;transform:translate(-50%)}f-flow .f-node-input:not(.f-node).bottom-left,f-flow .f-node-output:not(.f-node).bottom-left,.f-flow .f-node-input:not(.f-node).bottom-left,.f-flow .f-node-output:not(.f-node).bottom-left{bottom:calc(var(--ff-connector-size) / -2);left:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).bottom-right,f-flow .f-node-output:not(.f-node).bottom-right,.f-flow .f-node-input:not(.f-node).bottom-right,.f-flow .f-node-output:not(.f-node).bottom-right{bottom:calc(var(--ff-connector-size) / -2);right:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).f-connector-connectable,f-flow .f-node-output:not(.f-node).f-connector-connectable,.f-flow .f-node-input:not(.f-node).f-connector-connectable,.f-flow .f-node-output:not(.f-node).f-connector-connectable{border-color:var(--ff-connector-accent-color)}f-flow .f-node-input:not(.f-node).f-node-output-connected,f-flow .f-node-input:not(.f-node).f-node-input-connected,f-flow .f-node-output:not(.f-node).f-node-output-connected,f-flow .f-node-output:not(.f-node).f-node-input-connected,.f-flow .f-node-input:not(.f-node).f-node-output-connected,.f-flow .f-node-input:not(.f-node).f-node-input-connected,.f-flow .f-node-output:not(.f-node).f-node-output-connected,.f-flow .f-node-output:not(.f-node).f-node-input-connected{background:var(--ff-connector-connected-color);border-color:var(--ff-connector-connected-color)}f-flow .f-node-input:not(.f-node).f-node-output-not-connectable,f-flow .f-node-input:not(.f-node).f-node-input-not-connectable,f-flow .f-node-input:not(.f-node).f-node-input-disabled,f-flow .f-node-input:not(.f-node).f-node-output-disabled,f-flow .f-node-output:not(.f-node).f-node-output-not-connectable,f-flow .f-node-output:not(.f-node).f-node-input-not-connectable,f-flow .f-node-output:not(.f-node).f-node-input-disabled,f-flow .f-node-output:not(.f-node).f-node-output-disabled,.f-flow .f-node-input:not(.f-node).f-node-output-not-connectable,.f-flow .f-node-input:not(.f-node).f-node-input-not-connectable,.f-flow .f-node-input:not(.f-node).f-node-input-disabled,.f-flow .f-node-input:not(.f-node).f-node-output-disabled,.f-flow .f-node-output:not(.f-node).f-node-output-not-connectable,.f-flow .f-node-output:not(.f-node).f-node-input-not-connectable,.f-flow .f-node-output:not(.f-node).f-node-input-disabled,.f-flow .f-node-output:not(.f-node).f-node-output-disabled{background:var(--ff-connector-disabled-color);border-color:var(--ff-connector-disabled-border-color)}f-flow .f-node-input:not(.f-node),.f-flow .f-node-input:not(.f-node){border-radius:var(--ff-radius-socket-square)}f-flow .f-connections-dragging .f-node-input:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected),f-flow .f-connections-dragging .f-node-output:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected),.f-flow .f-connections-dragging .f-node-input:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected),.f-flow .f-connections-dragging .f-node-output:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected){border-color:var(--ff-connector-disabled-border-color)}f-flow .f-node-outlet,.f-flow .f-node-outlet{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:32px;padding:var(--ff-outlet-padding-y) var(--ff-outlet-padding-x);box-sizing:border-box;border:1px solid var(--ff-outlet-border-color);border-radius:var(--ff-outlet-border-radius);background:var(--ff-outlet-background-color);color:var(--ff-outlet-color);pointer-events:all}f-flow .f-node-outlet.f-node-outlet-disabled,.f-flow .f-node-outlet.f-node-outlet-disabled{background:var(--ff-outlet-disabled-background-color);border-color:var(--ff-outlet-disabled-border-color);color:var(--ff-outlet-disabled-color)}f-flow .f-connection-content,.f-flow .f-connection-content{box-sizing:border-box;color:var(--ff-connection-content-color);font-size:var(--ff-connection-content-font-size);padding:var(--ff-connection-content-padding-y) var(--ff-connection-content-padding-x);background:var(--ff-connection-content-background-color);border:1px solid var(--ff-connection-content-border-color);border-radius:var(--ff-connection-content-border-radius)}f-flow .f-connection .f-connection-selection,.f-flow .f-connection .f-connection-selection{fill:none;stroke:transparent;stroke-width:var(--ff-connection-hit-width)}f-flow .f-connection .f-connection-path,.f-flow .f-connection .f-connection-path{fill:none;stroke:var(--ff-connection-color);stroke-width:var(--ff-connection-width)}f-flow .f-connection .f-connection-drag-handle,.f-flow .f-connection .f-connection-drag-handle{fill:transparent;stroke:transparent;cursor:move}f-flow .f-connection.f-snap-connection .f-connection-path,.f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--ff-snap-connection-color);stroke-dasharray:8 4}f-flow .f-connection.f-selected .f-connection-content,.f-flow .f-connection.f-selected .f-connection-content{border-color:var(--ff-connection-content-border-color-selected)}f-flow .f-connection.f-selected .f-connection-path,.f-flow .f-connection.f-selected .f-connection-path{stroke:var(--ff-connection-selected-color)}f-flow:not(.f-dragging) .f-connection:not(.f-dragging):not(.f-selected):not(.f-connection-selection-disabled):hover .f-connection-selection,.f-flow:not(.f-dragging) .f-connection:not(.f-dragging):not(.f-selected):not(.f-connection-selection-disabled):hover .f-connection-selection{stroke:var(--ff-connection-hover-color)}f-flow .f-marker,f-flow .connection-marker,.f-flow .f-marker,.f-flow .connection-marker{color:var(--ff-marker-color)}f-flow .f-marker circle,f-flow .f-marker rect,f-flow .f-marker path,f-flow .f-marker polygon,f-flow .f-marker line,f-flow .connection-marker circle,f-flow .connection-marker rect,f-flow .connection-marker path,f-flow .connection-marker polygon,f-flow .connection-marker line,.f-flow .f-marker circle,.f-flow .f-marker rect,.f-flow .f-marker path,.f-flow .f-marker polygon,.f-flow .f-marker line,.f-flow .connection-marker circle,.f-flow .connection-marker rect,.f-flow .connection-marker path,.f-flow .connection-marker polygon,.f-flow .connection-marker line{fill:currentColor;stroke:currentColor}f-flow .f-connection.f-snap-connection .f-marker,f-flow .f-connection.f-snap-connection .connection-marker,.f-flow .f-connection.f-snap-connection .f-marker,.f-flow .f-connection.f-snap-connection .connection-marker{color:var(--ff-snap-connection-color)}f-flow .f-connection.f-selected .f-marker,f-flow .f-connection.f-selected .connection-marker,.f-flow .f-connection.f-selected .f-marker,.f-flow .f-connection.f-selected .connection-marker{color:var(--ff-connection-selected-color)}f-flow .f-connection .f-connection-waypoints .f-candidate,f-flow .f-connection .f-connection-waypoints .f-waypoint,.f-flow .f-connection .f-connection-waypoints .f-candidate,.f-flow .f-connection .f-connection-waypoints .f-waypoint{vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;stroke-width:1.5}f-flow .f-connection .f-connection-waypoints .f-candidate:hover,f-flow .f-connection .f-connection-waypoints .f-waypoint:hover,.f-flow .f-connection .f-connection-waypoints .f-candidate:hover,.f-flow .f-connection .f-connection-waypoints .f-waypoint:hover{transform:scale(1.1)}f-flow .f-connection .f-connection-waypoints .f-candidate,.f-flow .f-connection .f-connection-waypoints .f-candidate{fill:var(--ff-waypoint-candidate-fill);stroke:var(--ff-waypoint-candidate-stroke)}f-flow .f-connection .f-connection-waypoints .f-waypoint,.f-flow .f-connection .f-connection-waypoints .f-waypoint{fill:var(--ff-waypoint-fill);stroke:var(--ff-waypoint-stroke);cursor:move}f-flow .f-connection .f-connection-drag-handle,.f-flow .f-connection .f-connection-drag-handle{fill:transparent;stroke:var(--ff-connection-drag-handle-stroke);stroke-width:1.5}.f-external-item{display:inline-flex;align-items:center;gap:8px;padding:12px 14px;box-sizing:border-box;color:var(--ff-external-item-color);background:var(--ff-external-item-background-color);border:1px solid var(--ff-external-item-border-color);border-radius:var(--ff-external-item-border-radius);box-shadow:var(--ff-external-item-shadow);cursor:grab;-webkit-user-select:none;user-select:none}.f-external-item.f-external-item-disabled{color:var(--ff-external-item-disabled-color);background:var(--ff-external-item-disabled-background-color);cursor:not-allowed}.f-external-item-preview{box-sizing:border-box;box-shadow:var(--ff-external-item-preview-shadow)}.f-external-item-placeholder{box-sizing:border-box;background:var(--ff-external-item-placeholder-background-color);border:1px dashed var(--ff-external-item-placeholder-border-color);border-radius:var(--ff-external-item-border-radius)}f-flow .f-background line,f-flow .f-background path,.f-flow .f-background line,.f-flow .f-background path{stroke:var(--ff-background-line-color)}f-flow .f-background circle,.f-flow .f-background circle{fill:var(--ff-background-dot-color)}f-flow .f-selection-area,.f-flow .f-selection-area{box-sizing:border-box;background:var(--ff-selection-area-color);border:1px solid var(--ff-selection-area-border-color)}f-flow .f-minimap,.f-flow .f-minimap{overflow:hidden;background:var(--ff-minimap-background-color);border:1px solid var(--ff-minimap-border-color);border-radius:var(--ff-minimap-border-radius);box-shadow:var(--ff-minimap-shadow);bottom:16px;right:16px;width:140px;height:120px}f-flow .f-minimap .f-minimap-node,f-flow .f-minimap .f-minimap-group,.f-flow .f-minimap .f-minimap-node,.f-flow .f-minimap .f-minimap-group{fill:var(--ff-minimap-node-color)}f-flow .f-minimap .f-minimap-node.f-selected,f-flow .f-minimap .f-minimap-group.f-selected,.f-flow .f-minimap .f-minimap-node.f-selected,.f-flow .f-minimap .f-minimap-group.f-selected{fill:var(--ff-minimap-node-selected-color)}f-flow .f-minimap .f-minimap-view,.f-flow .f-minimap .f-minimap-view{fill:var(--ff-minimap-view-color);stroke:var(--ff-minimap-view-border-color);stroke-width:1}f-flow .f-magnetic-lines .f-line,f-flow .f-line-alignment .f-line,.f-flow .f-magnetic-lines .f-line,.f-flow .f-line-alignment .f-line{background:var(--ff-magnetic-line-color)}f-flow .f-magnetic-rects .f-rect,.f-flow .f-magnetic-rects .f-rect{box-sizing:border-box;background:var(--ff-magnetic-rect-fill);border:1px solid var(--ff-magnetic-rect-border-color)}@font-face{font-family:primeicons;font-display:block;src:url("./media/primeicons-RSSEDYLY.eot");src:url("./media/primeicons-RSSEDYLY.eot?#iefix") format("embedded-opentype"),url("./media/primeicons-4GST5W3O.woff2") format("woff2"),url("./media/primeicons-P53SE5CV.woff") format("woff"),url("./media/primeicons-GEFHGEHP.ttf") format("truetype"),url("./media/primeicons-DHQU4SEP.svg?#primeicons") format("svg");font-weight:400;font-style:normal}.pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pi:before{--webkit-backface-visibility:hidden;backface-visibility:hidden}.pi-fw{width:1.28571429em;text-align:center}.pi-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@media(prefers-reduced-motion:reduce){.pi-spin{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.pi-folder-plus:before{content:"\ea05"}.pi-receipt:before{content:"\ea06"}.pi-asterisk:before{content:"\ea07"}.pi-face-smile:before{content:"\ea08"}.pi-pinterest:before{content:"\ea09"}.pi-expand:before{content:"\ea0a"}.pi-pen-to-square:before{content:"\ea0b"}.pi-wave-pulse:before{content:"\ea0c"}.pi-turkish-lira:before{content:"\ea0d"}.pi-spinner-dotted:before{content:"\ea0e"}.pi-crown:before{content:"\ea0f"}.pi-pause-circle:before{content:"\ea10"}.pi-warehouse:before{content:"\ea11"}.pi-objects-column:before{content:"\ea12"}.pi-clipboard:before{content:"\ea13"}.pi-play-circle:before{content:"\ea14"}.pi-venus:before{content:"\ea15"}.pi-cart-minus:before{content:"\ea16"}.pi-file-plus:before{content:"\ea17"}.pi-microchip:before{content:"\ea18"}.pi-twitch:before{content:"\ea19"}.pi-building-columns:before{content:"\ea1a"}.pi-file-check:before{content:"\ea1b"}.pi-microchip-ai:before{content:"\ea1c"}.pi-trophy:before{content:"\ea1d"}.pi-barcode:before{content:"\ea1e"}.pi-file-arrow-up:before{content:"\ea1f"}.pi-mars:before{content:"\ea20"}.pi-tiktok:before{content:"\ea21"}.pi-arrow-up-right-and-arrow-down-left-from-center:before{content:"\ea22"}.pi-ethereum:before{content:"\ea23"}.pi-list-check:before{content:"\ea24"}.pi-thumbtack:before{content:"\ea25"}.pi-arrow-down-left-and-arrow-up-right-to-center:before{content:"\ea26"}.pi-equals:before{content:"\ea27"}.pi-lightbulb:before{content:"\ea28"}.pi-star-half:before{content:"\ea29"}.pi-address-book:before{content:"\ea2a"}.pi-chart-scatter:before{content:"\ea2b"}.pi-indian-rupee:before{content:"\ea2c"}.pi-star-half-fill:before{content:"\ea2d"}.pi-cart-arrow-down:before{content:"\ea2e"}.pi-calendar-clock:before{content:"\ea2f"}.pi-sort-up-fill:before{content:"\ea30"}.pi-sparkles:before{content:"\ea31"}.pi-bullseye:before{content:"\ea32"}.pi-sort-down-fill:before{content:"\ea33"}.pi-graduation-cap:before{content:"\ea34"}.pi-hammer:before{content:"\ea35"}.pi-bell-slash:before{content:"\ea36"}.pi-gauge:before{content:"\ea37"}.pi-shop:before{content:"\ea38"}.pi-headphones:before{content:"\ea39"}.pi-eraser:before{content:"\ea04"}.pi-stopwatch:before{content:"\ea01"}.pi-verified:before{content:"\ea02"}.pi-delete-left:before{content:"\ea03"}.pi-hourglass:before{content:"\e9fe"}.pi-truck:before{content:"\ea00"}.pi-wrench:before{content:"\e9ff"}.pi-microphone:before{content:"\e9fa"}.pi-megaphone:before{content:"\e9fb"}.pi-arrow-right-arrow-left:before{content:"\e9fc"}.pi-bitcoin:before{content:"\e9fd"}.pi-file-edit:before{content:"\e9f6"}.pi-language:before{content:"\e9f7"}.pi-file-export:before{content:"\e9f8"}.pi-file-import:before{content:"\e9f9"}.pi-file-word:before{content:"\e9f1"}.pi-gift:before{content:"\e9f2"}.pi-cart-plus:before{content:"\e9f3"}.pi-thumbs-down-fill:before{content:"\e9f4"}.pi-thumbs-up-fill:before{content:"\e9f5"}.pi-arrows-alt:before{content:"\e9f0"}.pi-calculator:before{content:"\e9ef"}.pi-sort-alt-slash:before{content:"\e9ee"}.pi-arrows-h:before{content:"\e9ec"}.pi-arrows-v:before{content:"\e9ed"}.pi-pound:before{content:"\e9eb"}.pi-prime:before{content:"\e9ea"}.pi-chart-pie:before{content:"\e9e9"}.pi-reddit:before{content:"\e9e8"}.pi-code:before{content:"\e9e7"}.pi-sync:before{content:"\e9e6"}.pi-shopping-bag:before{content:"\e9e5"}.pi-server:before{content:"\e9e4"}.pi-database:before{content:"\e9e3"}.pi-hashtag:before{content:"\e9e2"}.pi-bookmark-fill:before{content:"\e9df"}.pi-filter-fill:before{content:"\e9e0"}.pi-heart-fill:before{content:"\e9e1"}.pi-flag-fill:before{content:"\e9de"}.pi-circle:before{content:"\e9dc"}.pi-circle-fill:before{content:"\e9dd"}.pi-bolt:before{content:"\e9db"}.pi-history:before{content:"\e9da"}.pi-box:before{content:"\e9d9"}.pi-at:before{content:"\e9d8"}.pi-arrow-up-right:before{content:"\e9d4"}.pi-arrow-up-left:before{content:"\e9d5"}.pi-arrow-down-left:before{content:"\e9d6"}.pi-arrow-down-right:before{content:"\e9d7"}.pi-telegram:before{content:"\e9d3"}.pi-stop-circle:before{content:"\e9d2"}.pi-stop:before{content:"\e9d1"}.pi-whatsapp:before{content:"\e9d0"}.pi-building:before{content:"\e9cf"}.pi-qrcode:before{content:"\e9ce"}.pi-car:before{content:"\e9cd"}.pi-instagram:before{content:"\e9cc"}.pi-linkedin:before{content:"\e9cb"}.pi-send:before{content:"\e9ca"}.pi-slack:before{content:"\e9c9"}.pi-sun:before{content:"\e9c8"}.pi-moon:before{content:"\e9c7"}.pi-vimeo:before{content:"\e9c6"}.pi-youtube:before{content:"\e9c5"}.pi-flag:before{content:"\e9c4"}.pi-wallet:before{content:"\e9c3"}.pi-map:before{content:"\e9c2"}.pi-link:before{content:"\e9c1"}.pi-credit-card:before{content:"\e9bf"}.pi-discord:before{content:"\e9c0"}.pi-percentage:before{content:"\e9be"}.pi-euro:before{content:"\e9bd"}.pi-book:before{content:"\e9ba"}.pi-shield:before{content:"\e9b9"}.pi-paypal:before{content:"\e9bb"}.pi-amazon:before{content:"\e9bc"}.pi-phone:before{content:"\e9b8"}.pi-filter-slash:before{content:"\e9b7"}.pi-facebook:before{content:"\e9b4"}.pi-github:before{content:"\e9b5"}.pi-twitter:before{content:"\e9b6"}.pi-step-backward-alt:before{content:"\e9ac"}.pi-step-forward-alt:before{content:"\e9ad"}.pi-forward:before{content:"\e9ae"}.pi-backward:before{content:"\e9af"}.pi-fast-backward:before{content:"\e9b0"}.pi-fast-forward:before{content:"\e9b1"}.pi-pause:before{content:"\e9b2"}.pi-play:before{content:"\e9b3"}.pi-compass:before{content:"\e9ab"}.pi-id-card:before{content:"\e9aa"}.pi-ticket:before{content:"\e9a9"}.pi-file-o:before{content:"\e9a8"}.pi-reply:before{content:"\e9a7"}.pi-directions-alt:before{content:"\e9a5"}.pi-directions:before{content:"\e9a6"}.pi-thumbs-up:before{content:"\e9a3"}.pi-thumbs-down:before{content:"\e9a4"}.pi-sort-numeric-down-alt:before{content:"\e996"}.pi-sort-numeric-up-alt:before{content:"\e997"}.pi-sort-alpha-down-alt:before{content:"\e998"}.pi-sort-alpha-up-alt:before{content:"\e999"}.pi-sort-numeric-down:before{content:"\e99a"}.pi-sort-numeric-up:before{content:"\e99b"}.pi-sort-alpha-down:before{content:"\e99c"}.pi-sort-alpha-up:before{content:"\e99d"}.pi-sort-alt:before{content:"\e99e"}.pi-sort-amount-up:before{content:"\e99f"}.pi-sort-amount-down:before{content:"\e9a0"}.pi-sort-amount-down-alt:before{content:"\e9a1"}.pi-sort-amount-up-alt:before{content:"\e9a2"}.pi-palette:before{content:"\e995"}.pi-undo:before{content:"\e994"}.pi-desktop:before{content:"\e993"}.pi-sliders-v:before{content:"\e991"}.pi-sliders-h:before{content:"\e992"}.pi-search-plus:before{content:"\e98f"}.pi-search-minus:before{content:"\e990"}.pi-file-excel:before{content:"\e98e"}.pi-file-pdf:before{content:"\e98d"}.pi-check-square:before{content:"\e98c"}.pi-chart-line:before{content:"\e98b"}.pi-user-edit:before{content:"\e98a"}.pi-exclamation-circle:before{content:"\e989"}.pi-android:before{content:"\e985"}.pi-google:before{content:"\e986"}.pi-apple:before{content:"\e987"}.pi-microsoft:before{content:"\e988"}.pi-heart:before{content:"\e984"}.pi-mobile:before{content:"\e982"}.pi-tablet:before{content:"\e983"}.pi-key:before{content:"\e981"}.pi-shopping-cart:before{content:"\e980"}.pi-comments:before{content:"\e97e"}.pi-comment:before{content:"\e97f"}.pi-briefcase:before{content:"\e97d"}.pi-bell:before{content:"\e97c"}.pi-paperclip:before{content:"\e97b"}.pi-share-alt:before{content:"\e97a"}.pi-envelope:before{content:"\e979"}.pi-volume-down:before{content:"\e976"}.pi-volume-up:before{content:"\e977"}.pi-volume-off:before{content:"\e978"}.pi-eject:before{content:"\e975"}.pi-money-bill:before{content:"\e974"}.pi-images:before{content:"\e973"}.pi-image:before{content:"\e972"}.pi-sign-in:before{content:"\e970"}.pi-sign-out:before{content:"\e971"}.pi-wifi:before{content:"\e96f"}.pi-sitemap:before{content:"\e96e"}.pi-chart-bar:before{content:"\e96d"}.pi-camera:before{content:"\e96c"}.pi-dollar:before{content:"\e96b"}.pi-lock-open:before{content:"\e96a"}.pi-table:before{content:"\e969"}.pi-map-marker:before{content:"\e968"}.pi-list:before{content:"\e967"}.pi-eye-slash:before{content:"\e965"}.pi-eye:before{content:"\e966"}.pi-folder-open:before{content:"\e964"}.pi-folder:before{content:"\e963"}.pi-video:before{content:"\e962"}.pi-inbox:before{content:"\e961"}.pi-lock:before{content:"\e95f"}.pi-unlock:before{content:"\e960"}.pi-tags:before{content:"\e95d"}.pi-tag:before{content:"\e95e"}.pi-power-off:before{content:"\e95c"}.pi-save:before{content:"\e95b"}.pi-question-circle:before{content:"\e959"}.pi-question:before{content:"\e95a"}.pi-copy:before{content:"\e957"}.pi-file:before{content:"\e958"}.pi-clone:before{content:"\e955"}.pi-calendar-times:before{content:"\e952"}.pi-calendar-minus:before{content:"\e953"}.pi-calendar-plus:before{content:"\e954"}.pi-ellipsis-v:before{content:"\e950"}.pi-ellipsis-h:before{content:"\e951"}.pi-bookmark:before{content:"\e94e"}.pi-globe:before{content:"\e94f"}.pi-replay:before{content:"\e94d"}.pi-filter:before{content:"\e94c"}.pi-print:before{content:"\e94b"}.pi-align-right:before{content:"\e946"}.pi-align-left:before{content:"\e947"}.pi-align-center:before{content:"\e948"}.pi-align-justify:before{content:"\e949"}.pi-cog:before{content:"\e94a"}.pi-cloud-download:before{content:"\e943"}.pi-cloud-upload:before{content:"\e944"}.pi-cloud:before{content:"\e945"}.pi-pencil:before{content:"\e942"}.pi-users:before{content:"\e941"}.pi-clock:before{content:"\e940"}.pi-user-minus:before{content:"\e93e"}.pi-user-plus:before{content:"\e93f"}.pi-trash:before{content:"\e93d"}.pi-external-link:before{content:"\e93c"}.pi-window-maximize:before{content:"\e93b"}.pi-window-minimize:before{content:"\e93a"}.pi-refresh:before{content:"\e938"}.pi-user:before{content:"\e939"}.pi-exclamation-triangle:before{content:"\e922"}.pi-calendar:before{content:"\e927"}.pi-chevron-circle-left:before{content:"\e928"}.pi-chevron-circle-down:before{content:"\e929"}.pi-chevron-circle-right:before{content:"\e92a"}.pi-chevron-circle-up:before{content:"\e92b"}.pi-angle-double-down:before{content:"\e92c"}.pi-angle-double-left:before{content:"\e92d"}.pi-angle-double-right:before{content:"\e92e"}.pi-angle-double-up:before{content:"\e92f"}.pi-angle-down:before{content:"\e930"}.pi-angle-left:before{content:"\e931"}.pi-angle-right:before{content:"\e932"}.pi-angle-up:before{content:"\e933"}.pi-upload:before{content:"\e934"}.pi-download:before{content:"\e956"}.pi-ban:before{content:"\e935"}.pi-star-fill:before{content:"\e936"}.pi-star:before{content:"\e937"}.pi-chevron-left:before{content:"\e900"}.pi-chevron-right:before{content:"\e901"}.pi-chevron-down:before{content:"\e902"}.pi-chevron-up:before{content:"\e903"}.pi-caret-left:before{content:"\e904"}.pi-caret-right:before{content:"\e905"}.pi-caret-down:before{content:"\e906"}.pi-caret-up:before{content:"\e907"}.pi-search:before{content:"\e908"}.pi-check:before{content:"\e909"}.pi-check-circle:before{content:"\e90a"}.pi-times:before{content:"\e90b"}.pi-times-circle:before{content:"\e90c"}.pi-plus:before{content:"\e90d"}.pi-plus-circle:before{content:"\e90e"}.pi-minus:before{content:"\e90f"}.pi-minus-circle:before{content:"\e910"}.pi-circle-on:before{content:"\e911"}.pi-circle-off:before{content:"\e912"}.pi-sort-down:before{content:"\e913"}.pi-sort-up:before{content:"\e914"}.pi-sort:before{content:"\e915"}.pi-step-backward:before{content:"\e916"}.pi-step-forward:before{content:"\e917"}.pi-th-large:before{content:"\e918"}.pi-arrow-down:before{content:"\e919"}.pi-arrow-left:before{content:"\e91a"}.pi-arrow-right:before{content:"\e91b"}.pi-arrow-up:before{content:"\e91c"}.pi-bars:before{content:"\e91d"}.pi-arrow-circle-down:before{content:"\e91e"}.pi-arrow-circle-left:before{content:"\e91f"}.pi-arrow-circle-right:before{content:"\e920"}.pi-arrow-circle-up:before{content:"\e921"}.pi-info:before{content:"\e923"}.pi-info-circle:before{content:"\e924"}.pi-home:before{content:"\e925"}.pi-spinner:before{content:"\e926"}html.is-debug-slots .sm-debug-slot{position:relative;min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center}html.is-debug-slots .sm-debug-slot:before{content:attr(data-debug-slot);position:absolute;top:-10px;left:4px;font:700 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;background:#000;color:#fff;padding:1px 4px;border-radius:2px;pointer-events:none;z-index:100;white-space:nowrap}html.is-debug-slots .sm-debug-slot[data-debug-slot="card.footer.left.counter"]{box-shadow:0 0 0 3px #f0f}html.is-debug-slots .sm-debug-slot[data-debug-slot="card.footer.right"]{box-shadow:0 0 0 3px #f97316}html.is-debug-slots .sm-debug-slot[data-debug-slot="card.subtitle.left"]{box-shadow:0 0 0 3px #14b8a6}html.is-debug-slots .sm-debug-slot[data-debug-slot="card.title.right"]{box-shadow:0 0 0 3px #a855f7}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.header.badge.counter"]{box-shadow:0 0 0 3px #ff6a00}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.header.badge.tag"]{box-shadow:0 0 0 3px #ea580c}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.breakdown"]{box-shadow:0 0 0 3px #00d4ff;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.records"]{box-shadow:0 0 0 3px #0ea5e9;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.tree"]{box-shadow:0 0 0 3px #2563eb;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.key-values"]{box-shadow:0 0 0 3px #6366f1;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.link-list"]{box-shadow:0 0 0 3px #8b5cf6;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="inspector.body.panel.markdown"]{box-shadow:0 0 0 3px #d946ef;display:block;min-height:60px}html.is-debug-slots .sm-debug-slot[data-debug-slot="graph.node.alert"]{box-shadow:0 0 0 3px #0f6}html.is-debug-slots .sm-debug-slot[data-debug-slot="topbar.actions.indicator"]{box-shadow:0 0 0 3px #ffd400}:root{--sm-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--sm-bg-page: #f8fafc;--sm-bg-content: #ffffff;--sm-bg-hover: #f1f5f9;--sm-border: #e2e8f0;--sm-nav-active-bg: #eff6ff;--sm-violet-50: #F5F3FF;--sm-violet-100: #EDE9FE;--sm-violet-200: #DDD6FE;--sm-violet-300: #C4B5FD;--sm-violet-400: #A78BFA;--sm-violet-500: #8B5CF6;--sm-violet-600: #7C3AED;--sm-violet-700: #6D28D9;--sm-violet-800: #4C1D95;--sm-violet-900: #2E1065;--sm-edge-invokes: #f59e0b;--sm-edge-references: #3b82f6;--sm-edge-mentions: #9ca3af;--sm-edge-supersedes: #8b5cf6;--sm-link-in-bg: #e0e7ff;--sm-link-in-fg: #3730a3;--sm-link-out-bg: #fef3c7;--sm-link-out-fg: #92400e;--sm-severity-info: #1e3a8a;--sm-severity-success: #065f46;--sm-severity-warn: #92400e;--sm-severity-error: #991b1b;--sm-severity-info-bg: rgba(219, 234, 254, .35);--sm-severity-success-bg: rgba(209, 250, 229, .35);--sm-severity-warn-bg: rgba(254, 243, 199, .35);--sm-severity-error-bg: rgba(254, 226, 226, .35);--sm-shadow-topbar: 0 1px 2px rgba(0, 0, 0, .03);--sm-shadow-eventlog: 0 -4px 16px rgba(0, 0, 0, .08);--sm-shadow-floating: 0 4px 14px rgba(0, 0, 0, .08);--sm-shadow-card: 0 1px 2px rgba(0, 0, 0, .05);--sm-shadow-card-hover: 0 3px 12px rgba(0, 0, 0, .12)}.app-dark{--sm-bg-page: #09090b;--sm-bg-content: #18181b;--sm-bg-hover: #27272a;--sm-border: #3f3f46;--sm-nav-active-bg: rgba(96, 165, 250, .15);--sm-edge-invokes: #fbbf24;--sm-edge-references: #60a5fa;--sm-edge-mentions: #6b7280;--sm-edge-supersedes: #a78bfa;--sm-link-in-bg: #312e81;--sm-link-in-fg: #a5b4fc;--sm-link-out-bg: #78350f;--sm-link-out-fg: #fcd34d;--sm-severity-info: #93c5fd;--sm-severity-success: #6ee7b7;--sm-severity-warn: #fcd34d;--sm-severity-error: #fca5a5;--sm-severity-info-bg: rgba(30, 58, 138, .25);--sm-severity-success-bg: rgba(6, 78, 59, .25);--sm-severity-warn-bg: rgba(120, 53, 15, .2);--sm-severity-error-bg: rgba(127, 29, 29, .2);--sm-shadow-topbar: 0 1px 2px rgba(0, 0, 0, .4);--sm-shadow-eventlog: 0 -4px 16px rgba(0, 0, 0, .5);--sm-shadow-floating: 0 4px 14px rgba(0, 0, 0, .5);--sm-shadow-card: 0 1px 2px rgba(0, 0, 0, .4);--sm-shadow-card-hover: 0 4px 14px rgba(0, 0, 0, .55)}html,body{margin:0;padding:0;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--sm-bg-page);color:var(--p-text-color)}*,*:before,*:after{box-sizing:border-box}a{color:inherit;text-decoration:none}.empty-state{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:3rem 2rem;text-align:center}.empty-state__icon{font-size:2rem;color:var(--p-text-muted-color);opacity:.5}.empty-state__title{font-size:1rem;font-weight:600;color:var(--p-text-color);margin:0}.empty-state__desc{font-size:.9rem;color:var(--p-text-muted-color);max-width:40ch;margin:0}.p-dialog-mask{background:#06080c8c;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}