@duckcodeailabs/dql-cli 1.14.2 → 1.14.3-rc.1

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 (114) hide show
  1. package/dist/args.d.ts +4 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +16 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/assets/dql-notebook/assets/{AgentLogPage-DKbGpRQS.js → AgentLogPage-Jbyb4so-.js} +1 -1
  6. package/dist/assets/dql-notebook/assets/{AiBuildDialog-DPSu0Mly.js → AiBuildDialog-Du07X1qO.js} +1 -1
  7. package/dist/assets/dql-notebook/assets/{AiBuildResult-1uaGnpi1.js → AiBuildResult-xKtGthWv.js} +1 -1
  8. package/dist/assets/dql-notebook/assets/{AiSidePanel-BwMREwa7.js → AiSidePanel-CE_L04dK.js} +1 -1
  9. package/dist/assets/dql-notebook/assets/AnalyticsHome-CiUE10uF.js +6 -0
  10. package/dist/assets/dql-notebook/assets/{AppsView-CM1tPywy.js → AppsView-DlNaTuwD.js} +30 -35
  11. package/dist/assets/dql-notebook/assets/AskObservabilityPage-DracZPI9.js +1 -0
  12. package/dist/assets/dql-notebook/assets/AskTracePage-CSMoMw9a.js +8 -0
  13. package/dist/assets/dql-notebook/assets/{BlockStudio--S6WFVO4.js → BlockStudio-DQS5Hcq9.js} +9 -14
  14. package/dist/assets/dql-notebook/assets/BusinessArtifactView-CqV4i9l_.js +1 -0
  15. package/dist/assets/dql-notebook/assets/{DbtFirstModelingPage-CNyU5MBX.js → DbtFirstModelingPage-JKhB_Y2H.js} +3 -3
  16. package/dist/assets/dql-notebook/assets/{GitPage-IcydAai3.js → GitPage-DjaNp0o3.js} +1 -1
  17. package/dist/assets/dql-notebook/assets/{GlobalAiRail-CSKW-5eD.js → GlobalAiRail-CsV3zlc8.js} +1 -1
  18. package/dist/assets/dql-notebook/assets/{GovernedContextPage-CFen0eFT.js → GovernedContextPage-uXUHUOIJ.js} +3 -3
  19. package/dist/assets/dql-notebook/assets/{HelpDocsPage-D0D9UCIz.js → HelpDocsPage-Hbh9IeYB.js} +1 -1
  20. package/dist/assets/dql-notebook/assets/{HomePage-CmSxapR3.js → HomePage-CRRl-R_v.js} +1 -1
  21. package/dist/assets/dql-notebook/assets/LineageDAG-OMUP2sbl.js +1 -0
  22. package/dist/assets/dql-notebook/assets/LineageDetailView-C964BLuV.js +1 -0
  23. package/dist/assets/dql-notebook/assets/LineageDrawer-CzY0nfpD.js +1 -0
  24. package/dist/assets/dql-notebook/assets/{LineagePathBreadcrumb-CTZJp4_r.js → LineagePathBreadcrumb-0Gi-Fm1B.js} +1 -1
  25. package/dist/assets/dql-notebook/assets/MiniLineageGraph-wn0wLc9m.js +1 -0
  26. package/dist/assets/dql-notebook/assets/{NewBlockModal-DMBFB7nE.js → NewBlockModal-kMAzk91d.js} +1 -1
  27. package/dist/assets/dql-notebook/assets/{NewNotebookModal-DsC9CWlW.js → NewNotebookModal-D_cWd_6M.js} +1 -1
  28. package/dist/assets/dql-notebook/assets/{NotebookEditor-hs-kw8v9.js → NotebookEditor-Bax0lxaz.js} +25 -30
  29. package/dist/assets/dql-notebook/assets/{ReadinessPage-DJ83cMik.js → ReadinessPage-DEUIXQQY.js} +1 -1
  30. package/dist/assets/dql-notebook/assets/{SetupOnboarding-B1Pu_Bvv.js → SetupOnboarding-CyE-Ex41.js} +1 -1
  31. package/dist/assets/dql-notebook/assets/{SkillsPage-BHKDay8n.js → SkillsPage-QgvKGPxE.js} +1 -1
  32. package/dist/assets/dql-notebook/assets/{TrustBadge-BkyGgob2.js → TrustBadge-D5CGp0cu.js} +1 -1
  33. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-BjsTE6yf.js +89 -0
  34. package/dist/assets/dql-notebook/assets/{answer-to-notebook-DmNiuLQA.js → answer-to-notebook-tACdCsTV.js} +1 -1
  35. package/dist/assets/dql-notebook/assets/{arrow-left--1rsrxm8.js → arrow-left-CF6wxXU5.js} +1 -1
  36. package/dist/assets/dql-notebook/assets/{arrow-right-D5TdqY1G.js → arrow-right-C7G3M_S8.js} +1 -1
  37. package/dist/assets/dql-notebook/assets/{book-open-text-Bw7nHbzg.js → book-open-text-DDBO8G7L.js} +1 -1
  38. package/dist/assets/dql-notebook/assets/chevron-left-DxajrX2v.js +6 -0
  39. package/dist/assets/dql-notebook/assets/{circle-x-DLe6NNM4.js → circle-x-HBvXjnT6.js} +1 -1
  40. package/dist/assets/dql-notebook/assets/clock-3-CJIdsPLt.js +6 -0
  41. package/dist/assets/dql-notebook/assets/dagre.esm-B6nvU4OB.js +1 -0
  42. package/dist/assets/dql-notebook/assets/{external-link-C9Q97sA3.js → external-link-WciAU8Bu.js} +1 -1
  43. package/dist/assets/dql-notebook/assets/{grip-vertical-CztvkIgo.js → grip-vertical-DVu7ok6x.js} +1 -1
  44. package/dist/assets/dql-notebook/assets/index-B_kaoARS.css +1 -0
  45. package/dist/assets/dql-notebook/assets/{index-zHHzDn6l.js → index-D3wnucQC.js} +133 -128
  46. package/dist/assets/dql-notebook/assets/{link-2-CiKAvumL.js → link-2-C6uQx50X.js} +1 -1
  47. package/dist/assets/dql-notebook/assets/{list-tree-BtnP2nQ5.js → list-tree-DapsIuQB.js} +1 -1
  48. package/dist/assets/dql-notebook/assets/{minimize-2-TSFGxcCP.js → minimize-2-BlVoipnT.js} +1 -1
  49. package/dist/assets/dql-notebook/assets/{panel-right-open-BfXIUWy0.js → panel-right-open-DcnKWxfx.js} +1 -1
  50. package/dist/assets/dql-notebook/assets/{play-DVbSFJHD.js → play-CNuRuaAs.js} +1 -1
  51. package/dist/assets/dql-notebook/assets/{rotate-ccw-D_cesDcX.js → rotate-ccw-B2p953Zh.js} +1 -1
  52. package/dist/assets/dql-notebook/assets/{semantic-fields-CoVStdYB.js → semantic-fields-2fWgkTJc.js} +1 -1
  53. package/dist/assets/dql-notebook/assets/{sliders-horizontal-l7xV9K5A.js → sliders-horizontal-DwRTu1w4.js} +1 -1
  54. package/dist/assets/dql-notebook/assets/{star-CSBS0H3b.js → star-Cbaj4F3i.js} +1 -1
  55. package/dist/assets/dql-notebook/assets/style-NlN9F6JE.js +23 -0
  56. package/dist/assets/dql-notebook/assets/{triangle-alert-BTrnyY4q.js → triangle-alert-BPHvH1wA.js} +1 -1
  57. package/dist/assets/dql-notebook/assets/{upload-sySLq9zb.js → upload-DIqK0KE1.js} +1 -1
  58. package/dist/assets/dql-notebook/assets/{usePersistedAgentThreadId-CzwgGdus.js → usePersistedAgentThreadId-DpQXOEDw.js} +1 -1
  59. package/dist/assets/dql-notebook/assets/{user-round-ChlgXi9j.js → user-round-DukNupB_.js} +1 -1
  60. package/dist/assets/dql-notebook/assets/{wand-sparkles-CGw0ytyT.js → wand-sparkles-CAwLX0b9.js} +1 -1
  61. package/dist/assets/dql-notebook/assets/{workflow-C_RltiK5.js → workflow-bOT-NqdO.js} +1 -1
  62. package/dist/assets/dql-notebook/assets/{wrench-D-wLfeu0.js → wrench-1m0_kcza.js} +1 -1
  63. package/dist/assets/dql-notebook/assets/{x-B28hIJIC.js → x-fp82BETM.js} +1 -1
  64. package/dist/assets/dql-notebook/index.html +2 -2
  65. package/dist/commands/agent-eval-runtime.d.ts +9 -0
  66. package/dist/commands/agent-eval-runtime.d.ts.map +1 -1
  67. package/dist/commands/agent-eval-runtime.js +7 -0
  68. package/dist/commands/agent-eval-runtime.js.map +1 -1
  69. package/dist/commands/agent-trace.d.ts +3 -0
  70. package/dist/commands/agent-trace.d.ts.map +1 -0
  71. package/dist/commands/agent-trace.js +169 -0
  72. package/dist/commands/agent-trace.js.map +1 -0
  73. package/dist/commands/agent.d.ts +28 -2
  74. package/dist/commands/agent.d.ts.map +1 -1
  75. package/dist/commands/agent.js +408 -35
  76. package/dist/commands/agent.js.map +1 -1
  77. package/dist/commands/notebook.d.ts +2 -0
  78. package/dist/commands/notebook.d.ts.map +1 -1
  79. package/dist/commands/notebook.js +4 -0
  80. package/dist/commands/notebook.js.map +1 -1
  81. package/dist/index.js +2 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/llm/providers/dql-agent-provider.d.ts +1 -1
  84. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  85. package/dist/llm/providers/dql-agent-provider.js +759 -145
  86. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  87. package/dist/llm/types.d.ts +21 -2
  88. package/dist/llm/types.d.ts.map +1 -1
  89. package/dist/local-runtime.d.ts +256 -33
  90. package/dist/local-runtime.d.ts.map +1 -1
  91. package/dist/local-runtime.js +2844 -490
  92. package/dist/local-runtime.js.map +1 -1
  93. package/dist/package.json +10 -10
  94. package/dist/providers/oauth/claude-oauth.d.ts.map +1 -1
  95. package/dist/providers/oauth/claude-oauth.js +52 -18
  96. package/dist/providers/oauth/claude-oauth.js.map +1 -1
  97. package/dist/providers/oauth/codex-oauth.d.ts.map +1 -1
  98. package/dist/providers/oauth/codex-oauth.js +72 -44
  99. package/dist/providers/oauth/codex-oauth.js.map +1 -1
  100. package/dist/providers/subscription-cli.d.ts +20 -0
  101. package/dist/providers/subscription-cli.d.ts.map +1 -1
  102. package/dist/providers/subscription-cli.js +69 -11
  103. package/dist/providers/subscription-cli.js.map +1 -1
  104. package/package.json +10 -10
  105. package/dist/assets/dql-notebook/assets/AnalyticsHome-BGfey_ve.js +0 -6
  106. package/dist/assets/dql-notebook/assets/BusinessArtifactView-BEAJ-yNW.js +0 -1
  107. package/dist/assets/dql-notebook/assets/LineageDAG-BGUcIt1B.js +0 -1
  108. package/dist/assets/dql-notebook/assets/LineageDetailView-Dx48Zfzb.js +0 -1
  109. package/dist/assets/dql-notebook/assets/LineageDrawer-zaBfSLZO.js +0 -1
  110. package/dist/assets/dql-notebook/assets/MiniLineageGraph-CdivNR1S.js +0 -1
  111. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-BYdrTaEW.js +0 -89
  112. package/dist/assets/dql-notebook/assets/dagre.esm-CW5QZdBt.js +0 -23
  113. package/dist/assets/dql-notebook/assets/index-B3shyZsg.css +0 -1
  114. /package/dist/assets/dql-notebook/assets/{dagre-BZV40eAE.css → style-BZV40eAE.css} +0 -0
@@ -1,2 +1,2 @@
1
- import{u as x,r as w,a as k,m}from"./index-zHHzDn6l.js";const C="dql:focus-notebook-cell";function h(e){window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(C,{detail:{cellId:e}}))},0)}function S(e){var t,a,c;const i=(t=e.question)==null?void 0:t.trim(),n=(a=e.generatedSql)==null?void 0:a.trim(),s=(c=e.generatedDql)==null?void 0:c.trim();if(!(!i||!n&&!s))return{version:1,source:"agent_run",question:i,...n?{generatedSql:n}:{},...s?{generatedDql:s}:{},...e.sourceRunId?{sourceRunId:e.sourceRunId}:{}}}function g(e){return e.replace(/[^a-zA-Z0-9_ -]+/g," ").replace(/\s+/g,"_").replace(/^_+|_+$/g,"").slice(0,48)||"ai_analysis"}function E(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function I(e,i){var c,o,u,f,l,q;const n=(o=(c=e.dqlArtifact)==null?void 0:c.source)==null?void 0:o.trim(),s=(e.sql??n??"").trim();if(!s&&!n)return[];if(e.mixedSourcePlan){const r=e.mixedSourcePlan,A=m("markdown",[`### ${e.title??"Mixed-source analysis"}`,"",`This analysis combines a bounded warehouse extraction with the local dataset \`${r.localDataset}\`.`,"",...(u=r.warehouseRelations)!=null&&u.length?[`- Warehouse sources: ${r.warehouseRelations.map(b=>`\`${b}\``).join(", ")}`]:[],`- Join: \`${r.warehouseKey}\` = \`${r.localKey}\``,"- Trust: local mixed-source analysis · review required"].join(`
1
+ import{u as x,r as w,a as k,m}from"./index-D3wnucQC.js";const C="dql:focus-notebook-cell";function h(e){window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(C,{detail:{cellId:e}}))},0)}function S(e){var t,a,c;const i=(t=e.question)==null?void 0:t.trim(),n=(a=e.generatedSql)==null?void 0:a.trim(),s=(c=e.generatedDql)==null?void 0:c.trim();if(!(!i||!n&&!s))return{version:1,source:"agent_run",question:i,...n?{generatedSql:n}:{},...s?{generatedDql:s}:{},...e.sourceRunId?{sourceRunId:e.sourceRunId}:{}}}function g(e){return e.replace(/[^a-zA-Z0-9_ -]+/g," ").replace(/\s+/g,"_").replace(/^_+|_+$/g,"").slice(0,48)||"ai_analysis"}function E(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function I(e,i){var c,o,u,f,l,q;const n=(o=(c=e.dqlArtifact)==null?void 0:c.source)==null?void 0:o.trim(),s=(e.sql??n??"").trim();if(!s&&!n)return[];if(e.mixedSourcePlan){const r=e.mixedSourcePlan,A=m("markdown",[`### ${e.title??"Mixed-source analysis"}`,"",`This analysis combines a bounded warehouse extraction with the local dataset \`${r.localDataset}\`.`,"",...(u=r.warehouseRelations)!=null&&u.length?[`- Warehouse sources: ${r.warehouseRelations.map(b=>`\`${b}\``).join(", ")}`]:[],`- Join: \`${r.warehouseKey}\` = \`${r.localKey}\``,"- Trust: local mixed-source analysis · review required"].join(`
2
2
  `));A.name=g("Analysis context");const d=m("sql",s);return d.name=g(e.title??"Warehouse extraction"),d.mixedSourcePlan=r,d.executionTarget=((f=e.executionTarget)==null?void 0:f.target)==="connection"?e.executionTarget:{target:"connection"},d.datasetRefs=[{id:r.datasetId??r.localDataset,alias:r.localDataset,role:"source"}],[A,d]}const t=m(n?"dql":"sql",n||s);t.name=g(e.title??((l=e.dqlArtifact)==null?void 0:l.name)??"AI analysis"),e.result&&(t.result=e.result,t.status="success",t.executionCount=1),e.chartConfig&&(t.chartConfig=e.chartConfig),e.executionTarget&&(t.executionTarget=e.executionTarget),t.correctionProvenance=S({question:e.question,generatedSql:e.sql??((q=e.dqlArtifact)==null?void 0:q.compiledSql),generatedDql:n,sourceRunId:e.sourceRunId}),e.dqlArtifact&&(t.dqlArtifact={source:e.dqlArtifact.source,sql:e.sql,name:e.dqlArtifact.name,sourcePath:e.dqlArtifact.sourcePath,kind:e.dqlArtifact.kind,metrics:e.dqlArtifact.metrics,dimensions:e.dqlArtifact.dimensions,parameters:e.dqlArtifact.parameters,parameterValues:e.dqlArtifact.parameterValues,persistence:e.dqlArtifact.persistence,trustState:e.dqlArtifact.trustState,compiledSql:e.dqlArtifact.compiledSql??e.sql,...e.question?{question:e.question}:{}},t.dqlParameterValues=e.dqlArtifact.parameterValues);const a=i.filter(r=>new RegExp(`\\b${E(r.alias)}\\b`,"i").test(s)).map(r=>({id:r.id,alias:r.alias,role:r.storageMode==="staged"?"staged":"source",fingerprint:r.fileFingerprint}));return a.length>0&&(t.executionTarget={target:"local"},t.datasetRefs=a,t.dqlArtifact&&(t.dqlArtifact.reviewState="review_required")),[t]}function _(e){return(e??"ai analysis").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"ai-analysis"}function v(){const{state:e,dispatch:i}=x();return w.useCallback(async(n,s)=>{var f;const t=I(n,(s==null?void 0:s.datasets)??[]);if(t.length===0)return;if(e.activeFile&&e.activeFile.type!=="block"){let l=s==null?void 0:s.afterId;for(const q of t)i({type:"ADD_CELL",cell:q,...l?{afterId:l}:{}}),l=q.id;h(t[t.length-1].id);return}const a=n.title??((f=n.dqlArtifact)==null?void 0:f.name)??"AI analysis",c=_(a);let o=`notebooks/${c}.dqlnb`;try{o=(await k.createNotebook(c,"blank")).path}catch{}const u={name:o.split("/").pop()??`${c}.dqlnb`,path:o,type:"notebook",folder:"notebooks",isNew:!0};i({type:"FILE_ADDED",file:u}),i({type:"OPEN_FILE",file:u,cells:t,title:a}),h(t[t.length-1].id)},[i,e.activeFile])}export{C as N,S as c,h as f,v as u};
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-zHHzDn6l.js";/**
1
+ import{c as o}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-zHHzDn6l.js";/**
1
+ import{c as o}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-zHHzDn6l.js";/**
1
+ import{c as a}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1,6 @@
1
+ import{c as e}from"./index-D3wnucQC.js";/**
2
+ * @license lucide-react v0.563.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const o=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],t=e("chevron-left",o);export{t as C};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-zHHzDn6l.js";/**
1
+ import{c}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1,6 @@
1
+ import{c}from"./index-D3wnucQC.js";/**
2
+ * @license lucide-react v0.563.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const o=[["path",{d:"M12 6v6h4",key:"135r8i"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],r=c("clock-3",o);export{r as C};
@@ -0,0 +1 @@
1
+ var ie=Object.defineProperty,Te=(e,t,r)=>t in e?ie(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Le=(e,t)=>{for(var r in t)ie(e,r,{get:t[r],enumerable:!0})},Pe=(e,t,r)=>Te(e,t+"",r),se={};Le(se,{Graph:()=>w,alg:()=>G,json:()=>ae,version:()=>Fe});var Re=Object.defineProperty,de=(e,t)=>{for(var r in t)Re(e,r,{get:t[r],enumerable:!0})},w=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected="directed"in e?e.directed:!0,this._isMultigraph="multigraph"in e?e.multigraph:!1,this._isCompound="compound"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children["\0"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!="function"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,t){return e.forEach(r=>{t!==void 0?this.setNode(r,t):this.setNode(r)}),this}setNode(e,t){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]="\0",this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let t=r=>this.removeEdge(this._edgeObjs[r]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(r=>{this.setParent(r)}),delete this._children[e]),Object.keys(this._in[e]).forEach(t),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(t===void 0)t="\0";else{t+="";for(let r=t;r!==void 0;r=this.parent(r))if(r===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}parent(e){if(this._isCompound){let t=this._parent[e];if(t!=="\0")return t}}children(e="\0"){if(this._isCompound){let t=this._children[e];if(t)return Object.keys(t)}else{if(e==="\0")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let t=this._preds[e];if(t)return Object.keys(t)}successors(e){let t=this._sucs[e];if(t)return Object.keys(t)}neighbors(e){let t=this.predecessors(e);if(t){let r=new Set(t);for(let n of this.successors(e))r.add(n);return Array.from(r.values())}}isLeaf(e){let t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){let t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph()),Object.entries(this._nodes).forEach(([o,i])=>{e(o)&&t.setNode(o,i)}),Object.values(this._edgeObjs).forEach(o=>{t.hasNode(o.v)&&t.hasNode(o.w)&&t.setEdge(o,this.edge(o))});let r={},n=o=>{let i=this.parent(o);return!i||t.hasNode(i)?(r[o]=i??void 0,i??void 0):i in r?r[i]:n(i)};return this._isCompound&&t.nodes().forEach(o=>t.setParent(o,n(o))),t}setDefaultEdgeLabel(e){return typeof e!="function"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,t){return e.reduce((r,n)=>(t!==void 0?this.setEdge(r,n,t):this.setEdge(r,n),n)),this}setEdge(e,t,r,n){let o,i,s,d,a=!1;typeof e=="object"&&e!==null&&"v"in e?(o=e.v,i=e.w,s=e.name,arguments.length===2&&(d=t,a=!0)):(o=e,i=t,s=n,arguments.length>2&&(d=r,a=!0)),o=""+o,i=""+i,s!==void 0&&(s=""+s);let l=O(this._isDirected,o,i,s);if(l in this._edgeLabels)return a&&(this._edgeLabels[l]=d),this;if(s!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(o),this.setNode(i),this._edgeLabels[l]=a?d:this._defaultEdgeLabelFn(o,i,s);let h=Se(this._isDirected,o,i,s);return o=h.v,i=h.w,Object.freeze(h),this._edgeObjs[l]=h,K(this._preds[i],o),K(this._sucs[o],i),this._in[i][l]=h,this._out[o][l]=h,this._edgeCount++,this}edge(e,t,r){let n=arguments.length===1?P(this._isDirected,e):O(this._isDirected,e,t,r);return this._edgeLabels[n]}edgeAsObj(e,t,r){let n=arguments.length===1?this.edge(e):this.edge(e,t,r);return typeof n!="object"?{label:n}:n}hasEdge(e,t,r){return(arguments.length===1?P(this._isDirected,e):O(this._isDirected,e,t,r))in this._edgeLabels}removeEdge(e,t,r){let n=arguments.length===1?P(this._isDirected,e):O(this._isDirected,e,t,r),o=this._edgeObjs[n];if(o){let i=o.v,s=o.w;delete this._edgeLabels[n],delete this._edgeObjs[n],W(this._preds[s],i),W(this._sucs[i],s),delete this._in[s][n],delete this._out[i][n],this._edgeCount--}return this}inEdges(e,t){return this.isDirected()?this.filterEdges(this._in[e],e,t):this.nodeEdges(e,t)}outEdges(e,t){return this.isDirected()?this.filterEdges(this._out[e],e,t):this.nodeEdges(e,t)}nodeEdges(e,t){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,t)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,t,r){if(!e)return;let n=Object.values(e);return r?n.filter(o=>o.v===t&&o.w===r||o.v===r&&o.w===t):n}};function K(e,t){e[t]?e[t]++:e[t]=1}function W(e,t){e[t]!==void 0&&!--e[t]&&delete e[t]}function O(e,t,r,n){let o=""+t,i=""+r;if(!e&&o>i){let s=o;o=i,i=s}return o+""+i+""+(n===void 0?"\0":n)}function Se(e,t,r,n){let o=""+t,i=""+r;if(!e&&o>i){let d=o;o=i,i=d}let s={v:o,w:i};return n&&(s.name=n),s}function P(e,t){return O(e,t.v,t.w,t.name)}var Fe="4.0.1",ae={};de(ae,{read:()=>Ge,write:()=>De});function De(e){let t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:Ve(e),edges:Ye(e)},r=e.graph();return r!==void 0&&(t.value=structuredClone(r)),t}function Ve(e){return e.nodes().map(t=>{let r=e.node(t),n=e.parent(t),o={v:t};return r!==void 0&&(o.value=r),n!==void 0&&(o.parent=n),o})}function Ye(e){return e.edges().map(t=>{let r=e.edge(t),n={v:t.v,w:t.w};return t.name!==void 0&&(n.name=t.name),r!==void 0&&(n.value=r),n})}function Ge(e){let t=new w(e.options);return e.value!==void 0&&t.setGraph(e.value),e.nodes.forEach(r=>{t.setNode(r.v,r.value),r.parent&&t.setParent(r.v,r.parent)}),e.edges.forEach(r=>{t.setEdge({v:r.v,w:r.w,name:r.name},r.value)}),t}var G={};de(G,{CycleException:()=>C,bellmanFord:()=>le,components:()=>ze,dijkstra:()=>j,dijkstraAll:()=>Ke,findCycles:()=>We,floydWarshall:()=>Je,isAcyclic:()=>Ue,postorder:()=>Ze,preorder:()=>et,prim:()=>tt,shortestPaths:()=>rt,tarjan:()=>ue,topsort:()=>ce});var Ae=()=>1;function le(e,t,r,n){return Be(e,String(t),r||Ae,n||function(o){return e.outEdges(o)})}function Be(e,t,r,n){let o={},i,s=0,d=e.nodes(),a=function(u){let c=r(u);o[u.v].distance+c<o[u.w].distance&&(o[u.w]={distance:o[u.v].distance+c,predecessor:u.v},i=!0)},l=function(){d.forEach(function(u){n(u).forEach(function(c){let f=c.v===u?c.v:c.w,g=f===c.v?c.w:c.v;a({v:f,w:g})})})};d.forEach(function(u){let c=u===t?0:Number.POSITIVE_INFINITY;o[u]={distance:c,predecessor:""}});let h=d.length;for(let u=1;u<h&&(i=!1,s++,l(),!!i);u++);if(s===h-1&&(i=!1,l(),i))throw new Error("The graph contains a negative weight cycle");return o}function ze(e){let t={},r=[],n;function o(i){i in t||(t[i]=!0,n.push(i),e.successors(i).forEach(o),e.predecessors(i).forEach(o))}return e.nodes().forEach(function(i){n=[],o(i),n.length&&r.push(n)}),r}var he=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(e,t){let r=this._keyIndices,n=String(e);if(!(n in r)){let o=this._arr,i=o.length;return r[n]=i,o.push({key:n,priority:t}),this._decrease(i),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,t){let r=this._keyIndices[e];if(r===void 0)throw new Error(`Key not found: ${e}`);let n=this._arr[r].priority;if(t>n)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${n} New: ${t}`);this._arr[r].priority=t,this._decrease(r)}_heapify(e){let t=this._arr,r=2*e,n=r+1,o=e;r<t.length&&(o=t[r].priority<t[o].priority?r:o,n<t.length&&(o=t[n].priority<t[o].priority?n:o),o!==e&&(this._swap(e,o),this._heapify(o)))}_decrease(e){let t=this._arr,r=t[e].priority,n;for(;e!==0&&(n=e>>1,!(t[n].priority<r));)this._swap(e,n),e=n}_swap(e,t){let r=this._arr,n=this._keyIndices,o=r[e],i=r[t];r[e]=i,r[t]=o,n[i.key]=e,n[o.key]=t}},qe=()=>1;function j(e,t,r,n){let o=function(i){return e.outEdges(i)};return $e(e,String(t),r||qe,n||o)}function $e(e,t,r,n){let o={},i=new he,s,d,a=function(l){let h=l.v!==s?l.v:l.w,u=o[h],c=r(l),f=d.distance+c;if(c<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+l+" Weight: "+c);f<u.distance&&(u.distance=f,u.predecessor=s,i.decrease(h,f))};for(e.nodes().forEach(function(l){let h=l===t?0:Number.POSITIVE_INFINITY;o[l]={distance:h,predecessor:""},i.add(l,h)});i.size()>0&&(s=i.removeMin(),d=o[s],d.distance!==Number.POSITIVE_INFINITY);)n(s).forEach(a);return o}function Ke(e,t,r){return e.nodes().reduce(function(n,o){return n[o]=j(e,o,t,r),n},{})}function ue(e){let t=0,r=[],n={},o=[];function i(s){let d=n[s]={onStack:!0,lowlink:t,index:t++};if(r.push(s),e.successors(s).forEach(function(a){a in n?n[a].onStack&&(d.lowlink=Math.min(d.lowlink,n[a].index)):(i(a),d.lowlink=Math.min(d.lowlink,n[a].lowlink))}),d.lowlink===d.index){let a=[],l;do l=r.pop(),n[l].onStack=!1,a.push(l);while(s!==l);o.push(a)}}return e.nodes().forEach(function(s){s in n||i(s)}),o}function We(e){return ue(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var He=()=>1;function Je(e,t,r){return Qe(e,t||He,r||function(n){return e.outEdges(n)})}function Qe(e,t,r){let n={},o=e.nodes();return o.forEach(function(i){n[i]={},n[i][i]={distance:0,predecessor:""},o.forEach(function(s){i!==s&&(n[i][s]={distance:Number.POSITIVE_INFINITY,predecessor:""})}),r(i).forEach(function(s){let d=s.v===i?s.w:s.v,a=t(s);n[i][d]={distance:a,predecessor:i}})}),o.forEach(function(i){let s=n[i];o.forEach(function(d){let a=n[d];o.forEach(function(l){let h=a[i],u=s[l],c=a[l],f=h.distance+u.distance;f<c.distance&&(c.distance=f,c.predecessor=u.predecessor)})})}),n}var C=class extends Error{constructor(...e){super(...e)}};function ce(e){let t={},r={},n=[];function o(i){if(i in r)throw new C;i in t||(r[i]=!0,t[i]=!0,e.predecessors(i).forEach(o),delete r[i],n.push(i))}if(e.sinks().forEach(o),Object.keys(t).length!==e.nodeCount())throw new C;return n}function Ue(e){try{ce(e)}catch(t){if(t instanceof C)return!1;throw t}return!0}function Xe(e,t,r,n,o){Array.isArray(t)||(t=[t]);let i=(d=>{var a;return(a=e.isDirected()?e.successors(d):e.neighbors(d))!=null?a:[]}),s={};return t.forEach(function(d){if(!e.hasNode(d))throw new Error("Graph does not have node: "+d);o=fe(e,d,r==="post",s,i,n,o)}),o}function fe(e,t,r,n,o,i,s){return t in n||(n[t]=!0,r||(s=i(s,t)),o(t).forEach(function(d){s=fe(e,d,r,n,o,i,s)}),r&&(s=i(s,t))),s}function ge(e,t,r){return Xe(e,t,r,function(n,o){return n.push(o),n},[])}function Ze(e,t){return ge(e,t,"post")}function et(e,t){return ge(e,t,"pre")}function tt(e,t){let r=new w,n={},o=new he,i;function s(a){let l=a.v===i?a.w:a.v,h=o.priority(l);if(h!==void 0){let u=t(a);u<h&&(n[l]=i,o.decrease(l,u))}}if(e.nodeCount()===0)return r;e.nodes().forEach(function(a){o.add(a,Number.POSITIVE_INFINITY),r.setNode(a)}),o.decrease(e.nodes()[0],0);let d=!1;for(;o.size()>0;){if(i=o.removeMin(),i in n)r.setEdge(i,n[i]);else{if(d)throw new Error("Input graph is not connected: "+e);d=!0}e.nodeEdges(i).forEach(s)}return r}function rt(e,t,r,n){return nt(e,t,r,n??(o=>{let i=e.outEdges(o);return i??[]}))}function nt(e,t,r,n){if(r===void 0)return j(e,t,r,n);let o=!1,i=e.nodes();for(let s=0;s<i.length;s++){let d=n(i[s]);for(let a=0;a<d.length;a++){let l=d[a],h=l.v===i[s]?l.v:l.w,u=h===l.v?l.w:l.v;r({v:h,w:u})<0&&(o=!0)}if(o)return le(e,t,r,n)}return j(e,t,r,n)}function k(e,t,r,n){let o=n;for(;e.hasNode(o);)o=A(n);return r.dummy=t,e.setNode(o,r),o}function ot(e){let t=new w().setGraph(e.graph());return e.nodes().forEach(r=>t.setNode(r,e.node(r))),e.edges().forEach(r=>{let n=t.edge(r.v,r.w)||{weight:0,minlen:1},o=e.edge(r);t.setEdge(r.v,r.w,{weight:n.weight+o.weight,minlen:Math.max(n.minlen,o.minlen)})}),t}function pe(e){let t=new w({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(r=>{e.children(r).length||t.setNode(r,e.node(r))}),e.edges().forEach(r=>{t.setEdge(r,e.edge(r))}),t}function H(e,t){let r=e.x,n=e.y,o=t.x-r,i=t.y-n,s=e.width/2,d=e.height/2;if(!o&&!i)throw new Error("Not possible to find intersection inside of the rectangle");let a,l;return Math.abs(i)*s>Math.abs(o)*d?(i<0&&(d=-d),a=d*o/i,l=d):(o<0&&(s=-s),a=s,l=s*i/o),{x:r+a,y:n+l}}function x(e){let t=I(ve(e)+1).map(()=>[]);return e.nodes().forEach(r=>{let n=e.node(r),o=n.rank;o!==void 0&&(t[o]||(t[o]=[]),t[o][n.order]=r)}),t}function it(e){let t=e.nodes().map(n=>{let o=e.node(n).rank;return o===void 0?Number.MAX_VALUE:o}),r=b(Math.min,t);e.nodes().forEach(n=>{let o=e.node(n);Object.hasOwn(o,"rank")&&(o.rank-=r)})}function st(e){let t=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),r=b(Math.min,t),n=[];e.nodes().forEach(s=>{let d=e.node(s).rank-r;n[d]||(n[d]=[]),n[d].push(s)});let o=0,i=e.graph().nodeRankFactor;Array.from(n).forEach((s,d)=>{s===void 0&&d%i!==0?--o:s!==void 0&&o&&s.forEach(a=>e.node(a).rank+=o)})}function J(e,t,r,n){let o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=n),k(e,"border",o,t)}function dt(e,t=me){let r=[];for(let n=0;n<e.length;n+=t){let o=e.slice(n,n+t);r.push(o)}return r}var me=65535;function b(e,t){if(t.length>me){let r=dt(t);return e(...r.map(n=>e(...n)))}else return e(...t)}function ve(e){let t=e.nodes().map(r=>{let n=e.node(r).rank;return n===void 0?Number.MIN_VALUE:n});return b(Math.max,t)}function at(e,t){let r={lhs:[],rhs:[]};return e.forEach(n=>{t(n)?r.lhs.push(n):r.rhs.push(n)}),r}function Ee(e,t){let r=Date.now();try{return t()}finally{console.log(e+" time: "+(Date.now()-r)+"ms")}}function we(e,t){return t()}var lt=0;function A(e){let t=++lt;return e+(""+t)}function I(e,t,r=1){t==null&&(t=e,e=0);let n=i=>i<t;r<0&&(n=i=>t<i);let o=[];for(let i=e;n(i);i+=r)o.push(i);return o}function M(e,t){let r={};for(let n of t)e[n]!==void 0&&(r[n]=e[n]);return r}function T(e,t){let r;return typeof t=="string"?r=n=>n[t]:r=t,Object.entries(e).reduce((n,[o,i])=>(n[o]=r(i,o),n),{})}function ht(e,t){return e.reduce((r,n,o)=>(r[n]=t[o],r),{})}var L="\0",ut="3.0.0",ct=class{constructor(){Pe(this,"_sentinel");let e={};e._next=e._prev=e,this._sentinel=e}dequeue(){let e=this._sentinel,t=e._prev;if(t!==e)return Q(t),t}enqueue(e){let t=this._sentinel;e._prev&&e._next&&Q(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t}toString(){let e=[],t=this._sentinel,r=t._prev;for(;r!==t;)e.push(JSON.stringify(r,ft)),r=r._prev;return"["+e.join(", ")+"]"}};function Q(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function ft(e,t){if(e!=="_next"&&e!=="_prev")return t}var gt=ct,pt=()=>1;function mt(e,t){if(e.nodeCount()<=1)return[];let r=Et(e,t||pt);return vt(r.graph,r.buckets,r.zeroIdx).flatMap(n=>e.outEdges(n.v,n.w)||[])}function vt(e,t,r){var n;let o=[],i=t[t.length-1],s=t[0],d;for(;e.nodeCount();){for(;d=s.dequeue();)R(e,t,r,d);for(;d=i.dequeue();)R(e,t,r,d);if(e.nodeCount()){for(let a=t.length-2;a>0;--a)if(d=(n=t[a])==null?void 0:n.dequeue(),d){o=o.concat(R(e,t,r,d,!0)||[]);break}}}return o}function R(e,t,r,n,o){let i=[],s=o?i:void 0;return(e.inEdges(n.v)||[]).forEach(d=>{let a=e.edge(d),l=e.node(d.v);o&&i.push({v:d.v,w:d.w}),l.out-=a,Y(t,r,l)}),(e.outEdges(n.v)||[]).forEach(d=>{let a=e.edge(d),l=d.w,h=e.node(l);h.in-=a,Y(t,r,h)}),e.removeNode(n.v),s}function Et(e,t){let r=new w,n=0,o=0;e.nodes().forEach(d=>{r.setNode(d,{v:d,in:0,out:0})}),e.edges().forEach(d=>{let a=r.edge(d.v,d.w)||0,l=t(d),h=a+l;r.setEdge(d.v,d.w,h);let u=r.node(d.v),c=r.node(d.w);o=Math.max(o,u.out+=l),n=Math.max(n,c.in+=l)});let i=wt(o+n+3).map(()=>new gt),s=n+1;return r.nodes().forEach(d=>{Y(i,s,r.node(d))}),{graph:r,buckets:i,zeroIdx:s}}function Y(e,t,r){var n,o,i;r.out?r.in?(i=e[r.out-r.in+t])==null||i.enqueue(r):(o=e[e.length-1])==null||o.enqueue(r):(n=e[0])==null||n.enqueue(r)}function wt(e){let t=[];for(let r=0;r<e;r++)t.push(r);return t}function bt(e){(e.graph().acyclicer==="greedy"?mt(e,t(e)):_t(e)).forEach(r=>{let n=e.edge(r);e.removeEdge(r),n.forwardName=r.name,n.reversed=!0,e.setEdge(r.w,r.v,n,A("rev"))});function t(r){return n=>r.edge(n).weight}}function _t(e){let t=[],r={},n={};function o(i){Object.hasOwn(n,i)||(n[i]=!0,r[i]=!0,e.outEdges(i).forEach(s=>{Object.hasOwn(r,s.w)?t.push(s):o(s.w)}),delete r[i])}return e.nodes().forEach(o),t}function yt(e){e.edges().forEach(t=>{let r=e.edge(t);if(r.reversed){e.removeEdge(t);let n=r.forwardName;delete r.reversed,delete r.forwardName,e.setEdge(t.w,t.v,r,n)}})}function kt(e){e.graph().dummyChains=[],e.edges().forEach(t=>Nt(e,t))}function Nt(e,t){let r=t.v,n=e.node(r).rank,o=t.w,i=e.node(o).rank,s=t.name,d=e.edge(t),a=d.labelRank;if(i===n+1)return;e.removeEdge(t);let l,h,u;for(u=0,++n;n<i;++u,++n)d.points=[],h={width:0,height:0,edgeLabel:d,edgeObj:t,rank:n},l=k(e,"edge",h,"_d"),n===a&&(h.width=d.width,h.height=d.height,h.dummy="edge-label",h.labelpos=d.labelpos),e.setEdge(r,l,{weight:d.weight},s),u===0&&e.graph().dummyChains.push(l),r=l;e.setEdge(r,o,{weight:d.weight},s)}function Ot(e){e.graph().dummyChains.forEach(t=>{let r=e.node(t),n=r.edgeLabel,o;for(e.setEdge(r.edgeObj,n);r.dummy;)o=e.successors(t)[0],e.removeNode(t),n.points.push({x:r.x,y:r.y}),r.dummy==="edge-label"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),t=o,r=e.node(t)})}function B(e){let t={};function r(n){let o=e.node(n);if(Object.hasOwn(t,n))return o.rank;t[n]=!0;let i=e.outEdges(n),s=i?i.map(a=>a==null?Number.POSITIVE_INFINITY:r(a.w)-e.edge(a).minlen):[],d=b(Math.min,s);return d===Number.POSITIVE_INFINITY&&(d=0),o.rank=d}e.sources().forEach(r)}function y(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var be=It;function It(e){let t=new w({directed:!1}),r=e.nodes();if(r.length===0)throw new Error("Graph must have at least one node");let n=r[0],o=e.nodeCount();t.setNode(n,{});let i,s;for(;xt(t,e)<o&&(i=jt(t,e),!!i);)s=t.hasNode(i.v)?y(e,i):-y(e,i),Ct(t,e,s);return t}function xt(e,t){function r(n){let o=t.nodeEdges(n);o&&o.forEach(i=>{let s=i.v,d=n===s?i.w:s;!e.hasNode(d)&&!y(t,i)&&(e.setNode(d,{}),e.setEdge(n,d,{}),r(d))})}return e.nodes().forEach(r),e.nodeCount()}function jt(e,t){return t.edges().reduce((r,n)=>{let o=Number.POSITIVE_INFINITY;return e.hasNode(n.v)!==e.hasNode(n.w)&&(o=y(t,n)),o<r[0]?[o,n]:r},[Number.POSITIVE_INFINITY,null])[1]}function Ct(e,t,r){e.nodes().forEach(n=>t.node(n).rank+=r)}var{preorder:Mt,postorder:Tt}=G,Lt=_;_.initLowLimValues=q;_.initCutValues=z;_.calcCutValue=_e;_.leaveEdge=ke;_.enterEdge=Ne;_.exchangeEdges=Oe;function _(e){e=ot(e),B(e);let t=be(e);q(t),z(t,e);let r,n;for(;r=ke(t);)n=Ne(t,e,r),Oe(t,e,r,n)}function z(e,t){let r=Tt(e,e.nodes());r=r.slice(0,r.length-1),r.forEach(n=>Pt(e,t,n))}function Pt(e,t,r){let n=e.node(r).parent,o=e.edge(r,n);o.cutvalue=_e(e,t,r)}function _e(e,t,r){let n=e.node(r).parent,o=!0,i=t.edge(r,n),s=0;i||(o=!1,i=t.edge(n,r)),s=i.weight;let d=t.nodeEdges(r);return d&&d.forEach(a=>{let l=a.v===r,h=l?a.w:a.v;if(h!==n){let u=l===o,c=t.edge(a).weight;if(s+=u?c:-c,St(e,r,h)){let f=e.edge(r,h).cutvalue;s+=u?-f:f}}}),s}function q(e,t){arguments.length<2&&(t=e.nodes()[0]),ye(e,{},1,t)}function ye(e,t,r,n,o){let i=r,s=e.node(n);t[n]=!0;let d=e.neighbors(n);return d&&d.forEach(a=>{Object.hasOwn(t,a)||(r=ye(e,t,r,a,n))}),s.low=i,s.lim=r++,o?s.parent=o:delete s.parent,r}function ke(e){return e.edges().find(t=>e.edge(t).cutvalue<0)}function Ne(e,t,r){let n=r.v,o=r.w;t.hasEdge(n,o)||(n=r.w,o=r.v);let i=e.node(n),s=e.node(o),d=i,a=!1;return i.lim>s.lim&&(d=s,a=!0),t.edges().filter(l=>a===U(e,e.node(l.v),d)&&a!==U(e,e.node(l.w),d)).reduce((l,h)=>y(t,h)<y(t,l)?h:l)}function Oe(e,t,r,n){let o=r.v,i=r.w;e.removeEdge(o,i),e.setEdge(n.v,n.w,{}),q(e),z(e,t),Rt(e,t)}function Rt(e,t){let r=e.nodes().find(o=>!e.node(o).parent);if(!r)return;let n=Mt(e,[r]);n=n.slice(1),n.forEach(o=>{let i=e.node(o).parent,s=t.edge(o,i),d=!1;s||(s=t.edge(i,o),d=!0),t.node(o).rank=t.node(i).rank+(d?s.minlen:-s.minlen)})}function St(e,t,r){return e.hasEdge(t,r)}function U(e,t,r){return r.low<=t.lim&&t.lim<=r.lim}var Ft=Dt;function Dt(e){let t=e.graph().ranker;if(typeof t=="function")return t(e);switch(t){case"network-simplex":X(e);break;case"tight-tree":Yt(e);break;case"longest-path":Vt(e);break;case"none":break;default:X(e)}}var Vt=B;function Yt(e){B(e),be(e)}function X(e){Lt(e)}var Gt=At;function At(e){let t=zt(e);e.graph().dummyChains.forEach(r=>{let n=e.node(r),o=n.edgeObj,i=Bt(e,t,o.v,o.w),s=i.path,d=i.lca,a=0,l=s[a],h=!0;for(;r!==o.w;){if(n=e.node(r),h){for(;(l=s[a])!==d&&e.node(l).maxRank<n.rank;)a++;l===d&&(h=!1)}if(!h){for(;a<s.length-1&&e.node(s[a+1]).minRank<=n.rank;)a++;l=s[a]}l!==void 0&&e.setParent(r,l),r=e.successors(r)[0]}})}function Bt(e,t,r,n){let o=[],i=[],s=Math.min(t[r].low,t[n].low),d=Math.max(t[r].lim,t[n].lim),a;a=r;do a=e.parent(a),o.push(a);while(a&&(t[a].low>s||d>t[a].lim));let l=a,h=n;for(;(h=e.parent(h))!==l;)i.push(h);return{path:o.concat(i.reverse()),lca:l}}function zt(e){let t={},r=0;function n(o){let i=r;e.children(o).forEach(n),t[o]={low:i,lim:r++}}return e.children(L).forEach(n),t}function qt(e){let t=k(e,"root",{},"_root"),r=$t(e),n=Object.values(r),o=b(Math.max,n)-1,i=2*o+1;e.graph().nestingRoot=t,e.edges().forEach(d=>e.edge(d).minlen*=i);let s=Kt(e)+1;e.children(L).forEach(d=>Ie(e,t,i,s,o,r,d)),e.graph().nodeRankFactor=i}function Ie(e,t,r,n,o,i,s){var d;let a=e.children(s);if(!a.length){s!==t&&e.setEdge(t,s,{weight:0,minlen:r});return}let l=J(e,"_bt"),h=J(e,"_bb"),u=e.node(s);e.setParent(l,s),u.borderTop=l,e.setParent(h,s),u.borderBottom=h,a.forEach(c=>{var f;Ie(e,t,r,n,o,i,c);let g=e.node(c),p=g.borderTop?g.borderTop:c,v=g.borderBottom?g.borderBottom:c,m=g.borderTop?n:2*n,E=p!==v?1:o-((f=i[s])!=null?f:0)+1;e.setEdge(l,p,{weight:m,minlen:E,nestingEdge:!0}),e.setEdge(v,h,{weight:m,minlen:E,nestingEdge:!0})}),e.parent(s)||e.setEdge(t,l,{weight:0,minlen:o+((d=i[s])!=null?d:0)})}function $t(e){let t={};function r(n,o){let i=e.children(n);i&&i.length&&i.forEach(s=>r(s,o+1)),t[n]=o}return e.children(L).forEach(n=>r(n,1)),t}function Kt(e){return e.edges().reduce((t,r)=>t+e.edge(r).weight,0)}function Wt(e){let t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,e.edges().forEach(r=>{e.edge(r).nestingEdge&&e.removeEdge(r)})}var Ht=Jt;function Jt(e){function t(r){let n=e.children(r),o=e.node(r);if(n.length&&n.forEach(t),Object.hasOwn(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(let i=o.minRank,s=o.maxRank+1;i<s;++i)Z(e,"borderLeft","_bl",r,o,i),Z(e,"borderRight","_br",r,o,i)}}e.children(L).forEach(t)}function Z(e,t,r,n,o,i){let s={width:0,height:0,rank:i,borderType:t},d=o[t][i-1],a=k(e,"border",s,r);o[t][i]=a,e.setParent(a,n),d&&e.setEdge(d,a,{weight:1})}function Qt(e){var t;let r=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(r==="lr"||r==="rl")&&xe(e)}function Ut(e){var t;let r=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(r==="bt"||r==="rl")&&Xt(e),(r==="lr"||r==="rl")&&(Zt(e),xe(e))}function xe(e){e.nodes().forEach(t=>ee(e.node(t))),e.edges().forEach(t=>ee(e.edge(t)))}function ee(e){let t=e.width;e.width=e.height,e.height=t}function Xt(e){e.nodes().forEach(t=>S(e.node(t))),e.edges().forEach(t=>{var r;let n=e.edge(t);(r=n.points)==null||r.forEach(S),Object.hasOwn(n,"y")&&S(n)})}function S(e){e.y=-e.y}function Zt(e){e.nodes().forEach(t=>F(e.node(t))),e.edges().forEach(t=>{var r;let n=e.edge(t);(r=n.points)==null||r.forEach(F),Object.hasOwn(n,"x")&&F(n)})}function F(e){let t=e.x;e.x=e.y,e.y=t}function er(e){let t={},r=e.nodes().filter(d=>!e.children(d).length),n=r.map(d=>e.node(d).rank),o=b(Math.max,n),i=I(o+1).map(()=>[]);function s(d){if(t[d])return;t[d]=!0;let a=e.node(d);i[a.rank].push(d);let l=e.successors(d);l&&l.forEach(s)}return r.sort((d,a)=>e.node(d).rank-e.node(a).rank).forEach(s),i}function tr(e,t){let r=0;for(let n=1;n<t.length;++n)r+=rr(e,t[n-1],t[n]);return r}function rr(e,t,r){let n=ht(r,r.map((l,h)=>h)),o=t.flatMap(l=>{let h=e.outEdges(l);return h?h.map(u=>({pos:n[u.w],weight:e.edge(u).weight})).sort((u,c)=>u.pos-c.pos):[]}),i=1;for(;i<r.length;)i<<=1;let s=2*i-1;i-=1;let d=new Array(s).fill(0),a=0;return o.forEach(l=>{let h=l.pos+i;d[h]+=l.weight;let u=0;for(;h>0;)h%2&&(u+=d[h+1]),h=h-1>>1,d[h]+=l.weight;a+=l.weight*u}),a}function nr(e,t=[]){return t.map(r=>{let n=e.inEdges(r);if(!n||!n.length)return{v:r};{let o=n.reduce((i,s)=>{let d=e.edge(s),a=e.node(s.v);return{sum:i.sum+d.weight*a.order,weight:i.weight+d.weight}},{sum:0,weight:0});return{v:r,barycenter:o.sum/o.weight,weight:o.weight}}})}function or(e,t){let r={};e.forEach((o,i)=>{let s={indegree:0,in:[],out:[],vs:[o.v],i};o.barycenter!==void 0&&(s.barycenter=o.barycenter,s.weight=o.weight),r[o.v]=s}),t.edges().forEach(o=>{let i=r[o.v],s=r[o.w];i!==void 0&&s!==void 0&&(s.indegree++,i.out.push(s))});let n=Object.values(r).filter(o=>!o.indegree);return ir(n)}function ir(e){let t=[];function r(o){return i=>{i.merged||(i.barycenter===void 0||o.barycenter===void 0||i.barycenter>=o.barycenter)&&sr(o,i)}}function n(o){return i=>{i.in.push(o),--i.indegree===0&&e.push(i)}}for(;e.length;){let o=e.pop();t.push(o),o.in.reverse().forEach(r(o)),o.out.forEach(n(o))}return t.filter(o=>!o.merged).map(o=>M(o,["vs","i","barycenter","weight"]))}function sr(e,t){let r=0,n=0;e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=r/n,e.weight=n,e.i=Math.min(t.i,e.i),t.merged=!0}function dr(e,t){let r=at(e,h=>Object.hasOwn(h,"barycenter")),n=r.lhs,o=r.rhs.sort((h,u)=>u.i-h.i),i=[],s=0,d=0,a=0;n.sort(ar(!!t)),a=te(i,o,a),n.forEach(h=>{a+=h.vs.length,i.push(h.vs),s+=h.barycenter*h.weight,d+=h.weight,a=te(i,o,a)});let l={vs:i.flat(1)};return d&&(l.barycenter=s/d,l.weight=d),l}function te(e,t,r){let n;for(;t.length&&(n=t[t.length-1]).i<=r;)t.pop(),e.push(n.vs),r++;return r}function ar(e){return(t,r)=>t.barycenter<r.barycenter?-1:t.barycenter>r.barycenter?1:e?r.i-t.i:t.i-r.i}function je(e,t,r,n){let o=e.children(t),i=e.node(t),s=i?i.borderLeft:void 0,d=i?i.borderRight:void 0,a={};s&&(o=o.filter(c=>c!==s&&c!==d));let l=nr(e,o);l.forEach(c=>{if(e.children(c.v).length){let f=je(e,c.v,r,n);a[c.v]=f,Object.hasOwn(f,"barycenter")&&hr(c,f)}});let h=or(l,r);lr(h,a);let u=dr(h,n);if(s&&d){u.vs=[s,u.vs,d].flat(1);let c=e.predecessors(s);if(c&&c.length){let f=e.node(c[0]),g=e.predecessors(d),p=e.node(g[0]);Object.hasOwn(u,"barycenter")||(u.barycenter=0,u.weight=0),u.barycenter=(u.barycenter*u.weight+f.order+p.order)/(u.weight+2),u.weight+=2}}return u}function lr(e,t){e.forEach(r=>{r.vs=r.vs.flatMap(n=>t[n]?t[n].vs:n)})}function hr(e,t){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight):(e.barycenter=t.barycenter,e.weight=t.weight)}function ur(e,t,r,n){n||(n=e.nodes());let o=cr(e),i=new w({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(s=>e.node(s));return n.forEach(s=>{let d=e.node(s),a=e.parent(s);if(d.rank===t||d.minRank<=t&&t<=d.maxRank){i.setNode(s),i.setParent(s,a||o);let l=e[r](s);l&&l.forEach(h=>{let u=h.v===s?h.w:h.v,c=i.edge(u,s),f=c!==void 0?c.weight:0;i.setEdge(u,s,{weight:e.edge(h).weight+f})}),Object.hasOwn(d,"minRank")&&i.setNode(s,{borderLeft:d.borderLeft[t],borderRight:d.borderRight[t]})}}),i}function cr(e){let t;for(;e.hasNode(t=A("_root")););return t}function fr(e,t,r){let n={},o;r.forEach(i=>{let s=e.parent(i),d,a;for(;s;){if(d=e.parent(s),d?(a=n[d],n[d]=s):(a=o,o=s),a&&a!==s){t.setEdge(a,s);return}s=d}})}function Ce(e,t={}){if(typeof t.customOrder=="function"){t.customOrder(e,Ce);return}let r=ve(e),n=re(e,I(1,r+1),"inEdges"),o=re(e,I(r-1,-1,-1),"outEdges"),i=er(e);if(ne(e,i),t.disableOptimalOrderHeuristic)return;let s=Number.POSITIVE_INFINITY,d,a=t.constraints||[];for(let l=0,h=0;h<4;++l,++h){gr(l%2?n:o,l%4>=2,a),i=x(e);let u=tr(e,i);u<s?(h=0,d=Object.assign({},i),s=u):u===s&&(d=structuredClone(i))}ne(e,d)}function re(e,t,r){let n=new Map,o=(i,s)=>{n.has(i)||n.set(i,[]),n.get(i).push(s)};for(let i of e.nodes()){let s=e.node(i);if(typeof s.rank=="number"&&o(s.rank,i),typeof s.minRank=="number"&&typeof s.maxRank=="number")for(let d=s.minRank;d<=s.maxRank;d++)d!==s.rank&&o(d,i)}return t.map(function(i){return ur(e,i,r,n.get(i)||[])})}function gr(e,t,r){let n=new w;e.forEach(function(o){r.forEach(d=>n.setEdge(d.left,d.right));let i=o.graph().root,s=je(o,i,n,t);s.vs.forEach((d,a)=>o.node(d).order=a),fr(o,n,s.vs)})}function ne(e,t){Object.values(t).forEach(r=>r.forEach((n,o)=>e.node(n).order=o))}function pr(e,t){let r={};function n(o,i){let s=0,d=0,a=o.length,l=i[i.length-1];return i.forEach((h,u)=>{let c=vr(e,h),f=c?e.node(c).order:a;(c||h===l)&&(i.slice(d,u+1).forEach(g=>{let p=e.predecessors(g);p&&p.forEach(v=>{let m=e.node(v),E=m.order;(E<s||f<E)&&!(m.dummy&&e.node(g).dummy)&&Me(r,v,g)})}),d=u+1,s=f)}),i}return t.length&&t.reduce(n),r}function mr(e,t){let r={};function n(i,s,d,a,l){I(s,d).forEach(h=>{let u=i[h];if(u!==void 0&&e.node(u).dummy){let c=e.predecessors(u);c&&c.forEach(f=>{if(f===void 0)return;let g=e.node(f);g.dummy&&(g.order<a||g.order>l)&&Me(r,f,u)})}})}function o(i,s){let d=-1,a=-1,l=0;return s.forEach((h,u)=>{if(e.node(h).dummy==="border"){let c=e.predecessors(h);if(c&&c.length){let f=c[0];if(f===void 0)return;a=e.node(f).order,n(s,l,u,d,a),l=u,d=a}}n(s,l,s.length,a,i.length)}),s}return t.length&&t.reduce(o),r}function vr(e,t){if(e.node(t).dummy){let r=e.predecessors(t);if(r)return r.find(n=>e.node(n).dummy)}}function Me(e,t,r){if(t>r){let o=t;t=r,r=o}let n=e[t];n||(e[t]=n={}),n[r]=!0}function Er(e,t,r){if(t>r){let o=t;t=r,r=o}let n=e[t];return n!==void 0&&Object.hasOwn(n,r)}function wr(e,t,r,n){let o={},i={},s={};return t.forEach(d=>{d.forEach((a,l)=>{o[a]=a,i[a]=a,s[a]=l})}),t.forEach(d=>{let a=-1;d.forEach(l=>{let h=n(l);if(h&&h.length){let u=h.sort((f,g)=>{let p=s[f],v=s[g];return(p!==void 0?p:0)-(v!==void 0?v:0)}),c=(u.length-1)/2;for(let f=Math.floor(c),g=Math.ceil(c);f<=g;++f){let p=u[f];if(p===void 0)continue;let v=s[p];if(v!==void 0&&i[l]===l&&a<v&&!Er(r,l,p)){let m=o[p];m!==void 0&&(i[p]=l,i[l]=o[l]=m,a=v)}}}})}),{root:o,align:i}}function br(e,t,r,n,o=!1){let i={},s=_r(e,t,r,o),d=o?"borderLeft":"borderRight";function a(f,g){let p=s.nodes().slice(),v={},m=p.pop();for(;m;){if(v[m])f(m);else{v[m]=!0,p.push(m);for(let E of g(m))p.push(E)}m=p.pop()}}function l(f){let g=s.inEdges(f);g?i[f]=g.reduce((p,v)=>{var m;let E=(m=i[v.v])!=null?m:0,N=s.edge(v);return Math.max(p,E+(N!==void 0?N:0))},0):i[f]=0}function h(f){let g=s.outEdges(f),p=Number.POSITIVE_INFINITY;g&&(p=g.reduce((m,E)=>{let N=i[E.w],$=s.edge(E);return Math.min(m,(N!==void 0?N:0)-($!==void 0?$:0))},Number.POSITIVE_INFINITY));let v=e.node(f);p!==Number.POSITIVE_INFINITY&&v.borderType!==d&&(i[f]=Math.max(i[f]!==void 0?i[f]:0,p))}function u(f){return s.predecessors(f)||[]}function c(f){return s.successors(f)||[]}return a(l,u),a(h,c),Object.keys(n).forEach(f=>{var g;let p=r[f];p!==void 0&&(i[f]=(g=i[p])!=null?g:0)}),i}function _r(e,t,r,n){let o=new w,i=e.graph(),s=Ir(i.nodesep,i.edgesep,n);return t.forEach(d=>{let a;d.forEach(l=>{let h=r[l];if(h!==void 0){if(o.setNode(h),a!==void 0){let u=r[a];if(u!==void 0){let c=o.edge(u,h);o.setEdge(u,h,Math.max(s(e,l,a),c||0))}}a=l}})}),o}function yr(e,t){return Object.values(t).reduce((r,n)=>{let o=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;Object.entries(n).forEach(([d,a])=>{let l=xr(e,d)/2;o=Math.max(a+l,o),i=Math.min(a-l,i)});let s=o-i;return s<r[0]&&(r=[s,n]),r},[Number.POSITIVE_INFINITY,null])[1]}function kr(e,t){let r=Object.values(t),n=b(Math.min,r),o=b(Math.max,r);["u","d"].forEach(i=>{["l","r"].forEach(s=>{let d=i+s,a=e[d];if(!a||a===t)return;let l=Object.values(a),h=n-b(Math.min,l);s!=="l"&&(h=o-b(Math.max,l)),h&&(e[d]=T(a,u=>u+h))})})}function Nr(e,t=void 0){let r=e.ul;return r?T(r,(n,o)=>{var i,s;if(t){let a=t.toLowerCase(),l=e[a];if(l&&l[o]!==void 0)return l[o]}let d=Object.values(e).map(a=>{let l=a[o];return l!==void 0?l:0}).sort((a,l)=>a-l);return(((i=d[1])!=null?i:0)+((s=d[2])!=null?s:0))/2}):{}}function Or(e){let t=x(e),r=Object.assign(pr(e,t),mr(e,t)),n={},o;["u","d"].forEach(s=>{o=s==="u"?t:Object.values(t).reverse(),["l","r"].forEach(d=>{d==="r"&&(o=o.map(h=>Object.values(h).reverse()));let a=wr(e,o,r,h=>(s==="u"?e.predecessors(h):e.successors(h))||[]),l=br(e,o,a.root,a.align,d==="r");d==="r"&&(l=T(l,h=>-h)),n[s+d]=l})});let i=yr(e,n);return kr(n,i),Nr(n,e.graph().align)}function Ir(e,t,r){return(n,o,i)=>{let s=n.node(o),d=n.node(i),a=0,l;if(a+=s.width/2,Object.hasOwn(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":l=-s.width/2;break;case"r":l=s.width/2;break}if(l&&(a+=r?l:-l),l=void 0,a+=(s.dummy?t:e)/2,a+=(d.dummy?t:e)/2,a+=d.width/2,Object.hasOwn(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":l=d.width/2;break;case"r":l=-d.width/2;break}return l&&(a+=r?l:-l),a}}function xr(e,t){return e.node(t).width}function jr(e){e=pe(e),Cr(e),Object.entries(Or(e)).forEach(([t,r])=>e.node(t).x=r)}function Cr(e){let t=x(e),r=e.graph(),n=r.ranksep,o=r.rankalign,i=0;t.forEach(s=>{let d=s.reduce((a,l)=>{var h;let u=(h=e.node(l).height)!=null?h:0;return a>u?a:u},0);s.forEach(a=>{let l=e.node(a);o==="top"?l.y=i+l.height/2:o==="bottom"?l.y=i+d-l.height/2:l.y=i+d/2}),i+=d+n})}function Mr(e,t={}){let r=t.debugTiming?Ee:we;return r("layout",()=>{let n=r(" buildLayoutGraph",()=>Gr(e));return r(" runLayout",()=>Tr(n,r,t)),r(" updateInputGraph",()=>Lr(e,n)),n})}function Tr(e,t,r){t(" makeSpaceForEdgeLabels",()=>Ar(e)),t(" removeSelfEdges",()=>Qr(e)),t(" acyclic",()=>bt(e)),t(" nestingGraph.run",()=>qt(e)),t(" rank",()=>Ft(pe(e))),t(" injectEdgeLabelProxies",()=>Br(e)),t(" removeEmptyRanks",()=>st(e)),t(" nestingGraph.cleanup",()=>Wt(e)),t(" normalizeRanks",()=>it(e)),t(" assignRankMinMax",()=>zr(e)),t(" removeEdgeLabelProxies",()=>qr(e)),t(" normalize.run",()=>kt(e)),t(" parentDummyChains",()=>Gt(e)),t(" addBorderSegments",()=>Ht(e)),t(" order",()=>Ce(e,r)),t(" insertSelfEdges",()=>Ur(e)),t(" adjustCoordinateSystem",()=>Qt(e)),t(" position",()=>jr(e)),t(" positionSelfEdges",()=>Xr(e)),t(" removeBorderNodes",()=>Jr(e)),t(" normalize.undo",()=>Ot(e)),t(" fixupEdgeLabelCoords",()=>Wr(e)),t(" undoCoordinateSystem",()=>Ut(e)),t(" translateGraph",()=>$r(e)),t(" assignNodeIntersects",()=>Kr(e)),t(" reversePoints",()=>Hr(e)),t(" acyclic.undo",()=>yt(e))}function Lr(e,t){e.nodes().forEach(r=>{let n=e.node(r),o=t.node(r);n&&(n.x=o.x,n.y=o.y,n.order=o.order,n.rank=o.rank,t.children(r).length&&(n.width=o.width,n.height=o.height))}),e.edges().forEach(r=>{let n=e.edge(r),o=t.edge(r);n.points=o.points,Object.hasOwn(o,"x")&&(n.x=o.x,n.y=o.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}var Pr=["nodesep","edgesep","ranksep","marginx","marginy"],Rr={ranksep:50,edgesep:20,nodesep:50,rankdir:"TB",rankalign:"center"},Sr=["acyclicer","ranker","rankdir","align","rankalign"],Fr=["width","height","rank"],oe={width:0,height:0},Dr=["minlen","weight","width","height","labeloffset"],Vr={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Yr=["labelpos"];function Gr(e){let t=new w({multigraph:!0,compound:!0}),r=V(e.graph());return t.setGraph(Object.assign({},Rr,D(r,Pr),M(r,Sr))),e.nodes().forEach(n=>{let o=V(e.node(n)),i=D(o,Fr);Object.keys(oe).forEach(d=>{i[d]===void 0&&(i[d]=oe[d])}),t.setNode(n,i);let s=e.parent(n);s!==void 0&&t.setParent(n,s)}),e.edges().forEach(n=>{let o=V(e.edge(n));t.setEdge(n,Object.assign({},Vr,D(o,Dr),M(o,Yr)))}),t}function Ar(e){let t=e.graph();t.ranksep/=2,e.edges().forEach(r=>{let n=e.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(t.rankdir==="TB"||t.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function Br(e){e.edges().forEach(t=>{let r=e.edge(t);if(r.width&&r.height){let n=e.node(t.v),o={rank:(e.node(t.w).rank-n.rank)/2+n.rank,e:t};k(e,"edge-proxy",o,"_ep")}})}function zr(e){let t=0;e.nodes().forEach(r=>{let n=e.node(r);n.borderTop&&(n.minRank=e.node(n.borderTop).rank,n.maxRank=e.node(n.borderBottom).rank,t=Math.max(t,n.maxRank))}),e.graph().maxRank=t}function qr(e){e.nodes().forEach(t=>{let r=e.node(t);if(r.dummy==="edge-proxy"){let n=r;e.edge(n.e).labelRank=r.rank,e.removeNode(t)}})}function $r(e){let t=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,o=0,i=e.graph(),s=i.marginx||0,d=i.marginy||0;function a(l){let h=l.x,u=l.y,c=l.width,f=l.height;t=Math.min(t,h-c/2),r=Math.max(r,h+c/2),n=Math.min(n,u-f/2),o=Math.max(o,u+f/2)}e.nodes().forEach(l=>a(e.node(l))),e.edges().forEach(l=>{let h=e.edge(l);Object.hasOwn(h,"x")&&a(h)}),t-=s,n-=d,e.nodes().forEach(l=>{let h=e.node(l);h.x-=t,h.y-=n}),e.edges().forEach(l=>{let h=e.edge(l);h.points.forEach(u=>{u.x-=t,u.y-=n}),Object.hasOwn(h,"x")&&(h.x-=t),Object.hasOwn(h,"y")&&(h.y-=n)}),i.width=r-t+s,i.height=o-n+d}function Kr(e){e.edges().forEach(t=>{let r=e.edge(t),n=e.node(t.v),o=e.node(t.w),i,s;r.points?(i=r.points[0],s=r.points[r.points.length-1]):(r.points=[],i=o,s=n),r.points.unshift(H(n,i)),r.points.push(H(o,s))})}function Wr(e){e.edges().forEach(t=>{let r=e.edge(t);if(Object.hasOwn(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function Hr(e){e.edges().forEach(t=>{let r=e.edge(t);r.reversed&&r.points.reverse()})}function Jr(e){e.nodes().forEach(t=>{if(e.children(t).length){let r=e.node(t),n=e.node(r.borderTop),o=e.node(r.borderBottom),i=e.node(r.borderLeft[r.borderLeft.length-1]),s=e.node(r.borderRight[r.borderRight.length-1]);r.width=Math.abs(s.x-i.x),r.height=Math.abs(o.y-n.y),r.x=i.x+r.width/2,r.y=n.y+r.height/2}}),e.nodes().forEach(t=>{e.node(t).dummy==="border"&&e.removeNode(t)})}function Qr(e){e.edges().forEach(t=>{if(t.v===t.w){let r=e.node(t.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function Ur(e){x(e).forEach(t=>{let r=0;t.forEach((n,o)=>{let i=e.node(n);i.order=o+r,(i.selfEdges||[]).forEach(s=>{k(e,"selfedge",{width:s.label.width,height:s.label.height,rank:i.rank,order:o+ ++r,e:s.e,label:s.label},"_se")}),delete i.selfEdges})})}function Xr(e){e.nodes().forEach(t=>{let r=e.node(t);if(r.dummy==="selfedge"){let n=r,o=e.node(n.e.v),i=o.x+o.width/2,s=o.y,d=r.x-i,a=o.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*d/3,y:s-a},{x:i+5*d/6,y:s-a},{x:i+d,y:s},{x:i+5*d/6,y:s+a},{x:i+2*d/3,y:s+a}],n.label.x=r.x,n.label.y=r.y}})}function D(e,t){return T(M(e,t),Number)}function V(e){let t={};return e&&Object.entries(e).forEach(([r,n])=>{typeof r=="string"&&(r=r.toLowerCase()),t[r]=n}),t}function Zr(e){let t=x(e),r=new w({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(n=>{r.setNode(n,{label:n}),r.setParent(n,"layer"+e.node(n).rank)}),e.edges().forEach(n=>r.setEdge(n.v,n.w,{},n.name)),t.forEach((n,o)=>{let i="layer"+o;r.setNode(i,{rank:"same"}),n.reduce((s,d)=>(r.setEdge(s,d,{style:"invis"}),d))}),r}var en={graphlib:se,version:ut,layout:Mr,debug:Zr,util:{time:Ee,notime:we}},tn=en;/*! For license information please see dagre.esm.js.LEGAL.txt */export{tn as T};
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-zHHzDn6l.js";/**
1
+ import{c as a}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-zHHzDn6l.js";/**
1
+ import{c}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:11px;--text-sm:12px;--text-base:13px;--text-lg:16px;--text-2xl:22px;--leading-tight:1.2;--leading-snug:1.35;--leading-normal:1.5;--radius-xs:4px;--radius-sm:6px;--radius-md:8px;--shadow-sm:0 1px 2px #0f172a0f, 0 1px 1px #0f172a0a;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-primary:var(--bg-1);--color-bg-secondary:var(--bg-2);--color-bg-tertiary:var(--bg-3);--color-bg-surface:var(--bg-2);--color-bg-sunken:var(--bg-0);--color-bg-hover:var(--bg-3);--color-bg-active:var(--accent-dim);--color-bg-card:var(--bg-2);--color-bg-toolbar:var(--bg-1);--color-bg-canvas:var(--bg-canvas);--color-bg-overlay:var(--scrim);--color-border-primary:var(--border-default);--color-border-secondary:var(--border-strong);--color-border-subtle:var(--border-subtle);--color-border-strong:var(--border-strong);--color-text-primary:var(--text-primary);--color-text-secondary:var(--text-secondary);--color-text-tertiary:var(--text-tertiary);--color-text-muted:var(--text-muted);--color-text-accent:var(--accent);--color-text-on-accent:var(--accent-fg);--color-accent-blue:var(--accent);--color-accent-blue-soft:var(--accent-dim);--color-accent-green:var(--cat-billing);--color-accent-yellow:var(--pk);--color-accent-purple:var(--cat-users);--color-accent-purple-soft:var(--cat-users-soft);--color-accent-cyan:var(--cat-audit);--color-status-success:var(--status-success);--color-status-warning:var(--status-warning);--color-status-error:var(--status-error);--shadow-focus:0 0 0 2px #3b82f659;--radius-pill:999px;--text-2xs:10px;--text-md:14px;--weight-regular:400;--weight-medium:500;--weight-semibold:600}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{box-sizing:border-box}html{font-size:14px}body{font-family:var(--font-ui);font-size:var(--text-base);font-weight:var(--weight-regular);line-height:var(--leading-normal);letter-spacing:-.005em;background:var(--color-bg-primary);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-feature-settings:"cv01","cv02","cv03","ss01";min-height:100vh;margin:0}[data-theme=light] body,body:not([data-theme]){background:radial-gradient(circle at 0% 0%,#94c8ff24 0%,transparent 28%),radial-gradient(circle at 100% 0%,#b0edff29 0%,transparent 34%),var(--color-bg-primary)}[data-theme=dark] body{background:var(--color-bg-primary)}#root{flex-direction:column;min-height:100vh;display:flex}code,pre,.font-mono{font-feature-settings:"liga" 0,"calt" 1;font-family:JetBrains Mono,SFMono-Regular,Menlo,Monaco,Consolas,monospace}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border-secondary);background-clip:padding-box;border:2px solid #0000;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:var(--color-border-strong);background-clip:padding-box;border:2px solid #0000}::selection{color:var(--color-text-primary);background:#3b82f638}:focus-visible{box-shadow:var(--shadow-focus);border-radius:4px;outline:none}button:focus:not(:focus-visible){outline:none}}@layer components;@layer utilities{.\@container{container-type:inline-size}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-8{top:calc(var(--spacing) * 8)}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.rounded{border-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.bg-bg-primary{background-color:var(--color-bg-primary)}.text-wrap{text-wrap:wrap}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-all{-webkit-user-select:all;user-select:all}}:root{--font-ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-hand:"Caveat", cursive;--font-sketch:"Kalam", "Caveat", cursive;--row-h:26px;--row-fs:12px;--row-px:10px;--card-header-h:32px;--card-width:240px;--card-radius:8px;--ease:cubic-bezier(.2, .8, .2, 1);color-scheme:dark;--bg-0:#0b0d12;--bg-1:#11141b;--bg-2:#161a23;--bg-3:#1c212d;--bg-4:#242938;--bg-canvas:#0b0d12;--bg-grid:#ffffff06;--border-subtle:#1b1f28;--border-default:#232833;--border-strong:#2c3240;--border-focus:#5b8cff;--text-primary:#e6e8ee;--text-secondary:#9aa0ae;--text-tertiary:#626878;--text-muted:#4a5060;--accent:#5b8cff;--accent-hover:#7aa2ff;--accent-dim:#5b8cff24;--accent-fg:#0b0d12;--accent-on:#0b0d12;--bg-hover:#ffffff0b;--color-bg:var(--bg-1);--surface:var(--bg-2);--surface-subtle:var(--bg-0);--surface-hover:var(--bg-3);--surface-elevated:var(--bg-3);--border-color:var(--border-subtle);--status-error:#f87171;--status-error-bg:#f871711a;--status-error-border:#f871714d;--status-warning:#fbbf24;--status-warning-bg:#fbbf241a;--status-warning-border:#fbbf244d;--status-success:#4ade80;--status-success-bg:#4ade801a;--status-success-border:#4ade804d;--status-info:var(--accent);--status-info-bg:var(--accent-dim);--status-info-border:#4f8bff4d;--pk:#e3b341;--fk:#a29bff;--idx:#6fd0bb;--nn:#6e6e73;--nullable:#a29bff;--cat-users:#a29bff;--cat-users-soft:#a29bff1a;--cat-billing:#4ade80;--cat-billing-soft:#4ade801a;--cat-product:#fb923c;--cat-product-soft:#fb923c1a;--cat-system:#a1a1a6;--cat-system-soft:#a1a1a61a;--cat-access:#f472b6;--cat-access-soft:#f472b61a;--cat-audit:#38bdf8;--cat-audit-soft:#38bdf81a;--rel-line:#3a3b40;--rel-line-strong:#6e6e73;--rel-line-active:#ededee;--rel-line-dim:#3a3b4080;--sql-keyword:#9cc7ff;--sql-type:#7fd4bf;--sql-string:#7fd49c;--sql-number:#ffc48c;--sql-function:#e0d89c;--sql-punctuation:#8b8b92;--sql-ident:var(--text-primary);--sql-comment:var(--text-tertiary);--shadow-card:0 1px 0 #ffffff0a inset, 0 8px 24px #00000059;--shadow-pop:0 20px 50px #00000080;--scrim:#00000080;--cell-md:#2fb97a;--cell-sql:#3b8ef0;--cell-chart:#b067f7;--cell-filter:#f26a6a;--cell-pivot:#e5a84d;--cell-table:#5dd1c8;--cell-text:#4a8aef;--cell-chat:#8a8f9b;--cell-single:#b067f7;--cell-kpi:#b067f7;--cell-insight:#ffc857;--cell-callout:#ff7ac6;--cell-goal:#61d095;--cell-compare:#7fd4ff;--cell-heatmap:#f96;--cell-narrative:#ffc857;--cell-inputs:#9aa0ae;--cell-block:#6b8afd}[data-theme=obsidian]{color-scheme:dark}[data-theme=paper]{color-scheme:light;--bg-0:#f3f0ea;--bg-1:#fbfaf7;--bg-2:#fff;--bg-3:#f3f0ea;--bg-4:#e9e6e0;--bg-canvas:#fbfaf7;--bg-grid:#1a1a1a0a;--border-subtle:#f0eee9;--border-default:#e9e6e0;--border-strong:#d9d5cc;--border-focus:#6b5dd3;--text-primary:#1a1a1a;--text-secondary:#4a4a52;--text-tertiary:#8a8d96;--text-muted:#b0b2ba;--accent:#6b5dd3;--accent-hover:#5c4fc2;--accent-dim:#f3f0fb;--accent-fg:#fff;--accent-on:#fff;--bg-hover:#6b5dd30f;--status-error:#c14545;--status-error-bg:#fbf2f2;--status-error-border:#c145454d;--status-warning:#b26b1f;--status-warning-bg:#fdf6e6;--status-warning-border:#b26b1f47;--status-success:#2e8b57;--status-success-bg:#e8f4ee;--status-success-border:#2e8b574d;--status-info:var(--accent);--status-info-bg:var(--accent-dim);--status-info-border:#6b5dd34d;--pk:#b26b1f;--fk:#6b5dd3;--idx:#2e8b57;--nn:#8a8d96;--nullable:#6b5dd3;--cat-users:#6b5dd3;--cat-users-soft:#f3f0fb;--cat-billing:#2e8b57;--cat-billing-soft:#e8f4ee;--cat-product:#f0a04b;--cat-product-soft:#f0a04b24;--cat-system:#4a4a52;--cat-system-soft:#f3f0ea;--cat-access:#c14590;--cat-access-soft:#c145901a;--cat-audit:#4a74c9;--cat-audit-soft:#eef3fc;--rel-line:#e9e6e0;--rel-line-strong:#b0b2ba;--rel-line-active:#6b5dd3;--rel-line-dim:#e9e6e080;--sql-keyword:#6b5dd3;--sql-type:#2e8b57;--sql-string:#b26b1f;--sql-number:#0a6b5e;--sql-function:#f0a04b;--sql-punctuation:#4a4a52;--sql-ident:var(--text-primary);--sql-comment:#8a8d96;--shadow-card:0 1px 2px #00000005;--shadow-pop:0 10px 30px #1a1a1a1f;--scrim:#1a1a1a66;--cell-md:#4a4a52;--cell-sql:#3b8ef0;--cell-chart:#6b5dd3;--cell-filter:#c14545;--cell-pivot:#e5a84d;--cell-table:#5dd1c8;--cell-text:#4a4a52;--cell-chat:#c14590;--cell-single:#6b5dd3;--cell-kpi:#6b5dd3;--cell-insight:#f0a04b;--cell-callout:#c14590;--cell-goal:#2e8b57;--cell-compare:#4a74c9;--cell-heatmap:#f0a04b;--cell-narrative:#f0a04b;--cell-inputs:#d4a14a;--cell-block:#6b5dd3}[data-theme=white]{color-scheme:light;--bg-0:#f5f6f8;--bg-1:#fff;--bg-2:#fff;--bg-3:#eef0f3;--bg-4:#e1e4e9;--bg-canvas:#f7f8fa;--bg-grid:#0f172a0a;--border-subtle:#0f172a14;--border-default:#0f172a24;--border-strong:#0f172a38;--border-focus:#2563eb;--text-primary:#0f172a;--text-secondary:#475569;--text-tertiary:#64748b;--text-muted:#94a3b8;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-dim:#2563eb1a;--accent-fg:#fff;--accent-on:#fff;--bg-hover:#0f172a0b;--status-error:#dc2626;--status-error-bg:#dc262614;--status-error-border:#dc26264d;--status-warning:#ca8a04;--status-warning-bg:#ca8a041a;--status-warning-border:#ca8a0452;--status-success:#16a34a;--status-success-bg:#16a34a14;--status-success-border:#16a34a4d;--status-info:var(--accent);--status-info-bg:var(--accent-dim);--status-info-border:#2563eb4d;--pk:#ca8a04;--fk:#7c3aed;--idx:#0891b2;--nn:#64748b;--nullable:#7c3aed;--cat-users:#7c3aed;--cat-users-soft:#7c3aed17;--cat-billing:#16a34a;--cat-billing-soft:#16a34a17;--cat-product:#ea580c;--cat-product-soft:#ea580c17;--cat-system:#64748b;--cat-system-soft:#64748b1a;--cat-access:#db2777;--cat-access-soft:#db277717;--cat-audit:#0891b2;--cat-audit-soft:#0891b217;--rel-line:#cbd5e1;--rel-line-strong:#64748b;--rel-line-active:#2563eb;--rel-line-dim:#cbd5e180;--sql-keyword:#1d4ed8;--sql-type:#0891b2;--sql-string:#15803d;--sql-number:#c2410c;--sql-function:#7c3aed;--sql-punctuation:#475569;--sql-ident:var(--text-primary);--sql-comment:#94a3b8;--shadow-card:0 1px 0 #fff inset, 0 1px 2px #0f172a0a, 0 8px 24px #0f172a0f;--shadow-pop:0 20px 50px #0f172a24;--scrim:#0f172a4d;--cell-md:#15803d;--cell-sql:#1d4ed8;--cell-chart:#7c3aed;--cell-filter:#dc2626;--cell-pivot:#ca8a04;--cell-table:#0891b2;--cell-text:#1d4ed8;--cell-chat:#64748b;--cell-single:#7c3aed;--cell-kpi:#7c3aed;--cell-insight:#ca8a04;--cell-callout:#db2777;--cell-goal:#16a34a;--cell-compare:#0891b2;--cell-heatmap:#ea580c;--cell-narrative:#ca8a04;--cell-inputs:#64748b;--cell-block:#2563eb}[data-density=compact]{--row-h:20px;--row-fs:11px;--row-px:8px;--card-header-h:26px;--card-width:210px}[data-density=detailed]{--row-h:32px;--row-fs:13px;--row-px:12px;--card-header-h:38px;--card-width:280px}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font-ui);color:var(--text-primary);background:var(--bg-0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:13px;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}input{font:inherit;color:inherit}:focus{outline:none}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:padding-box;border:2px solid #0000;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted);background-clip:padding-box;border:2px solid #0000}.app{grid-template-rows:44px 36px 1fr 26px;grid-template-columns:260px 1fr var(--right-w,320px);background:var(--bg-0);grid-template-areas:"topbar topbar topbar""tabs tabs tabs""left canvas right""status status status";height:100vh;display:grid}.app.no-right{grid-template-columns:260px 1fr 0}.topbar{background:var(--bg-1);border-bottom:1px solid var(--border-subtle);-webkit-app-region:drag;grid-area:topbar;align-items:center;gap:14px;padding:0 14px;display:flex}.topbar>*{-webkit-app-region:no-drag}.traffic-lights{gap:8px;margin-right:6px;display:flex}.traffic-lights span{background:#3d4150;border-radius:50%;width:12px;height:12px}.traffic-lights span:first-child{background:#ff5f57}.traffic-lights span:nth-child(2){background:#ffbd2e}.traffic-lights span:nth-child(3){background:#28c840}.brand{border-right:1px solid var(--border-subtle);align-items:center;gap:8px;padding-right:14px;font-size:13px;font-weight:600;display:flex}.brand-mark{color:#fff;letter-spacing:-.02em;background:linear-gradient(135deg,#5b8cff,#7c5cff);border-radius:6px;place-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:grid}.toolbar{flex:1;align-items:center;gap:2px;display:flex}.tool-group{border-right:1px solid var(--border-subtle);align-items:center;gap:2px;height:28px;padding:0 6px;display:flex}.tool-group:last-child{border-right:0}.tool-btn{height:28px;color:var(--text-secondary);transition:all .12s var(--ease);border-radius:6px;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}.tool-btn:hover{background:var(--bg-3);color:var(--text-primary)}.tool-btn.active{background:var(--bg-3);color:var(--accent)}.tool-btn svg{flex-shrink:0;width:14px;height:14px}.tool-btn:disabled{cursor:not-allowed}.view-switcher{background:var(--bg-2);border:1px solid var(--border-default);border-radius:7px;align-items:center;gap:2px;height:28px;padding:2px;display:inline-flex}.view-seg{height:22px;color:var(--text-secondary);cursor:pointer;transition:background .12s var(--ease),color .12s var(--ease);white-space:nowrap;background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;padding:0 10px;font-size:11.5px;font-weight:500;display:inline-flex}.view-seg svg{flex-shrink:0;width:13px;height:13px}.view-seg:hover{color:var(--text-primary)}.view-seg.active{background:var(--accent-dim);color:var(--accent)}.chrome-popover{z-index:60;background:var(--bg-2);border:1px solid var(--border-strong);box-shadow:var(--shadow-pop);border-radius:10px;position:absolute;overflow:hidden}.chrome-popover-header{border-bottom:1px solid var(--border-subtle);letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);align-items:center;gap:8px;padding:10px 12px 8px;font-size:10.5px;font-weight:600;display:flex}.chrome-popover-header .spacer{flex:1}.chrome-popover-body{max-height:360px;padding:6px;overflow:auto}.chrome-popover-row{width:100%;color:var(--text-primary);text-align:left;cursor:pointer;transition:background .12s var(--ease);background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;padding:8px 10px;font-size:12px;display:flex}.chrome-popover-row:hover{background:var(--bg-3)}.chrome-popover-row .meta{color:var(--text-tertiary);font-size:10.5px;font-family:var(--font-mono);flex-shrink:0;margin-left:auto}.chrome-popover-row.danger{color:#ef4444}.chrome-popover-divider{background:var(--border-subtle);height:1px;margin:4px 6px}.bell-btn{position:relative}.bell-btn .unread-dot{background:var(--accent);border:1.5px solid var(--bg-1);border-radius:4px;width:7px;height:7px;position:absolute;top:4px;right:4px}.shell-view{background:var(--bg-0);border-left:1px solid var(--border-subtle);border-right:1px solid var(--border-subtle);flex-direction:column;grid-area:canvas;min-width:0;display:flex;overflow:hidden}.shell-view .panel-frame{flex:1;min-height:0}.shell-view-density-toggle{border:1px solid var(--border-default);background:var(--bg-1);border-radius:6px;display:inline-flex;overflow:hidden}.shell-view-density-toggle button{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;padding:5px 10px;font-size:11px;font-weight:500}.shell-view-density-toggle button.active{background:var(--accent-dim);color:var(--accent)}.shell-view-table-wrap{border:1px solid var(--border-default);background:var(--bg-1);border-radius:8px;max-height:100%;overflow:auto}.shell-view-table-wrap .panel-table{border:none;border-radius:0}.shell-view-table-wrap .panel-table tbody tr{cursor:pointer}.shell-view-table-wrap .panel-table tbody tr.active{background:var(--accent-dim);box-shadow:inset 2px 0 0 var(--accent)}.shell-view-checkbox{width:13px;height:13px;accent-color:var(--accent);cursor:pointer}.shell-view-bulkbar{background:var(--accent-dim);border:1px solid var(--accent);color:var(--text-primary);border-radius:8px;align-items:center;gap:10px;margin-bottom:10px;padding:8px 12px;font-size:11.5px;display:flex}.shell-view-bulkbar .spacer{flex:1}.user-chip-btn{border:1px solid var(--border-default);color:var(--text-primary);cursor:pointer;transition:background .12s var(--ease),border-color .12s var(--ease);background:0 0;border-radius:20px;align-items:center;gap:8px;padding:3px 10px 3px 3px;font-size:12px;display:flex}.user-chip-btn:hover{background:var(--bg-2);border-color:var(--border-strong)}.search-launcher{background:var(--bg-2);border:1px solid var(--border-default);height:30px;color:var(--text-tertiary);cursor:pointer;min-width:260px;transition:border-color .14s var(--ease),background .14s var(--ease),box-shadow .14s var(--ease),color .14s var(--ease);border-radius:8px;align-items:center;gap:8px;padding:0 8px 0 10px;font-size:12px;display:flex}.search-launcher:hover{border-color:var(--accent);color:var(--text-secondary);background:var(--bg-1)}.search-launcher:focus-visible,.search-launcher:active{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim);color:var(--text-primary);outline:none}.search-launcher .search-launcher-icon{color:var(--text-tertiary);justify-content:center;align-items:center;display:inline-flex}.search-launcher:hover .search-launcher-icon,.search-launcher:focus-visible .search-launcher-icon{color:var(--accent)}.search-launcher .search-launcher-text{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.search-launcher svg{width:13px;height:13px}.kbd{background:var(--bg-3);border:1px solid var(--border-default);font-family:var(--font-mono);color:var(--text-secondary);letter-spacing:.04em;border-radius:4px;align-items:center;gap:2px;margin-left:auto;padding:1px 6px;font-size:10px;font-weight:600;display:inline-flex}.search-launcher:hover .kbd{border-color:var(--accent);color:var(--accent)}.user-chip{border:1px solid var(--border-default);border-radius:20px;align-items:center;gap:8px;padding:3px 10px 3px 3px;font-size:12px;display:flex}.avatar{color:#fff;background:linear-gradient(135deg,#ec4899,#f59e0b);border-radius:50%;place-items:center;width:22px;height:22px;font-size:10px;font-weight:700;display:grid}.tabs{background:var(--bg-1);border-bottom:1px solid var(--border-subtle);grid-area:tabs;align-items:flex-end;gap:2px;padding:0 10px;display:flex;overflow-x:auto}.tab{height:30px;color:var(--text-tertiary);transition:color .12s var(--ease);background:0 0;border-radius:6px 6px 0 0;align-items:center;gap:8px;padding:0 12px;font-size:12px;display:inline-flex;position:relative}.tab:hover{color:var(--text-secondary)}.tab.active{background:var(--bg-2);color:var(--text-primary)}.tab.active:after{content:"";background:var(--bg-2);height:1px;position:absolute;bottom:-1px;left:0;right:0}.tab-dot{opacity:.7;background:currentColor;border-radius:50%;width:8px;height:8px}.tab.unsaved .tab-close:before{content:"●";font-size:10px}.tab-close{width:16px;height:16px;color:var(--text-muted);border-radius:4px;place-items:center;font-size:14px;line-height:1;display:grid}.tab-close:hover{background:var(--bg-3);color:var(--text-primary)}.tabs-spacer{flex:1}.tab-action{height:28px;color:var(--text-tertiary);border-radius:6px;align-items:center;gap:6px;padding:0 8px;font-size:12px;display:inline-flex}.tab-action:hover{background:var(--bg-2);color:var(--text-primary)}.tab-action svg{width:12px;height:12px}.left{background:var(--bg-1);border-right:1px solid var(--border-subtle);flex-direction:column;grid-area:left;display:flex;overflow:hidden}.left-tabs{border-bottom:1px solid var(--border-subtle);gap:2px;padding:6px 6px 0;display:flex}.left-tab{letter-spacing:.04em;text-transform:uppercase;height:30px;color:var(--text-tertiary);transition:color .12s var(--ease);border-radius:6px 6px 0 0;flex:1;place-items:center;font-size:11px;font-weight:500;display:grid;position:relative}.left-tab:hover{color:var(--text-secondary)}.left-tab.active{color:var(--text-primary)}.left-tab.active:after{content:"";background:var(--accent);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:10%;right:10%}.left-search{gap:6px;padding:10px 10px 6px;display:flex}.search-field{background:var(--bg-2);border:1px solid var(--border-default);border-radius:6px;flex:1;align-items:center;gap:6px;height:28px;padding:0 8px;display:flex}.search-field:focus-within{border-color:var(--accent);background:var(--bg-0)}.search-field svg{width:12px;height:12px;color:var(--text-tertiary);flex-shrink:0}.search-field input{color:var(--text-primary);background:0 0;border:0;flex:1;font-size:12px}.search-field input::placeholder{color:var(--text-tertiary)}.icon-btn{width:28px;height:28px;color:var(--text-tertiary);transition:all .12s var(--ease);border-radius:6px;place-items:center;display:grid}.icon-btn:hover{background:var(--bg-3);color:var(--text-primary)}.icon-btn svg{width:14px;height:14px}.tree{flex:1;padding:2px 4px 20px;overflow-y:auto}.tree-section{margin-top:2px}.tree-section-header{letter-spacing:.08em;text-transform:uppercase;height:24px;color:var(--text-tertiary);-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;font-size:10px;font-weight:600;display:flex}.tree-section-header:hover{color:var(--text-secondary)}.tree-section-header .count{color:var(--text-muted);font-weight:500}.tree-caret{width:10px;height:10px;transition:transform .15s var(--ease);flex-shrink:0}.tree-section.collapsed .tree-caret{transform:rotate(-90deg)}.tree-section.collapsed .tree-items{display:none}.tree-section-header .add{width:18px;height:18px;color:var(--text-muted);opacity:0;border-radius:4px;place-items:center;margin-left:auto;display:grid}.tree-section-header:hover .add{opacity:1}.tree-section-header .add:hover{background:var(--bg-3);color:var(--text-primary)}.tree-item{height:26px;color:var(--text-secondary);cursor:pointer;transition:background .12s var(--ease);-webkit-user-select:none;user-select:none;border-radius:5px;align-items:center;gap:8px;padding:0 6px 0 22px;font-size:12px;display:flex;position:relative}.tree-item:hover{background:var(--bg-2);color:var(--text-primary)}.tree-item.active{background:var(--accent-dim);color:var(--text-primary)}.tree-item.active:before{content:"";background:var(--accent);border-radius:2px;width:2px;position:absolute;top:4px;bottom:4px;left:0}.tree-icon{width:14px;height:14px;color:var(--text-tertiary);flex-shrink:0}.tree-item.active .tree-icon{color:var(--accent)}.tree-item .badge{color:var(--text-muted);font-size:10px;font-family:var(--font-mono);margin-left:auto}.tree-item .swatch{border-radius:2px;width:8px;height:8px}.canvas-wrap{background:var(--bg-canvas);grid-area:canvas;position:relative;overflow:hidden}.canvas-grid{background-image:radial-gradient(circle at 1px 1px,var(--bg-grid) 1px,transparent 0);pointer-events:none;background-size:24px 24px;position:absolute;top:0;right:0;bottom:0;left:0}.canvas-chrome{pointer-events:none;z-index:10;justify-content:space-between;align-items:flex-start;display:flex;position:absolute;top:12px;left:12px;right:12px}.canvas-title{pointer-events:auto;background:var(--bg-1);flex-direction:column;gap:2px;padding:10px 14px;display:flex}@supports (color:color-mix(in lab,red,red)){.canvas-title{background:color-mix(in srgb,var(--bg-1) 85%,transparent)}}.canvas-title{-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-default);border-radius:10px}.canvas-title h1{letter-spacing:-.01em;font-size:15px;font-weight:600}.canvas-title p{color:var(--text-tertiary);align-items:center;gap:6px;font-size:11px;display:flex}.canvas-title .dot{background:var(--text-muted);border-radius:50%;width:3px;height:3px}.canvas-title .engine{font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-secondary);font-size:10px}.canvas-actions{pointer-events:auto;gap:6px;display:flex}.canvas-btn{background:var(--bg-1);align-items:center;gap:6px;height:30px;padding:0 10px;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.canvas-btn{background:color-mix(in srgb,var(--bg-1) 85%,transparent)}}.canvas-btn{-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-default);color:var(--text-secondary);transition:all .12s var(--ease);border-radius:8px;font-size:12px}.canvas-btn:hover{color:var(--text-primary);border-color:var(--border-strong)}.canvas-btn.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}.canvas-btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.canvas-btn svg{width:13px;height:13px}.minimap{background:var(--bg-1);width:180px;height:120px;position:absolute;bottom:46px;right:12px}@supports (color:color-mix(in lab,red,red)){.minimap{background:color-mix(in srgb,var(--bg-1) 90%,transparent)}}.minimap{-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-default);z-index:10;border-radius:8px;padding:6px}.minimap-title{color:var(--text-tertiary);letter-spacing:.06em;text-transform:uppercase;margin-bottom:4px;padding:0 2px;font-size:10px}.minimap-canvas{background:var(--bg-0);border-radius:4px;width:100%;height:calc(100% - 14px);position:relative;overflow:hidden}.minimap-canvas .mm-table{border-radius:1px;position:absolute}.minimap-canvas .mm-viewport{border:1px solid var(--accent);background:var(--accent-dim);pointer-events:none;border-radius:2px;position:absolute}.zoom-bar{background:var(--bg-1);align-items:center;display:flex;position:absolute;bottom:12px;right:12px}@supports (color:color-mix(in lab,red,red)){.zoom-bar{background:color-mix(in srgb,var(--bg-1) 90%,transparent)}}.zoom-bar{-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-default);z-index:10;border-radius:8px;height:30px;overflow:hidden}.zoom-btn{width:30px;height:30px;color:var(--text-secondary);place-items:center;display:grid}.zoom-btn:hover{background:var(--bg-3);color:var(--text-primary)}.zoom-level{font-size:11px;font-family:var(--font-mono);color:var(--text-secondary);border-left:1px solid var(--border-subtle);border-right:1px solid var(--border-subtle);place-items:center;min-width:48px;height:100%;padding:0 8px;display:grid}.canvas{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto}.canvas-inner,.canvas-stage{position:relative}.subject-area{background:var(--text-primary);border:1.5px dashed;border-radius:16px;position:absolute}@supports (color:color-mix(in lab,red,red)){.subject-area{background:color-mix(in srgb,var(--text-primary) 2%,transparent)}}.subject-area{pointer-events:none}.subject-area-label{letter-spacing:.08em;text-transform:uppercase;background:var(--bg-canvas);border-radius:4px;padding:2px 10px;font-size:10px;font-weight:600;position:absolute;top:-11px;left:18px}.table-card{width:var(--card-width);background:var(--bg-2);border:1px solid var(--border-default);border-radius:var(--card-radius);box-shadow:var(--shadow-card);cursor:grab;transition:box-shadow .15s var(--ease),border-color .12s var(--ease),transform .15s var(--ease);-webkit-user-select:none;user-select:none;position:absolute;overflow:hidden}.table-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-pop)}.table-card.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 0 0 4px var(--accent-dim),var(--shadow-pop)}.tc-header{height:var(--card-header-h);padding:0 var(--row-px);background:var(--cat-soft,var(--bg-3));border-bottom:1px solid var(--border-subtle);align-items:center;gap:8px;display:flex;position:relative}.tc-header:before{content:"";background:var(--cat,var(--cat-system));width:3px;position:absolute;top:0;bottom:0;left:0}.tc-icon{width:14px;height:14px;color:var(--cat,var(--cat-system));flex-shrink:0}.tc-name{font-size:var(--row-fs);letter-spacing:-.005em;color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.tc-schema{color:var(--text-tertiary);font-size:10px;font-family:var(--font-mono)}.tc-badges{align-items:center;gap:4px;display:flex}.tc-badge{letter-spacing:.04em;height:16px;font-size:9px;font-weight:600;font-family:var(--font-mono);color:var(--text-secondary);background:var(--bg-3);border-radius:3px;align-items:center;padding:0 5px;display:inline-flex}.tc-rows{flex-direction:column;display:flex}.tc-row{height:var(--row-h);padding:0 var(--row-px);font-size:var(--row-fs);color:var(--text-secondary);border-bottom:1px solid var(--border-subtle);transition:background .12s var(--ease);grid-template-columns:14px 1fr auto auto;align-items:center;gap:8px;display:grid}.tc-row:last-child{border-bottom:0}.tc-row:hover{background:var(--bg-3);color:var(--text-primary)}.tc-row.pk{color:var(--text-primary);font-weight:500}.tc-key{cursor:crosshair;width:14px;height:14px;transition:background .12s var(--ease);border-radius:3px;place-items:center;display:grid}.tc-key:hover{background:var(--bg-3)}.tc-key svg{width:11px;height:11px}.tc-key.pk{color:var(--pk)}.tc-key.fk{color:var(--fk)}.tc-key.idx{color:var(--idx)}.tc-col{font-family:var(--font-mono);font-size:calc(var(--row-fs) - .5px);letter-spacing:-.01em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tc-type{font-family:var(--font-mono);font-size:calc(var(--row-fs) - 1px);color:var(--text-tertiary)}.tc-nn{font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-muted);text-align:right;min-width:16px;font-size:9px;font-weight:600}.tc-nn.required{color:var(--text-secondary)}.tc-footer{padding:4px var(--row-px);color:var(--text-muted);background:var(--bg-1);border-top:1px solid var(--border-subtle);font-size:10px;font-family:var(--font-mono);justify-content:space-between;align-items:center;display:flex}.right{background:var(--bg-1);border-left:1px solid var(--border-subtle);flex-direction:column;grid-area:right;display:flex;position:relative;overflow:hidden}.right-resize{cursor:ew-resize;z-index:5;width:5px;transition:background .12s var(--ease);background:0 0;position:absolute;top:0;bottom:0;left:-2px}.right-resize:hover,.right-resize.dragging{background:var(--accent-dim)}.right-resize:after{content:"";width:1px;transition:background .12s var(--ease);background:0 0;position:absolute;top:0;bottom:0;left:2px}.right-resize:hover:after,.right-resize.dragging:after{background:var(--accent)}.inspector-tabs{background:var(--bg-2);border:1px solid var(--border-default);border-radius:7px;gap:2px;padding:2px;display:inline-flex}.inspector-tab{color:var(--text-secondary);cursor:pointer;transition:background .12s var(--ease),color .12s var(--ease);white-space:nowrap;background:0 0;border:0;border-radius:5px;padding:4px 10px;font-size:11px;font-weight:500}.inspector-tab:hover{color:var(--text-primary)}.inspector-tab.active{background:var(--accent-dim);color:var(--accent)}.inspector-tab:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.inspector-inline-form{background:var(--bg-0);border:1px dashed var(--border-default);border-radius:6px;grid-template-columns:1fr 1fr;gap:8px 10px;margin-top:10px;padding:10px;display:grid}.inspector-inline-form .full{grid-column:1/-1}.inspector-action-picker{background:var(--bg-2);border:1px solid var(--border-default);border-radius:6px;flex-wrap:wrap;gap:2px;padding:2px;display:inline-flex}.inspector-action-picker button{color:var(--text-secondary);font-size:10.5px;font-weight:500;font-family:var(--font-mono);letter-spacing:.03em;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;display:inline-flex}.inspector-action-picker button .swatch{border-radius:2px;width:7px;height:7px;display:inline-block}.inspector-action-picker button:hover{color:var(--text-primary)}.inspector-action-picker button.active{background:var(--accent-dim);color:var(--accent)}.inspector-sql-pre{font-family:var(--font-mono);color:var(--sql-ident,var(--text-primary));background:var(--bg-0);border:1px solid var(--border-default);white-space:pre;border-radius:8px;max-height:440px;margin:0;padding:12px;font-size:11.5px;line-height:1.55;overflow:auto}.inspector-sql-pre .sql-kw{color:var(--sql-keyword);font-weight:600}.inspector-sql-pre .sql-type{color:var(--sql-type)}.inspector-sql-pre .sql-str{color:var(--sql-string)}.inspector-sql-pre .sql-num{color:var(--sql-number)}.inspector-sql-pre .sql-fn{color:var(--sql-function)}.inspector-sql-pre .sql-punct{color:var(--sql-punctuation)}.inspector-sql-pre .sql-comment{color:var(--sql-comment);font-style:italic}.insp-header{border-bottom:1px solid var(--border-subtle);padding:14px 16px 10px}.insp-eyebrow{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);align-items:center;gap:6px;margin-bottom:4px;font-size:10px;font-weight:600;display:flex}.insp-eyebrow .pill{background:var(--cat-users-soft);color:var(--cat-users);letter-spacing:.06em;border-radius:3px;padding:1px 6px;font-size:9px}.insp-title{align-items:center;gap:10px;margin-bottom:8px;display:flex}.insp-title h2{letter-spacing:-.015em;font-size:17px;font-weight:600;font-family:var(--font-mono)}.insp-title .copy-btn{width:22px;height:22px;color:var(--text-muted);border-radius:4px;place-items:center;display:grid}.insp-title .copy-btn:hover{background:var(--bg-3);color:var(--text-primary)}.insp-sub{color:var(--text-tertiary);font-size:12px;line-height:1.5}.insp-tabs{border-bottom:1px solid var(--border-subtle);background:var(--bg-1);gap:2px;padding:0 10px;display:flex}.insp-tab{height:34px;color:var(--text-tertiary);padding:0 10px;font-size:12px;position:relative}.insp-tab:hover{color:var(--text-secondary)}.insp-tab.active{color:var(--text-primary)}.insp-tab.active:after{content:"";background:var(--accent);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:10px;right:10px}.insp-body{flex:1;padding:14px 16px 20px;overflow-y:auto}.insp-section{margin-bottom:18px}.insp-section-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);justify-content:space-between;align-items:center;margin-bottom:8px;font-size:10px;font-weight:600;display:flex}.insp-section-title .count{color:var(--text-muted);font-family:var(--font-mono)}.field{margin-bottom:10px}.field-row{grid-template-columns:90px 1fr;align-items:center;gap:8px;min-height:28px;display:grid}.field-label{color:var(--text-tertiary);font-size:11px}.field-input{background:var(--bg-2);border:1px solid var(--border-default);height:28px;color:var(--text-primary);font-size:12px;font-family:var(--font-mono);width:100%;transition:border-color .12s var(--ease);border-radius:5px;padding:0 8px}.field-input:focus{border-color:var(--accent);background:var(--bg-0)}.field-input.readonly{color:var(--text-secondary);background:var(--bg-1)}.field-select{background:var(--bg-2);border:1px solid var(--border-default);height:28px;color:var(--text-primary);font-size:12px;font-family:var(--font-mono);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 4l3 3 3-3' stroke='%239aa3b4' fill='none' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 8px center;background-repeat:no-repeat;border-radius:5px;width:100%;padding:0 24px 0 8px}.field-flags{flex-wrap:wrap;gap:6px;display:flex}.flag{background:var(--bg-2);border:1px solid var(--border-default);height:24px;color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);cursor:pointer;transition:all .12s var(--ease);border-radius:5px;align-items:center;gap:5px;padding:0 8px;display:inline-flex}.flag:hover{border-color:var(--border-strong)}.flag.on{background:var(--accent-dim);border-color:var(--accent);color:var(--text-primary)}.flag .check{border:1px solid var(--text-muted);border-radius:3px;place-items:center;width:12px;height:12px;display:grid}.flag.on .check{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}.flag.on .check svg{width:8px;height:8px}.col-list{background:var(--bg-2);border:1px solid var(--border-default);border-radius:6px;flex-direction:column;gap:1px;display:flex;overflow:hidden}.col-item{color:var(--text-secondary);background:var(--bg-2);cursor:pointer;transition:background .12s var(--ease);grid-template-columns:14px 1fr auto;align-items:center;gap:8px;padding:7px 10px;font-size:12px;display:grid}.col-item:hover{background:var(--bg-3);color:var(--text-primary)}.col-item.active{background:var(--accent-dim);color:var(--text-primary)}.col-item-key{place-items:center;display:grid}.col-item-key svg{width:11px;height:11px}.col-item-key.pk{color:var(--pk)}.col-item-key.fk{color:var(--fk)}.col-item-name{font-family:var(--font-mono);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.col-item-type{font-family:var(--font-mono);color:var(--text-tertiary);font-size:10px}.rel-card{background:var(--bg-2);border:1px solid var(--border-default);border-radius:6px;margin-bottom:6px;padding:10px;font-size:12px}.rel-card .rel-title{font-family:var(--font-mono);color:var(--text-primary);align-items:center;gap:6px;margin-bottom:4px;font-size:11px;display:flex}.rel-card .rel-cardinality{font-family:var(--font-mono);color:var(--text-tertiary);background:var(--bg-3);border-radius:3px;padding:1px 5px;font-size:10px}.rel-card .rel-sub{color:var(--text-tertiary);font-size:11px;font-family:var(--font-mono)}.sql-preview{background:var(--bg-0);border:1px solid var(--border-default);font-family:var(--font-mono);color:var(--sql-ident,var(--text-primary));white-space:pre;border-radius:6px;padding:10px 12px;font-size:11px;line-height:1.6;overflow-x:auto}.sql-kw{color:var(--sql-keyword);font-weight:600}.sql-type{color:var(--sql-type)}.sql-str{color:var(--sql-string)}.sql-num{color:var(--sql-number)}.sql-fn{color:var(--sql-function)}.sql-punct{color:var(--sql-punctuation)}.sql-comment{color:var(--sql-comment);font-style:italic}.status{background:var(--bg-1);border-top:1px solid var(--border-subtle);color:var(--text-tertiary);grid-area:status;align-items:center;gap:14px;padding:0 12px;font-size:11px;display:flex}.status-item{align-items:center;gap:6px;display:flex}.status-item .dot{background:#10b981;border-radius:50%;width:6px;height:6px}.status-item.warn .dot{background:#f59e0b}.status-item .k{font-family:var(--font-mono);color:var(--text-tertiary)}.status-spacer{flex:1}.density-toggle{background:var(--bg-2);border:1px solid var(--border-default);border-radius:5px;height:20px;display:flex;overflow:hidden}.density-toggle button{color:var(--text-tertiary);letter-spacing:.04em;text-transform:uppercase;transition:all .12s var(--ease);padding:0 8px;font-size:10px}.density-toggle button:hover{color:var(--text-primary)}.density-toggle button.active{background:var(--accent);color:var(--accent-fg)}.cmd-overlay{background:var(--scrim);-webkit-backdrop-filter:blur(4px);z-index:100;animation:fadeIn .12s var(--ease);place-items:start center;padding-top:14vh;display:grid;position:fixed;top:0;right:0;bottom:0;left:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.cmd{background:var(--bg-2);border:1px solid var(--border-strong);width:640px;max-width:calc(100vw - 32px);box-shadow:var(--shadow-pop);animation:popIn .18s var(--ease);border-radius:12px;overflow:hidden}@keyframes popIn{0%{opacity:0;transform:translateY(-6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.cmd-input-wrap{border-bottom:1px solid var(--border-subtle);align-items:center;gap:10px;padding:14px 16px;display:flex}.cmd-input-wrap svg{width:16px;height:16px;color:var(--text-tertiary)}.cmd-input{color:var(--text-primary);background:0 0;border:0;flex:1;font-size:15px}.cmd-input::placeholder{color:var(--text-tertiary)}.cmd-list{max-height:380px;padding:6px;overflow-y:auto}.cmd-section{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);padding:8px 10px 4px;font-size:10px;font-weight:600}.cmd-item{color:var(--text-secondary);cursor:pointer;border-radius:6px;grid-template-columns:20px 1fr auto;align-items:center;gap:10px;padding:8px 10px;font-size:13px;display:grid}.cmd-item:hover,.cmd-item.selected{background:var(--bg-3);color:var(--text-primary)}.cmd-item .cmd-icon{width:16px;height:16px;color:var(--text-tertiary);place-items:center;display:grid}.cmd-item.selected .cmd-icon{color:var(--accent)}.cmd-item .cmd-meta{color:var(--text-muted);font-size:10px;font-family:var(--font-mono)}.cmd-footer{border-top:1px solid var(--border-subtle);background:var(--bg-1);color:var(--text-tertiary);align-items:center;gap:14px;padding:8px 16px;font-size:11px;display:flex}.cmd-footer .hint{align-items:center;gap:4px;display:flex}.rel-svg{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.rel-line{fill:none;stroke:var(--rel-line);stroke-width:1.25px;transition:stroke .15s var(--ease),stroke-width .15s var(--ease)}.rel-line.strong{stroke:var(--rel-line-strong)}.rel-glyph{stroke:var(--rel-line-strong);stroke-width:1.25px;fill:none;stroke-width:1.6px}.rel-glyph.dimmed,.rel-line.dimmed{stroke:var(--rel-line-dim)}.rel-line.active{stroke:var(--rel-line-active);stroke-width:2px}.rel-label{font-family:var(--font-mono);fill:var(--text-secondary);paint-order:stroke;stroke:var(--bg-canvas);stroke-width:3.5px;stroke-linejoin:round;font-size:9.5px;font-weight:600}.rel-label.active{fill:var(--rel-line-active)}.rel-label.dimmed{fill:var(--text-muted);opacity:.5;stroke-width:2px}.tooltip{background:var(--bg-4);border:1px solid var(--border-default);color:var(--text-primary);pointer-events:none;z-index:200;box-shadow:var(--shadow-pop);font-size:11px;font-family:var(--font-mono);white-space:nowrap;border-radius:5px;padding:5px 8px;position:fixed}.table-card.cat-users{--cat:var(--cat-users);--cat-soft:var(--cat-users-soft)}.table-card.cat-billing{--cat:var(--cat-billing);--cat-soft:var(--cat-billing-soft)}.table-card.cat-product{--cat:var(--cat-product);--cat-soft:var(--cat-product-soft)}.table-card.cat-system{--cat:var(--cat-system);--cat-soft:var(--cat-system-soft)}.table-card.cat-access{--cat:var(--cat-access);--cat-soft:var(--cat-access-soft)}.table-card.cat-audit{--cat:var(--cat-audit);--cat-soft:var(--cat-audit-soft)}.subject-area.cat-users{border-color:var(--cat-users)}@supports (color:color-mix(in lab,red,red)){.subject-area.cat-users{border-color:color-mix(in srgb,var(--cat-users) 35%,transparent)}}.subject-area.cat-users .subject-area-label{color:var(--cat-users)}.subject-area.cat-billing{border-color:var(--cat-billing)}@supports (color:color-mix(in lab,red,red)){.subject-area.cat-billing{border-color:color-mix(in srgb,var(--cat-billing) 35%,transparent)}}.subject-area.cat-billing .subject-area-label{color:var(--cat-billing)}.subject-area.cat-product{border-color:var(--cat-product)}@supports (color:color-mix(in lab,red,red)){.subject-area.cat-product{border-color:color-mix(in srgb,var(--cat-product) 35%,transparent)}}.subject-area.cat-product .subject-area-label{color:var(--cat-product)}.subject-area.cat-audit{border-color:var(--cat-audit)}@supports (color:color-mix(in lab,red,red)){.subject-area.cat-audit{border-color:color-mix(in srgb,var(--cat-audit) 35%,transparent)}}.subject-area.cat-audit .subject-area-label{color:var(--cat-audit)}n .tc-colflags{align-items:center;gap:3px;display:flex}.tc-cf{width:12px;height:12px;color:var(--text-muted);opacity:.7;place-items:center;display:inline-grid}.tc-cf:hover{opacity:1;color:var(--text-secondary)}.tc-cf-uq{color:var(--fk)}.tc-cf-ck{color:var(--idx)}.tc-cf-df{color:var(--cat-product)}.tc-cf-gn{color:var(--cat-access)}.table-card.junction{border-style:dashed}.tc-badge.junction{background:var(--cat-access-soft);color:var(--cat-access)}.tc-badge.part{background:var(--cat-audit-soft);color:var(--cat-audit)}.tc-badge.enum{background:var(--cat-system-soft);color:var(--cat-system)}.rel-line.identifying{stroke-width:1.75px}.rel-glyph{stroke:var(--rel-line);stroke-width:1.25px;fill:none;transition:stroke .12s var(--ease)}.rel-glyph.active{stroke:var(--accent);stroke-width:1.6px}.legend-toggle{z-index:10;background:var(--bg-1);align-items:center;gap:6px;height:30px;padding:0 10px;display:inline-flex;position:absolute;bottom:12px;left:12px}@supports (color:color-mix(in lab,red,red)){.legend-toggle{background:color-mix(in srgb,var(--bg-1) 85%,transparent)}}.legend-toggle{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border-default);color:var(--text-secondary);border-radius:8px;font-size:12px}.legend-toggle:hover{color:var(--text-primary);border-color:var(--border-strong)}.legend{z-index:11;background:var(--bg-1);width:280px;max-height:calc(100% - 100px);position:absolute;bottom:12px;left:12px}@supports (color:color-mix(in lab,red,red)){.legend{background:color-mix(in srgb,var(--bg-1) 92%,transparent)}}.legend{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border-strong);box-shadow:var(--shadow-pop);border-radius:10px;padding:10px 12px 14px;overflow-y:auto}.legend-head{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);justify-content:space-between;align-items:center;margin-bottom:8px;font-size:11px;font-weight:600;display:flex}.legend-section{margin-top:12px}.legend-section-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);border-bottom:1px solid var(--border-subtle);margin-bottom:6px;padding-bottom:4px;font-size:10px;font-weight:600}.legend-row{color:var(--text-secondary);grid-template-columns:48px 1fr auto;align-items:center;gap:8px;padding:4px 0;font-size:11px;display:grid}.legend-gly{color:var(--text-secondary);place-items:center;display:grid}.legend-sub{font-family:var(--font-mono);color:var(--text-muted);font-size:10px}.rel-insp-kind{background:var(--accent-dim);border:1px solid var(--accent);font-family:var(--font-mono);color:var(--text-primary);border-radius:6px;align-items:center;gap:8px;padding:6px 12px;font-size:13px;display:inline-flex}.rel-route{background:var(--bg-2);border:1px solid var(--border-default);font-family:var(--font-mono);border-radius:6px;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;padding:10px;font-size:12px;display:grid}.rel-route-col{flex-direction:column;gap:3px;display:flex}.rel-route-table{color:var(--text-primary);font-weight:600}.rel-route-field{color:var(--text-tertiary);font-size:11px}.rel-route-card{color:var(--accent);letter-spacing:.04em;text-transform:uppercase;font-size:10px}.rel-route-arrow{color:var(--text-tertiary)}.action-picker{flex-wrap:wrap;gap:6px;display:flex}.action-picker .action{background:var(--bg-2);border:1px solid var(--border-default);font-family:var(--font-mono);color:var(--text-secondary);cursor:pointer;border-radius:5px;align-items:center;gap:5px;padding:5px 8px;font-size:11px;display:inline-flex}.action-picker .action.on{background:var(--accent-dim);border-color:var(--accent);color:var(--text-primary)}.action-picker .action .dot{border-radius:50%;width:7px;height:7px}.panel-frame{background:var(--bg-1);height:100%;min-height:0;color:var(--text-primary);flex-direction:column;display:flex}.panel-frame-header{border-bottom:1px solid var(--border-default);background:var(--bg-2);flex-wrap:wrap;flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:8px 16px;padding:12px 16px;display:flex}.panel-frame-heading{flex:auto;align-items:flex-start;gap:10px;min-width:0;display:flex}.panel-frame-icon{background:var(--accent-dim);width:26px;height:26px;color:var(--accent);border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.panel-frame-icon svg{width:14px;height:14px}.panel-frame-title-col{flex-direction:column;gap:2px;min-width:0;display:flex}.panel-frame-eyebrow{letter-spacing:.1em;text-transform:uppercase;color:var(--text-tertiary);font-size:10px;font-weight:600}.panel-frame-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.panel-frame-title{color:var(--text-primary);margin:0;font-size:13px;font-weight:600;line-height:1.2}.panel-frame-status{align-items:center;display:inline-flex}.panel-frame-subtitle{color:var(--text-tertiary);margin-top:2px;font-size:11px}.panel-frame-actions{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;display:flex}.panel-frame-toolbar{border-bottom:1px solid var(--border-default);background:var(--bg-1);flex-shrink:0;align-items:center;gap:8px;padding:8px 16px;display:flex}.panel-frame-body{flex:1;min-height:0;overflow:auto}.panel-section{margin-bottom:16px}.panel-section:last-child{margin-bottom:0}.panel-section-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.panel-section-title-wrap{align-items:center;gap:8px;min-width:0;display:flex}.panel-section-icon{color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.panel-section-icon svg{width:12px;height:12px}.panel-section-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);margin:0;font-size:10.5px;font-weight:600;line-height:1.2}.panel-section-count{background:var(--bg-3);min-width:18px;height:16px;color:var(--text-secondary);border-radius:8px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.panel-section-action{align-items:center;gap:6px;display:flex}.panel-section-desc{color:var(--text-tertiary);margin:0 0 8px;font-size:11.5px}.panel-section-body.padded{padding:0}.panel-card{background:var(--bg-2);border:1px solid var(--border-default);border-left:3px solid var(--border-default);transition:background .12s var(--ease),border-color .12s var(--ease);border-radius:8px;padding:12px 14px}.panel-card.dense{padding:8px 10px}.panel-card+.panel-card{margin-top:8px}.panel-card-header{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px;display:flex}.panel-card-heading{align-items:flex-start;gap:10px;min-width:0;display:flex}.panel-card-icon{background:var(--bg-3);width:22px;height:22px;color:var(--text-secondary);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.panel-card-icon svg{width:12px;height:12px}.panel-card-title-col{flex-direction:column;gap:1px;min-width:0;display:flex}.panel-card-eyebrow{letter-spacing:.1em;text-transform:uppercase;color:var(--text-tertiary);font-size:9.5px;font-weight:600}.panel-card-title{color:var(--text-primary);font-size:12.5px;font-weight:600;line-height:1.3}.panel-card-subtitle{color:var(--text-tertiary);font-size:11px}.panel-card-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.panel-card-body{color:var(--text-secondary);font-size:12px}.panel-card.tone-neutral{border-left-color:var(--border-strong)}.panel-card.tone-accent{border-left-color:var(--accent);background:linear-gradient(to right,var(--accent-dim),var(--bg-2) 90px)}.panel-card.tone-info{border-left-color:var(--status-info);background:linear-gradient(to right,var(--status-info-bg),var(--bg-2) 90px)}.panel-card.tone-success{border-left-color:var(--status-success);background:linear-gradient(to right,var(--status-success-bg),var(--bg-2) 90px)}.panel-card.tone-warning{border-left-color:var(--status-warning);background:linear-gradient(to right,var(--status-warning-bg),var(--bg-2) 90px)}.panel-card.tone-error{border-left-color:var(--status-error);background:linear-gradient(to right,var(--status-error-bg),var(--bg-2) 90px)}.status-pill{letter-spacing:.02em;background:var(--bg-3);height:20px;color:var(--text-secondary);border:1px solid var(--border-default);white-space:nowrap;border-radius:10px;align-items:center;gap:4px;padding:2px 8px;font-size:10.5px;font-weight:600;line-height:1;display:inline-flex}.status-pill-icon{align-items:center;display:inline-flex}.status-pill-icon svg{width:10px;height:10px}.status-pill.tone-neutral{background:var(--bg-3);color:var(--text-secondary);border-color:var(--border-default)}.status-pill.tone-accent{background:var(--accent-dim);color:var(--accent);border-color:var(--status-info-border)}.status-pill.tone-info{background:var(--status-info-bg);color:var(--status-info);border-color:var(--status-info-border)}.status-pill.tone-success{background:var(--status-success-bg);color:var(--status-success);border-color:var(--status-success-border)}.status-pill.tone-warning{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}.status-pill.tone-error{background:var(--status-error-bg);color:var(--status-error);border-color:var(--status-error-border)}.panel-kv-grid{gap:10px 16px;margin:0;display:grid}.panel-kv-row{background:var(--bg-2);border:1px solid var(--border-default);border-radius:6px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.panel-kv-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);margin:0;font-size:10px;font-weight:600}.panel-kv-value{color:var(--text-primary);font-feature-settings:"tnum" 1;word-break:break-word;margin:0;font-size:12px}.panel-toolbar{background:var(--bg-2);border:1px solid var(--border-default);border-radius:8px;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;padding:8px 10px;display:flex}.panel-toolbar-left,.panel-toolbar-center,.panel-toolbar-right{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.panel-toolbar-left{flex:1;min-width:0}.panel-toolbar-center{flex:2;justify-content:center}.panel-toolbar-right{justify-content:flex-end}.panel-table{border-collapse:collapse;background:var(--bg-1);border:1px solid var(--border-default);border-radius:8px;width:100%;font-size:12px;overflow:hidden}.panel-table thead th{background:var(--bg-2);color:var(--text-tertiary);letter-spacing:.08em;text-transform:uppercase;text-align:left;border-bottom:1px solid var(--border-default);z-index:1;padding:8px 10px;font-size:10px;font-weight:600;position:sticky;top:0}.panel-table tbody tr:nth-child(odd){background:var(--bg-1)}.panel-table tbody tr:nth-child(2n){background:var(--bg-2)}.panel-table tbody tr:hover{background:var(--bg-3)}.panel-table td{border-bottom:1px solid var(--border-subtle);color:var(--text-primary);vertical-align:top;padding:6px 10px}.panel-table tbody tr:last-child td{border-bottom:none}.panel-form-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 12px;display:grid}.panel-form-row{flex-direction:column;gap:4px;min-width:0;display:flex}.panel-form-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);font-size:10px;font-weight:600}.panel-form-hint{color:var(--text-tertiary);font-size:10.5px;line-height:1.4}.panel-input,.panel-select,.panel-textarea{background:var(--bg-1);border:1px solid var(--border-default);width:100%;font-size:12px;font-family:var(--font-mono,ui-monospace, "SF Mono", Menlo, monospace);color:var(--text-primary);transition:border-color .12s var(--ease,ease),background .12s var(--ease,ease);border-radius:6px;outline:none;padding:7px 10px}.panel-input::placeholder,.panel-textarea::placeholder{color:var(--text-tertiary);opacity:.8}.panel-input:focus,.panel-select:focus,.panel-textarea:focus{border-color:var(--accent);background:var(--bg-0);box-shadow:0 0 0 3px var(--accent-dim)}.panel-input:disabled,.panel-select:disabled,.panel-textarea:disabled{opacity:.55;cursor:not-allowed}.panel-textarea{resize:vertical;min-height:64px;font-family:inherit;line-height:1.45}.panel-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;color:var(--text-primary);background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 14px),calc(100% - 10px);background-repeat:no-repeat;background-size:4px 4px,4px 4px;padding-right:28px;position:relative}.panel-select option{color:var(--text-primary);background:var(--bg-1)}.panel-select:focus{background-color:var(--bg-0)}.panel-btn{cursor:pointer;border:1px solid var(--border-default);background:var(--bg-1);color:var(--text-secondary);transition:background .12s var(--ease,ease),color .12s var(--ease,ease),border-color .12s var(--ease,ease);white-space:nowrap;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:7px 12px;font-size:11.5px;font-weight:500;display:inline-flex}.panel-btn:hover:not(:disabled){background:var(--bg-3);color:var(--text-primary);border-color:var(--border-strong)}.panel-btn:disabled{opacity:.45;cursor:not-allowed}.panel-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}.panel-btn.primary:hover:not(:disabled){background:var(--accent-hover,var(--accent));border-color:var(--accent-hover,var(--accent));color:var(--accent-fg);filter:none}.panel-btn.danger{color:var(--status-error);border-color:var(--status-error-border)}.panel-btn.danger:hover:not(:disabled){background:var(--status-error-bg);color:var(--status-error);border-color:var(--status-error)}.panel-btn-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.panel-chip-list{flex-wrap:wrap;gap:5px;padding:6px 0 2px;display:flex}.panel-chip{border:1px solid var(--border-default);background:var(--bg-1);color:var(--text-secondary);font-size:10.5px;font-family:var(--font-mono,ui-monospace, "SF Mono", Menlo, monospace);white-space:nowrap;border-radius:10px;align-items:center;padding:3px 8px;display:inline-flex}.panel-chip.empty{color:var(--text-tertiary);border-style:dashed;font-family:inherit;font-style:italic}.panel-summary-card{border:1px solid var(--border-default);background:var(--bg-1);border-radius:8px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.panel-summary-card .label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);font-size:10px;font-weight:600}.panel-summary-card .value{color:var(--text-primary);font-size:20px;font-weight:600;line-height:1;font-family:var(--font-mono,ui-monospace, "SF Mono", Menlo, monospace)}.panel-empty{text-align:center;color:var(--text-tertiary);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:32px 16px;display:flex}.panel-empty-icon{background:var(--bg-2);width:40px;height:40px;color:var(--text-tertiary);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.panel-empty-title{color:var(--text-secondary);margin:0;font-size:12.5px;font-weight:600}.panel-empty-desc{color:var(--text-tertiary);max-width:280px;margin:0;font-size:11.5px;line-height:1.5}.t-display{font-size:var(--text-2xl);line-height:var(--leading-tight);font-weight:var(--weight-semibold);letter-spacing:-.02em;color:var(--color-text-primary)}.t-title{font-size:var(--text-lg);line-height:var(--leading-snug);font-weight:var(--weight-semibold);letter-spacing:-.01em;color:var(--color-text-primary)}.t-subtitle{font-size:var(--text-md);line-height:var(--leading-snug);font-weight:var(--weight-semibold);color:var(--color-text-primary)}.t-body{font-size:var(--text-base);line-height:var(--leading-normal);font-weight:var(--weight-regular);color:var(--color-text-secondary)}.t-label{font-size:var(--text-sm);line-height:var(--leading-snug);font-weight:var(--weight-medium);color:var(--color-text-primary)}.t-caption{font-size:var(--text-xs);line-height:var(--leading-snug);font-weight:var(--weight-regular);color:var(--color-text-muted)}.t-overline{font-size:var(--text-2xs);line-height:var(--leading-tight);font-weight:var(--weight-semibold);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted)}.t-mono{font-family:JetBrains Mono,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:var(--text-sm);color:var(--color-text-secondary)}.dl-toolbar-btn{border-radius:var(--radius-sm);height:28px;color:var(--color-text-secondary);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:0 8px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.dl-toolbar-btn:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.dl-toolbar-btn:active{background:var(--color-bg-active)}.dl-toolbar-btn[disabled],.dl-toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.dl-toolbar-btn--primary{background:var(--color-accent-blue);color:var(--color-text-on-accent);border-color:var(--color-accent-blue)}.dl-toolbar-btn--primary:hover{color:var(--color-text-on-accent);background:#2563eb}.dl-toolbar-btn--ghost-icon{justify-content:center;width:28px;padding:0}.dl-toolbar-divider{background:var(--color-border-primary);flex-shrink:0;width:1px;height:18px;margin:0 4px}.dl-chip{border-radius:var(--radius-pill);height:22px;font-size:var(--text-xs);font-weight:var(--weight-medium);background:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border-subtle);align-items:center;gap:4px;padding:0 8px;line-height:1;display:inline-flex}.dl-chip--accent{background:var(--color-accent-blue-soft);color:var(--color-accent-blue);border-color:#0000}.dl-tree-row{border-radius:var(--radius-xs);height:26px;font-size:var(--text-sm);color:var(--color-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:0 8px 0 6px;transition:background 80ms,color 80ms;display:flex}.dl-tree-row:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.dl-tree-row--active{background:var(--color-bg-active);color:var(--color-text-accent);font-weight:var(--weight-medium)}.dl-tree-section{height:28px;font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:0 8px 0 4px;display:flex}.dl-tree-section:hover{color:var(--color-text-secondary)}.cm-editor{font-size:13px;height:100%!important}.react-flow__background{background:var(--color-bg-canvas)!important}.react-flow__minimap{box-shadow:var(--shadow-sm);background:var(--color-bg-surface)!important;border:1px solid var(--color-border-primary)!important;border-radius:var(--radius-md)!important}.react-flow__controls{box-shadow:var(--shadow-sm);overflow:hidden;border:1px solid var(--color-border-primary)!important;border-radius:var(--radius-md)!important}.react-flow__controls-button{background:var(--color-bg-surface)!important;border-bottom:1px solid var(--color-border-primary)!important;fill:var(--color-text-secondary)!important}.react-flow__controls-button:hover{background:var(--color-bg-hover)!important}[data-theme=dark] .react-flow__node{color:var(--color-text-primary)}[data-theme=dark] .react-flow__edge-text{fill:var(--color-text-secondary)!important}.sash-container .sash{background:var(--color-border-primary)!important}.sash-container .sash:hover{background:var(--color-accent-blue)!important}@keyframes dql-drawer-slide-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}@keyframes dql-modal-fade-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}