@duckcodeailabs/dql-cli 1.12.11 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/apps-api.d.ts +151 -3
  2. package/dist/apps-api.d.ts.map +1 -1
  3. package/dist/apps-api.js +675 -97
  4. package/dist/apps-api.js.map +1 -1
  5. package/dist/assets/dql-notebook/assets/AgentAnswerCard-Cp0eh6zU.js +5 -0
  6. package/dist/assets/dql-notebook/assets/{AgentLogPage-hzHqpD3-.js → AgentLogPage-CBGEoGmU.js} +1 -1
  7. package/dist/assets/dql-notebook/assets/{AiBuildDialog-BQRWoxp9.js → AiBuildDialog-CwAD3tXE.js} +1 -1
  8. package/dist/assets/dql-notebook/assets/{AiBuildResult-D9t_4sQl.js → AiBuildResult-CyqTuQe5.js} +1 -1
  9. package/dist/assets/dql-notebook/assets/AiSidePanel-DjB8PWHG.js +6 -0
  10. package/dist/assets/dql-notebook/assets/AnalyticsHome-B7BkvA-R.js +6 -0
  11. package/dist/assets/dql-notebook/assets/AppsView-CUrqtEGC.js +4583 -0
  12. package/dist/assets/dql-notebook/assets/BlockStudio-Bl0aGQJR.js +60 -0
  13. package/dist/assets/dql-notebook/assets/{BusinessArtifactView-CnTbFVGT.js → BusinessArtifactView-C4SZVNW-.js} +1 -1
  14. package/dist/assets/dql-notebook/assets/DbtFirstModelingPage-B0uxitnx.js +22 -0
  15. package/dist/assets/dql-notebook/assets/GitPage-BfVD4tVq.js +7 -0
  16. package/dist/assets/dql-notebook/assets/GlobalAiRail-DUwdy3fB.js +1 -0
  17. package/dist/assets/dql-notebook/assets/GovernedContextPage-D9f26ZFb.js +7 -0
  18. package/dist/assets/dql-notebook/assets/{HelpDocsPage-CL0vbSER.js → HelpDocsPage-BDPNVot1.js} +1 -1
  19. package/dist/assets/dql-notebook/assets/{HomePage-DzAucwBW.js → HomePage-DiOnRhEG.js} +1 -1
  20. package/dist/assets/dql-notebook/assets/LineageDAG-BiUFX2KL.js +1 -0
  21. package/dist/assets/dql-notebook/assets/{LineageDetailView-DdVH-nz6.js → LineageDetailView-CfbSvlPJ.js} +1 -1
  22. package/dist/assets/dql-notebook/assets/{LineageDrawer-BvrVZNKY.js → LineageDrawer-CgTScaGB.js} +1 -1
  23. package/dist/assets/dql-notebook/assets/{LineagePathBreadcrumb-CSut-zvm.js → LineagePathBreadcrumb-D7ZA7k68.js} +3 -3
  24. package/dist/assets/dql-notebook/assets/{MiniLineageGraph-zg_1wW3M.js → MiniLineageGraph-GkD4y17x.js} +1 -1
  25. package/dist/assets/dql-notebook/assets/{NewBlockModal-9cDletl-.js → NewBlockModal-B9TfRjt7.js} +1 -1
  26. package/dist/assets/dql-notebook/assets/{NewNotebookModal-V6de8L4d.js → NewNotebookModal-BbO9NKUl.js} +2 -2
  27. package/dist/assets/dql-notebook/assets/NotebookEditor-CuMpvXR9.js +200 -0
  28. package/dist/assets/dql-notebook/assets/ReadinessPage-BROJ9YBM.js +1 -0
  29. package/dist/assets/dql-notebook/assets/{SetupOnboarding-Bg-MjbC9.js → SetupOnboarding-BCcZlpuQ.js} +2 -2
  30. package/dist/assets/dql-notebook/assets/{TrustBadge-DGuHB8kP.js → TrustBadge-vQQh8d0D.js} +1 -1
  31. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-Dj4AXAhT.js +83 -0
  32. package/dist/assets/dql-notebook/assets/{answer-to-notebook-BDzY4MuQ.js → answer-to-notebook-DuqCcDDl.js} +1 -1
  33. package/dist/assets/dql-notebook/assets/{arrow-left-IjlnAihE.js → arrow-left-CMe1kkOL.js} +1 -1
  34. package/dist/assets/dql-notebook/assets/{arrow-right-BI4cXgOY.js → arrow-right-DvB_DONr.js} +1 -1
  35. package/dist/assets/dql-notebook/assets/{book-open-text-i6xhxu_I.js → book-open-text-CJ3NAvrs.js} +1 -1
  36. package/dist/assets/dql-notebook/assets/{bot-C6DE7Q6m.js → bot-CV8DYRrt.js} +1 -1
  37. package/dist/assets/dql-notebook/assets/{chevron-up-DSEILnDs.js → chevron-up-HxU1l85K.js} +1 -1
  38. package/dist/assets/dql-notebook/assets/{circle-x-BoAorVSm.js → circle-x-BCgtha1W.js} +1 -1
  39. package/dist/assets/dql-notebook/assets/{dagre.esm-CycymVj6.js → dagre.esm-GKp7qoUL.js} +1 -1
  40. package/dist/assets/dql-notebook/assets/{external-link-ZwE5iHsX.js → external-link-C-PXokWV.js} +1 -1
  41. package/dist/assets/dql-notebook/assets/{grip-vertical-Dnp2st8l.js → grip-vertical-B4EHbGXW.js} +1 -1
  42. package/dist/assets/dql-notebook/assets/index-1mIC_XX4.js +634 -0
  43. package/dist/assets/dql-notebook/assets/{link-2-CTKe6Snr.js → link-2-BLx-goet.js} +1 -1
  44. package/dist/assets/dql-notebook/assets/{list-tree-Ced8e_S1.js → list-tree-BRFpEmvV.js} +1 -1
  45. package/dist/assets/dql-notebook/assets/{maximize-2-Cojc6867.js → maximize-2-CCd5uRIZ.js} +1 -1
  46. package/dist/assets/dql-notebook/assets/{minimize-2-CBIAE0XH.js → minimize-2-CDwSCGlO.js} +1 -1
  47. package/dist/assets/dql-notebook/assets/{panel-right-open-po3bWSeL.js → panel-right-open-CunA1xO7.js} +1 -1
  48. package/dist/assets/dql-notebook/assets/{pencil-Cb45c6WU.js → pencil-D_I14Wyk.js} +1 -1
  49. package/dist/assets/dql-notebook/assets/{rotate-ccw-B9v1LTJ0.js → rotate-ccw-DOrfTZk8.js} +1 -1
  50. package/dist/assets/dql-notebook/assets/{semantic-fields-B6ii0an0.js → semantic-fields-AfQvjt5R.js} +1 -1
  51. package/dist/assets/dql-notebook/assets/{star-CO4tfaDq.js → star-DDhv4e8M.js} +1 -1
  52. package/dist/assets/dql-notebook/assets/{triangle-alert-BSdIu2El.js → triangle-alert-2ZXx8wAu.js} +1 -1
  53. package/dist/assets/dql-notebook/assets/usePersistedAgentThreadId-3rzkZrqc.js +18 -0
  54. package/dist/assets/dql-notebook/assets/{user-round-BfrV8U-W.js → user-round-BA074kiQ.js} +1 -1
  55. package/dist/assets/dql-notebook/assets/{wand-sparkles-BgTxZNBc.js → wand-sparkles-CEYHLt9b.js} +1 -1
  56. package/dist/assets/dql-notebook/assets/{workflow--2ycp0yy.js → workflow-CZtyrcR-.js} +1 -1
  57. package/dist/assets/dql-notebook/assets/{wrench-LMCrpa9_.js → wrench-Ong23-wu.js} +1 -1
  58. package/dist/assets/dql-notebook/assets/{x-CeNgQwGm.js → x-CSo1M3tu.js} +1 -1
  59. package/dist/assets/dql-notebook/index.html +1 -1
  60. package/dist/llm/providers/dql-agent-provider.d.ts +4 -3
  61. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  62. package/dist/llm/providers/dql-agent-provider.js +13 -10
  63. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  64. package/dist/local-operation-coordinator.d.ts +59 -0
  65. package/dist/local-operation-coordinator.d.ts.map +1 -0
  66. package/dist/local-operation-coordinator.js +256 -0
  67. package/dist/local-operation-coordinator.js.map +1 -0
  68. package/dist/local-runtime.d.ts +49 -1
  69. package/dist/local-runtime.d.ts.map +1 -1
  70. package/dist/local-runtime.js +1590 -323
  71. package/dist/local-runtime.js.map +1 -1
  72. package/dist/package.json +12 -11
  73. package/dist/project-refresh-coordinator.d.ts +19 -0
  74. package/dist/project-refresh-coordinator.d.ts.map +1 -0
  75. package/dist/project-refresh-coordinator.js +134 -0
  76. package/dist/project-refresh-coordinator.js.map +1 -0
  77. package/dist/project-refresh-worker.d.ts +13 -0
  78. package/dist/project-refresh-worker.d.ts.map +1 -0
  79. package/dist/project-refresh-worker.js +58 -0
  80. package/dist/project-refresh-worker.js.map +1 -0
  81. package/package.json +13 -11
  82. package/dist/assets/dql-notebook/assets/AgentAnswerCard-CpL2kDCV.js +0 -5
  83. package/dist/assets/dql-notebook/assets/AiSidePanel-BCQB9rVF.js +0 -6
  84. package/dist/assets/dql-notebook/assets/AnalyticsHome-Ba4Ve_Gd.js +0 -6
  85. package/dist/assets/dql-notebook/assets/AppsView-CdAT9BOq.js +0 -4466
  86. package/dist/assets/dql-notebook/assets/BlockStudio-Brg4fwn5.js +0 -60
  87. package/dist/assets/dql-notebook/assets/DbtFirstModelingPage-CQe2FUZq.js +0 -22
  88. package/dist/assets/dql-notebook/assets/GitPage-DHyDBChc.js +0 -7
  89. package/dist/assets/dql-notebook/assets/GlobalAiRail-Cys4n_rq.js +0 -1
  90. package/dist/assets/dql-notebook/assets/GovernedContextPage-DyKoDSZ2.js +0 -7
  91. package/dist/assets/dql-notebook/assets/LineageDAG-QHqd_AM5.js +0 -1
  92. package/dist/assets/dql-notebook/assets/NotebookEditor-EZ0pfWVs.js +0 -200
  93. package/dist/assets/dql-notebook/assets/ReadinessPage-BaGvjyfd.js +0 -1
  94. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-BlWAVEwO.js +0 -83
  95. package/dist/assets/dql-notebook/assets/index-BTuliKhK.js +0 -634
  96. package/dist/assets/dql-notebook/assets/usePersistedAgentThreadId-CkVFrrjk.js +0 -18
@@ -0,0 +1,4583 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/UnifiedAgentRunPanel-Dj4AXAhT.js","assets/index-1mIC_XX4.js","assets/react-CRB3T2We.js","assets/index-DKu4CZt3.css","assets/AgentAnswerCard-Cp0eh6zU.js","assets/usePersistedAgentThreadId-3rzkZrqc.js","assets/wrench-Ong23-wu.js","assets/TrustBadge-vQQh8d0D.js","assets/AiBuildResult-CyqTuQe5.js","assets/user-round-BA074kiQ.js","assets/triangle-alert-2ZXx8wAu.js","assets/rotate-ccw-DOrfTZk8.js","assets/x-CSo1M3tu.js","assets/pencil-D_I14Wyk.js","assets/list-tree-BRFpEmvV.js","assets/minimize-2-CDwSCGlO.js","assets/maximize-2-CCd5uRIZ.js","assets/arrow-right-DvB_DONr.js","assets/chevron-up-HxU1l85K.js"])))=>i.map(i=>d[i]);
2
+ import{c as Ye,u as ga,t as We,r as p,a as D,j as t,G as ha,P as Jt,S as De,q as oi,p as pi,au as di,aV as kr,l as ot,T as Sr,h as ci,i as ui,k as ma,aW as xi,a6 as fi,V as gi,a7 as Or,aX as lr,aY as ft,aE as hi,ap as Ue,g as xt,B as zr,d as ba,aZ as va,aS as mi,F as Ar}from"./index-1mIC_XX4.js";import{A as ya,a as gr,b as bi}from"./AiSidePanel-DjB8PWHG.js";import{u as qa,f as vi,C as yi,c as qi,i as wi,T as ji,b as ki,e as Si,S as zi,A as Ai}from"./usePersistedAgentThreadId-3rzkZrqc.js";import{c as Ci,r as wa}from"./semantic-fields-AfQvjt5R.js";import{u as Ii}from"./answer-to-notebook-DuqCcDDl.js";import{W as ja}from"./wand-sparkles-CEYHLt9b.js";import{B as rr}from"./bot-CV8DYRrt.js";import{G as Ni}from"./grip-vertical-B4EHbGXW.js";import{W as Zt}from"./wrench-Ong23-wu.js";import{T as it}from"./triangle-alert-2ZXx8wAu.js";import{M as Ti}from"./maximize-2-CCd5uRIZ.js";import{X as Pi}from"./x-CSo1M3tu.js";import{A as ka}from"./arrow-left-CMe1kkOL.js";import{W as nt}from"./workflow-CZtyrcR-.js";import{P as Sa}from"./pencil-D_I14Wyk.js";import{S as $i}from"./star-DDhv4e8M.js";import{B as za}from"./book-open-text-CJ3NAvrs.js";import"./react-CRB3T2We.js";import"./minimize-2-CDwSCGlO.js";/**
3
+ * @license lucide-react v0.563.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */const Ri=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]],Bi=Ye("calendar-days",Ri);/**
8
+ * @license lucide-react v0.563.0 - ISC
9
+ *
10
+ * This source code is licensed under the ISC license.
11
+ * See the LICENSE file in the root directory of this source tree.
12
+ */const Ei=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Aa=Ye("chart-column",Ei);/**
13
+ * @license lucide-react v0.563.0 - ISC
14
+ *
15
+ * This source code is licensed under the ISC license.
16
+ * See the LICENSE file in the root directory of this source tree.
17
+ */const Li=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],Cr=Ye("chart-line",Li);/**
18
+ * @license lucide-react v0.563.0 - ISC
19
+ *
20
+ * This source code is licensed under the ISC license.
21
+ * See the LICENSE file in the root directory of this source tree.
22
+ */const _i=[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]],Mi=Ye("chart-pie",_i);/**
23
+ * @license lucide-react v0.563.0 - ISC
24
+ *
25
+ * This source code is licensed under the ISC license.
26
+ * See the LICENSE file in the root directory of this source tree.
27
+ */const Oi=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],Wi=Ye("map-pin",Oi);/**
28
+ * @license lucide-react v0.563.0 - ISC
29
+ *
30
+ * This source code is licensed under the ISC license.
31
+ * See the LICENSE file in the root directory of this source tree.
32
+ */const Fi=[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]],Vi=Ye("share-2",Fi);/**
33
+ * @license lucide-react v0.563.0 - ISC
34
+ *
35
+ * This source code is licensed under the ISC license.
36
+ * See the LICENSE file in the root directory of this source tree.
37
+ */const Hi=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Qi=Ye("sliders-horizontal",Hi);/**
38
+ * @license lucide-react v0.563.0 - ISC
39
+ *
40
+ * This source code is licensed under the ISC license.
41
+ * See the LICENSE file in the root directory of this source tree.
42
+ */const Ki=[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]],Gi=Ye("table-2",Ki);/**
43
+ * @license lucide-react v0.563.0 - ISC
44
+ *
45
+ * This source code is licensed under the ISC license.
46
+ * See the LICENSE file in the root directory of this source tree.
47
+ */const Yi=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Xi=Ye("user",Yi);/**
48
+ * @license lucide-react v0.563.0 - ISC
49
+ *
50
+ * This source code is licensed under the ISC license.
51
+ * See the LICENSE file in the root directory of this source tree.
52
+ */const Ji=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],Zi=Ye("users",Ji),Di=new Set(["bar","line","area","pie","donut","scatter","heatmap","funnel","waterfall","histogram","gauge","stacked-bar","grouped-bar","sankey","kpi","table"]);function Ui(e){const r=String(e??"table").toLowerCase().replace(/_/g,"-");return r==="single-value"?"kpi":Di.has(r)?r:"table"}function Ir(e,r){const a=e.viz.options??{},i=a,n=typeof a.valueField=="string"?a.valueField:typeof a.field=="string"?a.field:void 0;return{...r??{},...i,chart:Ui(i.chart??e.viz.type??(r==null?void 0:r.chart)),y:i.y??n??(r==null?void 0:r.y),title:i.title??(r==null?void 0:r.title)??e.title,colorPalette:i.colorPalette??(r==null?void 0:r.colorPalette)??"corporate"}}function en(e,r){if(!r||e.rows.length<=1||!e.columns.includes(r))return e;const a=e.rows.map(n=>n[r]).filter(n=>typeof n=="number"||typeof n=="string"&&n.trim()!=="").map(Number).filter(Number.isFinite);if(a.length===0)return e;const i=Number(a.reduce((n,l)=>n+l,0).toPrecision(15));return{...e,columns:[r],rows:[{[r]:i}],rowCount:1}}const tn=p.lazy(()=>kr(()=>import("./UnifiedAgentRunPanel-Dj4AXAhT.js").then(e=>e.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])).then(e=>({default:e.UnifiedAgentRunPanel}))),rn="clamp(320px, calc(100vh - 220px), 760px)",Nr=[{value:"table",label:"Table"},...yi];function an(e,r){if(!Array.isArray(e)||e.length===0)return;const a=Array.isArray(r)&&r.length>0?r.slice(0,8):Object.keys(e[0]??{}).slice(0,8);return e.slice(0,5).map(i=>Object.fromEntries(a.map(n=>[n,i[n]])))}const Ca=[{id:"auto",label:"Auto fit",description:"Choose a practical size from the tile content"},{id:"compact",label:"Compact",description:"Small KPI or short summary"},{id:"standard",label:"Standard",description:"Default chart or table card"},{id:"wide",label:"Wide",description:"Full-row trend or comparison"},{id:"tall",label:"Tall",description:"More vertical room for tables and dense charts"},{id:"full",label:"Full page",description:"Large focused view across the page"}];function nn({appId:e,dashboard:r,variables:a,editable:i=!1,embeddedHeader:n=!1,onDashboardChanged:l,selectedBlockId:s,onBlockFocus:o,onAskBlock:d,onOpenLineageNode:c,copilotOpen:h,onCopilotChange:f,onRunChange:x}){var rt;const{state:y}=ga(),T=We[y.themeMode],[z,m]=p.useState(null),[I,A]=p.useState(null),W=p.useRef(null),[N,b]=p.useState(!1),[E,M]=p.useState(null),[F,O]=p.useState(!1),be=qa(`app:${e}:${r.id}`),[ie,K]=p.useState(!1),[U,L]=p.useState([]),[V,C]=p.useState(""),[he,qe]=p.useState(!1),[H,ne]=p.useState(null),[we,Ne]=p.useState(!1),[me,te]=p.useState(null),[re,Q]=p.useState(null),[ce,Te]=p.useState(null),[je,Z]=p.useState(!1),[j,P]=p.useState(!1),[R,G]=p.useState(null),[ee,fe]=p.useState(""),[ge,ve]=p.useState(null),J=p.useRef(null),[le,se]=p.useState(!1),w=r.layout.cols,de=r.layout.rowHeight,Ae=Ii(),Pe=p.useMemo(()=>JSON.stringify(a??{}),[a]),oe=p.useMemo(()=>JSON.parse(Pe),[Pe]),ze=p.useMemo(()=>{const v=new Map;for(const k of(z==null?void 0:z.tiles)??[])v.set(k.tileId,k);return v},[z]),pe=me??r.layout.items,B=p.useMemo(()=>({...r,layout:{...r.layout,items:pe}}),[r,pe]),Y=p.useMemo(()=>i?pe:r.layout.items.filter(v=>!Nn(v)),[r.layout.items,i,pe]),ke=p.useMemo(()=>i?Y:Tn(Y,ze,w),[Y,w,i,ze]),g=r.layout.items.length-Y.length,ue=Y.length-ke.length,ye=p.useMemo(()=>!i&&!r.story&&r.sections&&r.sections.length>0?[...r.sections].sort((v,k)=>v.order-k.order):null,[r.sections,r.story,i]),$e=p.useMemo(()=>ye?r.layout.items:null,[r.layout.items,ye]),tt=p.useMemo(()=>i||ye?null:_n(ke,ze,oe),[i,oe,ye,ze,ke]);p.useEffect(()=>{te(null),Q(null)},[r.id]),p.useEffect(()=>{let v=!1;return b(!0),M(null),D.runDashboard(e,r.id,oe).then(k=>{v||(m(k),A((k==null?void 0:k.story)??null),W.current=(k==null?void 0:k.runId)??null,x==null||x(k),k||M("Dashboard run failed."),k!=null&&k.runId&&D.getDashboardStory(e,r.id,k.runId).then(q=>{v||!q||W.current!==q.runId||q.snapshotId!==k.snapshotId||q.filterFingerprint!==k.filterFingerprint||q.resultFingerprint!==k.resultFingerprint||q.personaFingerprint!==k.personaFingerprint||A(q.story)}))}).catch(k=>{v||(M(k instanceof Error?k.message:String(k)),x==null||x(null))}).finally(()=>{v||b(!1)}),()=>{v=!0}},[e,r.id,r.layout.items.length,x,oe,(rt=y.activePersona)==null?void 0:rt.userId]),p.useEffect(()=>{const v=k=>{const q=k.detail;(q==null?void 0:q.appId)!==e||q.dashboardId!==r.id||(D.getDashboard(e,r.id).then(_=>{_!=null&&_.dashboard&&(l==null||l(_.dashboard))}),D.runDashboard(e,r.id,oe).then(_=>{_&&(m(_),A(_.story),W.current=_.runId,x==null||x(_))}))};return window.addEventListener("dql-app-dashboard-updated",v),()=>window.removeEventListener("dql-app-dashboard-updated",v)},[e,r.id,l,x,oe]),p.useEffect(()=>{const v=()=>se(window.innerWidth<760);return v(),window.addEventListener("resize",v),()=>window.removeEventListener("resize",v)},[]);const pt=p.useMemo(()=>{const v=r.layout.items.map(k=>{var xe,Ce,Ke,Re,Ve;const q=ze.get(k.i),_=k.block?"blockId"in k.block?k.block.blockId:k.block.ref:k.semantic?`semantic:${k.semantic.id}`:k.draftAnalysis?`draft:${k.draftAnalysis.ref}`:k.aiPin?`aiPin:${k.aiPin.id}`:"text";return{title:k.title,blockRef:_,viz:k.viz.type,certificationStatus:q==null?void 0:q.certificationStatus,status:q==null?void 0:q.status,rowCount:(xe=q==null?void 0:q.result)==null?void 0:xe.rowCount,columns:(Ke=(Ce=q==null?void 0:q.result)==null?void 0:Ce.columns)==null?void 0:Ke.slice(0,8),sampleRows:an((Re=q==null?void 0:q.result)==null?void 0:Re.rows,(Ve=q==null?void 0:q.result)==null?void 0:Ve.columns)}});return JSON.stringify({scope:"dashboard",appId:e,dashboardId:r.id,title:r.metadata.title,description:r.metadata.description,domain:r.metadata.domain,filters:r.filters,variables:oe,run:z?{runId:z.runId,snapshotId:z.snapshotId,filterFingerprint:z.filterFingerprint,resultFingerprint:z.resultFingerprint,personaFingerprint:z.personaFingerprint,story:z.story,facts:z.facts}:null,tiles:v},null,2)},[e,r,z,oe,ze]),Oe=p.useCallback(async(v,k="Changes saved")=>{Ne(!0),M(null);const q={...r,layout:{...r.layout,items:v}};try{const _=await D.patchDashboardLayout(e,r.id,q.layout);_.ok?(te(null),Q(k),l==null||l(_.dashboard)):M(_.error)}finally{Ne(!1)}},[e,r,l]),Fe=p.useCallback(async v=>{if(me){te(v),Q("Layout preview ready");return}await Oe(v)},[me,Oe]),gt=p.useCallback(async()=>{K(!0);const v=await D.getAppEditorCatalog(e);L((v==null?void 0:v.blocks)??[])},[e]),Xe=p.useCallback(async v=>{const k=Et(v.chartType),q=await D.recommendDashboardTile(e,r.id,{blockRef:v.name,appAudience:r.metadata.audience,prompt:`${r.metadata.title} ${v.name} ${v.description}`,defaultVisualization:k}),_=Br(k,w),xe={i:pr(B,v.name),...or(B,_),block:{blockId:v.name},viz:{type:k},...q.ok?{display:q.display,filterBindings:"filterBindings"in q?q.filterBindings:void 0,parameterBindings:"parameterBindings"in q?q.parameterBindings:void 0,sourceEvidence:"sourceEvidence"in q?q.sourceEvidence:void 0,trustState:"trustState"in q?q.trustState:q.display.trustState,reviewStatus:"reviewStatus"in q?q.reviewStatus:q.display.reviewStatus}:{},title:v.name};await Fe([...pe,xe]),K(!1)},[e,w,r.id,r.metadata.audience,r.metadata.title,Fe,B,pe]),ht=p.useCallback(async()=>{G("text"),fe("")},[]),mt=p.useCallback(async()=>{G("heading"),fe("")},[]),Lt=p.useCallback(async()=>{var k;const v=ee.trim();if(!(!v||!R)){if(R==="heading")await Fe([...pe,{i:pr(B,"section"),...or(B,He("wide",w,"heading")),text:{markdown:v},viz:{type:"heading"},display:Xr("heading",v),title:v}]);else{const q=((k=v.split(/\r?\n/)[0])==null?void 0:k.slice(0,60))||"Summary";await Fe([...pe,{i:pr(B,"text"),...or(B,He("standard",w,"text")),text:{markdown:v},viz:{type:"text"},display:Xr("text",q),title:q}])}G(null),fe("")}},[w,Fe,R,ee,B,pe]),_t=p.useCallback(async(v,k)=>{const q=k===null?pe.filter(_=>_.i!==v):pe.map(_=>_.i===v?{..._,...k}:_);await Fe(Ut(q,w))},[w,Fe,pe]),bt=p.useCallback(async(v,k)=>{const q=J.current,_=pe.find(Ct=>Ct.i===v);if(!q||!_)return;const xe=q.getBoundingClientRect(),Ce=12,Re=(xe.width-Ce*(w-1))/w+Ce,Ve=de+Ce,ae=Math.round((k.clientX-xe.left)/Re),Je=Math.round((k.clientY-xe.top)/Ve),ir={..._,x:er(ae,0,Math.max(0,w-_.w)),y:Math.max(0,Je)};ve(null);const nr=Pl(pe,ir,w);await Fe(Ut(nr,w))},[w,de,Fe,pe]),jt=p.useCallback((v,k)=>{const q=J.current,_=pe.find(ae=>ae.i===v);if(!q||!_)return;const xe=q.getBoundingClientRect(),Ce=12,Ke=(xe.width-Ce*(w-1))/w,Re=Math.round((k.clientX-xe.left)/(Ke+Ce)),Ve=Math.round((k.clientY-xe.top)/(de+Ce));ve({tileId:v,x:er(Re,0,Math.max(0,w-_.w)),y:Math.max(0,Ve),w:_.w,h:_.h})},[w,de,pe]),kt=p.useCallback(()=>ve(null),[]),Mt=p.useCallback(()=>{pe.length!==0&&(te(Tl(pe,w)),Q("Layout preview ready"))},[w,pe]),St=p.useCallback(async()=>{me&&await Oe(me,"Layout applied")},[me,Oe]),ar=p.useCallback(()=>{te(null),Q("Layout preview cancelled")},[]),zt=p.useCallback(async v=>{Te(v);const k=await D.retryDashboardTile(e,r.id,v,oe);Te(null);const q=k==null?void 0:k.tiles.find(xe=>xe.tileId===v);if(!k||!q){M("This App tile could not be retried.");return}const _=z?{...z,tiles:z.tiles.map(xe=>xe.tileId===v?q:xe)}:k;m(_),A(null),x==null||x(_)},[e,r.id,x,z,oe]),Ot=p.useCallback(async(v,k)=>{const q=k.artifact,_={title:v.title??(q==null?void 0:q.name)??k.title??"App analysis",sql:q==null?void 0:q.sql,result:k.result,chartConfig:Ir(v,k.chartConfig),sourceRunId:z==null?void 0:z.runId,question:`App tile: ${v.title??k.title??v.i}`,executionTarget:q==null?void 0:q.executionTarget,...q!=null&&q.dql?{dqlArtifact:{kind:q.sourceKind==="certified_block"?"certified_block":"sql_block",source:q.dql,name:q.name,sourcePath:q.sourcePath,persistence:q.sourcePath?"saved":"transient",trustState:q.trustState,compiledSql:q.sql}}:{}};await Ae(_)},[Ae,z==null?void 0:z.runId]),At=p.useCallback(async()=>{if(qe(v=>!v),!H){const v=await D.fetchScopedLineage({domain:r.metadata.domain,appId:e,dashboardId:r.id});ne(v)}},[e,r.id,r.metadata.domain,H]),Wt=p.useCallback(()=>{if(c){c(`dashboard:${e}/${r.id}`);return}At()},[e,r.id,At,c]),dt=f?!!h:F,vt=p.useCallback(()=>{if(Z(!1),f){f(!0);return}O(!0)},[f]),Ft=p.useCallback(()=>{if(Z(!1),f){f(!h);return}O(v=>!v)},[h,f]);return t.jsxs("div",{style:{display:"block",minHeight:0},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[(!n||i)&&t.jsxs("div",{style:Jn,children:[t.jsx("div",{style:{flex:1,minWidth:0},children:n?null:t.jsxs(t.Fragment,{children:[t.jsx("h2",{style:{margin:0,fontSize:20,lineHeight:1.18,fontWeight:780},children:r.metadata.title}),r.metadata.description?t.jsx("div",{style:{fontSize:13,opacity:.72,marginTop:4,maxWidth:680,lineHeight:1.4},children:r.metadata.description}):null]})}),i&&r.layout.items.length>0&&t.jsx(Qr,{open:je,onToggle:()=>Z(v=>!v),buttonStyle:Xn,onCertifiedBlock:()=>{Z(!1),gt()},onText:()=>{Z(!1),ht()},onHeading:()=>{Z(!1),mt()},onAi:vt}),i&&r.layout.items.length>1&&!me&&t.jsxs("button",{type:"button",onClick:Mt,disabled:we,style:Ge(!1),title:"Auto-arrange every tile into a clean, gap-free grid",children:[t.jsx(ja,{size:15,strokeWidth:2}),"Auto layout"]}),i&&me?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:()=>void St(),disabled:we,style:Ge(!0),children:we?"Applying…":"Apply layout"}),t.jsx("button",{type:"button",onClick:ar,disabled:we,style:Ge(!1),children:"Cancel"})]}):null,i&&re?t.jsx("span",{role:"status",style:{fontSize:11,opacity:.68},children:re}):null,!n&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",onClick:Ft,style:Ge(dt),children:[t.jsx(rr,{size:14,strokeWidth:2}),dt?"Hide copilot":"AI Copilot"]}),t.jsxs("button",{type:"button",onClick:Wt,style:Ge(!1),title:"Open focused dashboard lineage",children:[t.jsx(ha,{size:14,strokeWidth:2}),"Lineage"]})]})]}),i&&t.jsx("div",{style:rl,children:"Drag tiles, select a block for Copilot context, or use the tile controls for sizing and chart settings."}),!i&&I?t.jsx(pn,{story:I,onResearch:vt,onEvidence:Wt}):tt?t.jsx(on,{story:tt}):null,ke.length===0?t.jsxs("div",{style:{border:"1px dashed var(--border-color, rgba(0,0,0,0.15))",borderRadius:8,padding:36,textAlign:"center",fontSize:13,minHeight:260,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},children:[t.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:6},children:g>0||ue>0?"No stakeholder-ready tiles yet":"Build this dashboard page"}),t.jsx("div",{style:{maxWidth:520,opacity:.68,lineHeight:1.45},children:g>0?"Generated analysis and trust placeholders are hidden from the stakeholder view. Open Customize or Analysis to review them, then add certified blocks or pinned insights.":ue>0?"Static duplicate tiles are hidden from the stakeholder view because a filter-aware certified tile can answer the same question.":"Add certified domain blocks, narrative text, or use the scoped AI drawer and pin an answer into this layout."}),t.jsx("div",{style:{marginTop:18,display:"flex",gap:8,flexWrap:"wrap",justifyContent:"center"},children:t.jsx(Qr,{open:je,onToggle:()=>Z(v=>!v),buttonLabel:"Add tile",buttonStyle:Fa,onCertifiedBlock:()=>{Z(!1),gt()},onText:()=>{Z(!1),ht()},onHeading:()=>{Z(!1),mt()},onAi:vt})})]}):ye?t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:22},children:ye.map(v=>{var Re,Ve;const k=(Re=ye.find(ae=>ae.kind==="appendix"))==null?void 0:Re.id,q=((Ve=ye.find(ae=>ae.kind==="insight"))==null?void 0:Ve.id)??ye[0].id,_=ae=>ae.sectionId&&ye.some(Je=>Je.id===ae.sectionId)?ae.sectionId:(ae.trustState==="review_required"||ae.reviewStatus==="review_required")&&k?k:q,xe=($e??ke).filter(ae=>_(ae)===v.id);if(xe.length===0)return null;const Ce=Math.min(...xe.map(ae=>ae.y)),Ke=v.kind==="appendix";return t.jsxs("section",{"aria-label":v.title,children:[v.kind!=="exec_summary"?t.jsxs("div",{style:{marginBottom:10},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[t.jsx("h3",{style:{margin:0,fontSize:15,fontWeight:800,color:"var(--dql-app-text, #0f172a)"},children:v.title}),Ke?t.jsx("span",{style:{display:"inline-flex",alignItems:"center",gap:4,border:"1px solid rgba(217,119,6,0.4)",color:"#b45309",background:"rgba(217,119,6,0.08)",borderRadius:999,padding:"1px 8px",fontSize:10,fontWeight:800},children:"needs review"}):null]}),v.narrative?t.jsx("p",{style:{margin:"4px 0 0",fontSize:12.5,lineHeight:1.5,color:"var(--dql-app-text-muted, #64748b)",maxWidth:860},children:v.narrative}):null]}):null,t.jsx("div",{style:{display:"grid",gridTemplateColumns:le?"minmax(0, 1fr)":`repeat(${w}, 1fr)`,gridAutoRows:le?"auto":`${de}px`,gap:12,...Ke?{opacity:.96}:{}},children:xe.map(ae=>t.jsx(Wr,{item:{...ae,y:ae.y-Ce},tile:ze.get(ae.i),loading:N,error:E,themeMode:y.themeMode,editable:!1,narrow:le,cols:w,selected:!!(Qe(ae)&&Qe(ae)===s),onFocusBlock:o,onAskBlock:d,onMove:()=>{},onDragMove:()=>{},onDragEnd:()=>{},onPatch:Je=>void _t(ae.i,Je),onRetry:()=>void zt(ae.i),retrying:ce===ae.i,retryDisabled:!!(ce&&ce!==ae.i),onOpenNotebook:Je=>void Ot(ae,Je)},ae.i))})]},v.id)})}):t.jsxs("div",{ref:J,style:{display:"grid",gridTemplateColumns:le?"minmax(0, 1fr)":`repeat(${w}, 1fr)`,gridAutoRows:le?"auto":`${de}px`,gap:12},children:[ge&&!le&&t.jsx("div",{"aria-hidden":"true",style:{gridColumn:`${ge.x+1} / span ${ge.w}`,gridRow:`${ge.y+1} / span ${ge.h}`,border:"2px dashed var(--dql-app-accent, var(--accent, #4f46e5))",background:"var(--dql-app-accent-soft, rgba(79,70,229,0.10))",borderRadius:10,pointerEvents:"none",zIndex:10}}),ke.map(v=>t.jsx(Wr,{item:v,tile:ze.get(v.i),loading:N,error:E,themeMode:y.themeMode,editable:i,narrow:le,cols:w,selected:!!(Qe(v)&&Qe(v)===s),onFocusBlock:o,onAskBlock:d,onMove:k=>void bt(v.i,k),onDragMove:k=>jt(v.i,k),onDragEnd:kt,onPatch:k=>void _t(v.i,k),onRetry:()=>void zt(v.i),retrying:ce===v.i,retryDisabled:!!(ce&&ce!==v.i),onOpenNotebook:k=>void Ot(v,k)},v.i))]}),!i&&z?t.jsx(dn,{run:z,variables:oe}):null]}),he&&!c&&t.jsx("aside",{style:{width:340,minWidth:300,maxWidth:"34vw",border:"1px solid var(--border-color, rgba(0,0,0,0.08))",borderRadius:8,overflow:"auto",alignSelf:"flex-start",height:rn,position:"sticky",top:12,padding:12},children:t.jsx(An,{lineage:H})}),F&&!f&&t.jsx(ya,{t:T,title:"Dashboard AI",subtitle:"Scoped to this App dashboard first",expanded:j,onToggleExpanded:()=>P(v=>!v),onClose:()=>{O(!1),P(!1)},floating:!0,ariaLabel:"Dashboard AI",style:al(j),children:t.jsx(p.Suspense,{fallback:t.jsx("div",{style:{padding:16,fontSize:12,color:T.textSecondary},children:"Loading Dashboard AI…"}),children:t.jsx(tn,{themeMode:y.themeMode,title:"Dashboard AI",scopeHint:"Scoped to this App dashboard first",audience:"stakeholder",workspaceContext:{appId:e,dashboardId:r.id,dashboardContext:pt},initialMode:"auto",threadId:be.threadId,onThreadIdChange:be.onThreadIdChange},`${e}:${r.id}`)})}),ie&&t.jsx(zn,{blocks:U,search:V,onSearch:C,onClose:()=>K(!1),onAdd:v=>void Xe(v)}),R&&t.jsx(Sn,{kind:R,value:ee,onChange:fe,onClose:()=>{G(null),fe("")},onSave:()=>void Lt()})]})}function Wr({item:e,tile:r,loading:a,error:i,themeMode:n,editable:l,narrow:s,cols:o,selected:d,onFocusBlock:c,onAskBlock:h,onMove:f,onDragMove:x,onDragEnd:y,onPatch:T,onRetry:z,retrying:m=!1,retryDisabled:I=!1,onOpenNotebook:A}){var ge,ve;const W=p.useRef(null),[N,b]=p.useState(null),[E,M]=p.useState(!1),[F,O]=p.useState(!1),[be,ie]=p.useState("how"),K=Qe(e),U=!!(!l&&K&&h),L=K?`block:${K}`:e.semantic?`semantic:${e.semantic.id}`:e.draftAnalysis?`draft:${e.draftAnalysis.ref}`:e.aiPin?`aiPin:${e.aiPin.id}`:"text",[V,C]=p.useState(()=>lt(e.viz.type));p.useEffect(()=>C(lt(e.viz.type)),[e.i,e.viz.type]);const he=l?lt(e.viz.type):V,qe=p.useMemo(()=>l||he===lt(e.viz.type)?e:{...e,viz:{...e.viz,type:Dt(he),options:{...e.viz.options??{},chart:he}}},[he,l,e]),H=Et(String(qe.viz.type??"table")),ne=et(e),we=ne==null?void 0:ne.component,Ne=(ne==null?void 0:ne.insightTitle)||e.title||L,me=(r==null?void 0:r.tileType)==="aiPin"?((ge=r.aiPin)==null?void 0:ge.certification)==="certified"?"certified":"review_required":void 0,te=r==null?void 0:r.repair,re=te?"review_required":((ve=r==null?void 0:r.artifact)==null?void 0:ve.trustState)??(ne==null?void 0:ne.trustState)??me??((r==null?void 0:r.certificationStatus)==="certified"?"certified":void 0),Q=!!ne,ce=e.h<=2&&(H==="single_value"||H==="kpi"||H==="gauge"),[Te,je]=p.useState(!1),Z=l&&(Te||d||E),j=Vn(e,ne),P=!!(r!=null&&r.result&&j.length>1),R=!!(r&&r.tileType!=="text"&&(r.artifact||r.result||r.citation||r.repair)),G=!!(U&&(Te||d)),ee=J=>{if(!l){C(J);return}const le=Dt(J),se=e.viz.options??{},w=et(e);T({viz:{...e.viz,type:le,options:{...se,chart:J,...w?{dqlGenUi:{...w,defaultVisualization:le}}:{}}},display:Ia(e,le,w)})},fe=J=>{if(s)return;const le=W.current;if(!le)return;J.preventDefault(),J.stopPropagation();const se=le.getBoundingClientRect(),w={x:J.clientX-se.left,y:J.clientY-se.top},de={x:J.clientX,y:J.clientY},Ae=oe=>{b({x:oe.clientX-de.x,y:oe.clientY-de.y}),x==null||x({clientX:oe.clientX-w.x,clientY:oe.clientY-w.y})},Pe=oe=>{window.removeEventListener("pointermove",Ae),window.removeEventListener("pointerup",Pe),b(null),y==null||y(),f({clientX:oe.clientX-w.x,clientY:oe.clientY-w.y})};window.addEventListener("pointermove",Ae),window.addEventListener("pointerup",Pe,{once:!0})};return t.jsxs("div",{ref:W,onMouseEnter:()=>je(!0),onMouseLeave:()=>je(!1),onClick:()=>{K&&(c==null||c(K))},style:{gridColumn:s?"1 / -1":`${e.x+1} / span ${e.w}`,gridRow:s?"auto":`${e.y+1} / span ${e.h}`,transform:N?`translate(${N.x}px, ${N.y}px) scale(1.02)`:void 0,opacity:N?.92:1,zIndex:N?30:void 0,position:"relative",background:Q?Hn(we):"var(--dql-app-surface, var(--surface, rgba(0,0,0,0.02)))",border:d||N?"1.5px solid var(--dql-app-accent, var(--accent, #4f46e5))":Q?"1px solid var(--dql-app-line-2, var(--border-color, rgba(15,23,42,0.10)))":"1px solid var(--dql-app-line, var(--border-color, rgba(0,0,0,0.08)))",borderRadius:8,padding:ce?12:14,paddingBottom:G?ce?42:46:ce?12:14,display:"flex",flexDirection:"column",gap:ce?4:Q?10:6,minHeight:s?Cl(e,ne):0,overflow:"visible",boxShadow:N?"0 16px 40px rgba(0,0,0,0.22)":d?"0 0 0 3px var(--dql-app-accent-soft, rgba(79,70,229,0.12))":void 0,cursor:N?"grabbing":K?"pointer":void 0,transition:N?void 0:"box-shadow 120ms ease, transform 120ms ease"},children:[G?t.jsxs("button",{type:"button",style:fn,onClick:J=>{J.stopPropagation(),K&&(c==null||c(K)),K&&(h==null||h(K,gn(e.title??K)))},title:"Open app Copilot for this tile",children:[t.jsx(De,{size:11,strokeWidth:2})," Ask AI"]}):null,l&&!s?t.jsx("div",{style:{position:"absolute",top:10,left:10,zIndex:3,opacity:Z?1:0,pointerEvents:Z?"auto":"none",transition:"opacity 120ms ease"},children:t.jsx("button",{type:"button",title:"Drag to move tile",onPointerDown:fe,style:kl,children:t.jsx(Ni,{size:14,strokeWidth:2.2})})}):null,l?t.jsxs("div",{style:{position:"absolute",top:10,right:10,zIndex:4,display:"flex",alignItems:"center",gap:4,opacity:Z?1:0,pointerEvents:Z?"auto":"none",transition:"opacity 120ms ease"},children:[ce?null:t.jsx("span",{style:{fontSize:10,padding:"2px 8px",borderRadius:999,background:"var(--surface-hover, rgba(0,0,0,0.06))",opacity:.85},children:e.viz.type}),t.jsx(bn,{item:e,cols:o,settingsOpen:E,onToggleSettings:()=>M(J=>!J),onPatch:T})]}):null,Q?t.jsx("div",{style:{minHeight:ce?26:42,paddingLeft:Z?30:0,paddingRight:Z?ce?82:134:0,transition:"padding 120ms ease",display:"grid",gap:7},children:t.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,minWidth:0},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{title:Ne,style:{fontSize:ce?12:13,fontWeight:780,lineHeight:1.25,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},children:Ne}),t.jsxs("div",{style:cl,children:[re?t.jsx(Rt,{trust:re}):null,te?t.jsxs("span",{style:_e,title:te.message,children:[t.jsx(Zt,{size:9})," ",te.status==="repaired"?`${te.mode==="ai"?"AI ":""}repaired · review`:"repair blocked"]}):null,ne?t.jsx("span",{style:_e,children:Pa(ne)}):null,ne!=null&&ne.layoutIntent?t.jsx("span",{style:_e,children:Ee(String(ne.layoutIntent))}):null]})]}),P?t.jsx(Fr,{value:he,options:j,onChange:ee}):null]})}):t.jsxs("div",{style:{minHeight:ce?22:26,paddingLeft:Z?30:0,paddingRight:Z?ce?82:134:0,transition:"padding 120ms ease"},children:[t.jsxs("div",{style:{fontSize:ce?12:13,fontWeight:720,lineHeight:1.25,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.jsx("span",{children:e.title??L}),P?t.jsx("span",{style:{float:"right",marginLeft:8},children:t.jsx(Fr,{value:he,options:j,onChange:ee})}):null]}),me||te?t.jsxs("div",{style:{marginTop:5,display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[me?t.jsx(Rt,{trust:me}):null,me?t.jsx("span",{style:_e,children:"AI generated"}):null,te?t.jsxs("span",{style:_e,title:te.message,children:[t.jsx(Zt,{size:9})," ",te.status==="repaired"?`${te.mode==="ai"?"AI ":""}repaired · review`:"repair blocked"]}):null]}):ce?null:t.jsx("div",{style:{marginTop:5,fontSize:10.5,opacity:.58,fontFamily:"var(--font-mono, monospace)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:L})]}),l&&E?t.jsx(yn,{item:e,tile:r,cols:o,onPatch:T}):null,t.jsx("div",{style:{flex:1,minHeight:0,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",marginTop:ce?0:2,fontSize:12,opacity:(r==null?void 0:r.status)==="ok"?1:.7,fontStyle:(r==null?void 0:r.status)==="ok"?"normal":"italic"},children:t.jsx(hn,{item:qe,tile:r,loading:a,error:i,themeMode:n,genUi:ne,onRetry:z,retrying:m,retryDisabled:I})}),l?null:t.jsx(ln,{tile:r,themeMode:n}),!l&&R?t.jsx("div",{style:{display:"flex",justifyContent:"flex-end",gap:6,paddingTop:2},children:t.jsx("button",{type:"button",onClick:J=>{J.stopPropagation(),O(le=>!le)},style:Ra,children:F?"Hide details":"How it works"})}):null,!l&&F&&r?t.jsx(mn,{item:e,tile:r,tab:be,onTab:ie,onOpenNotebook:A,onClose:()=>O(!1)}):null]})}function ln({tile:e,themeMode:r}){const a=We[r],i=p.useMemo(()=>sn(e),[e]);return i?t.jsxs("div",{style:{padding:"4px 10px 8px",fontSize:11.5,color:a.textMuted,lineHeight:1.4,display:"flex",gap:5,alignItems:"baseline"},children:[t.jsx("span",{style:{color:a.accent},children:"•"}),t.jsx("span",{children:i})]}):null}function sn(e){var T,z;const r=(T=e==null?void 0:e.result)==null?void 0:T.rows,a=(z=e==null?void 0:e.result)==null?void 0:z.columns;if(!Array.isArray(r)||r.length===0||!Array.isArray(a)||a.length===0)return null;const i=r[0],n=m=>{if(typeof m=="number"&&Number.isFinite(m))return m;if(typeof m=="string"){const I=Number(m.replace(/[$,%\s]/g,""));return Number.isFinite(I)&&m.trim()?I:void 0}},l=a.find(m=>n(i==null?void 0:i[m])!==void 0),s=a.find(m=>m!==l&&typeof(i==null?void 0:i[m])=="string");if(!l)return null;const o=r.map(m=>m[l]),d=s?r.map(m=>m[s]):[],c=Ee(l);if(r.length===1){const m=n(r[0][l]);return m!==void 0?`${c}: ${Me(l,m,o,{compact:!0})}.`:null}const h=r.map(m=>({label:s?Me(s,m[s],d):"top",value:n(m[l])??0})).sort((m,I)=>I.value-m.value),f=h.reduce((m,I)=>m+I.value,0),x=h[0];if(!x)return null;const y=Me(l,x.value,o,{compact:!0});return f>0?`${x.label} leads ${c} at ${y} (${Math.round(x.value/f*100)}%).`:`${x.label} leads ${c} at ${y}.`}function Fr({value:e,options:r,onChange:a}){return t.jsx("div",{style:xl,"aria-label":"Visualization",children:r.map(i=>t.jsx("button",{type:"button",title:i.label,onClick:n=>{n.stopPropagation(),a(i.value)},style:fl(e===i.value),children:Qn(i.value)},i.value))})}function Rt({trust:e}){const r=e==="certified",a=r?"Certified":e==="review_required"?"Review required":"Draft ready";return t.jsxs("span",{style:ul(r),children:[r?t.jsx(ot,{size:10,strokeWidth:2.4}):t.jsx(it,{size:10,strokeWidth:2.4}),a]})}function on({story:e}){return t.jsxs("section",{style:Ba,"aria-label":"Current dashboard story",children:[t.jsxs("div",{style:Ea,children:[t.jsx("div",{style:La,children:t.jsx(De,{size:15,strokeWidth:2.2})}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:_a,children:"Story from current results"}),t.jsx("h3",{style:Ma,children:e.title})]}),e.trust?t.jsx(Rt,{trust:e.trust}):null]}),t.jsx("p",{style:Oa,children:e.summary}),t.jsxs("div",{style:Rr,children:[t.jsx("span",{style:Wa,children:e.sourceTitle}),e.filters.map(r=>t.jsxs("span",{style:wt,children:[r.label,": ",r.value]},`${r.label}:${r.value}`)),e.chips.map(r=>t.jsx("span",{style:wt,children:r},r))]})]})}function pn({story:e,onEvidence:r,onResearch:a}){return t.jsxs("section",{style:{...Ba,padding:"20px 22px",marginBottom:16},"aria-label":"Business Story",children:[t.jsxs("div",{style:Ea,children:[t.jsx("div",{style:La,children:t.jsx(De,{size:15,strokeWidth:2.2})}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:_a,children:"Business Story · current filters"}),t.jsx("h2",{style:{...Ma,fontSize:19},children:e.headline})]}),t.jsx(Rt,{trust:e.trustState})]}),t.jsxs("div",{style:{display:"grid",gap:10,marginTop:12,maxWidth:920},children:[e.paragraphs.slice(0,2).map((i,n)=>t.jsx("p",{style:{...Oa,margin:0,fontSize:14,lineHeight:1.65},children:Vr(i)},n)),e.implication?t.jsxs("p",{style:{margin:0,fontSize:13,lineHeight:1.55,fontWeight:650},children:["What this means: ",Vr(e.implication)]}):null]}),t.jsxs("div",{style:{...Rr,marginTop:14},children:[t.jsx("span",{style:Wa,children:e.generatedBy==="ai"?"AI wording · verified facts":"Verified result summary"}),t.jsxs("span",{style:wt,children:[e.evidenceRefs.length," evidence source",e.evidenceRefs.length===1?"":"s"]}),e.caveat?t.jsx("span",{style:wt,children:e.caveat}):null,t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:r,style:ia,children:"View evidence"}),t.jsx("button",{type:"button",onClick:a,style:ia,children:"Research deeper"})]})]})}function dn({run:e,variables:r}){const a=e.tiles.filter(n=>n.status!=="ok"),i=Object.entries(r).filter(([,n])=>n!=null&&n!=="");return t.jsxs("details",{style:cn,"aria-label":"Evidence and review appendix",children:[t.jsxs("summary",{style:un,children:["Evidence & review appendix",t.jsxs("span",{style:{opacity:.62,fontWeight:600},children:[e.story.evidenceRefs.length," sources · ",a.length?`${a.length} issue${a.length===1?"":"s"}`:"all visible sources ran"]})]}),t.jsxs("div",{style:{display:"grid",gap:12,padding:"0 16px 16px"},children:[t.jsxs("div",{style:xn,children:[t.jsxs("div",{children:[t.jsx("strong",{children:"Run"}),t.jsx("br",{}),t.jsx("span",{children:e.runId})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"Snapshot"}),t.jsx("br",{}),t.jsx("span",{children:e.snapshotId})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"Trust"}),t.jsx("br",{}),t.jsx("span",{children:e.story.trustState})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"Filters"}),t.jsx("br",{}),t.jsx("span",{children:i.length?i.map(([n,l])=>`${n}: ${String(l)}`).join(" · "):"Current unfiltered scope"})]})]}),t.jsxs("div",{children:[t.jsx("strong",{style:{fontSize:12},children:"Evidence used by the story"}),t.jsx("div",{style:{...Rr,marginTop:7},children:e.story.evidenceRefs.map(n=>t.jsx("span",{style:wt,children:n},n))})]}),a.length?t.jsxs("div",{children:[t.jsx("strong",{style:{fontSize:12},children:"Items requiring review"}),t.jsx("ul",{style:{margin:"7px 0 0",paddingLeft:18,fontSize:12,lineHeight:1.55},children:a.map(n=>t.jsxs("li",{children:[n.title??n.tileId,": ",n.error??n.status]},n.tileId))})]}):null]})]})}function Vr(e){return e.split(/(\*\*[^*]+\*\*)/g).filter(Boolean).map((r,a)=>r.startsWith("**")&&r.endsWith("**")?t.jsx("strong",{children:r.slice(2,-2)},a):r)}const cn={marginTop:16,border:"1px solid var(--dql-app-line, var(--border-color, rgba(15,23,42,0.10)))",borderRadius:8,background:"var(--dql-app-surface, var(--surface, rgba(0,0,0,0.02)))",color:"var(--dql-app-text, var(--text-primary, #0f172a))"},un={cursor:"pointer",padding:"12px 16px",fontSize:12.5,fontWeight:760,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},xn={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(170px, 1fr))",gap:10,fontSize:11.5,lineHeight:1.45,color:"var(--dql-app-text-muted, var(--text-secondary, #64748b))"},fn={position:"absolute",bottom:10,right:10,zIndex:5,display:"inline-flex",alignItems:"center",gap:4,padding:"3px 8px",borderRadius:999,fontSize:10.5,fontWeight:700,color:"var(--dql-app-accent, var(--accent, #4f46e5))",background:"var(--dql-app-accent-soft, rgba(79,70,229,0.12))",border:"1px solid var(--dql-app-accent, rgba(79,70,229,0.4))",cursor:"pointer",lineHeight:1.2,fontFamily:"inherit"};function gn(e){return`/ask Explain ${e} for a stakeholder. Start with the business meaning, current result, active filters, caveats, and recommended next action.`}function hn({item:e,tile:r,loading:a,error:i,themeMode:n,genUi:l,onRetry:s,retrying:o,retryDisabled:d}){var x,y,T,z,m;if(a&&!r)return t.jsx("span",{children:"Loading data..."});if((r==null?void 0:r.tileType)==="text")return l?t.jsx(qn,{title:e.title??l.insightTitle??"Generated section",markdown:((x=r.text)==null?void 0:x.markdown)??"",genUi:l,themeMode:n}):t.jsx(jn,{markdown:((y=r.text)==null?void 0:y.markdown)??"",variant:((T=r.viz)==null?void 0:T.type)==="heading"?"heading":"text",themeMode:n});if(i&&!r)return t.jsx("span",{children:i});if(!r)return t.jsx("span",{children:"No run result."});if(r.status==="unauthorized")return t.jsx("span",{children:"Not authorized."});if(r.status==="unresolved")return t.jsx("span",{children:r.error??"Block reference unresolved."});if(r.status==="error")return t.jsxs("div",{style:{display:"grid",gap:8,justifyItems:"center",textAlign:"center",padding:8},children:[t.jsx("span",{children:r.error??"Tile failed."}),((z=r.repair)==null?void 0:z.status)==="failed"?t.jsx("small",{children:r.repair.message}):null,s?t.jsxs("button",{type:"button",disabled:o||d,onClick:I=>{I.stopPropagation(),s()},style:Zn,children:[t.jsx(Zt,{size:12})," ",o?"Fixing…":"Fix and retry"]}):null]});if(!r.result)return r.tileType==="aiPin"&&r.aiPin?t.jsx(Kr,{pin:r.aiPin,themeMode:n}):t.jsx("span",{children:"No result."});const c=Ir(e,r.chartConfig),h=String(c.chart??((m=r.viz)==null?void 0:m.type)??"").toLowerCase();let f;if(h==="table"||e.viz.type==="table"||e.viz.type==="pivot")r.tileType!=="aiPin"&&((l==null?void 0:l.component)==="EvidenceTable"||(l==null?void 0:l.component)==="PivotTable")?f=t.jsx(wn,{result:r.result,genUi:l,themeMode:n}):f=t.jsx("div",{style:{width:"100%",alignSelf:"stretch"},children:t.jsx(ji,{result:r.result,themeMode:n})});else{const I=h==="kpi"?en(r.result,c.y):r.result;f=t.jsx("div",{style:{width:"100%",alignSelf:"stretch"},children:t.jsx(ki,{result:I,themeMode:n,chartConfig:c})})}return r.tileType==="aiPin"&&r.aiPin?t.jsx(Kr,{pin:r.aiPin,themeMode:n,dataView:f}):f}function mn({item:e,tile:r,tab:a,onTab:i,onOpenNotebook:n,onClose:l}){var c,h,f;const s=r.artifact,o=!!(r.result&&(s!=null&&s.dql||s!=null&&s.sql)),d=(s==null?void 0:s.sourceKind)==="certified_block"?"Certified block":(s==null?void 0:s.sourceKind)==="semantic_query"?"Governed semantic query":(s==null?void 0:s.sourceKind)==="draft_analysis"?"App analysis":(s==null?void 0:s.sourceKind)==="ai_pin"?"Saved AI insight":r.tileType??"App tile";return t.jsx("div",{style:Dn,role:"presentation",onClick:l,children:t.jsxs("section",{role:"dialog","aria-modal":"true","aria-label":`How ${e.title??r.title??e.i} works`,style:Un,onClick:x=>x.stopPropagation(),children:[t.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:12},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:{fontSize:16,fontWeight:800},children:e.title??r.title??(s==null?void 0:s.name)??"App tile"}),t.jsxs("div",{style:{marginTop:4,fontSize:12,color:"var(--text-secondary)"},children:[d," · ",(s==null?void 0:s.trustState)==="certified"&&!r.repair?"Certified":"Review required"]})]}),t.jsx("button",{type:"button",onClick:l,"aria-label":"Close details",style:Yt,children:t.jsx(Pi,{size:14})})]}),t.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap",borderBottom:"1px solid var(--border-subtle)",paddingBottom:10},children:["how","dql","sql"].map(x=>t.jsx("button",{type:"button",onClick:()=>i(x),style:el(a===x),children:x==="how"?"How it works":x.toUpperCase()},x))}),t.jsx("div",{style:{minHeight:180,maxHeight:"56vh",overflow:"auto"},children:a==="how"?t.jsxs("div",{style:{display:"grid",gap:12,fontSize:12.5,lineHeight:1.5},children:[t.jsx(It,{label:"Source",value:(s==null?void 0:s.sourcePath)??((c=r.citation)==null?void 0:c.path)??((h=r.citation)==null?void 0:h.name)??d}),t.jsx(It,{label:"Result",value:r.result?`${r.result.rowCount} rows · ${r.result.columns.length} columns`:r.status}),(f=s==null?void 0:s.explanation)!=null&&f.length?t.jsxs("div",{children:[t.jsx("b",{children:"Execution"}),t.jsx("ul",{style:{margin:"6px 0 0",paddingLeft:18},children:s.explanation.map(x=>t.jsx("li",{children:x},x))})]}):null,r.filters?t.jsx(It,{label:"Filters",value:`${r.filters.applied.map(x=>x.filter).join(", ")||"None applied"}${r.filters.skipped.length?` · ${r.filters.skipped.length} skipped`:""}`}):null,r.invocation?t.jsx(It,{label:"Parameters",value:r.invocation.resolvedParameters.map(x=>`${x.name} (${x.source})`).join(", ")||"None"}):null,r.repair?t.jsx(It,{label:"Repair",value:r.repair.message}):null,t.jsx("div",{style:{padding:10,borderRadius:8,background:"var(--bg-2)",color:"var(--text-secondary)"},children:"Parameter values are intentionally omitted here. Open the editable Notebook cell to inspect or change the full execution contract."})]}):t.jsx("pre",{style:tl,children:a==="dql"?(s==null?void 0:s.dql)??"This tile does not expose DQL source. Its governed semantic intent is composed into SQL at runtime.":(s==null?void 0:s.sql)??"Executed SQL is not available for this saved result."})}),t.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,borderTop:"1px solid var(--border-subtle)",paddingTop:10},children:[t.jsx("button",{type:"button",onClick:l,style:Ge(!1),children:"Close"}),o?t.jsx("button",{type:"button",onClick:()=>n==null?void 0:n(r),style:Ge(!0),children:"Open in Notebook"}):null]})]})})}function It({label:e,value:r}){return t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"110px minmax(0, 1fr)",gap:12},children:[t.jsx("b",{children:e}),t.jsx("span",{style:{minWidth:0,overflowWrap:"anywhere",color:"var(--text-secondary)"},children:r})]})}function bn({item:e,cols:r,settingsOpen:a,onToggleSettings:i,onPatch:n}){const[l,s]=p.useState(!1),o=d=>{s(!1),n(Ha(e,r,d))};return t.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center",flexWrap:"wrap",justifyContent:"flex-end"},children:[t.jsxs("div",{style:{position:"relative"},children:[t.jsx("button",{type:"button",title:"Choose tile size",onClick:()=>s(d=>!d),style:Yt,children:t.jsx(Ti,{size:13,strokeWidth:2})}),l?t.jsx(vn,{onPick:o,onClose:()=>s(!1)}):null]}),t.jsx("button",{type:"button",title:"Chart and field settings",onClick:i,style:Yt,children:t.jsx(Qi,{size:13,strokeWidth:2,color:a?"var(--accent, #4f46e5)":void 0})}),t.jsx("button",{type:"button",title:"Remove tile",onClick:()=>n(null),style:Yt,children:t.jsx(Sr,{size:13,strokeWidth:2})})]})}function vn({onPick:e,onClose:r}){return t.jsx("div",{style:Sl,onMouseLeave:r,children:Ca.map(a=>t.jsxs("button",{type:"button",onClick:()=>e(a.id),style:zl,children:[t.jsx("span",{style:{fontSize:12,fontWeight:750},children:a.label}),t.jsx("span",{style:{fontSize:11,opacity:.66},children:a.description})]},a.id))})}function yn({item:e,tile:r,cols:a,onPatch:i}){var N;const n=r==null?void 0:r.result,l=Ir(e,r==null?void 0:r.chartConfig),s=lt(l.chart),o=et(e),[d,c]=p.useState(!1),[h,f]=p.useState(null),[x,y]=p.useState(null),T=p.useMemo(()=>Ci(n),[n]),z=p.useMemo(()=>{const b=new Map;if(!n)return b;const E=new Set(T.metrics),M=new Set(T.dimensions);for(const F of n.columns)E.has(F)?b.set(F,"measure"):M.has(F)?b.set(F,"dimension"):b.set(F,qi(wi(F,n.rows)));return b},[n,T]),m=(n==null?void 0:n.columns.filter(b=>z.get(b)==="measure"))??[],I=(n==null?void 0:n.columns.filter(b=>z.get(b)!=="measure"))??[],A=b=>{const E=Yr({...l,...b}),M=Dt(E.chart),F=et(e),O={...E};F&&(O.dqlGenUi={...F,defaultVisualization:M}),i({title:E.title||e.title,viz:{...e.viz,type:M,options:O},display:Ia(e,M,F)})},W=async()=>{c(!0),y(null),f(null);const b=Qe(e)??e.title,E=await D.recommendVisualization({...b?{blockRef:b}:{},resultSchema:n?{columns:n.columns}:void 0,rowSample:n==null?void 0:n.rows.slice(0,5),prompt:[e.title,o==null?void 0:o.rationale].filter(Boolean).join(" "),allowedVisualizations:o==null?void 0:o.allowedVisualizations});if(c(!1),!E.ok){y(E.error);return}const M=lt(E.display.defaultVisualization),F=Dt(M),O=E.display.fieldHints??{},be=Yr({...l,chart:M,title:l.title??e.title,x:O.x??O.label??l.x,y:O.y??O.value??l.y,color:O.color??l.color});i({title:be.title||e.title,viz:{...e.viz,type:F,options:{...be}},display:E.display});const ie=E.evidence.map(U=>U.source).slice(0,3).join(", "),K=E.warnings[0];f(K?`${E.display.component}: ${K}`:`${E.display.component}${ie?` from ${ie}`:""}`)};return t.jsxs("div",{style:nl,children:[t.jsxs("div",{style:{display:"grid",gap:6},children:[t.jsx("div",{style:{fontSize:10,fontWeight:800,textTransform:"uppercase",opacity:.58},children:"Tile size"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:Ca.map(b=>t.jsx("button",{type:"button",title:b.description,onClick:()=>i(Ha(e,a,b.id)),style:Al(Il(e,a,b.id)),children:b.label},b.id))})]}),t.jsxs("div",{style:sl,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,justifyContent:"space-between"},children:[t.jsxs("div",{style:{minWidth:0},children:[t.jsx("div",{style:{fontSize:10,fontWeight:800,textTransform:"uppercase",opacity:.58},children:"Display contract"}),t.jsx("div",{style:{marginTop:3,fontSize:11,lineHeight:1.35,opacity:.76},children:(o==null?void 0:o.rationale)??((N=e.display)==null?void 0:N.rationale)??"Choose a governed visualization for this app tile."})]}),t.jsxs("button",{type:"button",onClick:()=>void W(),disabled:d,style:ol(d),title:"Recommend visualization from block hints and result fields",children:[t.jsx(ja,{size:12,strokeWidth:2.2}),d?"Thinking":"AI recommend"]})]}),t.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:5},children:[o!=null&&o.component?t.jsx("span",{style:_e,children:Pa(o)}):null,o!=null&&o.defaultVisualization?t.jsx("span",{style:_e,children:Ee(String(o.defaultVisualization))}):null,o!=null&&o.reviewStatus?t.jsx("span",{style:_e,children:Ee(String(o.reviewStatus))}):null]}),h?t.jsx("div",{style:Va,children:h}):null,x?t.jsx("div",{style:pl,children:x}):null]}),t.jsxs("div",{style:ll,children:[t.jsxs("label",{style:mr,children:["Title",t.jsx("input",{value:l.title??e.title??"",onChange:b=>A({title:b.target.value||void 0}),style:br})]}),t.jsxs("label",{style:mr,children:["Chart",t.jsx("select",{value:s,onChange:b=>A({chart:b.target.value}),style:br,children:Nr.map(b=>t.jsx("option",{value:b.value,children:b.label},b.value))})]}),t.jsx(Vt,{label:"X",value:l.x,columns:(n==null?void 0:n.columns)??[],onChange:b=>A({x:b})}),t.jsx(Vt,{label:"Y",value:l.y,columns:(n==null?void 0:n.columns)??[],onChange:b=>A({y:b})}),t.jsx(Vt,{label:"Color",value:l.color,columns:(n==null?void 0:n.columns)??[],onChange:b=>A({color:b})}),t.jsx(Vt,{label:"Facet",value:l.facet,columns:(n==null?void 0:n.columns)??[],onChange:b=>A({facet:b})})]}),n?t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[t.jsx(Hr,{title:"Measures",columns:m,onPick:b=>A({y:b})}),t.jsx(Hr,{title:"Dimensions",columns:I,onPick:b=>A({x:b})})]}):t.jsx("div",{style:{fontSize:11,opacity:.64},children:"Run results are needed before field slots can be inferred."})]})}function Vt({label:e,value:r,columns:a,onChange:i}){return t.jsxs("label",{style:mr,children:[e,t.jsxs("select",{value:r??"",onChange:n=>i(n.target.value||void 0),style:br,children:[t.jsx("option",{value:"",children:"Auto"}),a.map(n=>t.jsx("option",{value:n,children:n},n))]})]})}function Hr({title:e,columns:r,onPick:a}){return t.jsxs("div",{style:{display:"grid",gap:4,minWidth:0},children:[t.jsx("div",{style:{fontSize:10,fontWeight:800,textTransform:"uppercase",opacity:.58},children:e}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:4},children:r.length===0?t.jsx("span",{style:{fontSize:11,opacity:.55},children:"None"}):r.slice(0,10).map(i=>t.jsx("button",{type:"button",onClick:()=>a(i),style:dl,children:i},i))})]})}function Qr({open:e,onToggle:r,onCertifiedBlock:a,onText:i,onHeading:n,onAi:l,buttonLabel:s,buttonStyle:o}){return t.jsxs("div",{style:{position:"relative",display:"inline-flex"},children:[t.jsxs("button",{type:"button",onClick:r,title:"Add tile",style:o??Ge(e),children:[t.jsx(Jt,{size:15,strokeWidth:2.2}),s?t.jsx("span",{children:s}):null]}),e&&t.jsxs("div",{style:{position:"absolute",top:"calc(100% + 6px)",right:0,zIndex:30,width:260,border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:8,background:"var(--color-bg, #fff)",boxShadow:"0 14px 38px rgba(0,0,0,0.16)",padding:6,display:"grid",gap:4,textAlign:"left"},children:[t.jsx(Ht,{title:"Certified block",description:"Chart, table, or KPI from this App domain",onClick:a}),t.jsx(Ht,{title:"Text / summary",description:"Narrative, notes, caveats, or CXO context",onClick:i}),t.jsx(Ht,{title:"Section heading",description:"Separate an App page into readable groups",onClick:n}),t.jsx(Ht,{title:"Copilot insight",description:"Open scoped AI, then pin the reviewed answer to this App",onClick:l})]})]})}function Ht({title:e,description:r,onClick:a}){return t.jsxs("button",{type:"button",onClick:a,style:il,children:[t.jsx("span",{style:{fontSize:12,fontWeight:700},children:e}),t.jsx("span",{style:{fontSize:11,opacity:.66},children:r})]})}function qn({title:e,markdown:r,genUi:a,themeMode:i}){var d;const n=We[i],l=Kn(r,e),s=a.component==="TrustCallout",o=a.component==="ResearchActions";return t.jsxs("div",{style:gl(s),children:[t.jsxs("div",{style:{display:"flex",gap:8,alignItems:"flex-start"},children:[t.jsx("span",{style:hl(s),children:s?t.jsx(it,{size:15}):o?t.jsx(De,{size:15}):t.jsx(ot,{size:15})}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:{fontSize:13,fontWeight:780,lineHeight:1.25},children:a.insightTitle??e}),t.jsx("div",{style:{marginTop:6,fontSize:13,lineHeight:1.45,color:n.textSecondary},children:l})]})]}),t.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:[a.trustState?t.jsx(Rt,{trust:a.trustState}):null,a.reviewStatus?t.jsx("span",{style:_e,children:Ee(a.reviewStatus)}):null]}),(d=a.followUpActions)!=null&&d.length?t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:a.followUpActions.slice(0,3).map(c=>t.jsx("span",{style:ml,children:Ee(c)},c))}):null]})}function wn({result:e,genUi:r,themeMode:a}){var x;const i=We[a],n=e.rows??[],l=e.columns??[],s=Gn(l,n,(x=r.fieldHints)==null?void 0:x.label),o=l.find(y=>/\b(status|quality|trust|certification|review)\b/i.test(y)),d=l.filter(y=>y!==s&&y!==o).filter(y=>sr(y)<90||qt(y,n)).sort((y,T)=>sr(y)-sr(T)).slice(0,2),c=l.filter(y=>y!==s&&y!==o&&!d.includes(y)).slice(0,2),h=e.rowCount??n.length,f=$a(l,n);return t.jsxs("div",{style:bl,children:[t.jsxs("div",{style:{fontSize:11.5,color:i.textSecondary},children:[h," ",h===1?"row":"rows"," across ",l.length," ",l.length===1?"field":"fields"]}),t.jsx("div",{style:vl,children:n.slice(0,4).map((y,T)=>{const z=s?Me(s,y[s],f.get(s)??[]):`Row ${T+1}`,m=o?Me(o,y[o],f.get(o)??[]):null;return t.jsxs("div",{style:yl,children:[t.jsxs("div",{style:{minWidth:0},children:[t.jsx("div",{style:{fontSize:12.5,fontWeight:760,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z}),c.length?t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:4},children:c.map(I=>t.jsxs("span",{style:ql,children:[Ee(I),": ",Me(I,y[I],f.get(I)??[])]},I))}):null]}),t.jsxs("div",{style:{display:"flex",gap:5,flexWrap:"wrap",justifyContent:"flex-start",minWidth:0},children:[d.map(I=>t.jsxs("span",{style:wl,children:[t.jsx("span",{style:{opacity:.62},children:Ee(I)}),t.jsx("strong",{children:Me(I,y[I],f.get(I)??[])})]},I)),m?t.jsx("span",{style:jl,children:m}):null]})]},T)})}),n.length>4?t.jsx("div",{style:{fontSize:11,color:i.textSecondary},children:"Showing first 4 rows in generated view. Switch tile settings for full table controls."}):null]})}function jn({markdown:e,variant:r="text",themeMode:a}){const i=We[a];return t.jsx("div",{style:{width:"100%",alignSelf:"stretch",overflow:"auto",whiteSpace:"normal",lineHeight:1.45,fontStyle:"normal",opacity:1,fontSize:r==="heading"?18:void 0,fontWeight:r==="heading"?800:void 0,display:r==="heading"?"flex":void 0,alignItems:r==="heading"?"center":void 0},children:wa(e,i)})}function Kr({pin:e,themeMode:r,dataView:a}){var d,c;const[i,n]=p.useState(null),l=We[r]??We.light,s=async()=>{n("Refreshing...");const h=await D.refreshAiPin(e.appId,e.id);n(h.ok?"Refreshed.":h.error??"Refresh failed."),window.dispatchEvent(new CustomEvent("dql-app-dashboard-updated",{detail:{appId:e.appId,dashboardId:e.dashboardId}}))},o=async()=>{n("Creating draft...");const h=await D.promoteAiPin(e.appId,e.id);n(h.ok?`Draft created: ${h.blockPath}`:h.error??"Promotion failed."),window.dispatchEvent(new CustomEvent("dql-app-dashboard-updated",{detail:{appId:e.appId,dashboardId:e.dashboardId}}))};return t.jsxs("div",{style:{width:"100%",alignSelf:"stretch",overflow:"auto",fontStyle:"normal",lineHeight:1.5,display:"grid",gap:10},children:[a||t.jsxs(t.Fragment,{children:[t.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",flexWrap:"wrap"},children:[t.jsx("span",{style:{fontSize:10.5,fontWeight:800,color:e.certification==="certified"?"#15803d":"#b45309",background:e.certification==="certified"?"rgba(22,163,74,0.1)":"rgba(245,158,11,0.12)",border:`1px solid ${e.certification==="certified"?"rgba(22,163,74,0.22)":"rgba(245,158,11,0.24)"}`,borderRadius:999,padding:"3px 7px"},children:e.certification==="certified"?"Certified":"Review required"}),t.jsx("span",{style:{fontSize:10.5,color:"var(--color-text-muted, rgba(0,0,0,0.58))"},children:"Pinned report insight"})]}),t.jsx("div",{style:{minWidth:0},children:wa(e.answer,l)}),(c=(d=e.result)==null?void 0:d.rows)!=null&&c.length?t.jsx(kn,{result:e.result}):null]}),t.jsxs("div",{style:{display:"flex",gap:6,marginTop:8,flexWrap:"wrap"},children:[e.sql&&t.jsx("button",{type:"button",onClick:()=>void s(),style:la,children:"Refresh"}),e.sql&&e.reviewStatus==="needs_review"&&t.jsx("button",{type:"button",onClick:()=>void o(),style:la,children:"Promote"}),e.refreshCadence==="daily"&&t.jsx("span",{style:{fontSize:11,opacity:.62},children:"daily"})]}),i&&t.jsx("div",{style:{marginTop:6,fontSize:11,opacity:.72},children:i}),e.lastRefreshError&&t.jsx("div",{style:{marginTop:8,color:"#f85149"},children:e.lastRefreshError})]})}function kn({result:e}){var n,l;const r=((n=e.columns)!=null&&n.length?e.columns:Object.keys(((l=e.rows)==null?void 0:l[0])??{})).slice(0,4),a=(e.rows??[]).slice(0,3),i=$a(r,e.rows??[]);return!r.length||!a.length?null:t.jsxs("div",{style:{display:"grid",gap:6},children:[t.jsx("div",{style:{color:"var(--color-text-muted, rgba(0,0,0,0.58))",fontSize:11,fontWeight:750},children:"Supporting rows"}),t.jsx("div",{style:{overflow:"auto",border:"1px solid var(--border-color, rgba(0,0,0,0.08))",borderRadius:6},children:t.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:11},children:[t.jsx("thead",{children:t.jsx("tr",{children:r.map(s=>t.jsx("th",{style:{textAlign:"left",padding:"5px 7px",borderBottom:"1px solid var(--border-color, rgba(0,0,0,0.08))",color:"var(--color-text-muted, rgba(0,0,0,0.58))"},children:Ee(s)},s))})}),t.jsx("tbody",{children:a.map((s,o)=>t.jsx("tr",{children:r.map(d=>t.jsx("td",{style:{padding:"5px 7px",borderBottom:o===a.length-1?"none":"1px solid var(--border-color, rgba(0,0,0,0.06))"},children:Me(d,s[d],i.get(d)??[])},d))},o))})]})})]})}function Sn({kind:e,value:r,onChange:a,onClose:i,onSave:n}){const l=e==="heading";return t.jsx("div",{style:{position:"fixed",inset:0,zIndex:90,background:"rgba(0,0,0,0.36)",display:"flex",alignItems:"center",justifyContent:"center",padding:24},children:t.jsxs("div",{style:{width:"min(520px, 92vw)",display:"grid",gap:12,background:"var(--color-bg, #fff)",color:"inherit",borderRadius:8,boxShadow:"0 18px 60px rgba(0,0,0,0.35)",padding:16},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:16,fontWeight:800},children:l?"Add heading":"Add text tile"}),t.jsx("div",{style:{fontSize:12,opacity:.65,marginTop:4},children:l?"Create a section heading on this dashboard page.":"Create a narrative text tile on this dashboard page."})]}),l?t.jsx("input",{value:r,onChange:s=>a(s.target.value),onKeyDown:s=>{s.key==="Enter"&&n(),s.key==="Escape"&&i()},placeholder:"Executive summary",autoFocus:!0,style:na}):t.jsx("textarea",{value:r,onChange:s=>a(s.target.value),onKeyDown:s=>{s.key==="Escape"&&i(),s.key==="Enter"&&(s.metaKey||s.ctrlKey)&&n()},placeholder:"Add context, assumptions, or decisions...",rows:6,autoFocus:!0,style:{...na,resize:"vertical",lineHeight:1.45}}),t.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[t.jsx("button",{type:"button",onClick:i,style:Ge(!1),children:"Cancel"}),t.jsx("button",{type:"button",onClick:n,disabled:!r.trim(),style:{...Fa,opacity:r.trim()?1:.65},children:"Add"})]})]})})}function zn({blocks:e,search:r,onSearch:a,onClose:i,onAdd:n}){const l=e.filter(s=>{const o=r.trim().toLowerCase();return o?[s.name,s.description,s.domain,...s.tags??[]].join(" ").toLowerCase().includes(o):!0});return t.jsx("div",{style:{position:"fixed",inset:0,zIndex:90,background:"rgba(0,0,0,0.36)",display:"flex",alignItems:"center",justifyContent:"center",padding:24},children:t.jsxs("div",{style:{width:"min(860px, 94vw)",maxHeight:"86vh",display:"flex",flexDirection:"column",background:"var(--color-bg, #fff)",color:"inherit",borderRadius:8,overflow:"hidden",boxShadow:"0 18px 60px rgba(0,0,0,0.35)"},children:[t.jsxs("div",{style:{padding:14,borderBottom:"1px solid var(--border-color, rgba(0,0,0,0.1))",display:"flex",gap:10,alignItems:"center"},children:[t.jsx("div",{style:{fontSize:15,fontWeight:700,flex:1},children:"Add Certified Block"}),t.jsx("button",{type:"button",onClick:i,style:Ge(!1),children:"Close"})]}),t.jsx("div",{style:{padding:14,borderBottom:"1px solid var(--border-color, rgba(0,0,0,0.08))"},children:t.jsx("input",{value:r,onChange:s=>a(s.target.value),placeholder:"Search domain blocks...",style:{width:"100%",boxSizing:"border-box",border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:6,padding:"8px 10px",background:"var(--surface, transparent)",color:"inherit"}})}),t.jsx("div",{style:{overflow:"auto",padding:12,display:"grid",gap:8},children:l.length===0?t.jsx("div",{style:{padding:18,fontSize:12,opacity:.66},children:"No certified blocks match this App scope."}):l.map(s=>t.jsxs("button",{type:"button",onClick:()=>n(s),style:{textAlign:"left",border:"1px solid var(--border-color, rgba(0,0,0,0.1))",borderRadius:7,background:"transparent",color:"inherit",padding:10,cursor:"pointer"},children:[t.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",marginBottom:4},children:[t.jsx("span",{style:{fontSize:13,fontWeight:700},children:s.name}),t.jsx("span",{style:{fontSize:10,padding:"2px 6px",borderRadius:999,background:"rgba(63,185,80,0.14)",color:"#2ea043"},children:s.status}),t.jsx("span",{style:{fontSize:10,opacity:.68},children:s.domain}),t.jsx("span",{style:{fontSize:10,opacity:.68},children:s.chartType??"table"})]}),t.jsx("div",{style:{fontSize:12,opacity:.72},children:s.description||s.path})]},s.id))})]})})}function An({lineage:e}){var n,l;const r=((n=e==null?void 0:e.graph)==null?void 0:n.nodes)??[],a=((l=e==null?void 0:e.graph)==null?void 0:l.edges)??[],i=(e==null?void 0:e.breadcrumbs)??[];return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:12,fontWeight:800,textTransform:"uppercase",opacity:.62,marginBottom:6},children:"App Lineage"}),t.jsx("div",{style:{fontSize:12,opacity:.72},children:"Terms and business views connect the App back to DQL blocks, dbt models, and source tables."})]}),i.length>0&&t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:i.map((s,o)=>t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"64px 1fr",gap:8,fontSize:12},children:[t.jsx("span",{style:{fontFamily:"monospace",opacity:.6},children:s.type}),t.jsx("span",{children:s.name})]},`${s.id}-${o}`))}),t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[t.jsx(Gr,{label:"Nodes",value:r.length}),t.jsx(Gr,{label:"Edges",value:a.length})]}),t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:r.slice(0,18).map(s=>t.jsxs("div",{style:{border:"1px solid var(--border-color, rgba(0,0,0,0.08))",borderRadius:6,padding:8},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0},children:[t.jsx("span",{style:{color:"#0d1117",background:pi[s.type]??"#8b949e",borderRadius:3,padding:"1px 4px",fontSize:9,fontWeight:800,flexShrink:0},children:oi[s.type]??s.type.slice(0,4).toUpperCase()}),t.jsx("div",{style:{fontSize:12,fontWeight:700,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.name})]}),t.jsxs("div",{style:{fontSize:11,opacity:.62,fontFamily:"monospace",marginTop:4},children:[di[s.type]??s.type," · ",s.id]})]},s.id))})]})}function Gr({label:e,value:r}){return t.jsxs("div",{style:{border:"1px solid var(--border-color, rgba(0,0,0,0.08))",borderRadius:6,padding:8},children:[t.jsx("div",{style:{fontSize:11,opacity:.62},children:e}),t.jsx("div",{style:{fontSize:18,fontWeight:800},children:r})]})}function Qe(e){return e.block?"blockId"in e.block?e.block.blockId??null:e.block.ref??null:null}function lt(e){const r=String(e??"table").toLowerCase().replace(/_/g,"-");return r==="single-value"?"kpi":Nr.some(a=>a.value===r)?r:"table"}function Dt(e){const r=lt(e);return r==="table"?"table":r.replace(/-/g,"_")}function Yr(e){const r={};for(const[a,i]of Object.entries(e))i===void 0||i===""||(r[a]=i);return r.chart||(r.chart="table"),r}function et(e){var a;if(Kt(e.display)){const i=e.display,n=typeof i.component=="string"?i.component:void 0;return{version:1,component:n,role:Na(n),layoutIntent:typeof i.layoutIntent=="string"?i.layoutIntent:void 0,defaultVisualization:typeof i.defaultVisualization=="string"?i.defaultVisualization:void 0,allowedVisualizations:Array.isArray(i.allowedVisualizations)?i.allowedVisualizations.filter(l=>typeof l=="string"):void 0,fieldHints:Kt(i.fieldHints)?Object.fromEntries(Object.entries(i.fieldHints).filter(l=>typeof l[1]=="string")):void 0,insightTitle:e.title,trustState:typeof i.trustState=="string"?i.trustState:void 0,reviewStatus:typeof i.reviewStatus=="string"?i.reviewStatus:void 0,rationale:typeof i.rationale=="string"?i.rationale:void 0}}const r=(a=e.viz.options)==null?void 0:a.dqlGenUi;return Kt(r)?{version:typeof r.version=="number"?r.version:void 0,component:typeof r.component=="string"?r.component:void 0,role:typeof r.role=="string"?r.role:void 0,layoutIntent:typeof r.layoutIntent=="string"?r.layoutIntent:void 0,defaultVisualization:typeof r.defaultVisualization=="string"?r.defaultVisualization:void 0,allowedVisualizations:Array.isArray(r.allowedVisualizations)?r.allowedVisualizations.filter(i=>typeof i=="string"):void 0,fieldHints:Kt(r.fieldHints)?Object.fromEntries(Object.entries(r.fieldHints).filter(i=>typeof i[1]=="string")):void 0,insightTitle:typeof r.insightTitle=="string"?r.insightTitle:void 0,trustState:typeof r.trustState=="string"?r.trustState:void 0,reviewStatus:typeof r.reviewStatus=="string"?r.reviewStatus:void 0,sourceNodeId:typeof r.sourceNodeId=="string"?r.sourceNodeId:void 0,followUpActions:Array.isArray(r.followUpActions)?r.followUpActions.filter(i=>typeof i=="string"):void 0,rationale:typeof r.rationale=="string"?r.rationale:void 0}:null}function Xr(e,r){return{mode:"manual",component:e==="heading"?"NarrativePanel":"BusinessBrief",defaultVisualization:e,allowedVisualizations:[e],layoutIntent:e==="heading"?"wide":"standard",rationale:r?`Manual narrative tile for "${r}" on this app surface.`:"Manual narrative tile for this app surface.",trustState:"review_required",reviewStatus:"review_required"}}function Ia(e,r,a){var l,s,o,d,c,h,f,x,y;const i=Cn([r,...((l=e.display)==null?void 0:l.allowedVisualizations)??[],...(a==null?void 0:a.allowedVisualizations)??[]]),n=((s=e.display)==null?void 0:s.component)??In(r);return{mode:((o=e.display)==null?void 0:o.mode)??(a?"ai_generated":e.block?"block_hint":"manual"),component:n,defaultVisualization:r,allowedVisualizations:i.length?i:[r],...(d=e.display)!=null&&d.fieldHints||a!=null&&a.fieldHints?{fieldHints:((c=e.display)==null?void 0:c.fieldHints)??(a==null?void 0:a.fieldHints)}:{},layoutIntent:Wn(((h=e.display)==null?void 0:h.layoutIntent)??(a==null?void 0:a.layoutIntent)),rationale:((f=e.display)==null?void 0:f.rationale)??(a==null?void 0:a.rationale)??"Visualization selected for this consumer surface.",trustState:$r(((x=e.display)==null?void 0:x.trustState)??(a==null?void 0:a.trustState)),reviewStatus:Fn(((y=e.display)==null?void 0:y.reviewStatus)??(a==null?void 0:a.reviewStatus))}}function Cn(e){return Array.from(new Set(e.filter(r=>typeof r=="string"&&r.trim()).map(r=>r.trim())))}function In(e){return e==="single_value"||e==="kpi"||e==="gauge"?"KpiMetric":e==="line"||e==="area"?"TrendPanel":e==="bar"||e==="grouped_bar"||e==="stacked_bar"||e==="donut"||e==="pie"?"RankingPanel":e==="pivot"?"PivotTable":e==="text"||e==="heading"?"NarrativePanel":"EvidenceTable"}function Na(e){return e==="BusinessBrief"?"business_summary":e==="KpiMetric"?"kpi":e==="TrendPanel"?"trend":e==="RankingPanel"?"breakdown":e==="TrustCallout"?"trust":e==="ResearchActions"?"research":e==="NarrativePanel"?"narrative":e?"evidence":void 0}function Nn(e){var s,o,d,c;if(Qe(e)||e.aiPin)return!1;const r=et(e),a=(r==null?void 0:r.component)??((s=e.display)==null?void 0:s.component),i=(r==null?void 0:r.role)??Na(a),n=$r(String((r==null?void 0:r.trustState)??((o=e.display)==null?void 0:o.trustState)??"review_required"));if(a==="TrustCallout"||a==="ResearchActions"||i==="trust"||i==="research")return!0;if(a!=="NarrativePanel"&&a!=="BusinessBrief"||n==="certified")return!1;const l=[e.title,(d=e.text)==null?void 0:d.markdown,(c=e.display)==null?void 0:c.rationale,r==null?void 0:r.rationale,r==null?void 0:r.insightTitle].filter(Boolean).join(" ").toLowerCase();return/\b(draft ready|review-required|review required|missing evidence|missing proof|trust gap|research drilldown|promote to a certified block|generated review placeholder|generated section)\b/.test(l)}function Tn(e,r,a){const n=[...e.filter(l=>!Pn(l,r.get(l.i))&&!Bn(l,e,r)&&!$n(l,e,r))].sort((l,s)=>{const o=Zr(s,r.get(s.i),a)-Zr(l,r.get(l.i),a);return o!==0?o:ct(l,a)-ct(s,a)});return Ut(n,a)}function Pn(e,r){var n,l;if(!e.aiPin)return!1;const a=(n=r==null?void 0:r.aiPin)==null?void 0:n.certification,i=(l=r==null?void 0:r.aiPin)==null?void 0:l.reviewStatus;return a!=="certified"&&i!=="certified"}function $n(e,r,a){if(!e.aiPin)return!1;const i=Jr(e,a.get(e.i));if(!i)return!1;const n=r.findIndex(l=>l.i===e.i);return r.some((l,s)=>l.i===e.i||s>=n||!l.aiPin?!1:Jr(l,a.get(l.i))===i)}function Jr(e,r){const a=r==null?void 0:r.aiPin,i=a!=null&&a.analysisPlan&&typeof a.analysisPlan=="object"?a.analysisPlan:null,n=Qt(a==null?void 0:a.question)||Qt(e.title),l=Qt(i==null?void 0:i.sourceBlockId),s=Qt(i==null?void 0:i.sourceTileId),o=a!=null&&a.result?Rn(a.result):"";return!n&&!l&&!s?"":[n,l,s,o].filter(Boolean).join("|")}function Qt(e){return String(e??"").toLowerCase().replace(/[^a-z0-9]+/g," ").replace(/\s+/g," ").trim()}function Rn(e){if(!e||typeof e!="object")return"";const r=e,a=Array.isArray(r.columns)?r.columns.map(n=>String(n).toLowerCase()).join(","):"",i=Array.isArray(r.rows)?r.rows.slice(0,8).map(n=>hr(n)).join(";"):"";return a||i?`${a}:${i}`:""}function hr(e){if(e==null)return"";if(typeof e!="object")return String(e);if(Array.isArray(e))return`[${e.map(hr).join(",")}]`;const r=e;return`{${Object.keys(r).sort().map(a=>`${a}:${hr(r[a])}`).join(",")}}`}function Zr(e,r,a){var n,l,s,o,d;let i=0;return(n=e.parameterBindings)!=null&&n.length&&(i+=5e3),(s=(l=r==null?void 0:r.filters)==null?void 0:l.applied)!=null&&s.length&&(i+=4e3),(r==null?void 0:r.certificationStatus)==="certified"&&(i+=1800),Qe(e)&&(i+=900),(r==null?void 0:r.status)==="ok"&&((d=(o=r.result)==null?void 0:o.rows)!=null&&d.length)&&(i+=500),i-=vr(e)*80,i-=ct(e,a)/1e3,i}function Bn(e,r,a){var l;if((l=e.parameterBindings)!=null&&l.length||e.aiPin||!Qe(e))return!1;const i=a.get(e.i),n=i!=null&&i.result?Dr(i.result):null;return n?r.some(s=>{if(s.i===e.i||!En(s,a.get(s.i)))return!1;const o=a.get(s.i),d=o!=null&&o.result?Dr(o.result):null;return!!(d&&Ln(n,d))}):!1}function En(e,r){var a,i,n;return!!((a=e.parameterBindings)!=null&&a.length||(n=(i=r==null?void 0:r.filters)==null?void 0:i.applied)!=null&&n.length)}function Dr(e){var s;const r=e.rows??[];if(!r.length)return null;const a=(s=e.columns)!=null&&s.length?e.columns:Object.keys(r[0]??{});if(!a.length)return null;const i=Tr(a,r),n=Pr(a,r),l=r[0];return{columns:a.map(o=>o.toLowerCase()).sort().join("|"),label:i?Ur(l[i]):"",metric:(n==null?void 0:n.toLowerCase())??"",metricValue:n?Ur(l[n]):""}}function Ln(e,r){return e.columns===r.columns&&e.label===r.label&&e.metric===r.metric&&e.metricValue===r.metricValue}function Ur(e){return e==null?"":typeof e=="number"?Number.isFinite(e)?String(e):"":String(e).trim().toLowerCase().replace(/\s+/g," ")}function _n(e,r,a){var be,ie,K,U;const i=e.map((L,V)=>({item:L,tile:r.get(L.i),index:V})).filter(L=>{var V,C;return((V=L.tile)==null?void 0:V.status)==="ok"&&!!L.tile.result&&Array.isArray((C=L.tile.result)==null?void 0:C.rows)&&L.tile.result.rows.length>0}).sort((L,V)=>{const C=ea(L.item,L.tile,L.index);return ea(V.item,V.tile,V.index)-C})[0];if(!(i!=null&&i.tile.result))return null;const n=i.tile.result,l=n.rows,s=n.columns??Object.keys(l[0]??{});if(!s.length)return null;const o=et(i.item),d=Tr(s,l,(be=o==null?void 0:o.fieldHints)==null?void 0:be.label),c=Pr(s,l,((ie=o==null?void 0:o.fieldHints)==null?void 0:ie.value)??((K=o==null?void 0:o.fieldHints)==null?void 0:K.y)),h=l[0],f=l[1],x=d?l.map(L=>L[d]):[],y=c?l.map(L=>L[c]):[],T=d?Me(d,h[d],x):"The leading result",z=f&&d?Me(d,f[d],x):null,m=c?aa(h[c]):null,I=c&&f?aa(f[c]):null,A=c?Mn(c):null,W=On(a),N=W.length?"under the selected app filters":"in the current dashboard view",b=i.item.title??i.tile.title??Qe(i.item)??"Dashboard result",E=n.rowCount??l.length,M=i.tile.certificationStatus==="certified"?"certified":$r(String(((U=i.item.display)==null?void 0:U.trustState)??(o==null?void 0:o.trustState)??"review_required")),F=A?`${Ee(A)} snapshot`:"Dashboard snapshot";let O;if(c&&A&&m!==null){const L=`${T} leads ${A} with ${Me(c,m,y,{compact:!0})}`;if(z&&I!==null&&Number.isFinite(m-I)){const V=Math.abs(m-I);O=`${L}, ahead of ${z} by ${Me(c,V,y,{compact:!0})} ${N}.`}else O=`${L} ${N}.`}else O=`${b} returned ${E} ${E===1?"row":"rows"} ${N}.`;return{title:F,summary:O,sourceTitle:b,trust:M,filters:W,chips:[`${E} ${E===1?"row":"rows"}`,s.length?`${s.length} fields`:""].filter(Boolean)}}function ea(e,r,a){var o,d,c,h;const i=et(e),n=(i==null?void 0:i.component)??((o=e.display)==null?void 0:o.component),l=r.result;let s=1e3-a;return r.certificationStatus==="certified"&&(s+=500),Qe(e)&&(s+=180),(c=(d=r.filters)==null?void 0:d.applied)!=null&&c.length&&(s+=260),(h=e.parameterBindings)!=null&&h.length&&(s+=220),(n==="RankingPanel"||n==="EvidenceTable"||n==="KpiMetric")&&(s+=120),(e.viz.type==="table"||e.viz.type==="bar"||e.viz.type==="kpi")&&(s+=70),l&&Pr(l.columns,l.rows)&&(s+=80),l&&Tr(l.columns,l.rows)&&(s+=50),s}function Tr(e,r,a){const i=Ta(e,a);return i||(e.find(n=>/\b(player|customer|account|team|segment|category|name|label|title|entity)\b/i.test(n))??e.find(n=>!qt(n,r)&&!/\b(date|time|year|month|id)\b/i.test(n))??e.find(n=>!qt(n,r)))}function Pr(e,r,a){const i=Ta(e,a);return i&&qt(i,r)?i:e.filter(n=>qt(n,r)).sort((n,l)=>ta(n)-ta(l))[0]}function Ta(e,r){const a=r==null?void 0:r.toLowerCase().trim();if(a)return e.find(i=>{const n=i.toLowerCase();return n===a||n.includes(a)||a.includes(n)})}function ta(e){const r=e.toLowerCase();return/(total|revenue|amount|points|score|value|sales|arr|mrr)/.test(r)?1:/(count|orders|games|customers|rows|volume)/.test(r)?2:/(rate|pct|percent|ratio|margin|average|avg)/.test(r)?3:/(rank|position|index)/.test(r)?20:/(date|year|month|day|week|id)/.test(r)?90:30}function Mn(e){return Ee(e).toLowerCase()}function On(e){return Object.entries(e).filter(([r,a])=>/^(smartView|persona|dashboardId|appId)$/i.test(r)||r.startsWith("__")||a==null||a===""||Array.isArray(a)&&a.length===0?!1:typeof a!="object"||Array.isArray(a)).slice(0,6).map(([r,a])=>({label:Ee(r),value:Array.isArray(a)?a.map(i=>ra(r,i)).join(", "):ra(r,a)}))}function ra(e,r){const a=typeof r=="number"?r:typeof r=="string"&&r.trim()!==""?Number(r):NaN;return/(season|year)/i.test(e)&&Number.isInteger(a)&&a>=1900&&a<=2200?String(a):Me(e,r,[r])}function aa(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()!==""){const r=Number(e);return Number.isFinite(r)?r:null}return null}function Wn(e){return e==="compact"||e==="standard"||e==="wide"||e==="tall"||e==="full"||e==="auto"?e:"auto"}function $r(e){return e==="certified"||e==="draft_ready"||e==="review_required"?e:"review_required"}function Fn(e){return e==="certified"||e==="draft_ready"||e==="review_required"?e:"review_required"}function Kt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vn(e,r){const a=new Set(["table",String(e.viz.type??"table"),...(r==null?void 0:r.allowedVisualizations)??[]]);return Array.from(a).map(n=>lt(n)).filter((n,l,s)=>s.indexOf(n)===l).map(n=>Nr.find(l=>l.value===n)??{value:n,label:Ee(n)})}function Hn(e){return e==="TrustCallout"?"linear-gradient(180deg, rgba(255,255,255,0.92), rgba(255,251,235,0.72))":e==="RankingPanel"||e==="TrendPanel"||e==="PivotTable"?"linear-gradient(180deg, rgba(255,255,255,0.96), rgba(248,250,252,0.86))":e==="BusinessBrief"?"var(--dql-app-surface, rgba(255,255,255,0.90))":"var(--dql-app-surface, var(--surface, rgba(255,255,255,0.84)))"}function Qn(e){return e==="line"||e==="area"?t.jsx(Cr,{size:13,strokeWidth:2.2}):e==="pie"||e==="donut"?t.jsx(Mi,{size:13,strokeWidth:2.2}):e==="table"?t.jsx(Gi,{size:13,strokeWidth:2.2}):t.jsx(Aa,{size:13,strokeWidth:2.2})}function Ee(e){return e.replace(/[_-]+/g," ").replace(/\b\w/g,r=>r.toUpperCase())}function Pa(e){switch(e.component){case"BusinessBrief":return"Business summary";case"KpiMetric":return"KPI";case"TrendPanel":return"Trend";case"RankingPanel":return"Ranking";case"EvidenceTable":return"Evidence";case"PivotTable":return"Pivot";case"TrustCallout":return"Trust";case"ResearchActions":return"Analysis";case"NarrativePanel":return"Narrative";default:return e.role?Ee(e.role):"Generated"}}function Kn(e,r){const a=new RegExp(`^###\\s*${Yn(r)}\\s*`,"i");return e.replace(a,"").replace(/\*\*Trust:\*\*.*$/gim,"").replace(/\*\*Review status:\*\*.*$/gim,"").replace(/\*\*Next actions:\*\*[\s\S]*$/im,"").replace(/\*\*Review tasks:\*\*[\s\S]*$/im,"").trim().split(/\n{2,}/).map(l=>l.trim()).find(Boolean)||"Generated app section pending analyst review."}function Gn(e,r,a){if(e.length===0)return;const i=a==null?void 0:a.toLowerCase();if(i){const n=e.find(l=>{const s=l.toLowerCase();return s===i||s.includes(i)||i.includes(s)});if(n)return n}return e.find(n=>/\b(name|label|title|dataset|table|block|player|customer|account)\b/i.test(n))??e.find(n=>!qt(n,r))??e[0]}function sr(e){const r=e.toLowerCase();return/(total|count|records|rows|volume)/.test(r)?1:/(rate|percent|pct|score|quality|freshness)/.test(r)?2:/(amount|revenue|arr|value)/.test(r)?3:/(date|time|season)/.test(r)?6:/(^|_)id($|_)/.test(r)?20:100}function qt(e,r){const a=r.slice(0,8).map(i=>i[e]).filter(i=>i!=null&&i!=="");return a.length===0?!1:a.every(i=>typeof i=="number"||typeof i=="string"&&i.trim()!==""&&Number.isFinite(Number(i)))}function $a(e,r){return new Map(e.map(a=>[a,r.slice(0,32).map(i=>i[a])]))}function Me(e,r,a=[],i={}){if(r==null||r==="")return"N/A";const n=vi(e,r,a,i);return n?typeof r=="string"&&n===r?n.replace(/_/g," "):n:"N/A"}function Yn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ge(e){return{border:"1px solid var(--dql-app-line, var(--border-color, rgba(0,0,0,0.12)))",borderRadius:8,background:e?"var(--dql-app-accent-soft, var(--surface-hover, rgba(0,0,0,0.06)))":"var(--dql-app-surface, var(--surface, rgba(0,0,0,0.02)))",color:"inherit",padding:"7px 10px",cursor:"pointer",fontSize:12,fontWeight:720,display:"inline-flex",alignItems:"center",gap:6,minHeight:32}}const Xn={width:34,height:34,border:"1px solid var(--dql-app-accent, #4f46e5)",borderRadius:8,background:"var(--dql-app-accent-soft, rgba(79,70,229,0.12))",color:"var(--dql-app-accent, #4f46e5)",cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center"},Jn={display:"flex",alignItems:"center",gap:6,marginBottom:10},Ra={border:"1px solid var(--border-subtle)",borderRadius:7,background:"var(--bg-1)",color:"var(--text-secondary)",padding:"4px 8px",cursor:"pointer",fontSize:10.5,fontWeight:720},Zn={...Ra,display:"inline-flex",alignItems:"center",gap:5,color:"var(--accent)",borderColor:"var(--accent-dim)"},Dn={position:"fixed",inset:0,zIndex:120,display:"grid",placeItems:"center",padding:24,background:"rgba(0, 0, 0, 0.38)"},Un={width:"min(780px, calc(100vw - 32px))",maxHeight:"min(760px, calc(100vh - 48px))",overflow:"hidden",display:"grid",gap:12,padding:16,border:"1px solid var(--border-default)",borderRadius:12,background:"var(--bg-0)",color:"var(--text-primary)",boxShadow:"0 24px 80px rgba(0,0,0,0.28)"};function el(e){return{border:e?"1px solid var(--accent)":"1px solid var(--border-subtle)",borderRadius:7,background:e?"var(--accent-dim)":"var(--bg-1)",color:e?"var(--accent)":"var(--text-secondary)",padding:"5px 9px",cursor:"pointer",fontSize:11,fontWeight:750}}const tl={margin:0,minHeight:180,padding:14,borderRadius:8,background:"var(--bg-2)",color:"var(--text-primary)",whiteSpace:"pre-wrap",overflowWrap:"anywhere",fontFamily:"var(--font-mono, monospace)",fontSize:12,lineHeight:1.55},rl={marginBottom:12,color:"var(--dql-app-muted, var(--color-text-secondary, rgba(0,0,0,0.64)))",fontSize:12,lineHeight:1.45},Ba={border:"1px solid var(--dql-app-line-2, var(--border-color, rgba(15,23,42,0.10)))",borderRadius:10,background:"linear-gradient(180deg, rgba(255,255,255,0.96), rgba(248,250,252,0.88))",boxShadow:"0 8px 24px rgba(15,23,42,0.05)",padding:14,marginBottom:12,display:"grid",gap:9},Ea={display:"flex",alignItems:"flex-start",gap:10,minWidth:0},La={width:30,height:30,borderRadius:8,background:"var(--dql-app-accent-soft, rgba(79,70,229,0.10))",color:"var(--dql-app-accent, #4f46e5)",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},_a={fontSize:10.5,fontWeight:820,letterSpacing:0,textTransform:"uppercase",color:"var(--dql-app-muted, rgba(15,23,42,0.58))"},Ma={margin:"2px 0 0",fontSize:15,lineHeight:1.25,fontWeight:820,color:"var(--dql-app-text, inherit)"},Oa={margin:0,fontSize:13.5,lineHeight:1.48,color:"var(--dql-app-muted, rgba(15,23,42,0.72))"},Rr={display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},wt={border:"1px solid var(--dql-app-line, var(--border-color, rgba(15,23,42,0.10)))",borderRadius:999,background:"var(--dql-app-surface, rgba(255,255,255,0.78))",color:"var(--dql-app-muted, rgba(15,23,42,0.68))",padding:"3px 8px",fontSize:11,fontWeight:720,lineHeight:1.2,maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},Wa={...wt,color:"var(--dql-app-accent, #4f46e5)",borderColor:"rgba(79,70,229,0.22)",background:"var(--dql-app-accent-soft, rgba(79,70,229,0.08))"},ia={border:"1px solid var(--dql-app-line-2, var(--border-color, rgba(15,23,42,0.14)))",borderRadius:8,background:"var(--dql-app-surface, var(--surface, #fff))",color:"var(--dql-app-text, var(--text-primary, #0f172a))",padding:"6px 10px",fontSize:11.5,fontWeight:720,cursor:"pointer"};function al(e){return{position:"fixed",right:24,top:76,bottom:24,zIndex:70,width:e?`min(${gr}px, calc(100vw - 96px))`:`min(${bi}px, calc(100vw - 64px))`,minWidth:0}}const na={width:"100%",boxSizing:"border-box",border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:6,background:"var(--surface, transparent)",color:"inherit",fontSize:12,padding:"8px 10px"},Fa={border:"1px solid var(--accent, #4f46e5)",borderRadius:6,background:"var(--accent, #4f46e5)",color:"var(--color-text-on-accent, #fff)",padding:"7px 11px",cursor:"pointer",fontSize:12,fontWeight:700},il={border:"none",borderRadius:6,background:"transparent",color:"inherit",padding:"9px 10px",cursor:"pointer",textAlign:"left",display:"grid",gap:2},nl={border:"1px solid var(--border-color, rgba(0,0,0,0.10))",borderRadius:6,padding:8,background:"var(--color-bg, rgba(255,255,255,0.72))",display:"grid",gap:8,fontStyle:"normal"},ll={display:"grid",gridTemplateColumns:"repeat(4, minmax(0, 1fr))",gap:6},mr={display:"grid",gap:3,fontSize:10,fontWeight:700,opacity:.78},br={width:"100%",minWidth:0,boxSizing:"border-box",border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:5,background:"var(--surface, transparent)",color:"inherit",padding:"5px 6px",fontSize:11},sl={display:"grid",gap:6,border:"1px solid var(--border-color, rgba(0,0,0,0.08))",borderRadius:6,background:"var(--surface, rgba(248,250,252,0.62))",padding:8};function ol(e){return{border:"1px solid var(--accent, rgba(79,70,229,0.55))",background:e?"rgba(79,70,229,0.10)":"rgba(79,70,229,0.08)",color:"var(--accent, #4f46e5)",borderRadius:5,padding:"5px 7px",fontSize:11,fontWeight:750,display:"inline-flex",alignItems:"center",gap:5,cursor:e?"wait":"pointer",opacity:e?.72:1,whiteSpace:"nowrap"}}const Va={fontSize:11,lineHeight:1.35,color:"var(--dql-app-muted, rgba(15,23,42,0.68))"},pl={...Va,color:"var(--error-color, #b91c1c)"},dl={border:"1px solid var(--border-color, rgba(0,0,0,0.10))",borderRadius:4,background:"var(--surface, rgba(0,0,0,0.02))",color:"inherit",padding:"2px 5px",fontSize:10,cursor:"pointer",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},cl={marginTop:7,display:"flex",flexWrap:"wrap",gap:5,alignItems:"center",minWidth:0},_e={display:"inline-flex",alignItems:"center",minHeight:18,borderRadius:999,border:"1px solid var(--border-color, rgba(15,23,42,0.10))",background:"rgba(148,163,184,0.10)",color:"var(--dql-app-muted, rgba(15,23,42,0.70))",padding:"2px 7px",fontSize:10,fontWeight:720,lineHeight:1.1};function ul(e){return{..._e,border:e?"1px solid rgba(22,163,74,0.26)":"1px solid rgba(217,119,6,0.28)",background:e?"rgba(22,163,74,0.10)":"rgba(245,158,11,0.12)",color:e?"#15803d":"#b45309",gap:4}}const xl={display:"inline-flex",alignItems:"center",gap:2,padding:2,border:"1px solid var(--border-color, rgba(15,23,42,0.12))",borderRadius:6,background:"rgba(255,255,255,0.74)",flexShrink:0};function fl(e){return{width:24,height:24,border:"none",borderRadius:4,background:e?"var(--dql-app-accent, var(--accent, #4f46e5))":"transparent",color:e?"var(--color-text-on-accent, #fff)":"inherit",cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0}}function gl(e){return{width:"100%",alignSelf:"stretch",overflow:"auto",display:"flex",flexDirection:"column",gap:10,fontStyle:"normal",opacity:1,lineHeight:1.45,borderRadius:6,padding:e?10:0,background:e?"rgba(245,158,11,0.08)":"transparent"}}function hl(e){return{width:30,height:30,borderRadius:7,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,background:e?"rgba(245,158,11,0.14)":"rgba(79,70,229,0.10)",color:e?"#b45309":"var(--dql-app-accent, var(--accent, #4f46e5))"}}const ml={..._e,background:"rgba(79,70,229,0.08)",color:"var(--dql-app-accent, var(--accent, #4f46e5))",border:"1px solid rgba(79,70,229,0.16)"},bl={width:"100%",alignSelf:"stretch",overflow:"auto",display:"flex",flexDirection:"column",gap:9,fontStyle:"normal",opacity:1,lineHeight:1.35},vl={display:"grid",gap:6},yl={display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gap:7,alignItems:"start",border:"1px solid var(--border-color, rgba(15,23,42,0.09))",borderRadius:7,background:"rgba(255,255,255,0.56)",padding:"7px 8px"},ql={..._e,minHeight:16,borderRadius:5,padding:"1px 5px",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},wl={display:"grid",gap:1,minWidth:82,textAlign:"left",fontSize:10.5},jl={..._e,minHeight:18,background:"rgba(22,163,74,0.09)",border:"1px solid rgba(22,163,74,0.18)",color:"#15803d"},Yt={width:24,height:24,borderRadius:5,border:"1px solid var(--border-color, rgba(0,0,0,0.12))",background:"var(--surface, rgba(255,255,255,0.72))",color:"inherit",cursor:"pointer",padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center"},kl={width:26,height:26,borderRadius:6,border:"1px solid var(--border-color, rgba(0,0,0,0.12))",background:"var(--surface, rgba(255,255,255,0.72))",color:"inherit",cursor:"grab",padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},Sl={position:"absolute",top:"calc(100% + 6px)",right:0,zIndex:40,width:240,border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:8,background:"var(--color-bg, #fff)",boxShadow:"0 14px 38px rgba(0,0,0,0.16)",padding:6,display:"grid",gap:4},zl={border:"none",borderRadius:6,background:"transparent",color:"inherit",padding:"8px 9px",cursor:"pointer",textAlign:"left",display:"grid",gap:2};function Al(e){return{border:`1px solid ${e?"var(--accent, #4f46e5)":"var(--border-color, rgba(0,0,0,0.12))"}`,borderRadius:999,background:e?"var(--color-bg-active, rgba(79,70,229,0.12))":"var(--surface, rgba(0,0,0,0.02))",color:e?"var(--accent, #4f46e5)":"inherit",padding:"4px 8px",fontSize:11,fontWeight:e?750:600,cursor:"pointer"}}const la={border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:4,background:"var(--surface, rgba(0,0,0,0.02))",color:"inherit",padding:"3px 7px",cursor:"pointer",fontSize:11};function Br(e,r){const a=Et(e);return a==="heading"?He("wide",r,"heading"):a==="text"?He("standard",r,"text"):He(a==="single_value"||a==="kpi"||a==="gauge"?"compact":a==="table"||a==="pivot"?"tall":a==="line"||a==="area"?"wide":"standard",r,a)}function Er(e,r){const a=et(e),i=Nl(a==null?void 0:a.layoutIntent);return i&&i!=="auto"?He(i,r,String(e.viz.type??"table")):Br(Et(String(e.viz.type??"table")),r)}function Cl(e,r){return e.viz.type==="heading"?90:(r==null?void 0:r.component)==="BusinessBrief"||(r==null?void 0:r.component)==="NarrativePanel"||e.viz.type==="text"?180:(r==null?void 0:r.component)==="TrustCallout"||(r==null?void 0:r.component)==="ResearchActions"?210:(r==null?void 0:r.component)==="EvidenceTable"||(r==null?void 0:r.component)==="PivotTable"?330:(r==null?void 0:r.component)==="KpiMetric"?150:Math.max(280,Math.min(420,e.h*76))}function He(e,r,a="table"){const i=Math.max(1,r),n=Math.max(1,Math.ceil(i/2)),l=Math.max(1,Math.ceil(i/3));return e==="auto"?Br(a,i):e==="compact"?{w:l,h:2}:e==="wide"?{w:i,h:a==="heading"?1:4}:e==="tall"?{w:n,h:6}:e==="full"?{w:i,h:7}:{w:n,h:a==="text"?2:4}}function Ha(e,r,a){const i=String(e.viz.type??"table"),n=a==="auto"?Er(e,r):He(a,r,i);return{w:n.w,h:n.h,x:er(e.x,0,Math.max(0,r-n.w))}}function Il(e,r,a){const i=a==="auto"?Er(e,r):He(a,r,String(e.viz.type??"table"));return e.w===i.w&&e.h===i.h}function Nl(e){return e==="auto"||e==="compact"||e==="standard"||e==="wide"||e==="tall"||e==="full"?e:null}function or(e,r={w:6,h:3}){return{x:0,y:e.layout.items.reduce((i,n)=>Math.max(i,n.y+n.h),0),w:r.w,h:r.h}}function pr(e,r){const a=r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"tile",i=new Set(e.layout.items.map(n=>n.i));if(!i.has(a))return a;for(let n=2;n<1e3;n++){const l=`${a}-${n}`;if(!i.has(l))return l}return`${a}-${Date.now()}`}function Ut(e,r){const a=Math.max(1,r),i=[],n=(s,o,d,c)=>{for(let h=0;h<c;h++){const f=i[o+h];if(f){for(let x=0;x<d;x++)if(f[s+x])return!1}}return!0},l=(s,o,d,c)=>{for(let h=0;h<c;h++){const f=o+h;i[f]||(i[f]=new Array(a).fill(!1));for(let x=0;x<d;x++)i[f][s+x]=!0}};return e.map(s=>{const o=er(Math.round(s.w||1),1,a),d=Math.max(1,Math.round(s.h||1));let c=0,h=0;e:for(let f=0;;f++)for(let x=0;x+o<=a;x++)if(n(x,f,o,d)){c=x,h=f;break e}return l(c,h,o,d),{...s,x:c,y:h,w:o,h:d}})}function Tl(e,r){const a=[...e].map((i,n)=>({item:i,index:n})).sort((i,n)=>{const l=vr(i.item)-vr(n.item);return l!==0?l:i.index-n.index}).map(({item:i})=>{const n=Er(i,r);return{...i,w:n.w,h:n.h}});return Ut(a,r)}function Pl(e,r,a){const i=e.filter(s=>s.i!==r.i).sort((s,o)=>ct(s,a)-ct(o,a)),n=ct(r,a),l=i.findIndex(s=>ct(s,a)>n);return l===-1?[...i,r]:[...i.slice(0,l),r,...i.slice(l)]}function ct(e,r){return e.y*r+e.x}function vr(e){const r=et(e);if((r==null?void 0:r.role)==="business_summary")return 0;if((r==null?void 0:r.role)==="kpi")return 1;if((r==null?void 0:r.component)==="RankingPanel"||(r==null?void 0:r.component)==="TrendPanel")return 2;if((r==null?void 0:r.component)==="EvidenceTable"||(r==null?void 0:r.component)==="PivotTable")return 3;if((r==null?void 0:r.component)==="TrustCallout"||(r==null?void 0:r.component)==="ResearchActions")return 4;if((r==null?void 0:r.role)==="narrative")return 5;const a=Et(String(e.viz.type??"table"));return a==="heading"?0:a==="single_value"||a==="kpi"||a==="gauge"?1:a==="line"||a==="area"||a==="bar"||a==="pie"||a==="funnel"||a==="map"?2:a==="table"||a==="pivot"?3:a==="text"?4:2}function Et(e){const r=(e??"table").toLowerCase().replace(/-/g,"_");return r==="single_value"||r==="kpi"||r==="gauge"||r==="line"||r==="bar"||r==="area"||r==="pie"||r==="donut"||r==="grouped_bar"||r==="stacked_bar"||r==="scatter"||r==="heatmap"||r==="histogram"||r==="waterfall"||r==="pivot"||r==="map"||r==="funnel"||r==="sankey"||r==="heading"||r==="text"?r:"table"}function er(e,r,a){return Math.min(a,Math.max(r,e))}function $l({app:e}){var o,d;const{state:r,dispatch:a}=ga(),[i,n]=p.useState(!1),l=p.useRef(null);p.useEffect(()=>{if(!i)return;const c=h=>{var f;(f=l.current)!=null&&f.contains(h.target)||n(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[i]);const s=r.activePersona?`${r.activePersona.displayName??r.activePersona.userId} [${r.activePersona.roles.join(", ")}]`:"View as: Owner";return!e||e.members.length===0?t.jsx("span",{style:{fontSize:12,opacity:.6},children:s}):t.jsxs("div",{ref:l,style:{position:"relative"},children:[t.jsxs("button",{onClick:()=>n(c=>!c),style:{padding:"6px 12px",fontSize:12,background:"var(--surface, rgba(0,0,0,0.04))",border:"1px solid var(--border-color, rgba(0,0,0,0.1))",borderRadius:6,cursor:"pointer",color:"inherit",display:"inline-flex",alignItems:"center",gap:6},"aria-haspopup":"menu","aria-expanded":i,children:[t.jsx("span",{style:{fontSize:11,opacity:.65},children:"View as:"}),t.jsx("span",{style:{fontWeight:600},children:((o=r.activePersona)==null?void 0:o.displayName)??((d=r.activePersona)==null?void 0:d.userId)??"Owner"}),r.activePersona&&t.jsxs("span",{style:{fontSize:11,opacity:.7},children:["[",r.activePersona.roles.join(", "),"]"]}),t.jsx("span",{style:{fontSize:10,opacity:.6},children:"▾"})]}),i&&t.jsxs("div",{role:"menu",style:{position:"absolute",top:"100%",right:0,marginTop:4,minWidth:240,background:"var(--surface-elevated, #fff)",border:"1px solid var(--border-color, rgba(0,0,0,0.12))",borderRadius:6,boxShadow:"0 4px 12px rgba(0,0,0,0.08)",zIndex:50},children:[t.jsxs("button",{role:"menuitem",onClick:async()=>{await D.clearPersona(),a({type:"SET_ACTIVE_PERSONA",persona:null}),n(!1)},style:sa(r.activePersona===null),children:[t.jsx("div",{style:{fontWeight:500},children:"Owner (local)"}),t.jsx("div",{style:{fontSize:11,opacity:.65},children:"Default — no RLS narrowing"})]}),t.jsx("div",{style:{height:1,background:"var(--border-color, rgba(0,0,0,0.08))",margin:"4px 0"}}),e.members.map(c=>{var h;return t.jsxs("button",{role:"menuitem",onClick:async()=>{const f=await D.setPersona(c.userId,e.id);a({type:"SET_ACTIVE_PERSONA",persona:f}),n(!1)},style:sa(((h=r.activePersona)==null?void 0:h.userId)===c.userId),children:[t.jsx("div",{style:{fontWeight:500},children:c.displayName??c.userId}),t.jsxs("div",{style:{fontSize:11,opacity:.65},children:["[",c.roles.join(", "),"]",c.attributes&&Object.keys(c.attributes).length>0?` · ${Object.entries(c.attributes).map(([f,x])=>`${f}=${x}`).join(", ")}`:""]})]},c.userId)})]})]})}function sa(e){return{display:"block",width:"100%",textAlign:"left",padding:"8px 12px",background:e?"var(--surface-hover, rgba(0,0,0,0.06))":"transparent",border:"none",cursor:"pointer",color:"inherit",fontSize:13}}function oa(e){if(!e)return[];const r=new Map;for(const i of e.filters??[])Rl(i)&&r.set(i.id,{...i});const a=i=>{var n,l;return((n=i.block)==null?void 0:n.blockId)??((l=i.block)==null?void 0:l.ref)};for(const i of e.layout.items??[]){const n=a(i);for(const l of i.filterBindings??[]){const s=l.mode??(l.binding?"predicate":void 0);if(!n||s!=="predicate"||!l.binding||l.unsupportedReason)continue;const o=r.get(l.filter);o&&(o.bindsTo||(o.bindsTo=l.binding),o.sourceBlockId||(o.sourceBlockId=n))}for(const l of i.parameterBindings??[]){const s=l.filter||l.field||l.param;s&&(r.has(s)||El(r,l)||r.set(s,Bl(l)))}}return Array.from(r.values())}function Rl(e){var r;return!(e.type==="select"&&!((r=e.options)!=null&&r.length)&&e.default===void 0)}function Bl(e){const r=e.filter||e.field||e.param;return{id:r,type:Ll(r,e.parameterType),default:e.default??Qa(r),bindsTo:e.param}}function El(e,r){return Array.from(e.values()).some(a=>r.filter&&a.id===r.filter||r.field&&a.bindsTo===r.field?!0:!!(r.param&&a.bindsTo===r.param))}function Ll(e,r){return r==="number"||r==="number[]"?"number":r==="boolean"?"boolean":r==="date"||r==="date[]"?"date":/(_at$|_date$|_time$|_ts$|date|time|day|week|month|quarter|period)/i.test(e)?"daterange":/(top[_-]?n|limit|count|number|year|season)/i.test(e)?"number":"string"}function Qa(e){const r=e.toLowerCase();return/(top[_-]?n|limit)/.test(r)?5:/(season|year).*start|start.*(season|year)/.test(r)?2016:/(season|year).*end|end.*(season|year)/.test(r)?2017:""}function _l(e,r){const a=e.filter(i=>r==null?void 0:r.tiles.some(n=>{var l;return n.tileId===i&&((l=n.repair)==null?void 0:l.approvalEligible)===!1}));return{ready:e.length>0&&e.every(i=>r==null?void 0:r.tiles.some(n=>{var l;return n.tileId===i&&n.status==="ok"&&((l=n.repair)==null?void 0:l.approvalEligible)!==!1})),repairedTileIds:a}}const Ml=p.lazy(()=>kr(()=>import("./UnifiedAgentRunPanel-Dj4AXAhT.js").then(e=>e.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])).then(e=>({default:e.UnifiedAgentRunPanel}))),Ol=p.lazy(()=>kr(()=>import("./AgentAnswerCard-Cp0eh6zU.js").then(e=>e.A),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10,11])).then(e=>({default:e.StructuredAnswerText}))),dr=new Map,yr="Build an analytics app from my certified DQL blocks and available warehouse tables.",qr="dql.apps.active-ai-build.v1";function pa(){try{const e=window.localStorage.getItem(qr);if(!e)return null;const r=JSON.parse(e);return typeof r.sessionId=="string"&&typeof r.prompt=="string"&&typeof r.createdAt=="string"?r:null}catch{return null}}function at(e){try{e?window.localStorage.setItem(qr,JSON.stringify(e)):window.localStorage.removeItem(qr)}catch{}}function Wl(){var r;const e=typeof((r=window.crypto)==null?void 0:r.randomUUID)=="function"?window.crypto.randomUUID().replace(/-/g,"").slice(0,12):Math.random().toString(36).slice(2,14);return`app_build_${Date.now()}_${e}`}const Ka=[{title:"Revenue story",domain:"Revenue",prompt:"Build a weekly revenue health app for the COO with risk flags."},{title:"Customer 360",domain:"Customer",prompt:"Customer 360: value, engagement, retention, orders, and service risk by segment."},{title:"Quality monitor",domain:"Platform",prompt:"Build a data quality monitor with freshness, failing tests, null rates, and model risk notes."},{title:"Experiment Readout",domain:"Product",prompt:"Create an experiment readout for product leadership with outcome, guardrails, and decision checklist."}],Fl=[{id:"match",title:"Find blocks",description:"Search certified blocks, terms, views, and lineage."},{id:"story",title:"Shape story",description:"Order the app around the business decision."},{id:"draft",title:"Draft gaps",description:"Keep missing sections visible as draft work instead of hiding them."}],Vl={all:"All",mine:"Mine",shared:"Shared",fav:"Favourites"};function Hl(e){return e==="obsidian"||e==="dark"||e==="midnight"?"obsidian":e==="white"||e==="arctic"?"white":"paper"}function mo(){var _r,Mr;const e=ci(ui(u=>({activeAppExperience:u.activeAppExperience,activeAppId:u.activeAppId,activeAppSection:u.activeAppSection,activeDashboardId:u.activeDashboardId,apps:u.apps,appsLoading:u.appsLoading,authoredDomains:u.authoredDomains,themeMode:u.themeMode}))),r=ma(),a=xi(),{operations:i,track:n}=fi(),l=p.useMemo(()=>Hl(e.themeMode),[e.themeMode]),[s,o]=p.useState(()=>e.activeAppId?"workspace":"library"),d=e.activeAppExperience,c=e.activeAppSection,h=u=>{r({type:"SET_APP_WORKSPACE_STATE",experience:u})},f=u=>{r({type:"SET_APP_WORKSPACE_STATE",section:u})},[x,y]=p.useState(""),[T,z]=p.useState("all"),[m,I]=p.useState(()=>new Set),[A,W]=p.useState(null),[N,b]=p.useState(null),[E,M]=p.useState(!1),[F,O]=p.useState("ai"),[be,ie]=p.useState("shared_project"),[K,U]=p.useState(!1),[L,V]=p.useState(yr),[C,he]=p.useState("Business Analytics"),[qe,H]=p.useState(""),ne=p.useMemo(()=>gi(e.authoredDomains),[e.authoredDomains]),[we,Ne]=p.useState("analytics"),[me,te]=p.useState("stakeholders"),[re,Q]=p.useState(null),[ce,Te]=p.useState([]),[je,Z]=p.useState(!1),[j,P]=p.useState(()=>new Set),[R,G]=p.useState(null),[ee,fe]=p.useState(null),ge=p.useRef(pa()),[ve,J]=p.useState(((_r=ge.current)==null?void 0:_r.sessionId)??null),[le,se]=p.useState(((Mr=ge.current)==null?void 0:Mr.operationId)??null),w=p.useRef(null),[de,Ae]=p.useState(new Set),[Pe,oe]=p.useState({}),[ze,pe]=p.useState(!1),[B,Y]=p.useState(null),[ke,g]=p.useState(!1),[ue,ye]=p.useState(!1),[$e,tt]=p.useState(""),[pt,Oe]=p.useState(!1),[Fe,gt]=p.useState(null),[Xe,ht]=p.useState(null),[mt,Lt]=p.useState(!1),[_t,bt]=p.useState(null),[jt,kt]=p.useState({}),[Mt,St]=p.useState({}),[ar,zt]=p.useState(!1),[Ot,At]=p.useState(!1),Wt=p.useCallback(u=>{zt(u),u||At(!1)},[]),[dt,vt]=p.useState(0),Ft=p.useRef(0),rt=Or({queryKey:["apps"],queryFn:()=>D.listAppsStrict(),staleTime:3e4}),v=Or({queryKey:["persona"],queryFn:()=>D.getPersona(),staleTime:6e4});p.useEffect(()=>{r({type:"SET_APPS_LOADING",loading:rt.isLoading}),rt.data&&r({type:"SET_APPS",apps:rt.data})},[rt.data,rt.isLoading,r]),p.useEffect(()=>{v.data&&r({type:"SET_ACTIVE_PERSONA",persona:v.data})},[r,v.data]);const k=p.useCallback(u=>{var X,Le;if(fe(u),o("create"),O("ai"),V(u.prompt||yr),Q(u.inputs.existingAppId??null),H(lr(u.inputs.domain,e.authoredDomains)),Ne(u.inputs.owner??"analytics"),te(u.inputs.audience??"stakeholders"),ie(u.inputs.mode==="personal"?"personal":"shared_project"),U(u.inputs.mode==="personal"&&u.inputs.exploreGaps===!0),u.status==="building"){g(!0);return}if(g(!1),u.status==="error"){Y(u.error??"The App proposal did not complete.");return}Y(null),Ae(u.proposal?Si(u.proposal):new Set),oe(Object.fromEntries((((X=u.proposal)==null?void 0:X.tiles)??[]).map(yt=>[yt.id,{title:yt.title,viz:yt.viz}])));const S=u.plan,$=u.inputs.existingAppId?(Le=S==null?void 0:S.pages[0])==null?void 0:Le.title:S==null?void 0:S.name;$&&he($),S!=null&&S.audience&&te(S.audience)},[e.authoredDomains]),q=p.useMemo(()=>ve?i.find(u=>u.id===le)??i.find(u=>u.type==="app_ai_build"&&u.scope===`app-build:${ve}`)??null:null,[le,ve,i]);p.useEffect(()=>{const u=ge.current;u&&(ge.current=null,V(u.prompt),Q(u.existingAppId??null),O("ai"),g(!0),o("create"))},[]),p.useEffect(()=>{if(!ve)return;if(q!=null&&q.id&&q.id!==le){se(q.id);const X=pa();(X==null?void 0:X.sessionId)===ve&&at({...X,operationId:q.id})}q&&(q.status==="queued"||q.status==="running")&&(g(!0),o("create"));let u=!1,S;const $=async()=>{var Le;const X=await D.getAppAiBuild(ve);if(!u){if(!X||X.status==="building"){if(X&&k(X),q&&["failed","cancelled","interrupted"].includes(q.status)){g(!1),Y(((Le=q.error)==null?void 0:Le.message)??(q.status==="cancelled"?"The App proposal was cancelled.":"The App proposal did not complete."));return}S=window.setTimeout(()=>{$()},900);return}w.current===X.id&&(ee==null?void 0:ee.status)===X.status||(w.current=X.id,k(X))}};return $(),()=>{u=!0,S!==void 0&&window.clearTimeout(S)}},[q,k,le,ee==null?void 0:ee.status,ve]),p.useEffect(()=>{if(s!=="create")return;const u=new AbortController,S=window.setTimeout(()=>{Z(!0),D.recommendAppBlocks({domain:qe||void 0,purpose:L,audience:"stakeholder",certifiedOnly:!0},u.signal).then($=>{u.signal.aborted||Te($)}).catch(()=>{}).finally(()=>{u.signal.aborted||Z(!1)})},300);return()=>{window.clearTimeout(S),u.abort()}},[s,F,qe,L]),p.useEffect(()=>{if(!e.activeAppId||s!=="workspace"){W(null),b(null);return}let u=!1;M(!0);const S=D.getApp(e.activeAppId).then(X=>{u||W(X)}),$=e.activeDashboardId?D.getDashboard(e.activeAppId,e.activeDashboardId).then(X=>{u||b(X)}):Promise.resolve().then(()=>{u||b(null)});return Promise.allSettled([S,$]).finally(()=>{u||M(!1)}),()=>{u=!0}},[e.activeAppId,e.activeDashboardId,s]);const _=p.useMemo(()=>JSON.stringify(oa((N==null?void 0:N.dashboard)??null)),[N==null?void 0:N.dashboard]),xe=p.useMemo(()=>oa((N==null?void 0:N.dashboard)??null),[N==null?void 0:N.dashboard,_]);p.useEffect(()=>{const u=xe;kt(S=>{const $={};for(const X of u)$[X.id]=S[X.id]??Pt(X);return ca(S,$)?S:$}),St(S=>{const $={};for(const X of u)$[X.id]=S[X.id]??Pt(X);return ca(S,$)?S:$})},[N==null?void 0:N.dashboard.id,_,xe]);const Ce=async(u,S,$,X)=>{r({type:"SET_APPS_LOADING",loading:!0});const Le=await D.listApps();r({type:"SET_APPS",apps:Le}),r({type:"SET_APPS_LOADING",loading:!1}),u&&r({type:"OPEN_APP",appId:u,dashboardId:S,...X}),o($)},Ke=p.useMemo(()=>{const u=x.trim().toLowerCase();return e.apps.filter(S=>T==="mine"&&(S.storage??"shared")!=="mine"||T==="shared"&&(S.storage??"shared")!=="shared"||T==="fav"&&!m.has(S.id)?!1:u?[S.name,S.description??"",S.domain,S.audience??"",S.lifecycle??"",...S.tags??[],...S.owners??[],...S.dashboards.map(X=>X.title)].join(" ").toLowerCase().includes(u):!0)},[m,T,x,e.apps]),Re=p.useMemo(()=>e.apps.find(u=>u.id===e.activeAppId)??null,[e.apps,e.activeAppId]),Ve=p.useCallback(u=>{W(S=>S&&{...S,investigations:u})},[]),ae=(u,S="view")=>{r({type:"OPEN_APP",appId:u.id,experience:S,section:"dashboards"}),o("workspace")},Je=(u=L,S,$=be,X=!1)=>{at(null),J(null),se(null),Q(null),O("ai"),ie($),U($==="personal"&&X),V(u),H(lr(S,e.authoredDomains)),P(new Set),Y(null),G(null),fe(null),oe({}),o("create"),vt(Le=>Le+1)},ir=()=>{at(null),J(null),se(null),Q(null),O("classic"),Y(null),G(null),fe(null),oe({}),o("create")},nr=u=>{P(S=>{const $=new Set(S);return $.has(u)?$.delete(u):$.add(u),$})},Ct=async u=>{const S=Array.isArray(u)?u.filter(Ze=>typeof Ze=="string"):[],$=L.trim();if(!$){Y("Describe the app you want to build.");return}g(!0),Y(null);const X=Array.from(F==="classic"?j:new Set([...Array.from(j),...S])),Le=Wl(),yt={sessionId:Le,prompt:$,...re?{existingAppId:re}:{},createdAt:new Date().toISOString()};at(yt),J(Le),se(null),w.current=null,fe(null),G(null);try{const Ze=await D.proposeAppAiBuildInBackground({sessionId:Le,prompt:$,existingAppId:re??void 0,domain:qe.trim()||void 0,owner:we.trim()||void 0,force:!1,selectedBlockIds:X,plannerMode:"ai_assisted",mode:be==="personal"?"personal":"stakeholder",exploreGaps:be==="personal"&&K});n(Ze.operation),se(Ze.operation.id),at({...yt,operationId:Ze.operation.id})}catch(Ze){g(!1),Y(Ze instanceof Error?Ze.message:String(Ze)),at(null),J(null),se(null)}};p.useEffect(()=>{s!=="create"||F!=="ai"||dt===0||Ft.current===dt||(Ft.current=dt,Ct())},[s,F,dt]);const Za=u=>{P(S=>{const $=new Set(S);return $.add(u),$}),Ct([u])},Da=u=>{Ae(S=>{const $=new Set(S);return $.has(u)?$.delete(u):$.add(u),$})},Ua=async()=>{var X;if(!ee||ee.status!=="proposed")return;pe(!0),Y(null);const u=await D.commitAppAiBuild(ee.id,{selectedTileIds:Array.from(de),expectedProposalHash:ee.proposalHash,...re?{pageTitle:C.trim()||void 0}:{appName:C.trim()||void 0},audience:me.trim()||void 0,tileOverrides:Pe});if(pe(!1),!u.ok){Y(u.error);return}const S=u.session;fe(S),at(null),J(null),se(null);const $={ok:!0,plan:S.plan,validation:S.validation,generated:{paths:S.generatedPaths},app:u.app,dashboardId:u.dashboardId};G($),zt(!0),await Ce(((X=u.app)==null?void 0:X.id)??$.plan.appId,u.dashboardId,"workspace",{experience:"view",section:"dashboards"})},ei=async()=>{if(!C.trim()){Y("Name the app before creating it.");return}if(!qe.trim()){Y("Choose a domain before creating the app.");return}g(!0),Y(null);try{const u=await D.createApp({name:C.trim(),domain:qe.trim(),dashboardTitle:"Overview",purpose:L.trim(),audience:"stakeholder",visibility:"shared",lifecycle:"draft",tags:["app-builder",qe.trim().toLowerCase()],owners:[we.trim()||"owner@local"],selectedBlockIds:Array.from(j)});await Ce(u.app.id,u.dashboardId,"workspace",{experience:"build",section:"dashboards"})}catch(u){Y(u instanceof Error?u.message:String(u))}finally{g(!1)}},ti=()=>{var S;const u=((S=R==null?void 0:R.app)==null?void 0:S.id)??(R==null?void 0:R.plan.appId);u&&(r({type:"OPEN_APP",appId:u,dashboardId:(R==null?void 0:R.dashboardId)??void 0,experience:"build",section:"dashboards"}),o("workspace"))},ri=()=>{if(!e.activeAppId||!A)return;const u=$e.trim();if(!u){gt("Describe the business question this page should answer.");return}gt(null),at(null),J(null),se(null),Q(e.activeAppId),O("ai"),V(u),he("New App page"),H(lr(A.app.domain,e.authoredDomains)),Ne(A.app.owners[0]??"analytics"),te(A.app.audience??"stakeholders");const S=A.app.publicationIntent??(A.app.visibility==="private"?"personal":"shared_project");ie(S),U(S==="personal"&&pt),P(new Set),Y(null),G(null),fe(null),oe({}),ye(!1),tt(""),Oe(!1),o("create"),vt($=>$+1)},ai=p.useMemo(()=>({...Mt}),[Mt]),ii=p.useCallback((u,S)=>{kt($=>({...$,[u.id]:us(u,S)}))},[]),ni=p.useCallback(()=>{St({...jt})},[jt]),li=p.useCallback(()=>{const u=Object.fromEntries(xe.map(S=>[S.id,Pt(S)]));kt(u),St(u)},[xe]),si=async()=>{if(!(!Xe||mt)){Lt(!0),bt(null);try{await D.deleteApp(Xe.id),I(u=>{const S=new Set(u);return S.delete(Xe.id),S}),r({type:"SET_APPS",apps:e.apps.filter(u=>u.id!==Xe.id)}),e.activeAppId===Xe.id&&r({type:"CLOSE_APP"}),ht(null),o("library"),await a.invalidateQueries({queryKey:["apps"]})}catch(u){bt(u instanceof Error?u.message:String(u))}finally{Lt(!1)}}};return t.jsxs("div",{className:`dql-apps-waterline dql-apps-theme-${l}`,children:[t.jsx("style",{children:Js}),s==="library"?t.jsx(Ql,{apps:Ke,allApps:e.apps,loading:e.appsLoading,search:x,filter:T,favorites:m,onSearch:y,onFilter:z,onToggleFavorite:u=>{I(S=>{const $=new Set(S);return $.has(u)?$.delete(u):$.add(u),$})},onStartAi:(u,S,$)=>Je(u,void 0,S,$),onStartClassic:ir,onOpenApp:ae,onDeleteApp:u=>{bt(null),ht(u)}}):s==="create"?t.jsx(Yl,{mode:F,existingAppId:re,appName:C,prompt:L,domain:qe,domainOptions:ne,owner:we,audience:me,promptExamples:Ka,catalog:ce,catalogLoading:je,selectedBlocks:j,generated:R,buildSession:ee,proposalSelection:de,proposalEdits:Pe,committing:ze,themeMode:e.themeMode,onToggleProposalTile:Da,onProposalEdit:(u,S)=>oe($=>({...$,[u]:{...$[u],...S}})),onCommitProposal:()=>void Ua(),onAddBlock:Za,saving:ke,error:B,onBack:()=>o(re?"workspace":"library"),onModeChange:u=>{O(u),u==="ai"&&P(new Set)},onAppNameChange:he,onPromptChange:V,onDomainChange:H,onOwnerChange:Ne,onAudienceChange:te,onToggleBlock:nr,onBuild:()=>F==="ai"?void Ct():void ei(),onOpenGenerated:ti}):t.jsx(Jl,{app:Re,appDoc:A,dashboardDoc:N,loading:E,experience:d,section:c,explainOpen:ar,explainExpanded:Ot,dashboardFilters:xe,dashboardFilterValues:jt,themeMode:e.themeMode,variables:ai,onBack:()=>o("library"),onExperienceChange:h,onSectionChange:f,onDashboardFilterChange:ii,onApplyDashboardFilters:ni,onResetDashboardFilters:li,onExplainChange:Wt,onExplainExpandedChange:At,onAddPage:()=>{Oe(!1),ye(!0)},onOpenDashboard:u=>r({type:"OPEN_DASHBOARD",dashboardId:u}),onOpenApp:(u,S)=>{Ce(u,S,"workspace",{experience:"view",section:"dashboards"})},onDashboardChanged:u=>{b(S=>S&&{...S,dashboard:u}),Ce(e.activeAppId,u.id,"workspace")},onInvestigationsChanged:Ve,onOpenLineageNode:u=>{r({type:"OPEN_LINEAGE_DETAIL",nodeId:u,returnTo:e.activeAppId?{view:"apps",appId:e.activeAppId,dashboardId:e.activeDashboardId,label:Re==null?void 0:Re.name,experience:d,section:c}:null})}}),ue&&t.jsx(Qs,{title:$e,allowExploration:(A==null?void 0:A.app.publicationIntent)==="personal"||!(A!=null&&A.app.publicationIntent)&&(A==null?void 0:A.app.visibility)==="private",exploreGaps:pt,error:Fe,onChange:tt,onExploreGapsChange:Oe,onCancel:()=>{ye(!1),Oe(!1),gt(null)},onCreate:ri}),Xe&&t.jsx(Gl,{app:Xe,deleting:mt,error:_t,onCancel:()=>{mt||(ht(null),bt(null))},onConfirm:()=>void si()})]})}function Ql({apps:e,allApps:r,loading:a,search:i,filter:n,favorites:l,onSearch:s,onFilter:o,onToggleFavorite:d,onStartAi:c,onStartClassic:h,onOpenApp:f,onDeleteApp:x}){const y=Gs(r,l),[T,z]=p.useState(yr),[m,I]=p.useState("shared_project"),[A,W]=p.useState(!1),N=()=>{const b=T.trim();b&&c(b,m,m==="personal"&&A)};return t.jsxs("main",{className:"dql-apps-wrap",children:[t.jsxs("section",{className:"dql-apps-createhead",children:[t.jsx("h1",{children:"Build an app"}),t.jsx("p",{children:"Choose the destination, describe the business goal, and review the Build Brief before DQL writes an App draft."})]}),t.jsxs("section",{className:"dql-apps-composer","aria-label":"Build an app with AI",children:[t.jsxs("div",{className:"dql-apps-targets","aria-label":"App draft target",children:[t.jsxs("button",{type:"button",className:m==="shared_project"?"on":"",onClick:()=>{I("shared_project"),W(!1)},children:[t.jsx(Zi,{size:12})," Shared Project",t.jsx("small",{children:"Draft privately, then publish when governed"})]}),t.jsxs("button",{type:"button",className:m==="personal"?"on":"",onClick:()=>I("personal"),children:[t.jsx(Xi,{size:12})," Personal Draft",t.jsx("small",{children:"Explore privately with review-required analysis"})]})]}),t.jsx("textarea",{value:T,onChange:b=>z(b.target.value),rows:2,"aria-label":"App build request",placeholder:"Build an EMEA revenue app for the CFO…",onKeyDown:b=>{b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),N())}}),t.jsxs("div",{className:"dql-apps-composer-row",children:[t.jsxs("span",{className:"dql-apps-composer-chip",children:[t.jsx(ot,{size:11})," Certified + semantic sources"]}),m==="personal"?t.jsxs("label",{className:"dql-apps-explore-toggle",children:[t.jsx("input",{type:"checkbox",checked:A,onChange:b=>W(b.target.checked)}),"Explore uncovered gaps"]}):null,t.jsx("i",{}),t.jsxs("button",{type:"button",className:"dql-apps-composer-blank",onClick:h,children:[t.jsx(ft,{size:12})," Create blank"]}),t.jsx("button",{type:"button",className:"dql-apps-composer-send",onClick:N,disabled:!T.trim(),title:"Build",children:t.jsx(hi,{size:15,strokeWidth:2})})]})]}),t.jsxs("div",{className:"dql-apps-try",children:[t.jsx("span",{children:"Try:"}),Ka.slice(0,3).map(b=>t.jsx("button",{type:"button",onClick:()=>z(b.prompt),children:b.title},b.title))]}),t.jsxs("div",{className:"dql-apps-sectionhead",children:[t.jsx("span",{children:"App library"}),t.jsx("i",{}),t.jsxs("b",{children:[r.length," app",r.length===1?"":"s"]})]}),t.jsxs("div",{className:"dql-apps-libbar",children:[t.jsx("div",{className:"dql-apps-filter-tabs",children:["all","mine","shared","fav"].map(b=>t.jsxs("button",{className:n===b?"on":"",onClick:()=>o(b),children:[Vl[b]," ",t.jsx("span",{children:y[b]})]},b))}),t.jsxs("label",{className:"dql-apps-search",children:[t.jsx(Ue,{size:15,strokeWidth:2,"aria-hidden":"true"}),t.jsx("input",{value:i,onChange:b=>s(b.target.value),placeholder:"Search apps, domains, owners..."})]})]}),a&&r.length===0?t.jsx(Ie,{title:"Loading Apps...",detail:"Reading local app files from this DQL project."}):e.length===0?t.jsx(Ie,{title:"No Apps match this view.",detail:"Change the filter or start a new App above."}):t.jsx("div",{className:"dql-apps-grid",children:e.map(b=>t.jsx(Kl,{app:b,favorite:l.has(b.id),onToggleFavorite:()=>d(b.id),onOpen:()=>f(b,"view"),onEdit:()=>f(b,"build"),onDelete:()=>x(b)},b.id))})]})}function Kl({app:e,favorite:r,onToggleFavorite:a,onOpen:i,onEdit:n,onDelete:l}){var f,x;const s=e.certification==="certified"||e.lifecycle==="certified",o=((f=e.drafts)==null?void 0:f.length)??0,d=e.investigations??0,c=e.aiPins??0,h=s?"Certified app":o>0||d>0||c>0?"Review needed":"Draft app";return t.jsxs("article",{className:"dql-app-card",children:[t.jsxs("div",{className:"dql-app-card-body",onClick:i,role:"button",tabIndex:0,children:[t.jsxs("div",{className:"dql-app-card-top",children:[t.jsx("span",{className:"dql-app-eyebrow",children:e.domain||"Domain"}),t.jsx("button",{type:"button",className:`dql-app-star ${r?"on":""}`,onClick:y=>{y.stopPropagation(),a()},"aria-label":r?"Remove favourite":"Add favourite",children:t.jsx($i,{size:14,strokeWidth:1.8})})]}),t.jsx(st,{tone:s?"certified":o>0?"draft":"agentic",children:s?"certified":o>0?"mixed":e.lifecycle??"draft"}),t.jsx("h3",{children:e.name}),t.jsx("p",{children:Ya(e.description||`${e.name} consumption surface for ${e.domain}.`)}),t.jsxs("div",{className:"dql-app-card-mini",children:[t.jsx(fr,{label:"Pages",value:String(e.dashboards.length)}),t.jsx(fr,{label:"Books",value:String(((x=e.notebooks)==null?void 0:x.length)??0)}),t.jsx(fr,{label:"Drafts",value:String(o)})]}),t.jsxs("div",{className:"dql-app-card-signals",children:[t.jsxs("span",{children:[t.jsx(ot,{size:13})," ",h]}),t.jsxs("span",{children:[t.jsx(Ue,{size:13})," ",d," analysis"]}),t.jsxs("span",{children:[t.jsx(De,{size:13})," ",c," local insights"]})]})]}),t.jsxs("div",{className:"dql-app-card-depth",children:[t.jsx("span",{children:Ys(e)}),t.jsxs("button",{type:"button",className:"dql-app-card-act",onClick:i,title:"View app",children:[t.jsx(va,{size:12})," View"]}),t.jsxs("button",{type:"button",className:"dql-app-card-act",onClick:n,title:"Edit app",children:[t.jsx(Sa,{size:12})," Edit"]}),t.jsxs("button",{type:"button",className:"dql-app-card-act danger",onClick:l,title:"Delete app",children:[t.jsx(Sr,{size:12})," Delete"]})]})]})}function Gl({app:e,deleting:r,error:a,onCancel:i,onConfirm:n}){const[l,s]=p.useState(""),o=l.trim()===e.name;return t.jsx("div",{role:"presentation",onMouseDown:d=>{d.target===d.currentTarget&&i()},style:{position:"fixed",inset:0,zIndex:1800,background:"rgba(0,0,0,0.42)",display:"grid",placeItems:"center",padding:24},children:t.jsxs("section",{role:"dialog","aria-modal":"true","aria-labelledby":"delete-app-title",style:{width:"min(460px, 100%)",borderRadius:14,border:"1px solid var(--border-default)",background:"var(--bg-1)",color:"var(--text-primary)",boxShadow:"0 22px 60px rgba(0,0,0,0.28)",padding:20,display:"grid",gap:14},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[t.jsx("span",{style:{width:34,height:34,borderRadius:9,display:"grid",placeItems:"center",background:"var(--status-error-bg)",color:"var(--status-error)",border:"1px solid var(--status-error-border)"},children:t.jsx(Sr,{size:16})}),t.jsxs("div",{children:[t.jsxs("h2",{id:"delete-app-title",style:{margin:0,fontSize:16},children:["Delete ",e.name,"?"]}),t.jsx("p",{style:{margin:"3px 0 0",color:"var(--text-tertiary)",fontSize:11.5},children:"The App package will leave the project and move to local DQL trash for recovery."})]})]}),t.jsxs("label",{style:{display:"grid",gap:6,color:"var(--text-secondary)",fontSize:11.5},children:["Type ",t.jsx("strong",{style:{color:"var(--text-primary)"},children:e.name})," to confirm",t.jsx("input",{autoFocus:!0,value:l,onChange:d=>s(d.target.value),onKeyDown:d=>{d.key==="Enter"&&o&&!r&&n()},disabled:r,style:{height:36,borderRadius:8,border:"1px solid var(--border-default)",background:"var(--bg-2)",color:"var(--text-primary)",padding:"0 10px",outline:"none",font:"12px var(--font-ui)"}})]}),a?t.jsx("div",{role:"alert",style:{color:"var(--status-error)",fontSize:11.5},children:a}):null,t.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[t.jsx("button",{type:"button",onClick:i,disabled:r,style:{height:34,borderRadius:8,border:"1px solid var(--border-default)",background:"var(--bg-2)",color:"var(--text-secondary)",padding:"0 13px",cursor:r?"default":"pointer"},children:"Cancel"}),t.jsx("button",{type:"button",onClick:n,disabled:!o||r,style:{height:34,borderRadius:8,border:0,background:"var(--status-error)",color:"#fff",padding:"0 13px",cursor:o&&!r?"pointer":"default",opacity:o&&!r?1:.5},children:r?"Deleting…":"Delete App"})]})]})})}function Yl({mode:e,existingAppId:r,appName:a,prompt:i,domain:n,domainOptions:l,owner:s,audience:o,promptExamples:d,catalog:c,catalogLoading:h,selectedBlocks:f,generated:x,buildSession:y,proposalSelection:T,proposalEdits:z,committing:m,themeMode:I,onToggleProposalTile:A,onProposalEdit:W,onCommitProposal:N,saving:b,error:E,onBack:M,onModeChange:F,onAppNameChange:O,onPromptChange:be,onDomainChange:ie,onOwnerChange:K,onAudienceChange:U,onToggleBlock:L,onBuild:V,onOpenGenerated:C,onAddBlock:he}){var P,R,G,ee,fe,ge,ve,J,le,se;const[qe,H]=p.useState(!1),[ne,we]=p.useState(""),Ne=c.filter(w=>f.has(w.id)),me=n.trim()||"Auto domain",te=s.trim()||"Local owner",re=(y==null?void 0:y.status)==="proposed"?y.proposal:void 0,Q=(x==null?void 0:x.plan)??(y==null?void 0:y.plan)??Ks(a,i,n,s,Ne),Te=(((P=Q.pages[0])==null?void 0:P.tiles)??[]).filter(ls),je=(y==null?void 0:y.warnings)??[],Z=ss(Q),j=!!r;if(e==="ai"){const w=(re==null?void 0:re.tiles)??[],de=w.filter(g=>g.certification==="certified").length,Ae=w.filter(g=>g.certification==="reviewed_semantic").length,Pe=w.filter(g=>T.has(g.id)).length,oe=new Set(w.map(g=>g.blockId).filter(Boolean)),ze=ne.trim().toLowerCase(),pe=c.filter(g=>!oe.has(g.id)&&(!ze||g.name.toLowerCase().includes(ze)||(g.description??"").toLowerCase().includes(ze))),B=((R=Q.globalFilters)!=null&&R.length?Q.globalFilters:((G=Q.pages[0])==null?void 0:G.filters)??[]).slice(0,4),Y=g=>{const ue=g.toLowerCase();return ue.includes("kpi")||ue.includes("metric")||ue.includes("single")?"Σ":ue.includes("table")?"▤":"▦"},ke=g=>{const ue=g.toLowerCase();return ue.includes("kpi")||ue.includes("single")?"KPI":ue.includes("table")?"Table":ue.includes("line")?"Line chart":ue.includes("bar")?"Bar chart":g?g.charAt(0).toUpperCase()+g.slice(1):"Auto"};return t.jsx("div",{className:"dql-app-flow-scroll",children:t.jsxs("div",{className:"dql-app-flow",children:[t.jsxs("div",{className:"dql-app-flow-head",children:[t.jsx("h2",{children:j?"Build a new App page":"Build an app"}),t.jsx("p",{children:j?"DQL plans one page from the existing App context, then waits for approval without changing any current page.":"DQL resolves certified blocks and semantic metrics, then waits for your approval before writing a private App draft."})]}),t.jsx("div",{className:"dql-app-flow-bubble",children:i}),b?t.jsxs("div",{className:"dql-app-buildstream",children:[t.jsx("span",{className:"dql-app-buildorb",children:t.jsx(De,{size:14})}),t.jsxs("div",{className:"dql-app-buildbody",children:[t.jsx("span",{className:"dql-app-shimmer",children:"Finding certified blocks…"}),t.jsxs("div",{className:"dql-app-buildsteps",children:[t.jsxs("span",{style:{animationDelay:"0.2s"},children:[t.jsx(xt,{size:11,className:"ok"}),"Matched domain ",t.jsx("code",{children:me.toLowerCase()})]}),t.jsxs("span",{style:{animationDelay:"0.8s"},children:[t.jsx(xt,{size:11,className:"ok"}),"Scanning certified blocks and semantic metrics"]}),t.jsxs("span",{style:{animationDelay:"1.4s"},children:[t.jsx("i",{className:"dot"}),"Detecting app filters from block parameters…"]})]})]})]}):null,!b&&re?t.jsxs("div",{className:"dql-app-buildstream proposal",children:[t.jsx("span",{className:"dql-app-buildorb still",children:t.jsx(De,{size:14})}),t.jsxs("div",{className:"dql-app-buildbody wide",children:[t.jsxs("div",{className:"dql-app-proposal-lede",children:[t.jsxs("strong",{children:[j?"Page Build Brief":"Build Brief"," · ",re.intent.target==="personal"?"Personal Draft":"Shared Project target"]}),t.jsx("br",{}),"Found ",de," certified block",de===1?"":"s",Ae>0?` and ${Ae} governed semantic view${Ae===1?"":"s"}`:"",".",j?" The approved page is added atomically; existing pages remain unchanged.":" Every generated App starts private; review-required sources must pass publication checks before sharing."]}),t.jsxs("label",{className:"dql-app-buildbrief-name",children:[t.jsx("span",{children:j?"Page name":"Draft name"}),t.jsx("input",{value:a,onChange:g=>O(g.target.value),maxLength:120})]}),t.jsxs("label",{className:"dql-app-buildbrief-name",children:[t.jsx("span",{children:"Audience"}),t.jsx("input",{value:o,onChange:g=>U(g.target.value),maxLength:120})]}),t.jsxs("div",{className:"dql-app-proposal-card",children:[w.map(g=>{var tt,pt,Oe;const ue=T.has(g.id),ye=g.certification==="certified",$e=g.certification==="reviewed_semantic";return t.jsxs("button",{type:"button",className:`dql-app-proposal-row ${ue?"":"off"}`,onClick:()=>A(g.id),disabled:!!g.error,title:((tt=g.repair)==null?void 0:tt.message)??g.error??g.preflight.message,children:[t.jsx("span",{className:`dql-app-prop-check ${ue?"on":""}`,children:ue?t.jsx(xt,{size:10,strokeWidth:3.2}):null}),t.jsx("span",{className:`dql-app-prop-glyph ${ye&&Y(g.viz)==="▤"?"green":""}`,children:Y(g.viz)}),t.jsxs("span",{className:"dql-app-prop-name",children:[t.jsx("b",{children:g.blockId??g.title}),t.jsx("small",{children:g.description??g.question??g.title})]}),t.jsx("span",{className:`dql-app-prop-badge ${ye?"certified":"draft"}`,children:ye?"Certified":((pt=g.repair)==null?void 0:pt.status)==="repaired"?"Auto-repaired · review":((Oe=g.repair)==null?void 0:Oe.status)==="failed"?"Repair blocked":$e?"Semantic · review":"Exploratory · review"}),t.jsx("span",{className:"dql-app-prop-viz",children:ke(g.viz)}),t.jsx("small",{children:g.preflight.status.replace("_"," ")})]},g.id)}),w.filter(g=>g.repair).map(g=>{var ue,ye;return t.jsx("div",{className:"dql-app-flow-gaps",children:t.jsxs("span",{children:[((ue=g.repair)==null?void 0:ue.status)==="repaired"?t.jsx(Zt,{size:12}):t.jsx(it,{size:12}),g.title,": ",(ye=g.repair)==null?void 0:ye.message]})},`repair-${g.id}`)}),t.jsxs("button",{type:"button",className:"dql-app-addmore",onClick:()=>H(g=>!g),children:[t.jsx(Jt,{size:13,strokeWidth:2.2})," Add more blocks"]}),qe?t.jsxs("div",{className:"dql-app-addmore-panel",children:[t.jsxs("div",{className:"dql-app-addmore-search",children:[t.jsx(Ue,{size:12}),t.jsx("input",{value:ne,onChange:g=>we(g.target.value),placeholder:`Search ${c.length} certified block${c.length===1?"":"s"}…`})]}),h?t.jsx("div",{className:"dql-app-addmore-hint",children:"Loading certified blocks…"}):null,pe.slice(0,6).map(g=>t.jsxs("button",{type:"button",className:"dql-app-addmore-row",onClick:()=>{we(""),he(g.id)},children:[t.jsx(Jt,{size:12,strokeWidth:2.2}),t.jsx("span",{children:g.name}),t.jsxs("small",{children:[g.domain??"certified"," · ",g.status]})]},g.id)),!h&&pe.length===0?t.jsx("div",{className:"dql-app-addmore-hint",children:"No more matching certified blocks."}):null]}):null]}),t.jsxs("details",{className:"dql-app-buildbrief-edit",children:[t.jsx("summary",{children:"Edit tile titles and visualizations"}),t.jsx("div",{children:w.filter(g=>!g.error).map(g=>{const ue=z[g.id]??{title:g.title,viz:g.viz},ye=Array.from(new Set([...g.allowedVisualizations??[],g.viz,"table"]));return t.jsxs("label",{children:[t.jsx("input",{value:ue.title??g.title,onChange:$e=>W(g.id,{title:$e.target.value}),maxLength:120}),t.jsx("select",{value:ue.viz??g.viz,onChange:$e=>W(g.id,{viz:$e.target.value}),children:ye.map($e=>t.jsx("option",{value:$e,children:ke($e)},$e))})]},`edit-${g.id}`)})})]}),B.length>0?t.jsxs("div",{className:"dql-app-detected",children:[t.jsx("span",{className:"dql-app-detected-label",children:"Detected filters"}),B.map(g=>t.jsxs("span",{className:"dql-app-detected-pill",children:[g.label," · ",t.jsx("strong",{children:tr(g.default??"Any")})]},g.id))]}):null,re.gaps.length>0?t.jsx("div",{className:"dql-app-flow-gaps",children:re.gaps.slice(0,3).map(g=>t.jsxs("span",{children:[t.jsx(it,{size:12})," ",g.question]},g.id))}):null,t.jsxs("div",{className:"dql-app-flow-actions",children:[t.jsxs("button",{type:"button",className:"dql-app-flow-build",onClick:N,disabled:m||Pe===0,children:[t.jsx(ft,{size:13}),m?j?"Adding page…":"Building draft…":`${j?"Add page":"Build private draft"} with ${Pe} tile${Pe===1?"":"s"}`]}),t.jsx("button",{type:"button",className:"dql-app-flow-reset",onClick:M,children:j?"Back to app":"Start over"})]})]})]}):null,!b&&!re?t.jsxs("div",{className:"dql-app-flow-actions",children:[t.jsxs("button",{type:"button",className:"dql-app-flow-build",onClick:V,children:[t.jsx(De,{size:13})," Create Build Brief"]}),t.jsx("button",{type:"button",className:"dql-app-flow-reset",onClick:M,children:j?"Back to app":"Start over"})]}):null,E?t.jsx("div",{className:"dql-app-error",children:E}):null,je.length>0&&!b?t.jsx("div",{className:"dql-app-flow-gaps",children:je.slice(0,2).map((g,ue)=>t.jsxs("span",{children:[t.jsx(it,{size:12})," ",g]},`${g}-${ue}`))}):null]})})}return t.jsxs("div",{className:"dql-app-create-shell",children:[t.jsxs("div",{className:"dql-app-buildbar",children:[t.jsxs("button",{type:"button",className:"dql-app-back dql-app-back-label",onClick:M,children:[t.jsx(ka,{size:14}),t.jsx("span",{children:"Apps"})]}),t.jsx("span",{className:"dql-app-name-input",children:t.jsx("input",{value:a,onChange:w=>O(w.target.value),spellCheck:!1})}),t.jsx(st,{tone:x?"agentic":"draft",children:x?"generated":"draft"}),t.jsxs("div",{className:"dql-app-mode-seg",children:[t.jsxs("button",{type:"button",onClick:()=>F("ai"),children:[t.jsx(De,{size:15})," Build AI"]}),t.jsxs("button",{type:"button",className:"on",onClick:()=>F("classic"),children:[t.jsx(zr,{size:15})," Classic"]})]}),t.jsxs("div",{className:"dql-app-build-actions",children:[t.jsxs("span",{className:"dql-app-persona",children:[t.jsx("b",{children:"CFO"})," CFO"]}),x?t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:C,children:"Open app"}):null,t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:V,disabled:b,children:b?"Building...":"Create app"})]})]}),t.jsx("div",{className:"dql-app-create-workspace clean classic",children:t.jsxs("section",{className:"dql-app-ai-start",children:[t.jsxs("div",{className:"dql-app-ai-start-main",children:[t.jsxs("div",{className:"dql-app-ai-start-copy",children:[t.jsx("h1",{children:"Start with one AI input."}),t.jsx("p",{children:"DQL finds certified blocks, detects app filters, and opens the generated app in a clean stakeholder view."})]}),t.jsxs("div",{className:"dql-app-ai-start-card",children:[t.jsx("textarea",{value:i,onChange:w=>be(w.target.value),rows:5,"aria-label":"App request",placeholder:"Build an NBA player performance app for stakeholders..."}),t.jsx("button",{type:"button",className:"dql-app-ai-start-send",onClick:V,disabled:b||!i.trim(),title:"Build app",children:b?t.jsx(nt,{size:19}):t.jsx(zi,{size:19})})]}),t.jsxs("div",{className:"dql-app-suggestions dql-app-ai-start-examples","aria-label":"Prompt examples",children:[t.jsx("span",{children:"Examples"}),d.slice(0,4).map(w=>t.jsx("button",{type:"button",onClick:()=>{be(w.prompt);const de=l.find(Ae=>Ae.value.toLowerCase()===w.domain.toLowerCase()||Ae.label.toLowerCase()===w.domain.toLowerCase());ie((de==null?void 0:de.value)??"")},children:w.title},w.title))]}),t.jsxs("details",{className:"dql-app-ai-context dql-app-ai-start-advanced",children:[t.jsxs("summary",{children:[t.jsx("span",{children:"Advanced controls"}),t.jsxs("b",{children:[me," / ",te]}),t.jsx(ba,{size:14})]}),t.jsxs("div",{className:"dql-app-ai-context-grid",children:[t.jsxs("label",{children:["Domain",t.jsxs("select",{value:n,onChange:w=>ie(w.target.value),children:[t.jsx("option",{value:"",children:"Global / cross-domain"}),l.map(w=>t.jsx("option",{value:w.value,children:w.label},w.value))]})]}),t.jsxs("label",{children:["Owner",t.jsx("input",{value:s,onChange:w=>K(w.target.value)})]}),t.jsxs("label",{children:["Build mode",t.jsxs("select",{value:e,onChange:w=>F(w.target.value),children:[t.jsx("option",{value:"ai",children:"AI first"}),t.jsx("option",{value:"classic",children:"Manual block selection"})]})]})]}),e==="classic"?t.jsx(Zl,{title:"Manual certified block selection",subtitle:`${f.size} selected`,catalog:c,loading:h,selectedBlocks:f,onToggleBlock:L}):null]}),re&&!x?t.jsx("div",{style:{border:`1px solid ${We[I].cellBorder}`,background:We[I].appBg,borderRadius:10,padding:14},children:t.jsx(Ai,{proposal:re,t:We[I],selected:T,onToggle:A,onCreate:N,busy:m,error:null})}):null,x?t.jsxs("div",{className:"dql-app-ai-result dql-app-ai-start-result",children:["Generated ",t.jsx("b",{children:x.plan.name})," with ",x.validation.certifiedTiles," certified app tile",x.validation.certifiedTiles===1?"":"s"," and ",Z," scoped report",Z===1?"":"s",".",y?t.jsxs("small",{children:["Session ",y.id]}):null]}):null,E?t.jsx("div",{className:"dql-app-error",children:E}):null]}),t.jsxs("aside",{className:"dql-app-ai-start-context",children:[t.jsxs("section",{className:"dql-app-ai-context-card",children:[t.jsx(cr,{title:"Certified blocks found",meta:Q.coverage?`${Q.coverage.certifiedTiles} certified · ${Q.coverage.gaps} gap${Q.coverage.gaps===1?"":"s"}`:`${Te.length||c.length} matches`}),t.jsxs("div",{className:"dql-app-ai-evidence-list",children:[(Te.length?Te:c.slice(0,4)).map((w,de)=>"name"in w?t.jsxs("div",{className:"dql-app-ai-evidence-row",children:[t.jsx("span",{children:t.jsx(ot,{size:14})}),t.jsxs("div",{children:[t.jsx("b",{children:w.name}),t.jsx("small",{children:w.description})]}),t.jsx(st,{tone:w.status==="certified"?"certified":"draft",children:w.status})]},`catalog-${w.id}-${de}`):t.jsxs("div",{className:"dql-app-ai-evidence-row",children:[t.jsx("span",{children:t.jsx(ot,{size:14})}),t.jsxs("div",{children:[t.jsx("b",{children:w.title}),t.jsx("small",{children:w.description??w.rationale??"Certified DQL block"})]}),t.jsx(st,{tone:"certified",children:"Certified"})]},`plan-${w.id}-${de}`)),!Te.length&&!c.length?t.jsx(Ie,{title:"No matches yet.",detail:"Enter a prompt to retrieve certified blocks.",compact:!0}):null]})]}),t.jsxs("section",{className:"dql-app-ai-context-card",children:[t.jsx(cr,{title:"Detected app filters",meta:"bound to block params"}),t.jsxs("div",{className:"dql-app-ai-filter-preview",children:[((ee=Q.globalFilters)!=null&&ee.length?Q.globalFilters:((fe=Q.pages[0])==null?void 0:fe.filters)??[]).slice(0,4).map(w=>t.jsxs("span",{children:[t.jsx("small",{children:w.label}),t.jsx("b",{children:tr(w.default??"Any")})]},w.id)),(ge=Q.globalFilters)!=null&&ge.length||(J=(ve=Q.pages[0])==null?void 0:ve.filters)!=null&&J.length?null:t.jsxs(t.Fragment,{children:[t.jsxs("span",{children:[t.jsx("small",{children:"Domain"}),t.jsx("b",{children:me})]}),t.jsxs("span",{children:[t.jsx("small",{children:"Owner"}),t.jsx("b",{children:te})]}),t.jsxs("span",{children:[t.jsx("small",{children:"Top N"}),t.jsx("b",{children:"Any"})]})]})]})]}),t.jsxs("section",{className:"dql-app-ai-context-card",children:[t.jsx(cr,{title:"Possible deeper analysis",meta:"Copilot asks for context first"}),t.jsxs("div",{className:"dql-app-ai-gap-list",children:[((le=Q.missingEvidence)!=null&&le.length?Q.missingEvidence:je).slice(0,4).map((w,de)=>t.jsxs("span",{children:[t.jsx(it,{size:13})," ",w]},`${w}-${de}`)),!((se=Q.missingEvidence)!=null&&se.length)&&!je.length?t.jsxs("span",{children:[t.jsx(it,{size:13})," Driver explanations, new grains, and reusable block proposals require typed context before DQL creates SQL."]}):null]})]})]})]})})]})}async function Xl(e){const r=new TextEncoder().encode(JSON.stringify(e)),a=await crypto.subtle.digest("SHA-256",r);return`sha256:${Array.from(new Uint8Array(a)).map(i=>i.toString(16).padStart(2,"0")).join("")}`}function Jl({app:e,appDoc:r,dashboardDoc:a,loading:i,experience:n,section:l,explainOpen:s,explainExpanded:o,dashboardFilters:d,dashboardFilterValues:c,themeMode:h,variables:f,onBack:x,onExperienceChange:y,onSectionChange:T,onDashboardFilterChange:z,onApplyDashboardFilters:m,onResetDashboardFilters:I,onExplainChange:A,onExplainExpandedChange:W,onAddPage:N,onOpenDashboard:b,onOpenApp:E,onDashboardChanged:M,onInvestigationsChanged:F,onOpenLineageNode:O}){var pe;const be=ma(),ie=(a==null?void 0:a.dashboard.layout.items.filter(B=>!!B.block).length)??0,K=((pe=r==null?void 0:r.drafts)==null?void 0:pe.length)??0,U=p.useMemo(()=>Ga((a==null?void 0:a.dashboard)??null).map(B=>B.blockId),[a]),L=U.join("|"),[V,C]=p.useState(U[0]??null),[he,qe]=p.useState(null),[H,ne]=p.useState(null),[we,Ne]=p.useState(null),[me,te]=p.useState(null),[re,Q]=p.useState("idle"),[ce,Te]=p.useState(""),[je,Z]=p.useState("idle"),[j,P]=p.useState(""),R=(a==null?void 0:a.dashboard.layout.items.filter(B=>B.semantic).map(B=>B.i))??[],{ready:G,repairedTileIds:ee}=_l(R,he),fe=p.useCallback(B=>{qe(B)},[]);p.useCallback(B=>{Ne({...B,nonce:Date.now()}),T("research"),A(!0)},[A,T]);const ge=p.useCallback(B=>{te(B)},[]),ve=p.useCallback(()=>{Ne(null)},[]),J=p.useCallback((B,Y)=>{var ke,g;if(C(B),n==="view"){be({type:"OPEN_GLOBAL_AI",audience:"stakeholder",context:{title:"App copilot",scopeHint:Gt(e==null?void 0:e.name)?`Follow up on ${Gt(e==null?void 0:e.name)}`:"Follow up on this tile",selectedObject:{kind:"block",id:B,title:a==null?void 0:a.dashboard.metadata.title},workspaceContext:{appId:e==null?void 0:e.id,dashboardId:a==null?void 0:a.dashboard.id,blockId:B},suggestedQuestions:(g=(ke=a==null?void 0:a.app)==null?void 0:ke.copilot)==null?void 0:g.suggestedQuestions},autoRun:{text:Y,mode:"auto"}});return}A(!0),ne({text:Y,nonce:Date.now()})},[be,n,e==null?void 0:e.id,e==null?void 0:e.name,a==null?void 0:a.dashboard.id,a==null?void 0:a.dashboard.metadata.title,A]);p.useEffect(()=>{n==="view"&&(l==="notebooks"||l==="ai"||l==="drafts"||l==="settings")&&T("dashboards")},[n,l,T]),p.useEffect(()=>{if(U.length===0){V!==null&&C(null);return}(!V||!U.includes(V))&&C(U[0])},[U,L,V]),p.useEffect(()=>{qe(null),te(null)},[e==null?void 0:e.id,a==null?void 0:a.dashboard.id]);const le=!!(e&&a&&(l==="dashboards"||l==="research")),se=le&&s,w=B=>{Q(B),B!=="ready"&&window.setTimeout(()=>Q("idle"),1800)},de=async()=>{var ke;const B=bs(e,r,a);Te(B);let Y=!1;try{typeof navigator<"u"&&((ke=navigator.clipboard)!=null&&ke.writeText)&&(await navigator.clipboard.writeText(B),Y=!0)}catch{Y=!1}if(!Y){const g=document.createElement("textarea");g.value=B,g.style.position="fixed",g.style.left="-9999px",document.body.appendChild(g),g.focus(),g.select(),Y=document.execCommand("copy"),document.body.removeChild(g)}w(Y?"copied":"ready")},Ae=()=>{const B=vs(e,r,a),Y=new Blob([B],{type:"text/markdown;charset=utf-8"}),ke=URL.createObjectURL(Y),g=document.createElement("a");g.href=ke,g.download=`${(e==null?void 0:e.id)??(r==null?void 0:r.app.id)??"dql-app"}-brief.md`,document.body.appendChild(g),g.click(),document.body.removeChild(g),URL.revokeObjectURL(ke),w("downloaded")},Pe=async()=>{if(!(e!=null&&e.id))return;Z("running"),P("");const B=await D.promoteApp(e.id,{lifecycle:"review"});if(!B.ok){Z("error"),P(B.error);return}Z("done"),P(`${B.paths.length} shared files published from the private draft${B.removedLocalTiles?`; ${B.removedLocalTiles} local-only insight removed`:""}.`),window.setTimeout(()=>Z("idle"),2400)},oe=async()=>{if(!(e!=null&&e.id)||!a||!he||R.length===0)return;Z("running"),P("");const B=await Xl(a.dashboard),Y=await D.approveAppSemanticTiles(e.id,a.dashboard.id,{runId:he.runId,tileIds:R,expectedDashboardFingerprint:B});if(!Y.ok){Z("error"),P(Y.error);return}M(Y.dashboard),Z("done"),P(`${R.length} semantic result${R.length===1?"":"s"} approved with run ${he.runId}.`)},ze=l==="dashboards"&&!!a;return t.jsxs("div",{className:"dql-app-workspace",children:[t.jsxs("div",{className:"dql-app-view-topbar",children:[t.jsxs("button",{type:"button",className:"dql-app-back dql-app-back-label",onClick:x,title:"Back to apps",children:[t.jsx(ka,{size:14}),t.jsx("span",{children:"Apps"})]}),t.jsx("span",{className:"dql-app-crumb",children:t.jsx("b",{children:(e==null?void 0:e.id)??"app"})}),t.jsx(st,{tone:"certified",children:K>0?`${ie} certified`:"All certified"}),K>0?t.jsxs(st,{tone:"draft",children:[K," draft"]}):null,t.jsx("span",{className:"dql-app-topbar-divider","aria-hidden":"true"}),t.jsxs("div",{className:"dql-app-modeseg",role:"group","aria-label":"App mode",children:[t.jsxs("button",{type:"button",className:n==="view"?"on":"",onClick:()=>y("view"),title:"Clean stakeholder view",children:[t.jsx(va,{size:12})," View"]}),t.jsxs("button",{type:"button",className:n==="build"?"on":"",onClick:()=>y("build"),title:"Rearrange tiles and edit this app",children:[t.jsx(Sa,{size:12})," Edit"]})]}),t.jsxs("div",{className:"dql-app-view-actions",children:[t.jsx($l,{app:(r==null?void 0:r.app)??null}),n==="build"&&R.length>0?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void oe(),disabled:je==="running"||!G,title:G?"Approve the successful semantic run for publication":ee.length>0?"AI-repaired semantic previews are review-required and cannot be approved as governed semantic results":"Run this dashboard successfully before semantic approval",children:[t.jsx(xt,{size:14})," Approve semantic (",R.length,")"]}):null,n==="build"?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void Pe(),disabled:je==="running",children:[t.jsx(ot,{size:14})," ",je==="running"?"Checking":"Publish"]}):null,t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line dql-apps-btn-icon",title:re==="copied"?"Copied handoff":"Share local app handoff",onClick:()=>void de(),children:re==="copied"?t.jsx(xt,{size:15}):t.jsx(Vi,{size:15})}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line dql-apps-btn-icon",title:re==="downloaded"?"Brief saved":"Download app brief",onClick:Ae,children:re==="downloaded"?t.jsx(xt,{size:15}):t.jsx(mi,{size:15})}),re==="ready"?t.jsxs("div",{className:"dql-app-share-popover",children:[t.jsx("b",{children:"Local handoff"}),t.jsx("textarea",{readOnly:!0,value:ce,onFocus:B=>B.currentTarget.select()})]}):null,je==="done"||je==="error"?t.jsx("div",{className:`dql-app-promote-popover ${je==="error"?"error":""}`,children:j}):null]})]}),t.jsxs("main",{className:"dql-app-view-wrap",children:[t.jsxs("div",{className:"dql-app-title-row",children:[t.jsxs("div",{className:"dql-app-title-copy",children:[t.jsxs("div",{className:"dql-app-title-meta",children:[t.jsxs("span",{children:[t.jsx(ft,{size:14})," ",(e==null?void 0:e.domain)??(a==null?void 0:a.dashboard.metadata.domain)??"DQL App"]}),ze?t.jsx("span",{className:"dql-app-title-context",children:Gt(e==null?void 0:e.name)||"App"}):null,n==="build"?t.jsx(st,{tone:"draft",children:"Customizing"}):null]}),t.jsx("h1",{children:Gt(ze?a==null?void 0:a.dashboard.metadata.title:e==null?void 0:e.name)||"App"}),t.jsx("p",{children:Ya((ze?a==null?void 0:a.dashboard.metadata.description:e==null?void 0:e.description)??"Local DQL App")})]}),t.jsxs("div",{className:"dql-app-nav-row",children:[t.jsx(Dl,{appDoc:r,section:l,experience:n,onChange:T}),l==="dashboards"&&(r!=null&&r.dashboards.length)?t.jsx(Ul,{dashboards:r.dashboards,activeDashboardId:a==null?void 0:a.dashboard.id,isBuild:n==="build",onOpen:b,onAdd:N}):null,le?t.jsx("button",{type:"button",className:`dql-apps-btn dql-apps-btn-line dql-apps-btn-icon ${s?"on":""}`,title:s?"Hide AI copilot":"Show AI copilot",onClick:()=>A(!s),children:t.jsx(rr,{size:15})}):null,ze?t.jsx(t.Fragment,{children:t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line dql-apps-btn-icon",title:"Open dashboard lineage",onClick:()=>{e&&a&&O(`dashboard:${e.id}/${a.dashboard.id}`)},children:t.jsx(ha,{size:15})})}):null]})]}),t.jsxs("div",{className:`dql-app-view-layout ${se?"":"no-explain"}`,children:[t.jsxs("div",{className:"dql-app-main-column",children:[l==="dashboards"&&a&&d.length>0?t.jsxs("section",{className:"dql-app-filter-row","aria-label":"Dashboard filters",children:[t.jsxs("div",{className:"dql-app-filter-row-copy",children:[t.jsx("b",{children:"Filters"}),t.jsx("span",{children:"Set the business scope, then apply once to refresh the full story."})]}),t.jsx(os,{filters:d,values:c,onChange:z}),t.jsxs("div",{className:"dql-app-filter-row-actions",children:[t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:I,children:"Reset"}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:m,children:"Apply filters"})]})]}):null,i?t.jsx(Ie,{title:"Loading app...",detail:"Reading dashboard files and running local blocks."}):l==="dashboards"&&a&&e?t.jsx(nn,{appId:e.id,dashboard:a.dashboard,editable:n==="build",embeddedHeader:!0,variables:f,selectedBlockId:V,onBlockFocus:C,onAskBlock:J,onOpenLineageNode:O,copilotOpen:s,onCopilotChange:A,onDashboardChanged:M,onRunChange:fe}):l==="notebooks"?t.jsx(rs,{appDoc:r}):l==="research"?t.jsx(ts,{appDoc:r,dashboardDoc:a,seed:we,themeMode:h,onSeedHandled:ve,onDashboardChanged:M,onInvestigationsChanged:F,onActiveInvestigationChange:ge}):l==="ai"?t.jsx(as,{appDoc:r}):l==="drafts"?t.jsx(is,{appDoc:r}):l==="settings"?t.jsx(ns,{appDoc:r}):t.jsx(Ie,{title:"No dashboard page selected.",detail:"Choose a dashboard page or add one in Build mode."})]}),se?t.jsx(es,{app:e,appDoc:r,dashboardDoc:a,dashboardRun:he,variables:f,selectedBlockId:V,askSeed:H,themeMode:h,expanded:o,onToggleExpanded:()=>W(!o),onClose:()=>A(!1),onOpenApp:E}):null]})]})]})}function Zl({title:e,subtitle:r,catalog:a,loading:i,selectedBlocks:n,onToggleBlock:l}){const[s,o]=p.useState(""),d=p.useMemo(()=>{const c=s.trim().toLowerCase();return c?a.filter(h=>[h.name,h.domain,h.status,h.description,h.owner??"",...h.tags??[]].join(" ").toLowerCase().includes(c)):a},[a,s]);return t.jsxs("div",{className:"dql-app-palette",children:[t.jsxs("div",{className:"dql-app-palette-title",children:[t.jsxs("span",{children:[t.jsx(zr,{size:14})," ",e]}),t.jsx("b",{children:r})]}),t.jsxs("label",{className:"dql-app-palette-search",children:[t.jsx(Ue,{size:14}),t.jsx("input",{value:s,onChange:c=>o(c.target.value),placeholder:"Search blocks, domains, tags"})]}),i?t.jsx(Ie,{title:"Loading blocks...",detail:"Finding certified blocks for this domain.",compact:!0}):null,!i&&d.length===0?t.jsx(Ie,{title:"No blocks found.",detail:"Try another domain or search term.",compact:!0}):null,d.slice(0,24).map((c,h)=>{const f=n.has(c.id);return t.jsxs("button",{type:"button",className:f?"selected":"",onClick:()=>l(c.id),children:[t.jsx("span",{className:"dql-app-palette-icon",children:t.jsx(Cr,{size:14})}),t.jsxs("span",{children:[t.jsx("b",{children:c.name}),t.jsxs("small",{children:[c.domain," / ",c.chartType??"table"]})]}),t.jsx("i",{children:f?"using":c.status})]},`${c.id}-${h}`)}),d.length>24?t.jsxs("div",{className:"dql-app-palette-more",children:[d.length-24," more matches"]}):null]})}function Dl({appDoc:e,section:r,experience:a,onChange:i}){var s,o,d,c,h;const n=((s=e==null?void 0:e.investigations)==null?void 0:s.length)??0,l=a==="view"?[{id:"dashboards",label:"App",count:(e==null?void 0:e.dashboards.length)??0,icon:t.jsx(ft,{size:14})}]:[{id:"dashboards",label:"App",count:(e==null?void 0:e.dashboards.length)??0,icon:t.jsx(ft,{size:14})},{id:"research",label:"Analysis",count:n,icon:t.jsx(Ue,{size:14})},{id:"notebooks",label:"Notebooks",count:((o=e==null?void 0:e.notebooks)==null?void 0:o.length)??((d=e==null?void 0:e.app.notebooks)==null?void 0:d.length)??0,icon:t.jsx(za,{size:14})},{id:"ai",label:"Pins",count:((c=e==null?void 0:e.aiPins)==null?void 0:c.length)??0,icon:t.jsx(rr,{size:14})},{id:"drafts",label:"Drafts",count:((h=e==null?void 0:e.drafts)==null?void 0:h.length)??0,icon:t.jsx(Ar,{size:14})},{id:"settings",label:"Settings",icon:t.jsx(nt,{size:14})}];return t.jsx("nav",{className:"dql-app-section-tabs","aria-label":"App sections",children:l.map(f=>t.jsxs("button",{className:r===f.id?"on":"","data-app-section":f.id,onClick:()=>i(f.id),title:f.label,"aria-label":`${f.label}${f.count!==void 0?` ${f.count}`:""}`,children:[t.jsx("i",{className:"dql-app-tab-icon",children:f.icon}),t.jsx("span",{className:"dql-app-tab-label",children:f.label}),f.count!==void 0?t.jsx("b",{children:f.count}):null]},f.id))})}function Ul({dashboards:e,activeDashboardId:r,isBuild:a,onOpen:i,onAdd:n}){const l=e.find(s=>s.id===r)??e[0];return t.jsxs("div",{className:"dql-app-page-picker","aria-label":"Dashboard page",children:[t.jsxs("span",{children:[t.jsx(Cr,{size:14})," Page"]}),t.jsx("select",{value:(l==null?void 0:l.id)??"",onChange:s=>i(s.target.value),title:(l==null?void 0:l.title)??"Dashboard page",children:e.map(s=>t.jsxs("option",{value:s.id,children:[s.title," (",s.itemCount,")"]},s.id))}),a?t.jsx("button",{type:"button",onClick:n,title:"Add dashboard page",children:t.jsx(Jt,{size:14})}):null]})}function es({app:e,appDoc:r,dashboardDoc:a,dashboardRun:i,variables:n,selectedBlockId:l,askSeed:s,themeMode:o,expanded:d,onToggleExpanded:c,onClose:h,onOpenApp:f}){const x=We[o],y=(a==null?void 0:a.dashboard)??null,z=p.useMemo(()=>Ga(y,i),[y,i]).find(ie=>ie.blockId===l)??null,m=z?i==null?void 0:i.tiles.find(ie=>ie.tileId===z.tileId||ie.blockId===z.blockId):null,I=(e==null?void 0:e.id)??(r==null?void 0:r.app.id)??"app",A=(y==null?void 0:y.id)??"dashboard",W=qa(`app:${I}:${A}`),[N,b]=p.useState(!1),E=Be((e==null?void 0:e.name)??(r==null?void 0:r.app.name)??(y==null?void 0:y.metadata.title)??"App workspace"),M=Be((y==null?void 0:y.metadata.title)??"Dashboard"),F=z?`Focused on ${Be(z.title)} in ${M}`:`Scoped to ${M}`,O=z?{kind:"block",id:z.blockId,title:z.title}:y?{kind:"dashboard",id:y.id,title:y.metadata.title}:{kind:"app",id:I,title:E},be=p.useMemo(()=>{var ie,K,U,L,V;return{surface:"apps",appId:I,appName:(e==null?void 0:e.name)??(r==null?void 0:r.app.name),appDomain:(e==null?void 0:e.domain)??(r==null?void 0:r.app.domain),appDescription:(e==null?void 0:e.description)??(r==null?void 0:r.app.description),dashboardId:y==null?void 0:y.id,dashboardTitle:y==null?void 0:y.metadata.title,dashboardDescription:y==null?void 0:y.metadata.description,dashboardFilters:n,selectedBlock:z?{blockId:z.blockId,tileId:z.tileId,title:z.title,visualization:z.viz,status:m==null?void 0:m.status,certificationStatus:m==null?void 0:m.certificationStatus,rowCount:(ie=m==null?void 0:m.result)==null?void 0:ie.rowCount,columns:(U=(K=m==null?void 0:m.result)==null?void 0:K.columns)==null?void 0:U.slice(0,12),sampleRows:ms((L=m==null?void 0:m.result)==null?void 0:L.rows,(V=m==null?void 0:m.result)==null?void 0:V.columns)}:void 0}},[e,r,I,y,z,m,n]);return t.jsx(ya,{t:x,title:"App AI",subtitle:E,expanded:d,onToggleExpanded:c,resizable:!0,minResizeWidth:390,maxResizeWidth:1200,fitViewportHeight:!0,heightResizable:!0,minResizeHeight:520,onClose:h,onNewChat:W.resetThreadId,running:N,ariaLabel:"App AI",className:"dql-app-explain-panel dql-app-assistant-panel",children:t.jsx(p.Suspense,{fallback:t.jsx("div",{style:{padding:16,fontSize:12,color:x.textSecondary},children:"Loading App AI…"}),children:t.jsx(Ml,{themeMode:o,title:"App AI",scopeHint:F,audience:"stakeholder",selectedObject:O,workspaceContext:be,initialMode:"auto",autoRun:s!=null&&s.text?{text:s.text,mode:"ask",nonce:s.nonce}:void 0,threadId:W.threadId,onThreadIdChange:W.onThreadIdChange,onRunningChange:b,onOpenApp:f,answerFirstCards:!0,examplePrompts:[{label:"Explain this dashboard",prompt:"Explain the most important business story in this dashboard and what action it suggests."},{label:"Find the main driver",prompt:"What is the main driver behind the current result? Use the active app filters and governed evidence."},{label:"Check this result",prompt:"Validate the current result against its certified block, semantic definitions, and lineage."}]},`${I}:${A}`)})})}function ts({appDoc:e,dashboardDoc:r,seed:a,themeMode:i,onSeedHandled:n,onDashboardChanged:l,onInvestigationsChanged:s,onActiveInvestigationChange:o}){var Z;const d=e==null?void 0:e.app.id,c=r==null?void 0:r.dashboard.id,h=We[i],[f,x]=p.useState(()=>(e==null?void 0:e.investigations)??[]),[y,T]=p.useState(null),[z,m]=p.useState(!1),[I,A]=p.useState(null),[W,N]=p.useState(null),[b,E]=p.useState("preview"),[M,F]=p.useState(""),[O,be]=p.useState(!1),[ie,K]=p.useState(!1),[U,L]=p.useState(null);p.useEffect(()=>{if(!d){x([]),T(null);return}let j=!1;return m(!0),D.listAppInvestigations(d).then(P=>{if(j)return;N(null),x(P);const R=jr(P);T(G=>{var ee,fe;return G??((ee=R.find(ge=>ge.status==="ready"))==null?void 0:ee.id)??((fe=R[0])==null?void 0:fe.id)??null})}).finally(()=>{j||m(!1)}),()=>{j=!0}},[d]),p.useEffect(()=>{s(f)},[f,s]),p.useEffect(()=>{if(!a||!d)return;let j=!1;const P={dashboardId:a.dashboardId??c,sourceTileId:a.sourceTileId,sourceBlockId:a.sourceBlockId,title:a.title,question:a.question,intent:a.intent,context:a.context,generatedSql:a.generatedSql,run:!0},R=Bt(a.title??a.question)||"requested follow-up",G=`${d}:${JSON.stringify(P)}`,ee=async()=>{A("create"),L(R),N(null);let ge=dr.get(G);ge||(ge=D.createAppInvestigation(d,P),dr.set(G,ge),ge.finally(()=>{window.setTimeout(()=>dr.delete(G),5e3)}));const ve=await ge;if(j)return;if(A(null),!ve.ok){N(ve.error),L(null),n();return}const J=ve.investigation,le=se=>{x(w=>Tt(w,se)),T(se.id),E("preview"),K(!1),se.status!=="draft"&&se.status!=="running"&&L(null)};if(le(J),J.status!=="draft"&&J.status!=="running"){n();return}A(J.id);for(let se=0;se<20;se+=1){if(await new Promise(de=>{window.setTimeout(de,1e3)}),j)return;const w=await D.getAppInvestigation(d,J.id);if(j)return;if(w&&w.status!=="draft"&&w.status!=="running"){A(null),le(w),n();return}}n(),A(null),L(null),N("Analysis is still running. Reopen it or refresh to load the latest proof.")},fe=window.setTimeout(()=>void ee(),0);return()=>{j=!0,window.clearTimeout(fe)}},[a==null?void 0:a.nonce,d,c,n]);const V=p.useMemo(()=>jr(f),[f]),C=V.find(j=>j.id===y)??V.find(j=>j.status==="ready")??V[0]??null;p.useEffect(()=>(o(C),()=>o(null)),[C,o]);const he=V.filter(j=>j.id!==(C==null?void 0:C.id)).filter(j=>O||j.status!=="error").slice(0,O?40:5),qe=Math.max(0,V.length-(C?1:0)-he.length),H=C?ws(C):null,ne=H?Ps(H):"",we=I==="create"||!!U,Ne=we&&!!U,me=we&&!C;p.useEffect(()=>{F((C==null?void 0:C.generatedSql)??"")},[C==null?void 0:C.id,C==null?void 0:C.generatedSql]);const te=async(j,P)=>{if(!d)return null;A(j.id),N(null);const R=P==null?void 0:P.trim(),G=await D.runAppInvestigation(d,j.id,R?{generatedSql:R}:void 0);return A(null),G.ok?(x(ee=>Tt(ee,G.investigation)),E("preview"),G.investigation):(N(G.error),null)},re=async j=>{if(!d)return null;A(`rebuild:${j.id}`),N(null);const P=await D.runAppInvestigation(d,j.id,{repairMode:"rebuild_from_certified"});return A(null),P.ok?(x(R=>Tt(R,P.investigation)),E(P.investigation.error?"sql":"preview"),P.investigation):(N(P.error),null)},Q=async j=>{if(!d)return null;A(`pin:${j.id}`),N(null);const P=await D.pinAppInvestigation(d,j.id,{dashboardId:j.dashboardId??c,title:j.title});return A(null),P.ok?(x(R=>Tt(R,P.investigation)),T(P.investigation.id),P.dashboard&&l(P.dashboard),P.investigation):(N(P.error),null)},ce=async j=>{if(!d)return;if(!j.generatedSql){N("Add reviewed SQL before creating a draft block.");return}const P=j.pinnedAiPinId?j:await Q(j),R=P==null?void 0:P.pinnedAiPinId;if(!R)return;A(`promote:${j.id}`),N(null);const G=await D.promoteAiPin(d,R);if(A(null),!G.ok){N(G.error??"Draft block could not be created.");return}const ee=await D.getAppInvestigation(d,j.id);ee&&x(fe=>Tt(fe,ee))},Te=async j=>{const P=M.trim();let R=j;if(P&&P!==(j.generatedSql??"").trim()){const G=await te(j,P);if(!G)return;R=G}await ce(R)},je=async j=>{const P=M.trim();let R=j;if(P&&P!==(j.generatedSql??"").trim()){const G=await te(j,P);if(!G)return null;R=G}return Q(R)};return e?t.jsxs("div",{className:`dql-app-research-shell ${ie||!C&&!me?"history-open":"history-collapsed"}`,children:[t.jsxs("section",{className:"dql-app-research-list",children:[t.jsxs("div",{className:"dql-app-research-head",children:[t.jsxs("span",{children:[t.jsx(Ue,{size:14})," Analysis"]}),t.jsxs("div",{children:[t.jsx("b",{children:f.length}),C?t.jsx("button",{type:"button",onClick:()=>K(!1),title:"Close analysis history",children:"Close"}):null]})]}),z?t.jsx(Ie,{title:"Loading analysis...",detail:"Reading local app analysis.",compact:!0}):null,W?t.jsx("div",{className:"dql-app-error",children:W}):null,!z&&f.length===0?t.jsx(Ie,{title:"No analysis yet.",detail:"Start from Copilot so the analysis keeps the original question, filters, and selected result context.",compact:!0}):null,t.jsxs("div",{className:"dql-app-research-items",children:[C?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"dql-app-research-group-label",children:"Current analysis"}),t.jsx(da,{item:C,selected:!0,onClick:()=>{N(null),T(C.id),E("preview"),K(!1)}})]}):null,he.length?t.jsx("div",{className:"dql-app-research-group-label",children:"Recent history"}):null,he.map(j=>t.jsx(da,{item:j,selected:(C==null?void 0:C.id)===j.id,onClick:()=>{N(null),T(j.id),E("preview"),K(!1)}},j.id)),qe>0?t.jsxs("button",{type:"button",className:"dql-app-research-history-toggle",onClick:()=>be(j=>!j),children:[t.jsx("span",{children:O?"Hide older runs":`Show ${qe} older run${qe===1?"":"s"}`}),t.jsx("small",{children:O?"Keep the current analysis focused":"Includes failed and superseded analysis attempts"})]}):null]})]}),t.jsx("section",{className:"dql-app-research-detail",children:Ne?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"dql-app-report-toolbar",children:[t.jsxs("div",{children:[t.jsx("span",{children:"New memo"}),t.jsx("b",{children:U})]}),f.length?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>K(j=>!j),children:[t.jsx(Ue,{size:13})," ",ie?"Hide history":`Analysis history (${f.length})`]}):null]}),W?t.jsx("div",{className:"dql-app-error",children:W}):null,t.jsxs("div",{className:"dql-app-research-creating active",children:[t.jsx(nt,{size:24}),t.jsx("span",{children:"Preparing business memo"}),t.jsx("h2",{children:"Writing business memo..."}),t.jsxs("p",{children:['DQL is opening a scoped memo for "',U,'". The previous memo stays in history while this answer is built from the typed context, active filters, certified block evidence, and preview proof.']}),t.jsxs("div",{className:"dql-app-research-creating-steps",children:[t.jsx("small",{children:"Reading current filters"}),t.jsx("small",{children:"Checking certified block context"}),t.jsx("small",{children:"Building narrative and proof appendix"})]})]})]}):C&&H?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"dql-app-report-toolbar",children:[t.jsxs("div",{children:[t.jsx("span",{children:"Current memo"}),t.jsx("b",{children:Ja(C)})]}),t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>K(j=>!j),children:[t.jsx(Ue,{size:13})," ",ie?"Hide history":`Memo history (${f.length})`]})]}),we||I===C.id||C.status==="running"?t.jsxs("div",{className:`dql-app-research-status ${we?"opening":""}`,children:[t.jsx(nt,{size:14}),t.jsxs("div",{children:[t.jsx("span",{children:we?"Opening a new business memo...":"Refreshing the memo from certified evidence, active filters, and optional preview proof..."}),U?t.jsx("small",{children:U}):null]})]}):null,W?t.jsx("div",{className:"dql-app-error",children:W}):null,t.jsxs("article",{className:"dql-app-research-report",children:[t.jsxs("header",{className:"dql-app-report-hero",children:[t.jsxs("div",{className:"dql-app-report-status-row",children:[t.jsxs("span",{children:[t.jsx(Ue,{size:13})," Business memo"]}),t.jsx(st,{tone:C.status==="error"?"draft":"agentic",children:C.reviewStatus})]}),t.jsx("h2",{children:H.title}),t.jsx("p",{children:H.scope}),t.jsx("div",{className:"dql-app-report-context-line",children:H.contextFacts.map(j=>t.jsxs("span",{children:[t.jsx("b",{children:j.label}),j.value]},j.label))}),t.jsxs("div",{className:"dql-app-report-actions",children:[t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void je(C),disabled:I===`pin:${C.id}`,children:[t.jsx(Wi,{size:13})," ",C.pinnedAiPinId?"Added to App":"Add reviewed insight to App"]}),t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:()=>void Te(C),disabled:!(M.trim()||C.generatedSql)||I===`promote:${C.id}`,children:[t.jsx(Ar,{size:13})," ",I===`promote:${C.id}`?"Drafting...":"Create draft block"]}),t.jsxs("details",{className:"dql-app-report-review-actions",children:[t.jsx("summary",{children:"Reviewer tools"}),t.jsxs("div",{children:[t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void te(C,M),disabled:I===C.id,children:[t.jsx(nt,{size:13})," ",I===C.id?"Refreshing...":"Refresh memo"]}),(Z=H.previewIssue)!=null&&Z.canRebuild?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void re(C),disabled:I===`rebuild:${C.id}`,children:[t.jsx(nt,{size:13})," ",I===`rebuild:${C.id}`?"Rebuilding...":"Rebuild SQL"]}):null]})]})]}),H.previewIssue?t.jsxs("div",{className:"dql-app-report-warning",children:[t.jsx(it,{size:14}),t.jsx("span",{children:H.previewIssue.message})]}):null]}),t.jsx("section",{className:"dql-app-report-section dql-app-report-paper",children:H.sections.length?t.jsx($s,{sections:H.sections}):t.jsx(Ol,{text:ne,t:h,compact:!0})}),H.keyNumbers.length||H.drivers.length?t.jsxs("section",{className:`dql-app-report-section dql-app-report-evidence-story ${H.keyNumbers.length&&H.drivers.length?"":"single"}`,children:[H.keyNumbers.length?t.jsxs("div",{children:[t.jsx("h3",{children:H.intent==="segment_compare"?"Segment numbers":H.intent==="diagnose_change"?"Movement numbers":"Key numbers"}),t.jsx("div",{className:"dql-app-report-numbers",children:H.keyNumbers.map(j=>t.jsxs("div",{className:"dql-app-report-number",children:[t.jsx("span",{children:j.label}),t.jsx("b",{children:j.value}),t.jsx("small",{children:j.detail})]},j.label))})]}):null,H.drivers.length?t.jsxs("div",{children:[t.jsx("h3",{children:H.intent==="anomaly_investigation"?"Exception view":H.intent==="entity_drilldown"?"Entity view":"Driver view"}),t.jsx(Ls,{drivers:H.drivers})]}):null]}):null,t.jsxs("details",{className:"dql-app-report-section dql-app-report-appendix",children:[t.jsxs("summary",{children:[t.jsx("span",{children:"Technical appendix"}),t.jsx("small",{children:"SQL, preview rows, caveats, routing, and source context for analyst review"}),t.jsx(ba,{size:15})]}),t.jsxs("div",{className:"dql-app-research-evidence-head",children:[t.jsxs("div",{children:[t.jsx("h3",{children:"SQL and proof"}),t.jsx("p",{children:"Use this appendix only when you need to inspect routing, repair generated SQL, or validate source context before pinning this memo to the app."})]}),t.jsx("div",{className:"dql-app-research-tabs",children:["preview","sql","assumptions","context"].map(j=>t.jsx("button",{type:"button",className:b===j?"on":"",onClick:()=>E(j),children:j==="assumptions"?"Caveats":Be(j)},j))})]}),t.jsx(Os,{investigation:C,tab:b,sqlDraft:M,onSqlDraftChange:F})]})]})]}):t.jsxs(t.Fragment,{children:[W?t.jsx("div",{className:"dql-app-error",children:W}):null,me?t.jsxs("div",{className:"dql-app-research-creating",children:[t.jsx(nt,{size:22}),t.jsx("span",{children:"Preparing business memo"}),t.jsx("h2",{children:"Writing business memo..."}),t.jsx("p",{children:U?`DQL is opening a scoped memo for "${U}".`:"DQL is using the Copilot context, active filters, certified block evidence, and any available preview proof to create the main-canvas memo."})]}):t.jsx(Ie,{title:"Start analysis from Copilot.",detail:"Ask a follow-up, add context, then review the analysis here."})]})})]}):t.jsx(Ie,{title:"No App selected.",detail:"Choose an App before writing analysis."})}function da({item:e,selected:r,onClick:a}){return t.jsxs("button",{type:"button",className:[r?"on":"",`status-${e.status}`].filter(Boolean).join(" "),onClick:a,children:[t.jsx("span",{children:Ja(e)}),t.jsx("small",{children:Fs(e)})]})}function rs({appDoc:e}){const r=(e==null?void 0:e.notebooks)??(e==null?void 0:e.app.notebooks)??[];return r.length?t.jsx("div",{className:"dql-app-simple-list",children:r.map(a=>t.jsxs(ut,{icon:t.jsx(za,{size:16}),children:[t.jsx("b",{children:a.title??a.path.split("/").pop()}),t.jsxs("span",{children:[a.role," / ",a.visibility," / ",a.path]})]},a.path))}):t.jsx(Ie,{title:"No notebooks attached.",detail:"Attach analysis notebooks in Build mode when this App needs supporting work."})}function as({appDoc:e}){const r=(e==null?void 0:e.aiPins)??[];return r.length?t.jsx("div",{className:"dql-app-simple-list",children:r.map(a=>t.jsxs(ut,{icon:t.jsx(rr,{size:16}),children:[t.jsx("b",{children:a.title}),t.jsxs("span",{children:[a.certification," / ",a.reviewStatus]})]},a.id))}):t.jsx(Ie,{title:"No pinned insights yet.",detail:"Use Copilot from a dashboard page, create analysis, then add useful reviewed insights to this App."})}function is({appDoc:e}){const r=(e==null?void 0:e.drafts)??[];return r.length?t.jsx("div",{className:"dql-app-simple-list",children:r.map(a=>t.jsxs(ut,{icon:t.jsx(Ar,{size:16}),children:[t.jsx("b",{children:a.name}),t.jsxs("span",{children:[a.reviewStatus??"needs review"," / ",a.path]})]},a.path))}):t.jsx(Ie,{title:"No drafts.",detail:"Generated and promoted draft blocks will appear here for review."})}function ns({appDoc:e}){var r;return e?t.jsxs("div",{className:"dql-app-settings-grid",children:[t.jsxs(ut,{icon:t.jsx(ot,{size:16}),children:[t.jsx("b",{children:"Owners"}),t.jsx("span",{children:e.app.owners.join(", ")})]}),t.jsxs(ut,{icon:t.jsx(nt,{size:16}),children:[t.jsx("b",{children:"Lifecycle"}),t.jsx("span",{children:e.app.lifecycle??"draft"})]}),t.jsxs(ut,{icon:t.jsx(zr,{size:16}),children:[t.jsx("b",{children:"Policies"}),t.jsxs("span",{children:[e.app.policies.length," local access policies"]})]}),t.jsxs(ut,{icon:t.jsx(ft,{size:16}),children:[t.jsx("b",{children:"Homepage"}),t.jsx("span",{children:((r=e.app.homepage)==null?void 0:r.type)??"dashboard"})]})]}):t.jsx(Ie,{title:"No App selected.",detail:"Choose an App to inspect its settings."})}function cr({title:e,meta:r}){return t.jsxs("div",{className:"dql-app-panel-head",children:[t.jsx("span",{children:e}),r?t.jsx("b",{children:r}):null]})}function ls(e){return e.kind==="certified_block"&&e.certification==="certified"}function ss(e){var i;const r=Array.isArray(e.scopedReports)?e.scopedReports.length:0,a=Array.isArray((i=e.planning)==null?void 0:i.scopedReports)?e.planning.scopedReports.length:0;return r>0||a>0?Math.max(r,a):Array.isArray(e.missingEvidence)?e.missingEvidence.length:0}function os({filters:e,values:r,onChange:a}){return e.length===0?t.jsx("span",{className:"dql-app-filter-empty",children:"No filters"}):t.jsx(t.Fragment,{children:e.map(i=>t.jsx(ps,{filter:i,value:r[i.id]??Pt(i),onChange:n=>a(i,n)},i.id))})}function ps({filter:e,value:r,onChange:a}){var h;const i=Be(e.id),n=cs(e,r),l=e.sourceBlockId,s=e.bindsTo||e.id,o=(e.type==="string"||e.type==="select")&&!!l&&!((h=e.options)!=null&&h.length),[d,c]=p.useState(null);if(p.useEffect(()=>{if(!o||!l)return;let f=!1;return D.dashboardFilterOptions(l,s).then(x=>{!f&&x&&x.options.length>0&&!x.truncated&&c(x.options)}),()=>{f=!0}},[l,s,o]),d&&d.length>0)return t.jsx(ur,{icon:Nt(e),label:i,value:n,onChange:a,options:[["",`All ${i.toLowerCase()}`],...d.map(f=>[f,f])]});if(e.type==="select")return t.jsx(ur,{icon:Nt(e),label:i,value:n,onChange:a,options:ds(e)});if(e.type==="boolean")return t.jsx(ur,{icon:Nt(e),label:i,value:String(!!r),onChange:f=>a(f==="true"),options:[["true","Yes"],["false","No"]]});if(e.type==="daterange"){const f=r&&typeof r=="object"&&!Array.isArray(r)?r:{},x=typeof f.start=="string"?f.start:"",y=typeof f.end=="string"?f.end:"",T=(z,m)=>a(z&&m?{start:z,end:m}:void 0);return t.jsxs("label",{className:"dql-app-filter-select dql-app-filter-range",title:e.bindsTo?`${i} -> ${e.bindsTo}`:i,"aria-label":i,children:[t.jsx("span",{className:"dql-app-filter-icon",children:Nt(e)}),t.jsx("input",{type:"date",value:x,"aria-label":`${i} from`,onChange:z=>T(z.target.value,y)}),t.jsx("span",{className:"dql-app-filter-range-sep",children:"–"}),t.jsx("input",{type:"date",value:y,"aria-label":`${i} to`,onChange:z=>T(x,z.target.value)})]})}return t.jsxs("label",{className:"dql-app-filter-select",title:e.bindsTo?`${i} -> ${e.bindsTo}`:i,"aria-label":i,children:[t.jsx("span",{className:"dql-app-filter-icon",children:Nt(e)}),t.jsx("input",{type:e.type==="number"?"number":e.type==="date"?"date":"text",value:n,placeholder:i,onChange:f=>a(f.target.value)})]})}function Nt(e){return e.type==="date"||e.type==="daterange"||/season|year|date|time|period/i.test(e.id)?t.jsx(Bi,{size:13}):t.jsx(Aa,{size:13})}function ds(e){var a;return((a=e.options)!=null&&a.length?e.options:[e.default].filter(i=>i!==void 0)).map(i=>[String(i),Be(String(i))])}function Pt(e){var r;return e.default!==void 0?e.default:e.type==="number"?Qa(e.id):e.type==="boolean"?!1:e.type==="select"?((r=e.options)==null?void 0:r[0])??"":""}function cs(e,r){return r==null?String(Pt(e)??""):e.type==="daterange"&&typeof r=="object"?JSON.stringify(r):String(r)}function us(e,r){if(e.type==="number"){if(typeof r=="string"&&r.trim()==="")return"";const a=Number(r);return Number.isFinite(a)?a:r}if(e.type==="boolean")return r===!0||r==="true";if(e.type==="select"&&typeof e.default=="number"){const a=Number(r);return Number.isFinite(a)?a:r}return r}function ca(e,r){const a=Object.keys(e),i=Object.keys(r);return a.length!==i.length?!1:a.every(n=>Object.is(e[n],r[n]))}function ur({label:e,icon:r,value:a,options:i,onChange:n}){return t.jsxs("label",{className:"dql-app-filter-select",title:e,"aria-label":e,children:[r?t.jsx("span",{className:"dql-app-filter-icon",children:r}):t.jsx("span",{children:e}),t.jsx("select",{value:a,onChange:l=>n(l.target.value),children:i.map(([l,s])=>t.jsx("option",{value:l,children:s},l))})]})}function xr(e){return e.block?"blockId"in e.block?e.block.blockId??null:e.block.ref??null:null}function Ga(e,r){if(!e)return[];const a=new Map(((r==null?void 0:r.tiles)??[]).map(d=>[d.tileId,d])),i=new Map(((r==null?void 0:r.tiles)??[]).filter(d=>d.blockId).map(d=>[d.blockId,d])),n=new Set(e.layout.items.filter(d=>xr(d)&&ua(d)).map(d=>wr(`${d.title??""} ${xr(d)??""}`)).filter(Boolean)),l=e.layout.items.map((d,c)=>{const h=xr(d);if(!h)return null;const f=wr(`${d.title??""} ${h}`);if(f&&n.has(f)&&!ua(d))return null;const x=a.get(d.i)??i.get(h);return{block:{blockId:h,title:d.title??h,viz:d.viz.type,tileId:d.i},duplicateKeys:xs(d,x,h),score:hs(d,x,c)}}).filter(d=>!!d).sort((d,c)=>c.score-d.score),s=new Set,o=[];for(const d of l)if(!d.duplicateKeys.some(c=>s.has(c))){for(const c of d.duplicateKeys)s.add(c);o.push(d.block)}return o}function ua(e){var r,a;return(r=e.parameterBindings)!=null&&r.length?!0:!!((a=e.filterBindings)!=null&&a.some(i=>!i.unsupportedReason&&(i.mode==="parameter"||i.mode==="predicate"||!!i.binding)))}function xs(e,r,a){const i=[`block:${a}`],n=fs(r==null?void 0:r.result);n&&i.push(`result:${n}`);const l=wr(`${e.title??""} ${a}`);return l&&i.push(`topic:${l}`),i}function fs(e){var i,n;if(!((i=e==null?void 0:e.columns)!=null&&i.length)||!((n=e.rows)!=null&&n.length))return"";const r=e.columns.slice(0,6).map(l=>l.toLowerCase()),a=e.rows.slice(0,3).map(l=>r.map(s=>gs(l[s]??l[e.columns.find(o=>o.toLowerCase()===s)??s])).join(","));return[...r,...a].join("|")}function gs(e){return e==null?"":typeof e=="number"?Number.isFinite(e)?String(Math.round(e*1e3)/1e3):"":String(e).toLowerCase().replace(/\s+/g," ").trim().slice(0,80)}function wr(e){const r=e.toLowerCase().replace(/\b(codex|e2e|qa|draft|imported|pasted|raw|sql|block)\b/g," ").replace(/\b20\d{10,}\b/g," "),a=/\b(player|players|scorer|scorers|athlete)\b/.test(r)?"player":/\b(customer|account|user)\b/.test(r)?"customer":/\b(team|teams)\b/.test(r)?"team":"",i=/\b(top|bottom|rank|ranking|leader|leaderboard|scorer|scorers)\b/.test(r)?"ranking":/\b(availability|freshness|record|records|quality|coverage)\b/.test(r)?"availability":/\b(trend|weekly|monthly|daily|over time)\b/.test(r)?"trend":"",n=/\b(point|points|pts|score|scoring|scorer|scorers)\b/.test(r)?"points":/\b(field goal|fgm|fga|field-goal|field_goals?)\b/.test(r)?"field_goals":/\b(count|records|games played)\b/.test(r)?"count":/\b(availability|freshness|quality|coverage)\b/.test(r)?"quality":"";return!a||!i||!n?"":`${a}|${i}|${n}`}function hs(e,r,a){var n,l,s,o,d;let i=1e4-a;return(n=e.parameterBindings)!=null&&n.length&&(i+=5e4),(l=e.filterBindings)!=null&&l.length&&(i+=2e4),(r==null?void 0:r.status)==="ok"&&(i+=15e3),(o=(s=r==null?void 0:r.result)==null?void 0:s.rows)!=null&&o.length&&(i+=8e3),(r==null?void 0:r.certificationStatus)==="certified"&&(i+=5e3),String(e.trustState??((d=e.display)==null?void 0:d.trustState)??"").toLowerCase()==="certified"&&(i+=3e3),/codex\s+e2e|test|pasted/i.test(String(e.title??""))&&(i-=6e3),i}function ms(e,r){if(!Array.isArray(e)||e.length===0)return;const a=Array.isArray(r)&&r.length>0?r.slice(0,8):Object.keys(e[0]??{}).slice(0,8);return e.slice(0,5).map(i=>Object.fromEntries(a.map(n=>[n,i[n]])))}function Gt(e){return String(e??"").replace(/\s+/g," ").replace(/[\s,;:.–—-]+$/,"").trim()}function Be(e){const r=String(e??"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim();return r?r.split(" ").map(a=>{const i=a.toLowerCase();return i==="ai"?"AI":i==="cxo"?"CXO":i==="kpi"?"KPI":i==="vs"||i==="vs."?"vs.":`${a.charAt(0).toUpperCase()}${a.slice(1)}`}).join(" "):"Business"}function Ya(e){return e.replace(/\bDraft gaps stay in Research until reviewed\.?/gi,"Follow-up analysis stays out of the stakeholder view until reviewed.").replace(/\bresearch path\b/gi,"analysis path").replace(/\bresearch suggestions\b/gi,"analysis suggestions").replace(/\bfollow-up research\b/gi,"follow-up analysis").replace(/\bevidence chips\b/gi,"proof chips").replace(/\bevidence, lineage\b/gi,"proof and lineage").replace(/\bevidence and lineage\b/gi,"proof and lineage").replace(/\bsource evidence\b/gi,"source proof").replace(/\bOpen Research\b/g,"Open Analysis").replace(/\bResearch\b/g,"Analysis")}function tr(e){return e==null||e===""?"All":Array.isArray(e)?e.map(tr).join(", "):typeof e=="boolean"?e?"On":"Off":typeof e=="number"?e.toLocaleString():typeof e=="object"?JSON.stringify(e):String(e)}function Xa(e,r){if(Array.isArray(r))return r.map(i=>Xa(e,i)).join(", ");const a=typeof r=="number"?r:typeof r=="string"&&r.trim()!==""?Number(r):NaN;return/(season|year)/i.test(e)&&Number.isInteger(a)&&a>=1900&&a<=2200?String(a):tr(r)}function bs(e,r,a){var o;const i=(e==null?void 0:e.id)??(r==null?void 0:r.app.id)??"app",n=(e==null?void 0:e.name)??(r==null?void 0:r.app.name)??"DQL App",l=(a==null?void 0:a.dashboard.metadata.title)??((o=r==null?void 0:r.dashboards[0])==null?void 0:o.title)??"Overview",s=typeof window<"u"?window.location.origin:"local DQL";return[n,`App ID: ${i}`,`Dashboard: ${l}`,`Domain: ${(e==null?void 0:e.domain)??(r==null?void 0:r.app.domain)??(a==null?void 0:a.dashboard.metadata.domain)??"unknown"}`,`Open locally: ${s}`].join(`
53
+ `)}function vs(e,r,a){const i=r==null?void 0:r.app,n=(e==null?void 0:e.name)??(i==null?void 0:i.name)??"DQL App",l=(r==null?void 0:r.dashboards)??[],s=(r==null?void 0:r.notebooks)??(i==null?void 0:i.notebooks)??[],o=(r==null?void 0:r.drafts)??[],d=(r==null?void 0:r.aiPins)??[],c=a==null?void 0:a.dashboard,h=(c==null?void 0:c.layout.items.map(x=>x.block?x.block.blockId??x.block.ref??x.title??x.i:null).filter(x=>!!x))??[];return`${[`# ${n}`,"",(e==null?void 0:e.description)??(c==null?void 0:c.metadata.description)??(i==null?void 0:i.description)??"Local DQL App brief.","","## App Metadata","",`- App ID: ${(e==null?void 0:e.id)??(i==null?void 0:i.id)??"unknown"}`,`- Domain: ${(e==null?void 0:e.domain)??(i==null?void 0:i.domain)??(c==null?void 0:c.metadata.domain)??"unknown"}`,`- Lifecycle: ${(e==null?void 0:e.lifecycle)??(i==null?void 0:i.lifecycle)??(c==null?void 0:c.metadata.lifecycle)??"draft"}`,`- Audience: ${(e==null?void 0:e.audience)??(i==null?void 0:i.audience)??(c==null?void 0:c.metadata.audience)??"stakeholder"}`,`- Owners: ${((e==null?void 0:e.owners)??(i==null?void 0:i.owners)??[]).join(", ")||"owner@local"}`,"","## Pages","",...l.length?l.map(x=>`- ${x.title} (${x.itemCount} tiles)`):["- No dashboard pages found."],"","## Governed Blocks","",...h.length?h.map(x=>`- ${x}`):["- No block-backed tiles found."],"","## Supporting Assets","",`- Notebooks: ${s.length}`,`- Pinned insights: ${d.length}`,`- Drafts needing review: ${o.length}`,""].join(`
54
+ `)}
55
+ `}function st({children:e,tone:r="certified"}){return t.jsx("span",{className:`dql-app-seal ${r}`,children:e})}function fr({label:e,value:r}){return t.jsxs("span",{children:[t.jsx("small",{children:e}),t.jsx("b",{children:r})]})}function xa({label:e,value:r}){return t.jsxs("div",{className:"dql-app-keyvalue-inline",children:[t.jsx("span",{children:e}),t.jsx("b",{children:r})]})}function ys(e,r){const a=Bt(r)||"Review this app result.",i=typeof e=="string"?e.trim():"";if(!i)return a;const n=qs(i);if(n)return n;const l=i.replace(/\bCurrent app filters:\s*[\s\S]*$/i,"").replace(/\bCertified block to start from:\s*[\s\S]*$/i,"").replace(/\bSource result:\s*[\s\S]*$/i,"").replace(/\bUser intent:\s*[\s\S]*$/i,"");return Bt(l)||a}function qs(e){const a=/(?:^|\n)\s*(Analysis goal|Analysis question|Report question|Research question|Proof question|Evidence question|Validation question|Reusable block goal|Business question|Question):\s*/i.exec(e);if(!a)return"";const i=(a.index??0)+a[0].length,n=e.slice(i),l=n.search(/(?:^|\n)\s*(Current app filters|Certified block to start from|Source result|User intent|Review status|Trust status):/i),s=l>=0?n.slice(0,l):n;return Bt(s)}function Bt(e){const r=e.replace(/^\/(ask|research|report|analy[sz]e|analysis|proof|evidence|validate|verify|add\s+block|create\s+block|draft\s+block|block)\b/i,"").replace(/\s+/g," ").trim();if(r.length<=280)return r;const a=r.slice(0,280).replace(/\s+\S*$/,"").trim();return a?`${a}...`:r.slice(0,280)}function ws(e){var M,F;const r=Se(e.metrics),a=Se(e.context),i=Se(e.evidence),n=Se(i.planner),l=js(a,i,n),s=Se(a.focusBlock),o=Lr(e),d=Se(o==null?void 0:o.result),c=Array.isArray(d.rows)?d.rows.length:0,h=ys(a.userProvidedContext,e.question),f=typeof a.actionMode=="string"?a.actionMode:void 0,x=String(r.context??s.title??e.sourceBlockId??"selected app result"),y=String(a.activeFilterSummary??Ms(Se(a.activeFilters))),T=Ns(e.intent,f),z=As(e,h,f,x),m=Cs(T,h,x,y),I=((M=e.summary)==null?void 0:M.trim())||`DQL wrote review-required analysis for ${x}: ${e.question}. The selected app result is available, but this analysis still needs human review before it becomes governed business logic.`,A=((F=e.recommendation)==null?void 0:F.trim())||"Use this as analyst-reviewed analysis first. Confirm the metric grain, filters, source tables, and caveats before adding it to the app or drafting a reusable DQL block.",W=[{label:String(r.currentLabel??"Current"),value:$t(r.currentValue),detail:String(r.currentDetail??"current selected result")},{label:String(r.baselineLabel??"Baseline"),value:$t(r.baselineValue),detail:String(r.baselineDetail??"comparison or prior value")},{label:String(r.deltaLabel??"Delta"),value:$t(r.delta),detail:String(r.deltaDetail??"change or gap to explain")},{label:"Preview",value:c?`${c} rows`:"not captured",detail:"bounded preview sample"}].filter(zs),N=Ts(e),b=c>0||W.length>0||N.length>0||Object.keys(r).length>0,E=Es(e.reportSections).filter(O=>Ss(O,e.error,b));return{title:z,intent:e.intent,actionMode:f,scope:m,summary:I,recommendation:A,routeDecision:l,sections:E,previewIssue:ks(e.error,typeof n.sqlErrorKind=="string"?n.sqlErrorKind:void 0,b),contextFacts:[{label:"Type",value:T},{label:"Source",value:x},{label:"Filters",value:y},{label:"Review",value:Be(e.reviewStatus)}],keyNumbers:W,drivers:N}}function js(e,r,a){const i=Se(e.originatingAnswer),n=Se(e.routeDecision),l=Se(i.decision),s=Se(r.routeDecision),o=Se(a.routeDecision),d=Object.keys(n).length?n:Object.keys(l).length?l:Object.keys(s).length?s:Object.keys(o).length?o:{},c=typeof d.reason=="string"?d.reason.trim():"",h=typeof d.nextAction=="string"?d.nextAction.trim():"";if(!c&&!h)return null;const f=typeof d.mode=="string"&&d.mode.trim()?Be(d.mode):"Analysis",x=typeof d.confidence=="number"&&Number.isFinite(d.confidence)?Math.round(Math.max(0,Math.min(1,d.confidence))*100):void 0;return{mode:f,reason:c,nextAction:h,confidence:x}}function ks(e,r,a=!1){const i=e==null?void 0:e.trim();return!i||a&&(r==="runtime_unavailable"||r==="unknown"||/\bAI provider did not return a governed answer\b/i.test(i))?null:r==="runtime_unavailable"?{message:"Preview could not run because the warehouse or execution runtime is unavailable. Resume or choose an active warehouse, then refresh the report. The SQL may not need to change.",canRebuild:!1}:r==="timeout"?{message:"Preview timed out. Narrow filters or simplify the SQL in the trace appendix, then refresh before promoting this report.",canRebuild:!1}:r==="safety"?{message:"DQL blocked this preview because the SQL is not safe read-only analytical SQL. Rebuild from the certified block or edit it as a SELECT/WITH query before refreshing.",canRebuild:!0}:{message:"SQL preview needs review. Edit the SQL in the trace appendix or rebuild it from the certified block context before promoting this report.",canRebuild:!0}}function Ss(e,r,a){const i=String(e.id??"").toLowerCase();return!(e.kind==="review_boundary"||i==="review-boundary"||i==="preview-unavailable"&&a||i==="sql-repair-path"&&a&&/\bAI provider did not return a governed answer\b/i.test(r??""))}function zs(e){const r=e.value.trim().toLowerCase();return!!r&&r!=="n/a"&&r!=="not captured"&&r!=="not available"}function As(e,r,a,i){const n=Xt(r)||Xt(e.title)||Xt(e.question),l=a==="block"?"Reusable logic":a==="evidence"?"Proof brief":"Analysis",s=Be(i);return`${l}: ${Is(n||s)}`}function Cs(e,r,a,i){const n=Xt(r);return[n?`Question: ${n}`:"",`Source: ${a}`,i&&i!=="No app filters set"?`Filters: ${i}`:"",`Status: ${e} / review-required`].filter(Boolean).join(" · ")}function Xt(e){return Bt(String(e??"")).replace(/^(analysis|report|research|proof|proof brief|reusable logic|reusable logic brief|change analysis|driver analysis|segment comparison|entity drilldown|anomaly review|validation result)\s*:\s*/i,"").replace(/^(analysis goal|analysis question|report question|research question|proof question|evidence question|validation question|reusable block goal|business question|question)\s*:\s*/i,"").trim()}function Is(e){const r=e.replace(/\s+/g," ").trim();return r.length<=96?r:`${r.slice(0,96).replace(/\s+\S*$/,"").trim()||r.slice(0,96)}...`}function Ns(e,r){return r==="evidence"?"Proof Brief":r==="block"?"Reusable Logic Brief":e==="diagnose_change"?"Change Analysis":e==="segment_compare"?"Segment Comparison":e==="entity_drilldown"?"Entity Drilldown":e==="anomaly_investigation"?"Anomaly Review":e==="trust_gap_review"?"Proof Review":"Driver Analysis"}function Ts(e){const r=(e.driverCards??[]).map(Se).filter(l=>Object.keys(l).length>0);if(r.length)return r.slice(0,8).map((l,s)=>({title:String(l.title??`Driver ${s+1}`),value:String(l.contribution??l.value??l.metric??"Proof"),explanation:String(l.explanation??"Review this driver against the source rows and metric grain.")}));const a=Lr(e),i=Se(a==null?void 0:a.result);return(Array.isArray(i.rows)?i.rows.map(Se).filter(l=>Object.keys(l).length>0):[]).slice(0,5).map((l,s)=>{const o=Object.keys(l),d=o.find(h=>/name|player|customer|account|segment|team/i.test(h))??o[0]??`row_${s+1}`,c=o.find(h=>/point|revenue|total|score|value|delta|count/i.test(h)&&h!==d)??o[1]??d;return{title:String(l[d]??`Preview row ${s+1}`),value:$t(l[c]),explanation:`This row is part of the bounded preview sample for ${Be(c)}.`}})}function Ps(e){var T,z;if(e.sections.length>0)return e.sections.map(m=>{var A;const I=(A=m.bullets)!=null&&A.length?`
56
+
57
+ ${m.bullets.map(W=>`- ${W}`).join(`
58
+ `)}`:"";return`## ${m.title}
59
+ ${m.body}${I}`}).join(`
60
+
61
+ `);const r=e.keyNumbers.find(m=>m.value!=="not available"&&m.label!=="Preview"),a=e.keyNumbers.find(m=>/baseline|comparison|next/i.test(m.label)&&m.value!=="not available"),i=e.keyNumbers.find(m=>/delta|gap|change/i.test(m.label)&&m.value!=="not available"),n=e.drivers[0],l=e.drivers[1],s=(T=e.contextFacts.find(m=>m.label==="Source"))==null?void 0:T.value,o=(z=e.contextFacts.find(m=>m.label==="Filters"))==null?void 0:z.value,d=[r?`${r.label}: ${r.value} (${r.detail})`:"",a?`${a.label}: ${a.value} (${a.detail})`:"",i?`${i.label}: ${i.value} (${i.detail})`:""].filter(Boolean).join("; "),c=n?`${n.title} is the strongest visible driver in this bounded preview${n.value?` (${n.value})`:""}.${l?` The next visible comparison is ${l.title}${l.value?` (${l.value})`:""}.`:""}`:"The report does not yet have ranked drivers. Add a clearer metric, time grain, or segment field before treating the analysis as complete.",h=[s?`source: ${s}`:"",o?`filters: ${o}`:""].filter(Boolean).join("; "),f=e.actionMode==="block"?"## Reusable logic decision":e.actionMode==="evidence"||e.intent==="trust_gap_review"?"## Validation result":"## Business interpretation",x=e.actionMode==="block"?"This is a candidate reusable block design, not a certified answer yet. Preserve the business question, parameter defaults, allowed filters, output grain, and proof path before certification.":e.actionMode==="evidence"||e.intent==="trust_gap_review"?`The claim should be treated as validated only inside this bounded analysis context${h?` (${h})`:""}. Use the appendix when a reviewer needs SQL, preview rows, caveats, or source trace.`:`${c} Treat the conclusion as a directional stakeholder explanation until the analyst confirms SQL, grain, filters, joins, and lineage.`,y=["## Executive answer",e.summary,f,x];return d&&y.push("## Key numbers",`The bounded preview shows ${d}. These numbers are useful for review and stakeholder framing but still need source validation before promotion.`),y.push("## Recommended next step",e.recommendation,"## Review boundary","This report is AI-generated and review-required. Use it to guide analysis, then validate SQL, grain, filters, joins, and source proof before pinning it to the app or turning it into a reusable DQL block."),y.join(`
62
+
63
+ `)}function $s({sections:e}){return t.jsx("div",{className:"dql-app-report-dynamic-sections",children:e.map(r=>{var a;return t.jsxs("section",{className:`dql-app-report-dynamic-section tone-${r.tone??"neutral"}`,children:[t.jsxs("div",{className:"dql-app-report-dynamic-head",children:[t.jsx("span",{children:Bs(r)}),t.jsx("h3",{children:r.title})]}),t.jsx(Rs,{text:r.body}),(a=r.bullets)!=null&&a.length?t.jsx("ul",{children:r.bullets.map(i=>t.jsx("li",{children:i},i))}):null]},r.id)})})}function Rs({text:e}){const r=e.split(/\n{2,}/).map(a=>a.replace(/\s*\n\s*/g," ").trim()).filter(Boolean);return r.length?t.jsx("div",{className:"dql-app-report-memo-body",children:r.map(a=>t.jsx("p",{children:a},a))}):null}function Bs(e){switch(e.kind){case"executive_answer":return"Answer";case"business_interpretation":return"Interpretation";case"key_numbers":return"Numbers";case"validation":return"Proof";case"reusable_logic":return"Reusable logic";case"recommended_next_step":return"Next step";case"review_boundary":return"Review boundary";default:return/focus/i.test(e.title)?"Scope":/repair|preview|sql/i.test(e.title)?"Appendix note":"Report note"}}function Es(e){return Array.isArray(e)?e.filter(r=>!!r&&typeof r.title=="string"&&r.title.trim().length>0&&typeof r.body=="string"&&r.body.trim().length>0).slice(0,8).map((r,a)=>({...r,id:r.id||`section-${a+1}`,title:r.title.trim(),body:r.body.trim(),bullets:Array.isArray(r.bullets)?r.bullets.filter(Boolean).slice(0,8):void 0,evidenceRefs:Array.isArray(r.evidenceRefs)?r.evidenceRefs.filter(Boolean).slice(0,8):void 0})):[]}function Ls({drivers:e}){if(!e.length)return t.jsx("p",{className:"dql-app-report-muted",children:"No ranked drivers are available yet. Refresh the report after adding a clearer metric, time grain, or comparison group."});const r=e.slice(0,6).map(i=>({...i,numericValue:Math.abs(_s(i.value))})),a=Math.max(...r.map(i=>i.numericValue),0);return t.jsx("div",{className:"dql-app-report-driver-chart","aria-label":"Report driver chart",children:r.map((i,n)=>{const l=a>0?Math.max(8,Math.round(i.numericValue/a*100)):28;return t.jsxs("div",{className:"dql-app-report-driver-bar",children:[t.jsxs("div",{children:[t.jsx("b",{children:i.title}),t.jsx("span",{children:i.value})]}),t.jsx("i",{style:{"--driver-width":`${l}%`}}),t.jsx("p",{children:i.explanation})]},`${i.title}-${n}`)})})}function _s(e){const r=e.replace(/,/g,"").match(/-?\+?\d+(?:\.\d+)?/);if(!r)return 0;const a=Number(r[0].replace(/^\+/,""));return Number.isFinite(a)?a:0}function Ms(e){const r=Object.entries(e).filter(([a])=>a!=="smartView");return r.length?r.map(([a,i])=>`${Be(a)} ${Xa(a,i)}`).join(", "):"No app filters set"}function Os({investigation:e,tab:r,sqlDraft:a,onSqlDraftChange:i}){if(r==="sql")return t.jsxs("div",{className:"dql-app-research-sql-review",children:[t.jsx("textarea",{value:a,onChange:l=>i(l.target.value),spellCheck:!1,placeholder:"Generated SQL will appear here for review."}),e.error?t.jsx("div",{className:"dql-app-error",children:e.error}):null]});const n=Se(e.evidence);if(r==="assumptions"){const l=Array.isArray(n.assumptions)?n.assumptions:[],s=Se(n.trustStatus);return t.jsxs("div",{className:"dql-app-research-assumptions",children:[l.length?l.map((o,d)=>t.jsx("p",{children:String(o)},d)):t.jsx("p",{children:"Refresh the report to capture assumptions."}),t.jsx(xa,{label:"Trust",value:String(s.label??"AI-generated report")}),t.jsx(xa,{label:"Review",value:e.reviewStatus})]})}return r==="context"?t.jsx("pre",{className:"dql-app-research-code",children:JSON.stringify({certifiedContext:n.certifiedContext,trustStatus:n.trustStatus,planner:n.planner},null,2)}):t.jsx(Ws,{investigation:e})}function Ws({investigation:e}){const r=Lr(e);if(!r)return t.jsx(Ie,{title:"No preview rows yet.",detail:"Refresh the report with SQL or selected tile results to capture proof.",compact:!0});const a=Se(r.result),i=Array.isArray(a.rows)?a.rows.map(Se).filter(l=>!!l).slice(0,8):[],n=Array.isArray(a.columns)?a.columns.map(String).slice(0,8):Object.keys(i[0]??{}).slice(0,8);return!i.length||!n.length?t.jsx(Ie,{title:"No preview rows yet.",detail:"The report captured proof, but no row preview was available.",compact:!0}):t.jsx("div",{className:"dql-app-research-table",children:t.jsxs("table",{children:[t.jsx("thead",{children:t.jsx("tr",{children:n.map(l=>t.jsx("th",{children:Be(l)},l))})}),t.jsx("tbody",{children:i.map((l,s)=>t.jsx("tr",{children:n.map(o=>t.jsx("td",{children:Hs(l[o])},o))},s))})]})})}function Lr(e){return(Array.isArray(e.resultPreviews)?e.resultPreviews:[]).map(Se).find(a=>!!a.result)??null}function Tt(e,r){const a=e.filter(i=>i.id!==r.id);return jr([r,...a])}function jr(e){return[...e].sort((r,a)=>fa(a)-fa(r))}function fa(e){const r=new Date(e.updatedAt||e.lastRunAt||e.createdAt).getTime();return Number.isFinite(r)?r:0}function Ja(e){const r=e.title.replace(/^\s*(write\s+the\s+report\s+brief|the\s+research\s+question|research\s+question)\s*:\s*/i,"").replace(/^\s*research\b/i,"Analysis").replace(/^\s*report\b/i,"Analysis").trim(),a=Be(r||e.title);return a.length<=64?a:`${a.slice(0,61).trim()}...`}function Fs(e){const r=e.status==="error"?"Needs SQL review":e.status==="ready"?"Ready":e.status==="running"?"Running":"Draft",a=Vs(e.updatedAt||e.lastRunAt||e.createdAt);return`${Be(e.intent)} / ${r}${a?` / ${a}`:""}`}function Vs(e){if(!e)return"";const r=new Date(e).getTime();if(!Number.isFinite(r))return"";const a=Math.max(0,Date.now()-r),i=Math.floor(a/6e4);if(i<1)return"just now";if(i<60)return`${i}m ago`;const n=Math.floor(i/60);return n<24?`${n}h ago`:`${Math.floor(n/24)}d ago`}function $t(e){return typeof e=="number"&&Number.isFinite(e)?Math.abs(e)>=100?Math.round(e).toLocaleString():Number(e.toFixed(2)).toLocaleString():typeof e=="string"&&e.trim()?e:"n/a"}function Hs(e){return e==null?"":typeof e=="number"?$t(e):typeof e=="string"?e:JSON.stringify(e)}function Se(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function ut({icon:e,children:r}){return t.jsxs("div",{className:"dql-app-panel-card",children:[t.jsx("span",{children:e}),t.jsx("div",{children:r})]})}function Ie({title:e,detail:r,compact:a=!1}){return t.jsxs("div",{className:`dql-app-empty ${a?"compact":""}`,children:[t.jsx(ft,{size:a?24:34,strokeWidth:1.5}),t.jsx("b",{children:e}),t.jsx("span",{children:r})]})}function Qs({title:e,allowExploration:r,exploreGaps:a,error:i,onChange:n,onExploreGapsChange:l,onCancel:s,onCreate:o}){return t.jsx("div",{className:"dql-app-modal-backdrop",children:t.jsxs("div",{className:"dql-app-modal",children:[t.jsx("h3",{children:"Build a new App page"}),t.jsx("p",{children:"Describe the business question. AI will propose exactly one page for review before changing the App."}),t.jsxs("label",{children:["What should this page answer?",t.jsx("textarea",{value:e,onChange:d=>n(d.target.value),autoFocus:!0,rows:4,placeholder:"Show quarterly revenue drivers by region and segment for leadership."})]}),r?t.jsxs("button",{type:"button",className:`dql-app-page-explore ${a?"on":""}`,onClick:()=>l(!a),"aria-pressed":a,children:[t.jsx("span",{children:a?t.jsx(xt,{size:11,strokeWidth:3}):null}),t.jsx("b",{children:"Explore uncovered gaps with AI SQL"}),t.jsx("small",{children:"Personal App only · bounded preview · review required"})]}):t.jsx("small",{className:"dql-app-page-source-policy",children:"Shared-project pages use certified blocks and governed semantic metrics."}),i?t.jsx("div",{className:"dql-app-error",children:i}):null,t.jsxs("div",{children:[t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:s,children:"Cancel"}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:o,children:"Create Build Brief"})]})]})})}function Ks(e,r,a,i,n){const l=n.map((s,o)=>({id:s.id||`tile-${o+1}`,title:s.name,kind:"certified_block",description:s.description,blockId:s.name,sourceNodeId:s.id,viz:s.chartType??"table",certification:"certified",reviewStatus:"certified",rationale:"Selected from the certified block palette."}));return{version:2,mode:"stakeholder",publicationIntent:"shared_project",requirements:[{id:"primary",question:r,role:"detail",measures:[],dimensions:[],filters:[]}],requirementCoverage:l.map(s=>({requirementId:"primary",status:"covered",source:"certified_block",tileId:s.id,sourceId:s.sourceNodeId,trustState:"certified",reasons:["Explicitly selected certified block."]})),storyEvidencePlan:{version:1,goal:r,audience:"stakeholder",eligibleTileIds:l.map(s=>s.id)},appId:Xs(e)||"new-app",name:e,prompt:r,skills:Fl.map(s=>({id:s.id,title:s.title,description:s.description})),domain:a,audience:"stakeholder",businessGoal:r,owner:i,lifecycle:"draft",tags:["app-builder"],pages:[{id:"overview",title:"Overview",filters:[],tiles:l}],caveats:[],reviewTasks:[]}}function Gs(e,r){return{all:e.length,mine:e.filter(a=>a.storage==="mine").length,shared:e.filter(a=>(a.storage??"shared")==="shared").length,fav:r.size}}function Ys(e){var r;return((r=e.owners)==null?void 0:r[0])??"owner@local"}function Xs(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}const Js=`
64
+ .dql-apps-waterline {
65
+ --dql-app-canvas: var(--color-bg-primary, #f7f8fb);
66
+ --dql-app-surface: var(--color-bg-card, #ffffff);
67
+ --dql-app-surface-muted: var(--color-bg-secondary, #f8fafc);
68
+ --dql-app-control: var(--color-bg-sunken, #f4f6f9);
69
+ --dql-app-line: var(--color-border-subtle, rgba(15, 23, 42, 0.10));
70
+ --dql-app-line-2: var(--color-border-primary, rgba(15, 23, 42, 0.16));
71
+ --dql-app-ink: var(--color-text-primary, #0f172a);
72
+ --dql-app-muted: var(--color-text-secondary, #64748b);
73
+ --dql-app-faint: var(--color-text-tertiary, #94a3b8);
74
+ --dql-app-accent: var(--color-accent-blue, #2563eb);
75
+ --dql-app-accent-soft: var(--accent-dim, rgba(37, 99, 235, 0.10));
76
+ --dql-app-deep: #111827;
77
+ --dql-app-green: var(--color-status-success, #16a34a);
78
+ --dql-app-green-soft: var(--status-success-bg, rgba(22, 163, 74, 0.08));
79
+ --dql-app-orange: var(--color-status-warning, #ca8a04);
80
+ --dql-app-orange-soft: var(--status-warning-bg, rgba(202, 138, 4, 0.10));
81
+ --dql-app-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 10px 28px rgba(15, 23, 42, 0.06);
82
+ --surface: var(--dql-app-surface);
83
+ --surface-hover: var(--dql-app-control);
84
+ --border-color: var(--dql-app-line);
85
+ flex: 1;
86
+ min-height: 0;
87
+ overflow-x: hidden;
88
+ overflow-y: auto;
89
+ background: var(--dql-app-canvas);
90
+ color: var(--dql-app-ink);
91
+ font-family: var(--font-ui);
92
+ font-size: 14px;
93
+ line-height: 1.45;
94
+ text-rendering: geometricPrecision;
95
+ }
96
+
97
+ .dql-apps-waterline * {
98
+ letter-spacing: 0;
99
+ }
100
+
101
+ /* Per-theme palettes come straight from the Luna tokens the base block maps
102
+ (tokens.css under [data-theme]) — the redesign handoff palette IS the Paper
103
+ token set, so no per-theme hex overrides remain here. Obsidian only mutes
104
+ card shadows. */
105
+ .dql-apps-theme-obsidian {
106
+ --dql-app-deep: #05070b;
107
+ --dql-app-shadow: none;
108
+ }
109
+
110
+ .dql-apps-wrap {
111
+ width: min(880px, calc(100% - 48px));
112
+ margin: 0 auto;
113
+ padding: 28px 0 40px;
114
+ display: flex;
115
+ flex-direction: column;
116
+ gap: 12px;
117
+ }
118
+
119
+ .dql-apps-createhead h1 {
120
+ margin: 0;
121
+ font-size: 18px;
122
+ line-height: 1.2;
123
+ font-weight: 700;
124
+ letter-spacing: -0.01em;
125
+ }
126
+
127
+ .dql-apps-createhead p {
128
+ margin: 3px 0 0;
129
+ color: var(--dql-app-faint);
130
+ font-size: 12.5px;
131
+ line-height: 1.55;
132
+ max-width: 720px;
133
+ }
134
+
135
+ /* Prototype composer card (library) */
136
+ .dql-apps-composer {
137
+ background: var(--dql-app-surface);
138
+ border: 1px solid var(--dql-app-line-2);
139
+ border-radius: 14px;
140
+ box-shadow: 0 1px 2px rgba(26, 26, 26, 0.03), 0 6px 22px rgba(26, 26, 26, 0.05);
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+ .dql-apps-targets {
145
+ display: grid;
146
+ grid-template-columns: 1fr 1fr;
147
+ gap: 8px;
148
+ padding: 10px 10px 2px;
149
+ }
150
+ .dql-apps-targets button {
151
+ display: grid;
152
+ grid-template-columns: auto 1fr;
153
+ align-items: center;
154
+ gap: 2px 7px;
155
+ border: 1px solid var(--dql-app-line);
156
+ border-radius: 9px;
157
+ background: var(--dql-app-control);
158
+ color: var(--dql-app-muted);
159
+ padding: 8px 10px;
160
+ text-align: left;
161
+ font: 750 11.5px var(--font-ui);
162
+ cursor: pointer;
163
+ }
164
+ .dql-apps-targets button.on {
165
+ border-color: var(--dql-app-accent);
166
+ color: var(--dql-app-ink);
167
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--dql-app-accent) 18%, transparent);
168
+ }
169
+ .dql-apps-targets button small {
170
+ grid-column: 2;
171
+ color: var(--dql-app-faint);
172
+ font-size: 10px;
173
+ font-weight: 500;
174
+ }
175
+ .dql-apps-composer textarea {
176
+ border: 0; background: transparent; resize: none; outline: none;
177
+ padding: 13px 15px 4px;
178
+ font-size: 13.5px; line-height: 1.5;
179
+ color: var(--dql-app-ink); font-family: inherit;
180
+ }
181
+ .dql-apps-composer-row { display: flex; align-items: center; gap: 8px; padding: 8px 10px 10px 12px; }
182
+ .dql-apps-composer-row > i { flex: 1; }
183
+ .dql-apps-explore-toggle {
184
+ display: inline-flex;
185
+ align-items: center;
186
+ gap: 5px;
187
+ color: var(--dql-app-muted);
188
+ font-size: 10.5px;
189
+ cursor: pointer;
190
+ }
191
+ .dql-apps-explore-toggle input { accent-color: var(--dql-app-accent); }
192
+ .dql-apps-composer-chip {
193
+ display: inline-flex; align-items: center; gap: 6px;
194
+ padding: 4px 9px; border-radius: 8px;
195
+ border: 1px solid var(--dql-app-line);
196
+ background: var(--dql-app-canvas);
197
+ font-size: 11.5px; color: var(--dql-app-muted); white-space: nowrap;
198
+ }
199
+ .dql-apps-composer-chip svg { color: var(--dql-app-green); }
200
+ .dql-apps-composer-blank {
201
+ display: inline-flex; align-items: center; gap: 6px;
202
+ height: 30px; padding: 0 11px;
203
+ border-radius: 8px; border: 1px solid var(--dql-app-line);
204
+ background: var(--dql-app-surface); color: var(--dql-app-muted);
205
+ font-size: 11.5px; font-weight: 600; cursor: pointer; font-family: inherit;
206
+ }
207
+ .dql-apps-composer-blank:hover { background: var(--dql-app-surface-muted); }
208
+ .dql-apps-composer-send {
209
+ width: 34px; height: 34px; border-radius: 10px; border: 0;
210
+ background: var(--dql-app-accent); color: #fff;
211
+ display: inline-flex; align-items: center; justify-content: center;
212
+ cursor: pointer; box-shadow: 0 1px 5px rgba(107, 93, 211, 0.3);
213
+ }
214
+ .dql-apps-composer-send:hover { filter: brightness(0.95); }
215
+ .dql-apps-composer-send:disabled { opacity: 0.5; cursor: default; box-shadow: none; }
216
+ .dql-apps-try { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
217
+ .dql-apps-try > span { font-size: 10.5px; color: var(--dql-app-faint); }
218
+ .dql-apps-try button {
219
+ border: 1px solid var(--dql-app-line);
220
+ background: var(--dql-app-surface);
221
+ color: var(--dql-app-muted);
222
+ border-radius: 999px; padding: 3.5px 11px;
223
+ font-size: 11px; font-weight: 550; cursor: pointer; font-family: inherit;
224
+ }
225
+ .dql-apps-try button:hover { border-color: var(--dql-app-accent); color: var(--dql-app-accent); background: var(--dql-app-accent-soft); }
226
+
227
+ .dql-apps-btn {
228
+ height: 32px;
229
+ border-radius: 8px;
230
+ border: 1px solid transparent;
231
+ padding: 0 12px;
232
+ display: inline-flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ gap: 7px;
236
+ font: 750 12px var(--font-ui);
237
+ cursor: pointer;
238
+ white-space: nowrap;
239
+ }
240
+
241
+ .dql-apps-btn:disabled { opacity: 0.62; cursor: not-allowed; }
242
+ .dql-apps-btn-primary { background: var(--dql-app-accent); color: #fff; }
243
+ .dql-apps-btn-line { background: var(--dql-app-surface); border-color: var(--dql-app-line-2); color: var(--dql-app-ink); }
244
+ .dql-apps-btn-icon { width: 32px; padding: 0; flex: none; }
245
+ .dql-apps-btn-icon:hover,
246
+ .dql-apps-btn-icon.on { color: var(--dql-app-accent); border-color: rgba(79, 99, 215, 0.34); background: var(--dql-app-accent-soft); }
247
+ .dql-apps-btn-dark { width: 100%; background: var(--dql-app-deep); border-color: #1f2937; color: #fff; margin-top: 12px; }
248
+
249
+ .dql-apps-ai-entry {
250
+ margin-top: 18px;
251
+ border: 1px solid rgba(79, 99, 215, 0.26);
252
+ border-radius: 12px;
253
+ background: var(--dql-app-surface);
254
+ box-shadow: var(--dql-app-shadow);
255
+ padding: 16px;
256
+ display: grid;
257
+ gap: 12px;
258
+ }
259
+
260
+ .dql-apps-ai-entry-head {
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: space-between;
264
+ gap: 10px;
265
+ }
266
+
267
+ .dql-apps-ai-entry-head span,
268
+ .dql-apps-ai-entry-head b {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ gap: 6px;
272
+ font: 850 11px var(--font-ui);
273
+ }
274
+
275
+ .dql-apps-ai-entry-head span {
276
+ color: var(--dql-app-accent);
277
+ }
278
+
279
+ .dql-apps-ai-entry-head b {
280
+ color: var(--dql-app-green);
281
+ }
282
+
283
+ .dql-apps-ai-entry-box {
284
+ display: grid;
285
+ grid-template-columns: minmax(0, 1fr) auto;
286
+ align-items: end;
287
+ gap: 12px;
288
+ }
289
+
290
+ .dql-apps-ai-entry-box textarea {
291
+ width: 100%;
292
+ min-height: 112px;
293
+ resize: vertical;
294
+ border: 1px solid var(--dql-app-line-2);
295
+ border-radius: 10px;
296
+ background: var(--dql-app-control);
297
+ color: var(--dql-app-ink);
298
+ outline: 0;
299
+ padding: 13px 14px;
300
+ font: 540 15px/1.5 var(--font-ui);
301
+ }
302
+
303
+ .dql-apps-ai-entry-box textarea:focus {
304
+ border-color: rgba(79, 99, 215, 0.52);
305
+ box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
306
+ }
307
+
308
+ .dql-apps-ai-entry-box button {
309
+ height: 46px;
310
+ border: 0;
311
+ border-radius: 10px;
312
+ background: var(--dql-app-accent);
313
+ color: #fff;
314
+ padding: 0 16px;
315
+ display: inline-flex;
316
+ align-items: center;
317
+ justify-content: center;
318
+ gap: 7px;
319
+ font: 800 12.5px var(--font-ui);
320
+ cursor: pointer;
321
+ box-shadow: 0 12px 26px rgba(79, 99, 215, 0.2);
322
+ }
323
+
324
+ .dql-apps-ai-entry-box button:disabled {
325
+ opacity: 0.6;
326
+ cursor: not-allowed;
327
+ }
328
+
329
+ .dql-apps-ai-entry-foot {
330
+ display: flex;
331
+ align-items: center;
332
+ justify-content: space-between;
333
+ gap: 10px;
334
+ }
335
+
336
+ .dql-apps-ai-entry-foot > div {
337
+ min-width: 0;
338
+ display: flex;
339
+ flex-wrap: wrap;
340
+ gap: 6px;
341
+ }
342
+
343
+ .dql-apps-ai-entry-foot button {
344
+ border: 1px solid var(--dql-app-line);
345
+ border-radius: 999px;
346
+ background: var(--dql-app-surface);
347
+ color: var(--dql-app-muted);
348
+ padding: 6px 9px;
349
+ display: inline-flex;
350
+ align-items: center;
351
+ gap: 5px;
352
+ font: 750 11.5px var(--font-ui);
353
+ cursor: pointer;
354
+ }
355
+
356
+ .dql-apps-ai-entry-foot button:hover {
357
+ color: var(--dql-app-accent);
358
+ border-color: rgba(79, 99, 215, 0.32);
359
+ background: var(--dql-app-accent-soft);
360
+ }
361
+
362
+ .dql-apps-ai-entry-secondary {
363
+ flex: none;
364
+ color: var(--dql-app-ink) !important;
365
+ }
366
+
367
+ .dql-apps-sectionhead {
368
+ margin: 30px 0 14px;
369
+ display: flex;
370
+ align-items: center;
371
+ gap: 12px;
372
+ color: var(--dql-app-muted);
373
+ }
374
+
375
+ .dql-apps-sectionhead span,
376
+ .dql-app-eyebrow {
377
+ font-family: var(--font-mono);
378
+ font-size: 10px;
379
+ letter-spacing: 0;
380
+ text-transform: uppercase;
381
+ }
382
+
383
+ .dql-apps-sectionhead i { flex: 1; border-top: 1px solid var(--dql-app-line); }
384
+ .dql-apps-sectionhead b { font-family: var(--font-mono); font-size: 10px; color: var(--dql-app-faint); }
385
+
386
+ .dql-apps-libbar {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 12px;
390
+ margin-bottom: 16px;
391
+ }
392
+
393
+ .dql-apps-filter-tabs {
394
+ display: flex;
395
+ gap: 3px;
396
+ border: 1px solid var(--dql-app-line);
397
+ border-radius: 999px;
398
+ background: var(--dql-app-control);
399
+ padding: 4px;
400
+ flex-wrap: wrap;
401
+ }
402
+
403
+ .dql-apps-filter-tabs button {
404
+ border: 0;
405
+ background: transparent;
406
+ border-radius: 999px;
407
+ padding: 6px 12px;
408
+ cursor: pointer;
409
+ color: var(--dql-app-muted);
410
+ font: 800 12px var(--font-ui);
411
+ }
412
+
413
+ .dql-apps-filter-tabs button.on { background: var(--dql-app-surface); color: var(--dql-app-ink); box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08); }
414
+ .dql-apps-filter-tabs span { margin-left: 5px; color: var(--dql-app-accent); font-family: var(--font-mono); font-size: 10px; }
415
+
416
+ .dql-apps-search {
417
+ flex: 1;
418
+ min-width: 220px;
419
+ height: 38px;
420
+ display: flex;
421
+ align-items: center;
422
+ gap: 8px;
423
+ background: var(--dql-app-surface);
424
+ border: 1px solid var(--dql-app-line);
425
+ border-radius: 7px;
426
+ padding: 0 12px;
427
+ color: var(--dql-app-faint);
428
+ }
429
+
430
+ .dql-apps-search input {
431
+ flex: 1;
432
+ min-width: 0;
433
+ border: 0;
434
+ outline: 0;
435
+ background: transparent;
436
+ color: var(--dql-app-ink);
437
+ font: 13px var(--font-ui);
438
+ }
439
+
440
+ .dql-apps-grid {
441
+ display: grid;
442
+ grid-template-columns: repeat(3, minmax(0, 1fr));
443
+ gap: 16px;
444
+ }
445
+
446
+ .dql-app-card {
447
+ min-width: 0;
448
+ border: 1px solid var(--dql-app-line);
449
+ border-radius: 8px;
450
+ background: var(--dql-app-surface);
451
+ overflow: hidden;
452
+ box-shadow: var(--dql-app-shadow);
453
+ }
454
+
455
+ .dql-app-card-body {
456
+ padding: 16px;
457
+ cursor: pointer;
458
+ }
459
+
460
+ .dql-app-card-top {
461
+ display: flex;
462
+ align-items: flex-start;
463
+ justify-content: space-between;
464
+ gap: 10px;
465
+ margin-bottom: 9px;
466
+ }
467
+
468
+ .dql-app-star {
469
+ width: 28px;
470
+ height: 28px;
471
+ border-radius: 6px;
472
+ border: 1px solid var(--dql-app-line);
473
+ background: var(--dql-app-surface);
474
+ color: var(--dql-app-faint);
475
+ display: inline-flex;
476
+ align-items: center;
477
+ justify-content: center;
478
+ cursor: pointer;
479
+ }
480
+
481
+ .dql-app-star.on { color: var(--dql-app-accent); background: var(--dql-app-accent-soft); border-color: rgba(37, 99, 235, 0.35); }
482
+ .dql-app-card h3 { margin: 13px 0 0; font-size: 17px; line-height: 1.2; }
483
+ .dql-app-card p { min-height: 54px; margin: 7px 0 0; color: var(--dql-app-muted); font-size: 12px; line-height: 1.5; }
484
+
485
+ .dql-app-card-mini {
486
+ margin-top: 13px;
487
+ display: grid;
488
+ grid-template-columns: repeat(3, minmax(0, 1fr));
489
+ gap: 6px;
490
+ }
491
+
492
+ .dql-app-card-mini span {
493
+ border-radius: 6px;
494
+ background: var(--dql-app-control);
495
+ padding: 7px 9px;
496
+ }
497
+
498
+ .dql-app-card-mini small {
499
+ display: block;
500
+ font-family: var(--font-mono);
501
+ font-size: 7.5px;
502
+ letter-spacing: 0;
503
+ text-transform: uppercase;
504
+ color: var(--dql-app-muted);
505
+ }
506
+
507
+ .dql-app-card-mini b { display: block; margin-top: 1px; font-size: 15px; }
508
+
509
+ .dql-app-card-signals {
510
+ margin-top: 12px;
511
+ display: flex;
512
+ flex-wrap: wrap;
513
+ gap: 7px;
514
+ color: var(--dql-app-muted);
515
+ font: 700 10px var(--font-mono);
516
+ }
517
+
518
+ .dql-app-card-signals span {
519
+ display: inline-flex;
520
+ align-items: center;
521
+ gap: 5px;
522
+ min-height: 24px;
523
+ padding: 4px 8px;
524
+ border: 1px solid var(--dql-app-line);
525
+ border-radius: 7px;
526
+ background: var(--dql-app-surface-muted);
527
+ white-space: nowrap;
528
+ }
529
+
530
+ .dql-app-card-depth {
531
+ min-height: 42px;
532
+ display: flex;
533
+ align-items: center;
534
+ gap: 8px;
535
+ padding: 8px 16px;
536
+ border-top: 1px solid var(--dql-app-line);
537
+ background: var(--dql-app-surface-muted);
538
+ font-family: var(--font-mono);
539
+ font-size: 10px;
540
+ color: var(--dql-app-muted);
541
+ }
542
+
543
+ .dql-app-card-depth span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
544
+ .dql-app-card-depth button { border: 0; background: transparent; color: var(--dql-app-accent); cursor: pointer; font: 800 11px var(--font-ui); }
545
+ .dql-app-card-act {
546
+ display: inline-flex;
547
+ align-items: center;
548
+ gap: 5px;
549
+ flex: none !important;
550
+ min-height: 26px;
551
+ padding: 0 10px;
552
+ border: 1px solid var(--dql-app-line) !important;
553
+ border-radius: 6px;
554
+ background: var(--dql-app-surface) !important;
555
+ color: var(--dql-app-muted) !important;
556
+ font: 650 11px var(--font-ui) !important;
557
+ transition: border-color 0.12s ease, color 0.12s ease;
558
+ }
559
+ .dql-app-card-act:hover {
560
+ border-color: var(--dql-app-accent) !important;
561
+ color: var(--dql-app-accent) !important;
562
+ }
563
+ .dql-app-card-act.danger:hover {
564
+ border-color: var(--status-error-border) !important;
565
+ color: var(--status-error) !important;
566
+ }
567
+
568
+ .dql-app-block-cite i,
569
+ .dql-app-plan-item > i {
570
+ width: 7px;
571
+ height: 7px;
572
+ border-radius: 999px;
573
+ background: var(--dql-app-green);
574
+ flex: none;
575
+ }
576
+
577
+ .dql-app-block-cite i.draft,
578
+ .dql-app-plan-item > i.draft { background: var(--dql-app-orange); }
579
+
580
+ .dql-app-seal {
581
+ display: inline-flex;
582
+ align-items: center;
583
+ gap: 5px;
584
+ border-radius: 999px;
585
+ min-height: 22px;
586
+ padding: 2px 9px;
587
+ width: fit-content;
588
+ border: 1px solid rgba(22, 163, 74, 0.26);
589
+ background: var(--dql-app-green-soft);
590
+ color: var(--dql-app-green);
591
+ font-family: var(--font-mono);
592
+ font-size: 10.5px;
593
+ font-weight: 700;
594
+ letter-spacing: 0;
595
+ text-transform: uppercase;
596
+ }
597
+
598
+ .dql-app-seal::before {
599
+ content: "";
600
+ width: 6px;
601
+ height: 6px;
602
+ border-radius: 999px;
603
+ background: currentColor;
604
+ }
605
+
606
+ .dql-app-seal.draft { border-color: rgba(202, 138, 4, 0.30); background: var(--dql-app-orange-soft); color: var(--dql-app-orange); }
607
+ .dql-app-seal.agentic { border-color: rgba(37, 99, 235, 0.32); background: var(--dql-app-accent-soft); color: var(--dql-app-accent); }
608
+
609
+ .dql-app-create-shell,
610
+ .dql-app-workspace {
611
+ height: 100%;
612
+ min-height: 0;
613
+ display: grid;
614
+ }
615
+
616
+ .dql-app-create-shell { grid-template-rows: auto 1fr; overflow: hidden; }
617
+ .dql-app-workspace { grid-template-rows: auto auto 1fr; }
618
+
619
+ .dql-app-buildbar,
620
+ .dql-app-view-topbar {
621
+ min-height: 54px;
622
+ display: flex;
623
+ align-items: center;
624
+ gap: 10px;
625
+ padding: 9px 18px;
626
+ border-bottom: 1px solid var(--dql-app-line);
627
+ background: var(--dql-app-surface);
628
+ flex-wrap: wrap;
629
+ }
630
+
631
+ .dql-app-back {
632
+ width: 30px;
633
+ height: 30px;
634
+ border: 1px solid var(--dql-app-line);
635
+ border-radius: 8px;
636
+ background: var(--dql-app-control);
637
+ display: inline-flex;
638
+ align-items: center;
639
+ justify-content: center;
640
+ color: var(--dql-app-muted);
641
+ cursor: pointer;
642
+ flex: none;
643
+ }
644
+
645
+ .dql-app-back:hover { color: var(--dql-app-ink); border-color: var(--dql-app-line-2); }
646
+
647
+ .dql-app-back-label {
648
+ width: auto;
649
+ min-width: 72px;
650
+ padding: 0 11px 0 9px;
651
+ gap: 6px;
652
+ justify-content: flex-start;
653
+ color: var(--dql-app-ink);
654
+ font: 750 12px var(--font-ui);
655
+ }
656
+
657
+ .dql-app-back-label span {
658
+ line-height: 1;
659
+ }
660
+
661
+ .dql-app-topbar-divider {
662
+ width: 1px;
663
+ height: 22px;
664
+ background: var(--dql-app-line);
665
+ flex: none;
666
+ }
667
+
668
+ .dql-app-topbar-filters {
669
+ display: flex;
670
+ align-items: center;
671
+ gap: 8px;
672
+ flex-wrap: wrap;
673
+ }
674
+
675
+ .dql-app-filter-icon {
676
+ display: inline-flex;
677
+ align-items: center;
678
+ color: var(--dql-app-faint);
679
+ }
680
+
681
+ .dql-app-name-input input {
682
+ width: 240px;
683
+ border: 1px solid transparent;
684
+ border-radius: 6px;
685
+ padding: 5px 8px;
686
+ outline: 0;
687
+ background: transparent;
688
+ color: var(--dql-app-ink);
689
+ font: 800 16px var(--font-ui);
690
+ }
691
+
692
+ .dql-app-name-input input:focus { border-color: var(--dql-app-accent); background: var(--dql-app-control); }
693
+ .dql-app-mode-seg {
694
+ margin: 0 auto;
695
+ display: flex;
696
+ gap: 2px;
697
+ border: 1px solid var(--dql-app-line);
698
+ border-radius: 999px;
699
+ background: var(--dql-app-control);
700
+ padding: 3px;
701
+ }
702
+
703
+ .dql-app-mode-seg button {
704
+ min-width: 78px;
705
+ border: 0;
706
+ background: transparent;
707
+ border-radius: 999px;
708
+ display: inline-flex;
709
+ align-items: center;
710
+ justify-content: center;
711
+ gap: 6px;
712
+ min-height: 30px;
713
+ padding: 6px 12px;
714
+ color: var(--dql-app-muted);
715
+ cursor: pointer;
716
+ font: 750 12px var(--font-ui);
717
+ }
718
+
719
+ .dql-app-mode-seg button.on { background: var(--dql-app-deep); color: #fff; }
720
+
721
+ .dql-app-customize-btn {
722
+ display: inline-flex;
723
+ align-items: center;
724
+ justify-content: center;
725
+ gap: 6px;
726
+ min-height: 32px;
727
+ padding: 6px 14px;
728
+ border: 1px solid var(--dql-app-line);
729
+ border-radius: 999px;
730
+ background: var(--dql-app-control);
731
+ color: var(--dql-app-ink);
732
+ cursor: pointer;
733
+ font: 750 12px var(--font-ui);
734
+ }
735
+
736
+ .dql-app-customize-btn:hover {
737
+ border-color: rgba(79, 99, 215, 0.34);
738
+ background: var(--dql-app-accent-soft);
739
+ color: var(--dql-app-accent);
740
+ }
741
+
742
+ .dql-app-customize-btn.on {
743
+ border-color: var(--dql-app-deep);
744
+ background: var(--dql-app-deep);
745
+ color: #fff;
746
+ }
747
+ .dql-app-build-actions,
748
+ .dql-app-view-actions {
749
+ margin-left: auto;
750
+ display: flex;
751
+ align-items: center;
752
+ gap: 8px;
753
+ }
754
+
755
+ .dql-app-view-actions { position: relative; }
756
+
757
+ .dql-app-share-popover {
758
+ position: absolute;
759
+ right: 0;
760
+ top: calc(100% + 8px);
761
+ z-index: 20;
762
+ width: min(340px, 80vw);
763
+ border: 1px solid var(--dql-app-line-2);
764
+ border-radius: 8px;
765
+ background: var(--dql-app-surface);
766
+ box-shadow: var(--dql-app-shadow);
767
+ padding: 10px;
768
+ display: grid;
769
+ gap: 7px;
770
+ }
771
+
772
+ .dql-app-share-popover b {
773
+ color: var(--dql-app-ink);
774
+ font: 850 12px var(--font-ui);
775
+ }
776
+
777
+ .dql-app-share-popover textarea {
778
+ width: 100%;
779
+ min-height: 92px;
780
+ resize: none;
781
+ border: 1px solid var(--dql-app-line);
782
+ border-radius: 7px;
783
+ background: var(--dql-app-control);
784
+ color: var(--dql-app-ink);
785
+ padding: 8px;
786
+ font: 11px/1.45 var(--font-mono);
787
+ box-sizing: border-box;
788
+ }
789
+
790
+ .dql-app-promote-popover {
791
+ position: absolute;
792
+ right: 0;
793
+ top: calc(100% + 8px);
794
+ z-index: 21;
795
+ max-width: min(360px, 80vw);
796
+ border: 1px solid rgba(22, 163, 74, 0.28);
797
+ border-radius: 8px;
798
+ background: var(--dql-app-green-soft);
799
+ color: var(--dql-app-ink);
800
+ box-shadow: var(--dql-app-shadow);
801
+ padding: 10px 12px;
802
+ font-size: 12px;
803
+ line-height: 1.4;
804
+ }
805
+
806
+ .dql-app-promote-popover.error {
807
+ border-color: rgba(202, 138, 4, 0.28);
808
+ background: var(--dql-app-orange-soft);
809
+ }
810
+
811
+ .dql-app-persona {
812
+ display: inline-flex;
813
+ align-items: center;
814
+ gap: 6px;
815
+ border: 1px solid var(--dql-app-line);
816
+ border-radius: 999px;
817
+ padding: 3px 9px 3px 4px;
818
+ color: var(--dql-app-muted);
819
+ font-size: 12px;
820
+ }
821
+
822
+ .dql-app-persona b {
823
+ width: 26px;
824
+ height: 26px;
825
+ border-radius: 999px;
826
+ display: inline-flex;
827
+ align-items: center;
828
+ justify-content: center;
829
+ background: var(--dql-app-accent);
830
+ color: #fff;
831
+ font-size: 9px;
832
+ }
833
+
834
+ .dql-app-create-workspace {
835
+ min-height: 0;
836
+ display: grid;
837
+ grid-template-columns: 380px minmax(420px, 1fr) 300px;
838
+ }
839
+
840
+ .dql-app-create-workspace.classic { grid-template-columns: 286px minmax(420px, 1fr) 320px; }
841
+ .dql-app-create-workspace.clean {
842
+ display: block;
843
+ min-height: calc(100vh - 56px);
844
+ overflow: auto;
845
+ padding: 26px;
846
+ background: var(--dql-app-canvas);
847
+ }
848
+
849
+ .dql-app-ai-start {
850
+ max-width: 1260px;
851
+ margin: 0 auto;
852
+ display: grid;
853
+ grid-template-columns: minmax(0, 1fr) minmax(320px, 380px);
854
+ gap: 18px;
855
+ align-items: start;
856
+ }
857
+
858
+ .dql-app-ai-start-main {
859
+ min-width: 0;
860
+ display: grid;
861
+ gap: 14px;
862
+ }
863
+
864
+ .dql-app-ai-start-copy h1 {
865
+ margin: 0 0 7px;
866
+ color: var(--dql-app-ink);
867
+ font-size: clamp(30px, 4vw, 52px);
868
+ line-height: 0.98;
869
+ letter-spacing: 0;
870
+ }
871
+
872
+ .dql-app-ai-start-copy p {
873
+ margin: 0;
874
+ max-width: 650px;
875
+ color: var(--dql-app-muted);
876
+ font-size: 14px;
877
+ line-height: 1.55;
878
+ }
879
+
880
+ .dql-app-ai-start-card {
881
+ position: relative;
882
+ border: 1px solid rgba(79, 99, 215, 0.32);
883
+ border-radius: 12px;
884
+ background: var(--dql-app-surface);
885
+ box-shadow: var(--dql-app-shadow);
886
+ padding: 18px 76px 18px 18px;
887
+ }
888
+
889
+ .dql-app-ai-start-card textarea {
890
+ width: 100%;
891
+ min-height: 124px;
892
+ resize: vertical;
893
+ border: 0;
894
+ outline: 0;
895
+ background: transparent;
896
+ color: var(--dql-app-ink);
897
+ padding: 0;
898
+ font: 520 18px/1.45 var(--font-ui);
899
+ }
900
+
901
+ .dql-app-ai-start-send {
902
+ position: absolute;
903
+ right: 18px;
904
+ bottom: 18px;
905
+ width: 46px;
906
+ height: 46px;
907
+ border: 0;
908
+ border-radius: 999px;
909
+ background: var(--dql-app-accent);
910
+ color: white;
911
+ display: inline-flex;
912
+ align-items: center;
913
+ justify-content: center;
914
+ cursor: pointer;
915
+ box-shadow: 0 14px 30px rgba(79, 99, 215, 0.24);
916
+ }
917
+
918
+ .dql-app-ai-start-send:disabled {
919
+ opacity: 0.6;
920
+ cursor: not-allowed;
921
+ }
922
+
923
+ .dql-app-ai-start-examples {
924
+ padding-left: 2px;
925
+ }
926
+
927
+ .dql-app-ai-start-advanced {
928
+ border: 1px solid var(--dql-app-line);
929
+ border-radius: 8px;
930
+ background: var(--dql-app-surface);
931
+ padding: 0 12px;
932
+ }
933
+
934
+ .dql-app-ai-start-advanced .dql-app-palette {
935
+ max-height: 340px;
936
+ margin: 0 0 12px;
937
+ }
938
+
939
+ .dql-app-ai-start-result {
940
+ margin: 0;
941
+ }
942
+
943
+ .dql-app-ai-start-context {
944
+ display: grid;
945
+ gap: 12px;
946
+ }
947
+
948
+ .dql-app-ai-context-card {
949
+ border: 1px solid var(--dql-app-line);
950
+ border-radius: 10px;
951
+ background: var(--dql-app-surface);
952
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.04);
953
+ overflow: hidden;
954
+ }
955
+
956
+ .dql-app-ai-evidence-list {
957
+ display: grid;
958
+ gap: 8px;
959
+ padding: 12px;
960
+ }
961
+
962
+ .dql-app-ai-evidence-row {
963
+ display: grid;
964
+ grid-template-columns: 30px minmax(0, 1fr) auto;
965
+ gap: 9px;
966
+ align-items: start;
967
+ border: 1px solid var(--dql-app-line);
968
+ border-radius: 8px;
969
+ background: var(--dql-app-surface-muted);
970
+ padding: 10px;
971
+ }
972
+
973
+ .dql-app-ai-evidence-row > span:first-child {
974
+ width: 30px;
975
+ height: 30px;
976
+ border-radius: 8px;
977
+ background: var(--dql-app-green-soft);
978
+ color: var(--dql-app-green);
979
+ display: inline-flex;
980
+ align-items: center;
981
+ justify-content: center;
982
+ }
983
+
984
+ .dql-app-ai-evidence-row b {
985
+ display: block;
986
+ color: var(--dql-app-ink);
987
+ font-size: 12px;
988
+ line-height: 1.25;
989
+ }
990
+
991
+ .dql-app-ai-evidence-row small {
992
+ display: block;
993
+ margin-top: 3px;
994
+ color: var(--dql-app-muted);
995
+ font-size: 11px;
996
+ line-height: 1.35;
997
+ display: -webkit-box;
998
+ -webkit-line-clamp: 2;
999
+ -webkit-box-orient: vertical;
1000
+ overflow: hidden;
1001
+ }
1002
+
1003
+ .dql-app-ai-filter-preview {
1004
+ display: grid;
1005
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1006
+ gap: 8px;
1007
+ padding: 12px;
1008
+ }
1009
+
1010
+ .dql-app-ai-filter-preview span {
1011
+ min-height: 70px;
1012
+ border: 1px solid var(--dql-app-line);
1013
+ border-radius: 8px;
1014
+ background: var(--dql-app-surface-muted);
1015
+ padding: 10px;
1016
+ }
1017
+
1018
+ .dql-app-ai-filter-preview small {
1019
+ display: block;
1020
+ color: var(--dql-app-faint);
1021
+ font: 800 9.5px var(--font-mono);
1022
+ text-transform: uppercase;
1023
+ margin-bottom: 8px;
1024
+ }
1025
+
1026
+ .dql-app-ai-filter-preview b {
1027
+ color: var(--dql-app-accent);
1028
+ font-size: 18px;
1029
+ line-height: 1.1;
1030
+ }
1031
+
1032
+ .dql-app-ai-gap-list {
1033
+ display: grid;
1034
+ gap: 8px;
1035
+ padding: 12px;
1036
+ }
1037
+
1038
+ .dql-app-ai-gap-list span {
1039
+ display: flex;
1040
+ gap: 8px;
1041
+ color: var(--dql-app-muted);
1042
+ font-size: 12px;
1043
+ line-height: 1.4;
1044
+ }
1045
+
1046
+ .dql-app-ai-gap-list svg {
1047
+ flex: 0 0 auto;
1048
+ margin-top: 1px;
1049
+ color: var(--dql-app-orange);
1050
+ }
1051
+
1052
+ .dql-app-ai-generated-section {
1053
+ max-width: 1260px;
1054
+ margin: 18px auto 0;
1055
+ display: grid;
1056
+ gap: 12px;
1057
+ }
1058
+
1059
+ .dql-app-ai-generated-head {
1060
+ display: flex;
1061
+ align-items: flex-end;
1062
+ justify-content: space-between;
1063
+ gap: 14px;
1064
+ }
1065
+
1066
+ .dql-app-ai-generated-head h2 {
1067
+ margin: 0;
1068
+ color: var(--dql-app-ink);
1069
+ font-size: 20px;
1070
+ }
1071
+
1072
+ .dql-app-ai-generated-head p {
1073
+ margin: 4px 0 0;
1074
+ color: var(--dql-app-muted);
1075
+ font-size: 12.5px;
1076
+ }
1077
+
1078
+ .dql-app-ai-generated-grid {
1079
+ display: grid;
1080
+ grid-template-columns: minmax(0, 1fr) minmax(280px, 340px);
1081
+ gap: 14px;
1082
+ align-items: start;
1083
+ }
1084
+
1085
+ .dql-app-ai-plan-compact {
1086
+ border: 1px solid var(--dql-app-line);
1087
+ border-radius: 10px;
1088
+ background: var(--dql-app-surface);
1089
+ overflow: hidden;
1090
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.04);
1091
+ }
1092
+
1093
+ .dql-app-plan-list.compact {
1094
+ max-height: 520px;
1095
+ }
1096
+ .dql-app-panel {
1097
+ min-height: 0;
1098
+ display: flex;
1099
+ flex-direction: column;
1100
+ border-right: 1px solid var(--dql-app-line);
1101
+ background: var(--dql-app-surface-muted);
1102
+ }
1103
+
1104
+ .dql-app-panel:last-child { border-right: 0; }
1105
+ .dql-app-panel-head {
1106
+ min-height: 48px;
1107
+ display: flex;
1108
+ align-items: center;
1109
+ gap: 8px;
1110
+ padding: 12px 15px;
1111
+ border-bottom: 1px solid var(--dql-app-line);
1112
+ background: var(--dql-app-surface);
1113
+ }
1114
+
1115
+ .dql-app-panel-head span { font-weight: 850; font-size: 14px; }
1116
+ .dql-app-panel-head b { margin-left: auto; color: var(--dql-app-faint); font: 500 10px var(--font-mono); text-transform: uppercase; letter-spacing: 0; }
1117
+
1118
+ .dql-app-agent-scroll,
1119
+ .dql-app-plan-list {
1120
+ flex: 1;
1121
+ min-height: 0;
1122
+ overflow: auto;
1123
+ padding: 16px;
1124
+ }
1125
+
1126
+ .dql-app-agent-panel.ai-clean { background: var(--dql-app-surface); }
1127
+ .dql-app-ai-brief {
1128
+ padding: 18px 16px 2px;
1129
+ display: grid;
1130
+ gap: 8px;
1131
+ }
1132
+
1133
+ .dql-app-ai-brief > span {
1134
+ display: inline-flex;
1135
+ align-items: center;
1136
+ gap: 7px;
1137
+ color: var(--dql-app-ink);
1138
+ font: 850 13px var(--font-ui);
1139
+ }
1140
+
1141
+ .dql-app-ai-brief > span svg { color: var(--dql-app-accent); }
1142
+ .dql-app-ai-brief p {
1143
+ margin: 0;
1144
+ color: var(--dql-app-muted);
1145
+ font-size: 12px;
1146
+ line-height: 1.5;
1147
+ }
1148
+
1149
+ .dql-app-ai-result {
1150
+ margin-top: 5px;
1151
+ border: 1px solid rgba(22, 163, 74, 0.26);
1152
+ border-radius: 7px;
1153
+ background: var(--dql-app-green-soft);
1154
+ color: var(--dql-app-ink);
1155
+ padding: 8px 10px;
1156
+ font-size: 12px;
1157
+ line-height: 1.45;
1158
+ }
1159
+
1160
+ .dql-app-ai-result small {
1161
+ display: block;
1162
+ margin-top: 3px;
1163
+ color: var(--dql-app-muted);
1164
+ font: 700 10px var(--font-mono);
1165
+ }
1166
+
1167
+ .dql-app-composer {
1168
+ border-top: 1px solid var(--dql-app-line);
1169
+ background: var(--dql-app-surface);
1170
+ padding: 12px;
1171
+ display: grid;
1172
+ gap: 9px;
1173
+ }
1174
+
1175
+ .dql-app-composer.ai-clean {
1176
+ border-top: 0;
1177
+ padding: 10px 16px 16px;
1178
+ gap: 9px;
1179
+ }
1180
+
1181
+ .dql-app-suggestions {
1182
+ display: flex;
1183
+ align-items: center;
1184
+ gap: 10px;
1185
+ flex-wrap: wrap;
1186
+ }
1187
+
1188
+ .dql-app-suggestions > span {
1189
+ color: var(--dql-app-faint);
1190
+ font: 750 10px var(--font-mono);
1191
+ text-transform: uppercase;
1192
+ }
1193
+
1194
+ .dql-app-suggestions button,
1195
+ .dql-app-suggests button {
1196
+ border: 0;
1197
+ border-radius: 0;
1198
+ background: transparent;
1199
+ color: var(--dql-app-muted);
1200
+ padding: 2px 0;
1201
+ cursor: pointer;
1202
+ font: 750 11.5px var(--font-ui);
1203
+ }
1204
+
1205
+ .dql-app-suggestions button:hover,
1206
+ .dql-app-suggests button:hover {
1207
+ color: var(--dql-app-accent);
1208
+ }
1209
+
1210
+ .dql-app-composer textarea,
1211
+ .dql-app-form-grid input,
1212
+ .dql-app-select-label select,
1213
+ .dql-app-modal input,
1214
+ .dql-app-modal textarea {
1215
+ width: 100%;
1216
+ border: 1px solid var(--dql-app-line);
1217
+ border-radius: 7px;
1218
+ background: var(--dql-app-control);
1219
+ color: var(--dql-app-ink);
1220
+ outline: 0;
1221
+ padding: 8px 10px;
1222
+ font: 12.5px var(--font-ui);
1223
+ }
1224
+ .dql-app-modal textarea { resize: vertical; min-height: 96px; line-height: 1.45; }
1225
+
1226
+ .dql-app-composer textarea { resize: vertical; min-height: 92px; line-height: 1.45; }
1227
+ .dql-app-composer.ai-clean textarea {
1228
+ min-height: 130px;
1229
+ background: var(--dql-app-surface);
1230
+ border-color: var(--dql-app-line-2);
1231
+ border-radius: 10px;
1232
+ padding: 11px 12px;
1233
+ font-size: 13.5px;
1234
+ }
1235
+ .dql-app-form-grid.two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
1236
+ .dql-app-form-grid label,
1237
+ .dql-app-select-label,
1238
+ .dql-app-modal label {
1239
+ display: grid;
1240
+ gap: 5px;
1241
+ color: var(--dql-app-muted);
1242
+ font: 700 10px var(--font-mono);
1243
+ text-transform: uppercase;
1244
+ letter-spacing: 0;
1245
+ }
1246
+
1247
+ .dql-app-ai-context {
1248
+ border-top: 1px solid var(--dql-app-line);
1249
+ border-bottom: 1px solid var(--dql-app-line);
1250
+ background: transparent;
1251
+ }
1252
+
1253
+ .dql-app-ai-context summary {
1254
+ min-height: 34px;
1255
+ display: flex;
1256
+ align-items: center;
1257
+ gap: 8px;
1258
+ padding: 0 2px;
1259
+ cursor: pointer;
1260
+ list-style: none;
1261
+ }
1262
+
1263
+ .dql-app-ai-context summary::-webkit-details-marker { display: none; }
1264
+
1265
+ .dql-app-ai-context summary span {
1266
+ color: var(--dql-app-muted);
1267
+ font: 800 10px var(--font-mono);
1268
+ text-transform: uppercase;
1269
+ }
1270
+
1271
+ .dql-app-ai-context summary b {
1272
+ margin-left: auto;
1273
+ min-width: 0;
1274
+ overflow: hidden;
1275
+ text-overflow: ellipsis;
1276
+ white-space: nowrap;
1277
+ color: var(--dql-app-ink);
1278
+ font: 750 11px var(--font-ui);
1279
+ }
1280
+
1281
+ .dql-app-ai-context summary svg {
1282
+ flex: 0 0 auto;
1283
+ color: var(--dql-app-faint);
1284
+ transition: transform 140ms ease;
1285
+ }
1286
+
1287
+ .dql-app-ai-context[open] summary svg { transform: rotate(180deg); }
1288
+
1289
+ .dql-app-ai-context-grid {
1290
+ display: grid;
1291
+ grid-template-columns: 1fr;
1292
+ gap: 8px;
1293
+ padding: 0 0 10px;
1294
+ border-top: 1px solid var(--dql-app-line);
1295
+ }
1296
+
1297
+ .dql-app-ai-context-grid label {
1298
+ display: grid;
1299
+ gap: 5px;
1300
+ color: var(--dql-app-muted);
1301
+ font: 700 10px var(--font-mono);
1302
+ text-transform: uppercase;
1303
+ }
1304
+
1305
+ .dql-app-ai-context-grid input,
1306
+ .dql-app-ai-context-grid select {
1307
+ width: 100%;
1308
+ height: 34px;
1309
+ border: 1px solid var(--dql-app-line);
1310
+ border-radius: 7px;
1311
+ background: var(--dql-app-surface-muted);
1312
+ color: var(--dql-app-ink);
1313
+ outline: 0;
1314
+ padding: 0 10px;
1315
+ font: 12.5px var(--font-ui);
1316
+ }
1317
+
1318
+ .dql-app-ai-send-row {
1319
+ display: flex;
1320
+ align-items: center;
1321
+ justify-content: space-between;
1322
+ gap: 10px;
1323
+ padding-top: 3px;
1324
+ }
1325
+
1326
+ .dql-app-ai-send-row span {
1327
+ display: inline-flex;
1328
+ align-items: center;
1329
+ gap: 6px;
1330
+ color: var(--dql-app-muted);
1331
+ font: 750 11px var(--font-ui);
1332
+ }
1333
+
1334
+ .dql-app-ai-send-row span svg {
1335
+ color: var(--dql-app-green);
1336
+ }
1337
+
1338
+ .dql-app-preview-panel { background: var(--dql-app-canvas); }
1339
+ .dql-app-preview-scroll { flex: 1; min-height: 0; overflow: auto; padding: 18px 20px 40px; }
1340
+ .dql-app-preview-card {
1341
+ border: 1px solid var(--dql-app-line);
1342
+ border-radius: 8px;
1343
+ background: var(--dql-app-surface);
1344
+ overflow: hidden;
1345
+ }
1346
+
1347
+ .dql-app-preview-head {
1348
+ min-height: 58px;
1349
+ display: flex;
1350
+ align-items: center;
1351
+ gap: 10px;
1352
+ padding: 12px 18px;
1353
+ border-bottom: 1px solid var(--dql-app-line);
1354
+ }
1355
+
1356
+ .dql-app-preview-head h2 { margin: 0; font-size: 19px; }
1357
+ .dql-app-preview-filters {
1358
+ display: flex;
1359
+ gap: 7px;
1360
+ padding: 10px 18px;
1361
+ border-bottom: 1px solid var(--dql-app-line);
1362
+ background: var(--dql-app-surface-muted);
1363
+ }
1364
+
1365
+ .dql-app-preview-filters span {
1366
+ display: inline-flex;
1367
+ align-items: center;
1368
+ gap: 6px;
1369
+ border: 1px solid var(--dql-app-line);
1370
+ border-radius: 6px;
1371
+ background: var(--dql-app-surface);
1372
+ color: var(--dql-app-muted);
1373
+ padding: 4px 9px;
1374
+ font-size: 11px;
1375
+ }
1376
+
1377
+ .dql-app-preview-grid {
1378
+ display: grid;
1379
+ grid-template-columns: repeat(12, minmax(0, 1fr));
1380
+ gap: 12px;
1381
+ padding: 16px 18px;
1382
+ min-height: 300px;
1383
+ }
1384
+
1385
+ .dql-app-preview-empty {
1386
+ grid-column: 1 / -1;
1387
+ min-height: 260px;
1388
+ display: flex;
1389
+ flex-direction: column;
1390
+ align-items: center;
1391
+ justify-content: center;
1392
+ gap: 10px;
1393
+ color: var(--dql-app-faint);
1394
+ text-align: center;
1395
+ }
1396
+
1397
+ .dql-app-preview-tile {
1398
+ grid-column: span 4;
1399
+ min-height: 136px;
1400
+ border: 1px solid var(--dql-app-line);
1401
+ border-radius: 8px;
1402
+ background: var(--dql-app-surface);
1403
+ overflow: hidden;
1404
+ display: flex;
1405
+ flex-direction: column;
1406
+ }
1407
+
1408
+ .dql-app-preview-tile.wide { grid-column: span 6; }
1409
+ .dql-app-preview-tile.draft { border-color: rgba(202, 138, 4, 0.34); }
1410
+ .dql-app-preview-tile-head,
1411
+ .dql-app-preview-tile-foot {
1412
+ display: flex;
1413
+ align-items: center;
1414
+ gap: 8px;
1415
+ padding: 8px 10px;
1416
+ border-bottom: 1px solid var(--dql-app-line);
1417
+ }
1418
+
1419
+ .dql-app-preview-tile-head b { font-size: 12px; }
1420
+ .dql-app-preview-tile-head span,
1421
+ .dql-app-preview-tile-foot {
1422
+ color: var(--dql-app-faint);
1423
+ font: 700 9px var(--font-mono);
1424
+ text-transform: uppercase;
1425
+ letter-spacing: 0;
1426
+ }
1427
+
1428
+ .dql-app-preview-tile-head span { margin-left: auto; }
1429
+ .dql-app-preview-tile-body {
1430
+ flex: 1;
1431
+ display: flex;
1432
+ flex-direction: column;
1433
+ justify-content: center;
1434
+ padding: 10px;
1435
+ }
1436
+
1437
+ .dql-app-preview-tile-body strong { font-size: 26px; }
1438
+ .dql-app-preview-tile-body small { color: var(--dql-app-muted); }
1439
+ .dql-app-preview-source {
1440
+ display: grid;
1441
+ grid-template-columns: 34px minmax(0, 1fr);
1442
+ gap: 10px;
1443
+ align-items: center;
1444
+ }
1445
+ .dql-app-preview-source > span {
1446
+ width: 34px;
1447
+ height: 34px;
1448
+ border-radius: 8px;
1449
+ display: inline-flex;
1450
+ align-items: center;
1451
+ justify-content: center;
1452
+ background: var(--dql-app-accent-soft);
1453
+ color: var(--dql-app-accent);
1454
+ }
1455
+ .dql-app-preview-source b {
1456
+ display: block;
1457
+ color: var(--dql-app-ink);
1458
+ font-size: 13px;
1459
+ line-height: 1.2;
1460
+ }
1461
+ .dql-app-preview-source p {
1462
+ margin: 4px 0 0;
1463
+ color: var(--dql-app-muted);
1464
+ font-size: 11.5px;
1465
+ line-height: 1.4;
1466
+ display: -webkit-box;
1467
+ -webkit-line-clamp: 2;
1468
+ -webkit-box-orient: vertical;
1469
+ overflow: hidden;
1470
+ }
1471
+ .dql-app-preview-viz-row {
1472
+ display: flex;
1473
+ gap: 4px;
1474
+ padding: 0 10px 8px;
1475
+ align-items: center;
1476
+ }
1477
+ .dql-app-preview-viz-row button {
1478
+ width: 26px;
1479
+ height: 26px;
1480
+ border: 1px solid var(--dql-app-line);
1481
+ border-radius: 6px;
1482
+ background: var(--dql-app-surface);
1483
+ color: var(--dql-app-muted);
1484
+ display: inline-flex;
1485
+ align-items: center;
1486
+ justify-content: center;
1487
+ cursor: pointer;
1488
+ }
1489
+ .dql-app-preview-viz-row button.on {
1490
+ background: var(--dql-app-accent);
1491
+ border-color: var(--dql-app-accent);
1492
+ color: #fff;
1493
+ }
1494
+ .dql-app-preview-viz-row button:disabled {
1495
+ cursor: default;
1496
+ opacity: 0.58;
1497
+ }
1498
+ .dql-app-preview-tile-foot { border-bottom: 0; border-top: 1px solid var(--dql-app-line); }
1499
+ .dql-app-preview-tile-foot b { margin-left: auto; color: var(--dql-app-green); }
1500
+ .dql-app-preview-tile.draft .dql-app-preview-tile-foot b { color: var(--dql-app-orange); }
1501
+ .dql-app-review-backlog {
1502
+ border-top: 1px solid var(--dql-app-line);
1503
+ background: var(--dql-app-surface-muted);
1504
+ padding: 14px 18px 18px;
1505
+ }
1506
+ .dql-app-review-backlog-head {
1507
+ display: flex;
1508
+ align-items: center;
1509
+ gap: 8px;
1510
+ margin-bottom: 10px;
1511
+ color: var(--dql-app-muted);
1512
+ }
1513
+ .dql-app-review-backlog-head span {
1514
+ display: inline-flex;
1515
+ align-items: center;
1516
+ gap: 6px;
1517
+ font: 850 12px var(--font-ui);
1518
+ color: var(--dql-app-ink);
1519
+ }
1520
+ .dql-app-review-backlog-head b {
1521
+ margin-left: auto;
1522
+ min-width: 22px;
1523
+ height: 22px;
1524
+ border-radius: 999px;
1525
+ display: inline-flex;
1526
+ align-items: center;
1527
+ justify-content: center;
1528
+ background: var(--dql-app-orange-soft);
1529
+ color: var(--dql-app-orange);
1530
+ font: 800 10px var(--font-mono);
1531
+ }
1532
+ .dql-app-review-backlog-grid {
1533
+ display: grid;
1534
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1535
+ gap: 10px;
1536
+ }
1537
+ .dql-app-review-backlog-item {
1538
+ border: 1px solid rgba(202, 138, 4, 0.22);
1539
+ border-radius: 8px;
1540
+ background: var(--dql-app-surface);
1541
+ padding: 11px;
1542
+ display: grid;
1543
+ gap: 9px;
1544
+ }
1545
+ .dql-app-review-backlog-item b {
1546
+ display: block;
1547
+ font-size: 12.5px;
1548
+ line-height: 1.25;
1549
+ }
1550
+ .dql-app-review-backlog-item p {
1551
+ margin: 5px 0 0;
1552
+ color: var(--dql-app-muted);
1553
+ font-size: 11.5px;
1554
+ line-height: 1.4;
1555
+ }
1556
+ .dql-app-review-backlog-item > div:last-child {
1557
+ display: flex;
1558
+ gap: 5px;
1559
+ flex-wrap: wrap;
1560
+ }
1561
+ .dql-app-review-backlog-item span {
1562
+ border: 1px solid rgba(79, 99, 215, 0.18);
1563
+ border-radius: 999px;
1564
+ background: var(--dql-app-accent-soft);
1565
+ color: var(--dql-app-accent);
1566
+ padding: 3px 7px;
1567
+ font: 750 10px var(--font-ui);
1568
+ }
1569
+ .dql-app-planner-flow {
1570
+ border: 1px solid var(--dql-app-line);
1571
+ border-radius: 8px;
1572
+ background: var(--dql-app-surface);
1573
+ padding: 11px;
1574
+ margin-bottom: 12px;
1575
+ }
1576
+ .dql-app-planner-flow-title {
1577
+ display: flex;
1578
+ align-items: center;
1579
+ gap: 7px;
1580
+ color: var(--dql-app-accent);
1581
+ font: 850 12px var(--font-ui);
1582
+ }
1583
+ .dql-app-planner-flow p {
1584
+ margin: 7px 0 0;
1585
+ color: var(--dql-app-muted);
1586
+ font-size: 11.5px;
1587
+ line-height: 1.42;
1588
+ }
1589
+ .dql-app-planner-flow-steps {
1590
+ display: grid;
1591
+ gap: 6px;
1592
+ margin-top: 10px;
1593
+ }
1594
+ .dql-app-planner-flow-steps span {
1595
+ display: grid;
1596
+ grid-template-columns: 20px minmax(0, 1fr);
1597
+ gap: 7px;
1598
+ color: var(--dql-app-muted);
1599
+ font-size: 11px;
1600
+ line-height: 1.35;
1601
+ }
1602
+ .dql-app-planner-flow-steps b {
1603
+ width: 20px;
1604
+ height: 20px;
1605
+ border-radius: 999px;
1606
+ display: inline-flex;
1607
+ align-items: center;
1608
+ justify-content: center;
1609
+ background: var(--dql-app-accent-soft);
1610
+ color: var(--dql-app-accent);
1611
+ font: 850 10px var(--font-mono);
1612
+ }
1613
+ .dql-app-plan-group-label {
1614
+ margin: 14px 0 4px;
1615
+ color: var(--dql-app-faint);
1616
+ font: 850 10px var(--font-mono);
1617
+ text-transform: uppercase;
1618
+ }
1619
+ .dql-app-plan-item {
1620
+ display: flex;
1621
+ align-items: center;
1622
+ gap: 10px;
1623
+ padding: 10px 0;
1624
+ border-bottom: 1px solid var(--dql-app-line);
1625
+ }
1626
+
1627
+ .dql-app-plan-item span { flex: 1; min-width: 0; }
1628
+ .dql-app-plan-item b { display: block; font: 700 11.5px var(--font-mono); }
1629
+ .dql-app-plan-item small { display: block; color: var(--dql-app-faint); font-size: 10px; margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1630
+ .dql-app-plan-item em { color: var(--dql-app-faint); font: 700 9px var(--font-mono); text-transform: uppercase; font-style: normal; }
1631
+
1632
+ .dql-app-plan-session,
1633
+ .dql-app-plan-warning,
1634
+ .dql-app-plan-task {
1635
+ border: 1px solid var(--dql-app-line);
1636
+ border-radius: 7px;
1637
+ padding: 8px 9px;
1638
+ background: var(--dql-app-surface-muted);
1639
+ color: var(--dql-app-muted);
1640
+ font-size: 11.5px;
1641
+ line-height: 1.35;
1642
+ }
1643
+
1644
+ .dql-app-plan-session span {
1645
+ display: block;
1646
+ color: var(--dql-app-ink);
1647
+ font-weight: 800;
1648
+ }
1649
+
1650
+ .dql-app-plan-session small {
1651
+ display: block;
1652
+ margin-top: 2px;
1653
+ color: var(--dql-app-faint);
1654
+ }
1655
+
1656
+ .dql-app-plan-warning {
1657
+ border-color: rgba(202, 138, 4, 0.24);
1658
+ background: var(--dql-app-orange-soft);
1659
+ }
1660
+
1661
+ .dql-app-plan-task {
1662
+ display: flex;
1663
+ align-items: flex-start;
1664
+ gap: 7px;
1665
+ }
1666
+
1667
+ .dql-app-plan-foot {
1668
+ margin-top: auto;
1669
+ padding: 14px;
1670
+ border-top: 2px solid var(--dql-app-accent);
1671
+ background: var(--dql-app-accent-soft);
1672
+ }
1673
+
1674
+ .dql-app-leader {
1675
+ display: flex;
1676
+ align-items: baseline;
1677
+ gap: 8px;
1678
+ font-size: 11.5px;
1679
+ color: var(--dql-app-muted);
1680
+ margin: 5px 0;
1681
+ }
1682
+
1683
+ .dql-app-leader i { flex: 1; border-bottom: 1.5px dotted var(--dql-app-line-2); transform: translateY(-3px); }
1684
+ .dql-app-leader b { font-family: var(--font-mono); color: var(--dql-app-ink); }
1685
+ .dql-app-leader.certified b { color: var(--dql-app-green); }
1686
+ .dql-app-leader.draft b { color: var(--dql-app-orange); }
1687
+
1688
+ .dql-app-error {
1689
+ border: 1px solid rgba(220, 38, 38, 0.24);
1690
+ border-radius: 6px;
1691
+ background: rgba(220, 38, 38, 0.06);
1692
+ color: #b91c1c;
1693
+ padding: 8px 10px;
1694
+ font-size: 12px;
1695
+ line-height: 1.45;
1696
+ margin-top: 10px;
1697
+ }
1698
+
1699
+ .dql-app-palette { flex: 1; min-height: 0; overflow: auto; padding: 12px; }
1700
+ .dql-app-agent-scroll .dql-app-palette {
1701
+ margin-top: 12px;
1702
+ border: 1px solid var(--dql-app-line);
1703
+ border-radius: 8px;
1704
+ background: var(--dql-app-surface-muted);
1705
+ padding: 10px;
1706
+ max-height: 360px;
1707
+ }
1708
+
1709
+ .dql-app-palette-title {
1710
+ display: flex;
1711
+ align-items: center;
1712
+ gap: 8px;
1713
+ margin-bottom: 8px;
1714
+ }
1715
+
1716
+ .dql-app-palette-title span {
1717
+ display: inline-flex;
1718
+ align-items: center;
1719
+ gap: 7px;
1720
+ color: var(--dql-app-ink);
1721
+ font: 850 12px var(--font-ui);
1722
+ }
1723
+
1724
+ .dql-app-palette-title b {
1725
+ margin-left: auto;
1726
+ color: var(--dql-app-faint);
1727
+ font: 700 9.5px var(--font-mono);
1728
+ text-transform: uppercase;
1729
+ }
1730
+
1731
+ .dql-app-palette-search {
1732
+ display: flex;
1733
+ align-items: center;
1734
+ gap: 8px;
1735
+ border: 1px solid var(--dql-app-line);
1736
+ border-radius: 7px;
1737
+ background: var(--dql-app-surface);
1738
+ color: var(--dql-app-muted);
1739
+ padding: 8px 10px;
1740
+ margin-bottom: 10px;
1741
+ font-size: 12px;
1742
+ }
1743
+
1744
+ .dql-app-palette-search input {
1745
+ flex: 1;
1746
+ min-width: 0;
1747
+ border: 0;
1748
+ outline: 0;
1749
+ background: transparent;
1750
+ color: var(--dql-app-ink);
1751
+ font: 12px var(--font-ui);
1752
+ }
1753
+
1754
+ .dql-app-palette button {
1755
+ width: 100%;
1756
+ border: 1px solid var(--dql-app-line);
1757
+ border-radius: 7px;
1758
+ background: var(--dql-app-surface);
1759
+ color: var(--dql-app-ink);
1760
+ padding: 9px 10px;
1761
+ margin-bottom: 7px;
1762
+ display: flex;
1763
+ align-items: center;
1764
+ gap: 9px;
1765
+ text-align: left;
1766
+ cursor: pointer;
1767
+ }
1768
+
1769
+ .dql-app-palette button.selected { border-color: var(--dql-app-accent); background: var(--dql-app-accent-soft); }
1770
+ .dql-app-palette-icon {
1771
+ width: 25px;
1772
+ height: 25px;
1773
+ border-radius: 6px;
1774
+ background: #f1f5f9;
1775
+ color: var(--dql-app-accent);
1776
+ display: inline-flex;
1777
+ align-items: center;
1778
+ justify-content: center;
1779
+ flex: none;
1780
+ }
1781
+
1782
+ .dql-app-palette span:nth-child(2) { flex: 1; min-width: 0; }
1783
+ .dql-app-palette b { display: block; font: 700 11px var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1784
+ .dql-app-palette small { display: block; color: var(--dql-app-faint); font-size: 10px; }
1785
+ .dql-app-palette i { color: var(--dql-app-green); font: 700 9px var(--font-mono); text-transform: uppercase; font-style: normal; }
1786
+ .dql-app-palette-more {
1787
+ color: var(--dql-app-faint);
1788
+ text-align: center;
1789
+ font: 700 10px var(--font-mono);
1790
+ padding: 8px 0 2px;
1791
+ }
1792
+
1793
+ .dql-app-view-topbar { position: relative; z-index: 4; }
1794
+ .dql-app-view-topbar {
1795
+ min-height: 48px;
1796
+ padding: 7px 22px;
1797
+ box-shadow: 0 1px 0 var(--dql-app-line);
1798
+ background: var(--dql-app-surface);
1799
+ backdrop-filter: blur(10px);
1800
+ }
1801
+
1802
+ .dql-app-crumb { color: var(--dql-app-muted); font: 700 11.5px var(--font-mono); }
1803
+ .dql-app-filterbar {
1804
+ position: relative;
1805
+ z-index: 3;
1806
+ min-height: 52px;
1807
+ display: flex;
1808
+ align-items: center;
1809
+ gap: 8px;
1810
+ padding: 8px 26px;
1811
+ border-bottom: 1px solid var(--dql-app-line);
1812
+ background: var(--dql-app-surface);
1813
+ flex-wrap: wrap;
1814
+ }
1815
+
1816
+ .dql-app-filter-select {
1817
+ height: 34px;
1818
+ display: inline-flex;
1819
+ align-items: center;
1820
+ gap: 8px;
1821
+ border: 1px solid var(--dql-app-line);
1822
+ border-radius: 8px;
1823
+ background: var(--dql-app-control);
1824
+ padding: 0 10px;
1825
+ }
1826
+
1827
+ .dql-app-filter-select span {
1828
+ color: var(--dql-app-faint);
1829
+ font: 700 9px var(--font-mono);
1830
+ letter-spacing: 0;
1831
+ text-transform: uppercase;
1832
+ }
1833
+
1834
+ .dql-app-filter-select select,
1835
+ .dql-app-filter-select input {
1836
+ border: 0;
1837
+ background: transparent;
1838
+ color: var(--dql-app-ink);
1839
+ outline: 0;
1840
+ font: 750 12.5px var(--font-ui);
1841
+ min-width: 0;
1842
+ max-width: 110px;
1843
+ }
1844
+
1845
+ .dql-app-filter-select input[type="number"] {
1846
+ width: 64px;
1847
+ }
1848
+
1849
+ .dql-app-filter-empty {
1850
+ color: var(--dql-app-faint);
1851
+ font: 750 11px var(--font-ui);
1852
+ }
1853
+
1854
+ .dql-app-filter-note {
1855
+ margin-left: auto;
1856
+ color: var(--dql-app-faint);
1857
+ font: 700 11px var(--font-ui);
1858
+ display: inline-flex;
1859
+ align-items: center;
1860
+ gap: 6px;
1861
+ }
1862
+
1863
+ .dql-app-toggle {
1864
+ border: 0;
1865
+ background: transparent;
1866
+ display: inline-flex;
1867
+ align-items: center;
1868
+ gap: 8px;
1869
+ color: var(--dql-app-muted);
1870
+ cursor: pointer;
1871
+ font: 800 12px var(--font-ui);
1872
+ }
1873
+
1874
+ .dql-app-toggle i {
1875
+ width: 32px;
1876
+ height: 18px;
1877
+ border-radius: 999px;
1878
+ background: #cbd5e1;
1879
+ position: relative;
1880
+ }
1881
+
1882
+ .dql-app-toggle i::after {
1883
+ content: "";
1884
+ width: 14px;
1885
+ height: 14px;
1886
+ border-radius: 999px;
1887
+ position: absolute;
1888
+ top: 2px;
1889
+ left: 2px;
1890
+ background: #fff;
1891
+ transition: transform 140ms ease;
1892
+ }
1893
+
1894
+ .dql-app-toggle.on i { background: var(--dql-app-accent); }
1895
+ .dql-app-toggle.on i::after { transform: translateX(14px); }
1896
+
1897
+ .dql-app-view-wrap {
1898
+ position: relative;
1899
+ z-index: 1;
1900
+ width: min(1560px, calc(100% - 40px));
1901
+ margin: 0 auto;
1902
+ padding: 12px 0 60px;
1903
+ }
1904
+
1905
+ .dql-app-title-row {
1906
+ display: flex;
1907
+ align-items: flex-end;
1908
+ justify-content: space-between;
1909
+ gap: 18px;
1910
+ margin-bottom: 12px;
1911
+ flex-wrap: wrap;
1912
+ }
1913
+
1914
+ .dql-app-title-copy {
1915
+ flex: 1 1 420px;
1916
+ min-width: 0;
1917
+ }
1918
+
1919
+ .dql-app-title-meta {
1920
+ display: flex;
1921
+ align-items: center;
1922
+ gap: 8px;
1923
+ margin-bottom: 6px;
1924
+ }
1925
+
1926
+ .dql-app-title-meta > span {
1927
+ display: inline-flex;
1928
+ align-items: center;
1929
+ gap: 6px;
1930
+ color: var(--dql-app-muted);
1931
+ font: 750 11.5px var(--font-ui);
1932
+ text-transform: capitalize;
1933
+ }
1934
+
1935
+ .dql-app-title-row h1 {
1936
+ margin: 0;
1937
+ font-size: 26px;
1938
+ line-height: 1.1;
1939
+ font-weight: 820;
1940
+ }
1941
+
1942
+ .dql-app-title-row p {
1943
+ margin: 6px 0 0;
1944
+ color: var(--dql-app-muted);
1945
+ font-size: 13px;
1946
+ line-height: 1.45;
1947
+ max-width: 720px;
1948
+ display: -webkit-box;
1949
+ -webkit-line-clamp: 2;
1950
+ -webkit-box-orient: vertical;
1951
+ overflow: hidden;
1952
+ }
1953
+
1954
+ .dql-app-title-context {
1955
+ display: inline-flex;
1956
+ align-items: center;
1957
+ color: var(--dql-app-faint);
1958
+ font: 700 11.5px var(--font-mono);
1959
+ }
1960
+ .dql-app-title-context::before { content: "·"; margin-right: 8px; color: var(--dql-app-line-2); }
1961
+
1962
+ .dql-app-nav-row {
1963
+ display: flex;
1964
+ align-items: center;
1965
+ justify-content: flex-end;
1966
+ gap: 8px;
1967
+ flex-wrap: wrap;
1968
+ min-width: 0;
1969
+ }
1970
+
1971
+ .dql-app-section-tabs,
1972
+ .dql-app-page-picker {
1973
+ display: flex;
1974
+ align-items: center;
1975
+ gap: 6px;
1976
+ }
1977
+
1978
+ .dql-app-section-tabs {
1979
+ overflow-x: auto;
1980
+ }
1981
+
1982
+ .dql-app-section-tabs button,
1983
+ .dql-app-page-picker {
1984
+ border: 1px solid var(--dql-app-line);
1985
+ border-radius: 8px;
1986
+ background: var(--dql-app-surface);
1987
+ color: var(--dql-app-muted);
1988
+ min-height: 32px;
1989
+ display: inline-flex;
1990
+ align-items: center;
1991
+ font: 750 12px var(--font-ui);
1992
+ }
1993
+
1994
+ .dql-app-section-tabs {
1995
+ gap: 6px;
1996
+ }
1997
+
1998
+ .dql-app-section-tabs button {
1999
+ border: 0;
2000
+ border-radius: 8px;
2001
+ background: transparent;
2002
+ color: var(--dql-app-muted);
2003
+ min-height: 32px;
2004
+ padding: 6px 9px;
2005
+ display: inline-flex;
2006
+ align-items: center;
2007
+ gap: 6px;
2008
+ cursor: pointer;
2009
+ font: 750 12px var(--font-ui);
2010
+ }
2011
+
2012
+ .dql-app-section-tabs button {
2013
+ min-width: 38px;
2014
+ justify-content: center;
2015
+ }
2016
+
2017
+ .dql-app-section-tabs .dql-app-tab-icon {
2018
+ display: inline-flex;
2019
+ align-items: center;
2020
+ justify-content: center;
2021
+ font-style: normal;
2022
+ }
2023
+
2024
+ .dql-app-section-tabs .dql-app-tab-label {
2025
+ display: none;
2026
+ }
2027
+
2028
+ .dql-app-section-tabs button.on .dql-app-tab-label {
2029
+ display: inline;
2030
+ }
2031
+
2032
+ .dql-app-section-tabs button.on,
2033
+ .dql-app-section-tabs button:hover {
2034
+ color: var(--dql-app-ink);
2035
+ background: var(--dql-app-accent-soft);
2036
+ }
2037
+
2038
+ .dql-app-section-tabs button.on {
2039
+ box-shadow: inset 0 0 0 1px var(--dql-app-accent);
2040
+ }
2041
+
2042
+ .dql-app-section-tabs b {
2043
+ color: var(--dql-app-accent);
2044
+ font-family: var(--font-mono);
2045
+ font-size: 10px;
2046
+ }
2047
+
2048
+ .dql-app-page-picker {
2049
+ padding: 0 5px 0 10px;
2050
+ white-space: nowrap;
2051
+ max-width: min(440px, 100%);
2052
+ }
2053
+
2054
+ .dql-app-page-picker > span {
2055
+ display: inline-flex;
2056
+ align-items: center;
2057
+ gap: 6px;
2058
+ color: var(--dql-app-faint);
2059
+ font: 800 10px var(--font-mono);
2060
+ text-transform: uppercase;
2061
+ }
2062
+
2063
+ .dql-app-page-picker select {
2064
+ min-width: 210px;
2065
+ max-width: 310px;
2066
+ height: 30px;
2067
+ border: 0;
2068
+ outline: 0;
2069
+ background: transparent;
2070
+ color: var(--dql-app-ink);
2071
+ font: 800 12px var(--font-ui);
2072
+ text-overflow: ellipsis;
2073
+ }
2074
+
2075
+ .dql-app-page-picker button {
2076
+ width: 26px;
2077
+ height: 26px;
2078
+ border: 0;
2079
+ border-radius: 6px;
2080
+ background: var(--dql-app-accent-soft);
2081
+ color: var(--dql-app-accent);
2082
+ display: inline-flex;
2083
+ align-items: center;
2084
+ justify-content: center;
2085
+ cursor: pointer;
2086
+ }
2087
+
2088
+ .dql-app-dashboard-label {
2089
+ min-width: 0;
2090
+ overflow: hidden;
2091
+ text-overflow: ellipsis;
2092
+ white-space: nowrap;
2093
+ }
2094
+ .dql-app-view-layout {
2095
+ display: grid;
2096
+ grid-template-columns: minmax(0, 1fr) auto;
2097
+ gap: 14px;
2098
+ align-items: start;
2099
+ }
2100
+
2101
+ .dql-app-view-layout.no-explain { grid-template-columns: minmax(0, 1fr); }
2102
+ .dql-app-main-column { min-width: 0; }
2103
+ .dql-app-filter-row {
2104
+ display: flex;
2105
+ align-items: center;
2106
+ gap: 12px;
2107
+ flex-wrap: wrap;
2108
+ margin-bottom: 14px;
2109
+ padding: 12px 14px;
2110
+ border: 1px solid var(--dql-app-line);
2111
+ border-radius: 12px;
2112
+ background: var(--dql-app-surface);
2113
+ }
2114
+ .dql-app-filter-row-copy { display: grid; gap: 2px; min-width: 170px; }
2115
+ .dql-app-filter-row-copy b { font-size: 12px; color: var(--dql-app-ink); }
2116
+ .dql-app-filter-row-copy span { font-size: 10.5px; color: var(--dql-app-faint); }
2117
+ .dql-app-filter-row .dql-app-topbar-filters { flex: 1; }
2118
+ .dql-app-filter-row-actions { display: flex; gap: 7px; margin-left: auto; }
2119
+
2120
+ .dql-app-explain-panel {
2121
+ position: sticky;
2122
+ top: 110px;
2123
+ width: clamp(420px, 29vw, 500px);
2124
+ min-width: 390px;
2125
+ max-width: min(520px, 40vw);
2126
+ min-height: 580px;
2127
+ height: calc(100vh - 142px);
2128
+ max-height: calc(100vh - 142px);
2129
+ border: 1px solid var(--dql-app-line);
2130
+ border-radius: 16px;
2131
+ background: var(--dql-app-surface);
2132
+ overflow: hidden;
2133
+ box-shadow: 0 20px 60px rgba(15, 23, 42, 0.14);
2134
+ }
2135
+
2136
+ .dql-app-explain-panel[data-expanded="true"] {
2137
+ width: min(${gr}px, 52vw);
2138
+ max-width: min(${gr}px, 52vw);
2139
+ }
2140
+
2141
+ .dql-app-copilot-panel {
2142
+ display: flex;
2143
+ flex-direction: column;
2144
+ overflow: hidden;
2145
+ }
2146
+
2147
+ .dql-app-assistant-panel {
2148
+ display: flex;
2149
+ flex-direction: column;
2150
+ min-height: 0;
2151
+ overflow: hidden;
2152
+ /* No background override: the shared AiSidePanel owns the surface so App AI,
2153
+ Notebook AI and Block AI read as the same panel rather than three skins. */
2154
+ }
2155
+
2156
+ .dql-app-assistant-top {
2157
+ display: grid;
2158
+ grid-template-columns: minmax(0, 1fr) auto;
2159
+ align-items: end;
2160
+ gap: 10px;
2161
+ padding: 10px 12px;
2162
+ border-bottom: 1px solid var(--dql-app-line);
2163
+ flex: none;
2164
+ background: var(--dql-app-surface);
2165
+ }
2166
+
2167
+ .dql-app-assistant-focus {
2168
+ min-width: 0;
2169
+ display: grid;
2170
+ gap: 5px;
2171
+ }
2172
+
2173
+ .dql-app-assistant-focus span {
2174
+ color: var(--dql-app-muted);
2175
+ font: 800 9.5px var(--font-mono);
2176
+ letter-spacing: 0;
2177
+ text-transform: uppercase;
2178
+ }
2179
+
2180
+ .dql-app-assistant-focus select {
2181
+ width: 100%;
2182
+ height: 36px;
2183
+ border: 1px solid var(--dql-app-line-2);
2184
+ border-radius: 8px;
2185
+ background: var(--dql-app-surface);
2186
+ color: var(--dql-app-ink);
2187
+ padding: 0 10px;
2188
+ font: 750 12px var(--font-ui);
2189
+ cursor: pointer;
2190
+ }
2191
+
2192
+ .dql-app-assistant-context-btn {
2193
+ flex: none;
2194
+ height: 30px;
2195
+ border: 1px solid var(--dql-app-line);
2196
+ border-radius: 8px;
2197
+ background: var(--dql-app-control);
2198
+ color: var(--dql-app-muted);
2199
+ display: inline-flex;
2200
+ align-items: center;
2201
+ gap: 5px;
2202
+ padding: 0 9px;
2203
+ cursor: pointer;
2204
+ font: 800 11px var(--font-ui);
2205
+ }
2206
+
2207
+ .dql-app-assistant-context-btn.on,
2208
+ .dql-app-assistant-context-btn:hover {
2209
+ color: var(--dql-app-accent);
2210
+ border-color: rgba(79, 99, 215, 0.34);
2211
+ background: var(--dql-app-accent-soft);
2212
+ }
2213
+
2214
+ .dql-app-assistant-context-btn.on svg { transform: rotate(180deg); }
2215
+
2216
+ .dql-app-assistant-context {
2217
+ display: grid;
2218
+ gap: 8px;
2219
+ padding: 11px 14px;
2220
+ border-bottom: 1px solid var(--dql-app-line);
2221
+ background: var(--dql-app-surface-muted);
2222
+ }
2223
+
2224
+ .dql-app-assistant-context p {
2225
+ margin: 0;
2226
+ color: var(--dql-app-muted);
2227
+ font-size: 12px;
2228
+ line-height: 1.45;
2229
+ }
2230
+
2231
+ .dql-app-assistant-context > div {
2232
+ display: grid;
2233
+ gap: 6px;
2234
+ }
2235
+
2236
+ .dql-app-one-ai-panel {
2237
+ flex: 1;
2238
+ min-height: 0;
2239
+ overflow: hidden;
2240
+ display: flex;
2241
+ flex-direction: column;
2242
+ padding: 0;
2243
+ background: var(--dql-app-surface);
2244
+ }
2245
+
2246
+ .dql-app-one-ai-status {
2247
+ margin: 0;
2248
+ display: grid;
2249
+ gap: 6px;
2250
+ padding: 10px 16px;
2251
+ border-bottom: 1px solid var(--dql-app-line);
2252
+ background: color-mix(in srgb, var(--dql-app-surface-muted) 72%, var(--dql-app-surface));
2253
+ flex: none;
2254
+ }
2255
+
2256
+ .dql-app-one-ai-status span {
2257
+ display: inline-flex;
2258
+ align-items: center;
2259
+ gap: 6px;
2260
+ color: var(--dql-app-green);
2261
+ font: 850 11px var(--font-ui);
2262
+ }
2263
+
2264
+ .dql-app-one-ai-status > div {
2265
+ display: flex;
2266
+ flex-wrap: nowrap;
2267
+ gap: 6px;
2268
+ overflow-x: auto;
2269
+ scrollbar-width: none;
2270
+ }
2271
+
2272
+ .dql-app-one-ai-status > div::-webkit-scrollbar {
2273
+ display: none;
2274
+ }
2275
+
2276
+ .dql-app-one-ai-status b {
2277
+ flex: none;
2278
+ min-width: 0;
2279
+ max-width: 190px;
2280
+ border: 1px solid var(--dql-app-line);
2281
+ border-radius: 999px;
2282
+ background: var(--dql-app-surface);
2283
+ color: var(--dql-app-faint);
2284
+ font: 750 10.5px var(--font-ui);
2285
+ padding: 4px 8px;
2286
+ overflow: hidden;
2287
+ text-overflow: ellipsis;
2288
+ white-space: nowrap;
2289
+ }
2290
+
2291
+ .dql-app-copilot-thread {
2292
+ flex: 1;
2293
+ min-height: 0;
2294
+ overflow-y: auto;
2295
+ display: flex;
2296
+ flex-direction: column;
2297
+ gap: 14px;
2298
+ padding: 16px 0 20px;
2299
+ }
2300
+
2301
+ .dql-app-direct-ask {
2302
+ margin-top: 0;
2303
+ z-index: 4;
2304
+ border-top: 1px solid var(--dql-app-line);
2305
+ padding: 14px 16px 16px;
2306
+ display: grid;
2307
+ gap: 8px;
2308
+ flex: none;
2309
+ background: color-mix(in srgb, var(--dql-app-surface) 92%, transparent);
2310
+ backdrop-filter: blur(10px);
2311
+ box-shadow: 0 -12px 28px rgba(15, 23, 42, 0.05);
2312
+ }
2313
+
2314
+ .dql-app-direct-ask-row {
2315
+ display: grid;
2316
+ grid-template-columns: minmax(0, 1fr) auto;
2317
+ gap: 8px;
2318
+ align-items: end;
2319
+ }
2320
+
2321
+ .dql-app-direct-ask-row textarea {
2322
+ width: 100%;
2323
+ min-height: 96px;
2324
+ max-height: 150px;
2325
+ resize: vertical;
2326
+ border: 1px solid var(--dql-app-line-2);
2327
+ border-radius: 12px;
2328
+ background: var(--dql-app-surface);
2329
+ color: var(--dql-app-ink);
2330
+ padding: 12px 13px;
2331
+ font: 500 13.5px/1.45 var(--font-ui);
2332
+ outline: none;
2333
+ }
2334
+
2335
+ .dql-app-direct-ask-row textarea:focus {
2336
+ border-color: rgba(79, 99, 215, 0.48);
2337
+ box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
2338
+ }
2339
+
2340
+ .dql-app-direct-ask-row button,
2341
+ .dql-app-direct-quick button {
2342
+ border: 1px solid var(--dql-app-line-2);
2343
+ border-radius: 12px;
2344
+ background: var(--dql-app-surface);
2345
+ color: var(--dql-app-ink);
2346
+ display: inline-flex;
2347
+ align-items: center;
2348
+ justify-content: center;
2349
+ gap: 6px;
2350
+ padding: 8px 10px;
2351
+ font-weight: 750;
2352
+ }
2353
+
2354
+ .dql-app-direct-ask-row button {
2355
+ min-height: 48px;
2356
+ padding-inline: 13px;
2357
+ background: var(--dql-app-accent);
2358
+ border-color: var(--dql-app-accent);
2359
+ color: #fff;
2360
+ }
2361
+
2362
+ .dql-app-direct-ask-row button:disabled {
2363
+ opacity: 0.55;
2364
+ }
2365
+
2366
+ .dql-app-direct-quick {
2367
+ display: grid;
2368
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2369
+ gap: 6px;
2370
+ }
2371
+
2372
+ .dql-app-direct-quick button {
2373
+ color: var(--dql-app-muted);
2374
+ font-size: 11.5px;
2375
+ padding: 7px 9px;
2376
+ white-space: nowrap;
2377
+ width: 100%;
2378
+ min-width: 0;
2379
+ overflow: hidden;
2380
+ text-overflow: ellipsis;
2381
+ }
2382
+
2383
+ .dql-app-copilot-welcome {
2384
+ margin: 2px 16px 0;
2385
+ border: 1px dashed var(--dql-app-line-2);
2386
+ border-radius: 12px;
2387
+ background: var(--dql-app-surface);
2388
+ padding: 12px;
2389
+ display: grid;
2390
+ gap: 6px;
2391
+ }
2392
+
2393
+ .dql-app-user-message {
2394
+ align-self: flex-end;
2395
+ max-width: calc(100% - 42px);
2396
+ margin: 0 16px 0 42px;
2397
+ border: 1px solid rgba(79, 99, 215, 0.28);
2398
+ border-radius: 14px 14px 5px 14px;
2399
+ background: var(--dql-app-accent);
2400
+ color: #fff;
2401
+ padding: 10px 12px;
2402
+ box-shadow: 0 10px 28px rgba(79, 99, 215, 0.16);
2403
+ }
2404
+
2405
+ .dql-app-user-message span {
2406
+ display: block;
2407
+ font: 850 9.5px var(--font-mono);
2408
+ letter-spacing: 0;
2409
+ text-transform: uppercase;
2410
+ opacity: .72;
2411
+ }
2412
+
2413
+ .dql-app-user-message p {
2414
+ margin: 4px 0 0;
2415
+ color: inherit;
2416
+ font-size: 12.5px;
2417
+ line-height: 1.45;
2418
+ overflow-wrap: anywhere;
2419
+ }
2420
+
2421
+ .dql-app-copilot-welcome span {
2422
+ color: var(--dql-app-accent);
2423
+ font: 850 10.5px var(--font-mono);
2424
+ letter-spacing: 0;
2425
+ text-transform: uppercase;
2426
+ }
2427
+
2428
+ .dql-app-copilot-welcome p {
2429
+ margin: 0;
2430
+ color: var(--dql-app-muted);
2431
+ font-size: 12.5px;
2432
+ line-height: 1.48;
2433
+ }
2434
+
2435
+ .dql-app-direct-answer {
2436
+ border: 1px solid var(--dql-app-line);
2437
+ border-radius: 14px 14px 14px 5px;
2438
+ background: var(--dql-app-surface);
2439
+ margin: 0 42px 0 16px;
2440
+ padding: 12px;
2441
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.05);
2442
+ }
2443
+
2444
+ .dql-app-direct-answer > div:first-child {
2445
+ display: flex;
2446
+ align-items: center;
2447
+ gap: 8px;
2448
+ margin-bottom: 6px;
2449
+ }
2450
+
2451
+ .dql-app-direct-answer p {
2452
+ margin: 0;
2453
+ color: var(--dql-app-ink);
2454
+ font-size: 12.5px;
2455
+ line-height: 1.45;
2456
+ }
2457
+
2458
+ .dql-app-direct-followups {
2459
+ display: flex;
2460
+ flex-wrap: wrap;
2461
+ gap: 6px;
2462
+ margin-top: 8px;
2463
+ }
2464
+
2465
+ .dql-app-direct-followups span,
2466
+ .dql-app-direct-followups button {
2467
+ border: 1px solid var(--dql-app-line);
2468
+ border-radius: 999px;
2469
+ padding: 3px 7px;
2470
+ color: var(--dql-app-muted);
2471
+ font-size: 10.5px;
2472
+ background: var(--dql-app-surface);
2473
+ }
2474
+
2475
+ .dql-app-direct-followups button {
2476
+ cursor: pointer;
2477
+ font-weight: 750;
2478
+ }
2479
+
2480
+ .dql-app-direct-followups button:hover {
2481
+ color: var(--dql-app-accent);
2482
+ border-color: rgba(79, 99, 215, 0.34);
2483
+ background: var(--dql-app-accent-soft);
2484
+ }
2485
+
2486
+ .dql-app-copilot-action-grid {
2487
+ display: grid;
2488
+ gap: 7px;
2489
+ margin-top: 10px;
2490
+ }
2491
+
2492
+ .dql-app-copilot-next-step {
2493
+ display: grid;
2494
+ gap: 8px;
2495
+ margin-top: 12px;
2496
+ border: 1px solid rgba(79, 99, 215, 0.18);
2497
+ border-radius: 11px;
2498
+ background: color-mix(in srgb, var(--dql-app-accent-soft) 58%, var(--dql-app-surface));
2499
+ padding: 10px;
2500
+ }
2501
+
2502
+ .dql-app-copilot-next-step > span {
2503
+ color: var(--dql-app-accent);
2504
+ font: 850 10.5px var(--font-mono);
2505
+ text-transform: uppercase;
2506
+ }
2507
+
2508
+ .dql-app-copilot-next-step p {
2509
+ margin: 0;
2510
+ color: var(--dql-app-muted);
2511
+ font-size: 12px;
2512
+ line-height: 1.45;
2513
+ }
2514
+
2515
+ .dql-app-analysis-handoff {
2516
+ margin: 0 16px;
2517
+ border: 1px solid rgba(22, 163, 74, 0.2);
2518
+ border-radius: 12px;
2519
+ background: rgba(22, 163, 74, 0.06);
2520
+ padding: 12px;
2521
+ display: grid;
2522
+ gap: 7px;
2523
+ }
2524
+
2525
+ .dql-app-analysis-handoff > span {
2526
+ color: #15803d;
2527
+ font: 850 10.5px var(--font-mono);
2528
+ letter-spacing: .02em;
2529
+ text-transform: uppercase;
2530
+ }
2531
+
2532
+ .dql-app-analysis-handoff p {
2533
+ margin: 0;
2534
+ color: var(--dql-app-ink);
2535
+ font-size: 12.5px;
2536
+ line-height: 1.45;
2537
+ }
2538
+
2539
+ .dql-app-analysis-handoff small {
2540
+ color: var(--dql-app-muted);
2541
+ font-size: 12px;
2542
+ line-height: 1.45;
2543
+ }
2544
+
2545
+ .dql-app-analysis-handoff > div {
2546
+ display: flex;
2547
+ flex-wrap: wrap;
2548
+ gap: 7px;
2549
+ margin-top: 2px;
2550
+ }
2551
+
2552
+ .dql-app-context-composer {
2553
+ margin: 0 16px;
2554
+ border: 1px solid rgba(79, 99, 215, 0.28);
2555
+ border-radius: 14px;
2556
+ background: var(--dql-app-surface);
2557
+ box-shadow: 0 16px 44px rgba(79, 99, 215, 0.11);
2558
+ padding: 12px;
2559
+ display: grid;
2560
+ gap: 9px;
2561
+ }
2562
+
2563
+ .dql-app-context-composer-head {
2564
+ display: flex;
2565
+ align-items: center;
2566
+ justify-content: space-between;
2567
+ gap: 8px;
2568
+ }
2569
+
2570
+ .dql-app-context-composer h4 {
2571
+ margin: 0;
2572
+ color: var(--dql-app-ink);
2573
+ font-size: 14px;
2574
+ line-height: 1.25;
2575
+ }
2576
+
2577
+ .dql-app-context-composer p {
2578
+ margin: 0;
2579
+ color: var(--dql-app-muted);
2580
+ font-size: 12px;
2581
+ line-height: 1.45;
2582
+ }
2583
+
2584
+ .dql-app-context-composer textarea {
2585
+ width: 100%;
2586
+ min-height: 158px;
2587
+ resize: vertical;
2588
+ border: 1px solid var(--dql-app-line-2);
2589
+ border-radius: 8px;
2590
+ background: var(--dql-app-control);
2591
+ color: var(--dql-app-ink);
2592
+ outline: 0;
2593
+ padding: 10px;
2594
+ font: 12.5px/1.5 var(--font-ui);
2595
+ }
2596
+
2597
+ .dql-app-context-composer textarea:focus {
2598
+ border-color: rgba(79, 99, 215, 0.54);
2599
+ box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
2600
+ }
2601
+
2602
+ .dql-app-context-chips {
2603
+ display: flex;
2604
+ flex-wrap: wrap;
2605
+ gap: 6px;
2606
+ }
2607
+
2608
+ .dql-app-context-chips span {
2609
+ min-width: 0;
2610
+ max-width: 100%;
2611
+ border: 1px solid var(--dql-app-line);
2612
+ border-radius: 999px;
2613
+ background: var(--dql-app-surface-muted);
2614
+ color: var(--dql-app-muted);
2615
+ padding: 4px 8px;
2616
+ font: 750 10px var(--font-ui);
2617
+ overflow: hidden;
2618
+ text-overflow: ellipsis;
2619
+ white-space: nowrap;
2620
+ }
2621
+
2622
+ .dql-app-context-actions {
2623
+ display: flex;
2624
+ justify-content: flex-end;
2625
+ gap: 8px;
2626
+ }
2627
+
2628
+ .dql-app-copilot-hero {
2629
+ padding: 12px 14px 10px;
2630
+ border-bottom: 1px solid var(--dql-app-line);
2631
+ background: linear-gradient(180deg, var(--dql-app-surface), var(--dql-app-surface-muted));
2632
+ }
2633
+
2634
+ .dql-app-copilot-kicker {
2635
+ display: inline-flex;
2636
+ align-items: center;
2637
+ gap: 7px;
2638
+ color: var(--dql-app-muted);
2639
+ font: 750 10px var(--font-mono);
2640
+ letter-spacing: 0;
2641
+ text-transform: uppercase;
2642
+ }
2643
+
2644
+ .dql-app-copilot-kicker svg { color: var(--dql-app-accent); }
2645
+ .dql-app-copilot-hero h3 {
2646
+ margin: 6px 0 0;
2647
+ color: var(--dql-app-ink);
2648
+ font-size: 19px;
2649
+ line-height: 1.15;
2650
+ }
2651
+
2652
+ .dql-app-copilot-hero p {
2653
+ margin: 6px 0 0;
2654
+ color: var(--dql-app-muted);
2655
+ font-size: 11.5px;
2656
+ line-height: 1.42;
2657
+ display: -webkit-box;
2658
+ -webkit-line-clamp: 2;
2659
+ -webkit-box-orient: vertical;
2660
+ overflow: hidden;
2661
+ }
2662
+
2663
+ .dql-app-copilot-decision {
2664
+ margin-top: 8px;
2665
+ border: 1px solid var(--dql-app-line);
2666
+ border-radius: 7px;
2667
+ background: var(--dql-app-surface);
2668
+ padding: 7px 9px;
2669
+ }
2670
+
2671
+ .dql-app-copilot-decision small,
2672
+ .dql-app-copilot-facts small {
2673
+ display: block;
2674
+ color: var(--dql-app-muted);
2675
+ font: 750 9px var(--font-mono);
2676
+ letter-spacing: 0;
2677
+ text-transform: uppercase;
2678
+ }
2679
+
2680
+ .dql-app-copilot-decision b {
2681
+ display: block;
2682
+ margin-top: 3px;
2683
+ color: var(--dql-app-ink);
2684
+ font-size: 11.5px;
2685
+ line-height: 1.32;
2686
+ }
2687
+
2688
+ .dql-app-copilot-facts {
2689
+ display: grid;
2690
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2691
+ gap: 6px;
2692
+ margin-top: 7px;
2693
+ }
2694
+
2695
+ .dql-app-copilot-facts span {
2696
+ min-width: 0;
2697
+ border-radius: 7px;
2698
+ background: var(--dql-app-control);
2699
+ padding: 6px 8px;
2700
+ }
2701
+
2702
+ .dql-app-copilot-facts b {
2703
+ display: block;
2704
+ margin-top: 2px;
2705
+ color: var(--dql-app-ink);
2706
+ font-size: 10.5px;
2707
+ line-height: 1.25;
2708
+ overflow: hidden;
2709
+ text-overflow: ellipsis;
2710
+ white-space: nowrap;
2711
+ }
2712
+
2713
+ .dql-app-copilot-chat {
2714
+ flex: 1;
2715
+ min-height: 210px;
2716
+ padding: 9px 12px 12px;
2717
+ }
2718
+
2719
+ .dql-app-explain-head { padding: 14px 16px 12px; border-bottom: 1px solid var(--dql-app-line); }
2720
+ .dql-app-explain-head span,
2721
+ .dql-app-ex-label {
2722
+ color: var(--dql-app-muted);
2723
+ font: 700 9px var(--font-mono);
2724
+ letter-spacing: 0;
2725
+ text-transform: uppercase;
2726
+ }
2727
+
2728
+ .dql-app-explain-head h3 { margin: 3px 0 0; font-size: 17px; }
2729
+ .dql-app-explain-head p { margin: 5px 0 0; color: var(--dql-app-muted); font-size: 11.5px; line-height: 1.45; }
2730
+ .dql-app-ex-section { padding: 13px 16px; border-bottom: 1px solid var(--dql-app-line); }
2731
+ .dql-app-ex-section.compact { padding-top: 11px; padding-bottom: 11px; }
2732
+ .dql-app-copilot-controls {
2733
+ padding: 8px 12px;
2734
+ border-bottom: 1px solid var(--dql-app-line);
2735
+ }
2736
+
2737
+ .dql-app-copilot-focus {
2738
+ display: grid;
2739
+ gap: 5px;
2740
+ }
2741
+
2742
+ .dql-app-copilot-focus span {
2743
+ color: var(--dql-app-muted);
2744
+ font: 700 9px var(--font-mono);
2745
+ letter-spacing: 0;
2746
+ text-transform: uppercase;
2747
+ }
2748
+
2749
+ .dql-app-copilot-focus select {
2750
+ width: 100%;
2751
+ min-width: 0;
2752
+ height: 34px;
2753
+ border: 1px solid var(--dql-app-line-2);
2754
+ border-radius: 7px;
2755
+ background: var(--dql-app-control);
2756
+ color: var(--dql-app-ink);
2757
+ padding: 0 10px;
2758
+ font: 800 12px var(--font-ui);
2759
+ }
2760
+
2761
+ .dql-app-copilot-empty {
2762
+ margin-top: 7px;
2763
+ color: var(--dql-app-faint);
2764
+ font-size: 11px;
2765
+ }
2766
+
2767
+ .dql-app-copilot-brief {
2768
+ display: flex;
2769
+ align-items: flex-start;
2770
+ gap: 10px;
2771
+ padding: 9px 12px;
2772
+ border-bottom: 1px solid var(--dql-app-line);
2773
+ }
2774
+
2775
+ .dql-app-copilot-brief > div {
2776
+ min-width: 0;
2777
+ flex: 1;
2778
+ }
2779
+
2780
+ .dql-app-copilot-brief span {
2781
+ display: inline-flex;
2782
+ color: var(--dql-app-green);
2783
+ font: 750 9px var(--font-mono);
2784
+ letter-spacing: 0;
2785
+ text-transform: uppercase;
2786
+ }
2787
+
2788
+ .dql-app-copilot-brief b {
2789
+ display: block;
2790
+ margin-top: 4px;
2791
+ color: var(--dql-app-ink);
2792
+ font-size: 13px;
2793
+ line-height: 1.25;
2794
+ }
2795
+
2796
+ .dql-app-copilot-brief p {
2797
+ margin: 4px 0 0;
2798
+ color: var(--dql-app-muted);
2799
+ font-size: 11.5px;
2800
+ line-height: 1.35;
2801
+ }
2802
+
2803
+ .dql-app-copilot-result-pill {
2804
+ flex: none;
2805
+ border-radius: 999px;
2806
+ border: 1px solid rgba(22, 163, 74, 0.24);
2807
+ background: var(--dql-app-green-soft);
2808
+ color: var(--dql-app-green) !important;
2809
+ padding: 4px 8px;
2810
+ white-space: nowrap;
2811
+ }
2812
+
2813
+ .dql-app-copilot-prompts {
2814
+ display: flex;
2815
+ gap: 7px;
2816
+ flex-wrap: wrap;
2817
+ padding: 8px 12px;
2818
+ border-bottom: 1px solid var(--dql-app-line);
2819
+ }
2820
+
2821
+ .dql-app-copilot-prompts button {
2822
+ min-width: 0;
2823
+ height: 31px;
2824
+ border: 1px solid var(--dql-app-line);
2825
+ border-radius: 999px;
2826
+ background: var(--dql-app-surface);
2827
+ color: var(--dql-app-muted);
2828
+ padding: 0 9px;
2829
+ display: inline-flex;
2830
+ align-items: center;
2831
+ gap: 5px;
2832
+ cursor: pointer;
2833
+ font: 800 10.5px var(--font-ui);
2834
+ }
2835
+
2836
+ .dql-app-copilot-prompts button:hover {
2837
+ color: var(--dql-app-accent);
2838
+ border-color: rgba(79, 99, 215, 0.34);
2839
+ background: var(--dql-app-accent-soft);
2840
+ }
2841
+
2842
+ .dql-app-copilot-prompts svg {
2843
+ flex: 0 0 auto;
2844
+ }
2845
+
2846
+ .dql-app-copilot-evidence {
2847
+ border-bottom: 1px solid var(--dql-app-line);
2848
+ }
2849
+
2850
+ .dql-app-copilot-evidence summary {
2851
+ min-height: 36px;
2852
+ display: flex;
2853
+ align-items: center;
2854
+ gap: 8px;
2855
+ padding: 0 12px;
2856
+ cursor: pointer;
2857
+ color: var(--dql-app-muted);
2858
+ font: 800 11px var(--font-ui);
2859
+ list-style: none;
2860
+ }
2861
+
2862
+ .dql-app-copilot-evidence summary::-webkit-details-marker { display: none; }
2863
+ .dql-app-copilot-evidence summary span {
2864
+ display: inline-flex;
2865
+ align-items: center;
2866
+ gap: 6px;
2867
+ min-width: 0;
2868
+ }
2869
+
2870
+ .dql-app-copilot-evidence summary small {
2871
+ margin-left: auto;
2872
+ min-width: 0;
2873
+ max-width: 160px;
2874
+ color: var(--dql-app-faint);
2875
+ font: 700 10px var(--font-mono);
2876
+ overflow: hidden;
2877
+ text-overflow: ellipsis;
2878
+ white-space: nowrap;
2879
+ }
2880
+
2881
+ .dql-app-copilot-evidence > div {
2882
+ display: grid;
2883
+ gap: 6px;
2884
+ padding: 0 12px 11px;
2885
+ }
2886
+
2887
+ .dql-app-keyvalue-inline {
2888
+ display: grid;
2889
+ grid-template-columns: 92px minmax(0, 1fr);
2890
+ gap: 8px;
2891
+ align-items: baseline;
2892
+ font-size: 11px;
2893
+ }
2894
+
2895
+ .dql-app-keyvalue-inline span {
2896
+ color: var(--dql-app-faint);
2897
+ font-family: var(--font-mono);
2898
+ }
2899
+
2900
+ .dql-app-keyvalue-inline b {
2901
+ min-width: 0;
2902
+ color: var(--dql-app-muted);
2903
+ font-weight: 700;
2904
+ overflow: hidden;
2905
+ text-overflow: ellipsis;
2906
+ white-space: nowrap;
2907
+ }
2908
+ .dql-app-block-cite {
2909
+ display: flex;
2910
+ align-items: center;
2911
+ gap: 9px;
2912
+ padding: 5px 0;
2913
+ font-size: 11.5px;
2914
+ }
2915
+
2916
+ .dql-app-block-cite span { flex: 1; min-width: 0; font-family: var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2917
+ .dql-app-block-cite b { color: var(--dql-app-faint); font: 10px var(--font-mono); }
2918
+ .dql-app-flow { margin-top: 8px; }
2919
+ .dql-app-flow-node {
2920
+ display: flex;
2921
+ align-items: center;
2922
+ gap: 8px;
2923
+ padding: 5px 0;
2924
+ font-size: 11.5px;
2925
+ }
2926
+
2927
+ .dql-app-flow-node span {
2928
+ width: 28px;
2929
+ height: 23px;
2930
+ border-radius: 6px;
2931
+ background: var(--dql-app-accent-soft);
2932
+ color: var(--dql-app-accent);
2933
+ display: inline-flex;
2934
+ align-items: center;
2935
+ justify-content: center;
2936
+ font: 700 8px var(--font-mono);
2937
+ }
2938
+
2939
+ .dql-app-flow-node b { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2940
+ .dql-app-flow-node small { color: var(--dql-app-faint); font: 9px var(--font-mono); }
2941
+ .dql-app-flow i {
2942
+ display: block;
2943
+ width: 2px;
2944
+ height: 9px;
2945
+ background: var(--dql-app-accent);
2946
+ margin-left: 13px;
2947
+ }
2948
+
2949
+ .dql-app-suggests { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 9px; }
2950
+ .dql-app-focus-list {
2951
+ display: grid;
2952
+ gap: 6px;
2953
+ margin-top: 8px;
2954
+ }
2955
+
2956
+ .dql-app-focus-list > span {
2957
+ color: var(--dql-app-faint);
2958
+ font-size: 12px;
2959
+ }
2960
+
2961
+ .dql-app-focus-list button {
2962
+ min-width: 0;
2963
+ min-height: 34px;
2964
+ border: 1px solid var(--dql-app-line);
2965
+ border-radius: 8px;
2966
+ background: var(--dql-app-surface);
2967
+ color: var(--dql-app-muted);
2968
+ display: flex;
2969
+ align-items: center;
2970
+ gap: 8px;
2971
+ padding: 7px 8px;
2972
+ cursor: pointer;
2973
+ text-align: left;
2974
+ }
2975
+
2976
+ .dql-app-focus-list button.on {
2977
+ color: var(--dql-app-ink);
2978
+ border-color: rgba(79, 99, 215, 0.42);
2979
+ background: var(--dql-app-accent-soft);
2980
+ }
2981
+
2982
+ .dql-app-focus-list button svg {
2983
+ flex: 0 0 auto;
2984
+ color: var(--dql-app-accent);
2985
+ }
2986
+
2987
+ .dql-app-focus-list button span {
2988
+ flex: 1;
2989
+ min-width: 0;
2990
+ overflow: hidden;
2991
+ text-overflow: ellipsis;
2992
+ white-space: nowrap;
2993
+ font: 800 11.5px var(--font-ui);
2994
+ }
2995
+
2996
+ .dql-app-focus-list button b {
2997
+ color: var(--dql-app-faint);
2998
+ font: 700 8.5px var(--font-mono);
2999
+ text-transform: uppercase;
3000
+ }
3001
+
3002
+ .dql-app-rail-title {
3003
+ display: flex;
3004
+ align-items: center;
3005
+ gap: 8px;
3006
+ margin-bottom: 8px;
3007
+ }
3008
+
3009
+ .dql-app-rail-title > span { flex: 1; }
3010
+
3011
+ .dql-app-rail-title button {
3012
+ height: 26px;
3013
+ border: 1px solid var(--dql-app-line);
3014
+ border-radius: 6px;
3015
+ background: var(--dql-app-surface);
3016
+ color: var(--dql-app-muted);
3017
+ display: inline-flex;
3018
+ align-items: center;
3019
+ gap: 5px;
3020
+ padding: 0 8px;
3021
+ cursor: pointer;
3022
+ font: 800 10.5px var(--font-ui);
3023
+ }
3024
+
3025
+ .dql-app-drilldown-grid {
3026
+ display: grid;
3027
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3028
+ gap: 7px;
3029
+ }
3030
+
3031
+ .dql-app-drilldown-grid button {
3032
+ min-width: 0;
3033
+ border: 1px solid var(--dql-app-line);
3034
+ border-radius: 8px;
3035
+ background: var(--dql-app-surface);
3036
+ color: var(--dql-app-muted);
3037
+ padding: 8px 6px;
3038
+ display: grid;
3039
+ justify-items: center;
3040
+ gap: 5px;
3041
+ cursor: pointer;
3042
+ font: 800 10.5px var(--font-ui);
3043
+ }
3044
+
3045
+ .dql-app-drilldown-grid button:hover {
3046
+ color: var(--dql-app-accent);
3047
+ border-color: rgba(79, 99, 215, 0.34);
3048
+ background: var(--dql-app-accent-soft);
3049
+ }
3050
+
3051
+ .dql-app-rail-chat {
3052
+ height: 100%;
3053
+ min-height: 0;
3054
+ border: 1px solid var(--dql-app-line-2);
3055
+ border-radius: 8px;
3056
+ overflow: hidden;
3057
+ background: var(--dql-app-surface);
3058
+ }
3059
+
3060
+ .dql-app-rail-chat.expanded {
3061
+ position: fixed;
3062
+ z-index: 80;
3063
+ right: 24px;
3064
+ top: 76px;
3065
+ bottom: 24px;
3066
+ width: min(760px, calc(100vw - 80px));
3067
+ height: auto;
3068
+ box-shadow: 0 18px 60px rgba(15, 23, 42, 0.24);
3069
+ }
3070
+
3071
+ .dql-app-gapcard {
3072
+ margin: 12px;
3073
+ border-radius: 7px;
3074
+ background: var(--dql-app-orange-soft);
3075
+ padding: 11px 12px;
3076
+ }
3077
+
3078
+ .dql-app-gapcard p { margin: 6px 0 0; color: var(--dql-app-muted); font-size: 11.5px; line-height: 1.45; }
3079
+ .dql-app-research-shell {
3080
+ display: grid;
3081
+ gap: 14px;
3082
+ min-height: 620px;
3083
+ }
3084
+
3085
+ .dql-app-research-shell.history-open {
3086
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
3087
+ }
3088
+
3089
+ .dql-app-research-shell.history-collapsed {
3090
+ grid-template-columns: minmax(0, 1fr);
3091
+ }
3092
+
3093
+ .dql-app-research-shell.history-collapsed .dql-app-research-list {
3094
+ display: none;
3095
+ }
3096
+
3097
+ .dql-app-research-list {
3098
+ border: 1px solid var(--dql-app-line);
3099
+ border-radius: 8px;
3100
+ background: var(--dql-app-surface);
3101
+ }
3102
+
3103
+ .dql-app-research-list {
3104
+ padding: 12px;
3105
+ display: flex;
3106
+ flex-direction: column;
3107
+ gap: 10px;
3108
+ min-width: 0;
3109
+ }
3110
+
3111
+ .dql-app-research-detail {
3112
+ padding: 0;
3113
+ min-width: 0;
3114
+ overflow: auto;
3115
+ background: transparent;
3116
+ }
3117
+
3118
+ .dql-app-research-head,
3119
+ .dql-app-research-titlebar,
3120
+ .dql-app-research-evidence-head {
3121
+ display: flex;
3122
+ align-items: center;
3123
+ justify-content: space-between;
3124
+ gap: 12px;
3125
+ }
3126
+
3127
+ .dql-app-research-head span {
3128
+ display: inline-flex;
3129
+ align-items: center;
3130
+ gap: 7px;
3131
+ font-weight: 850;
3132
+ }
3133
+
3134
+ .dql-app-research-head > div {
3135
+ display: inline-flex;
3136
+ align-items: center;
3137
+ gap: 7px;
3138
+ }
3139
+
3140
+ .dql-app-research-head b {
3141
+ color: var(--dql-app-faint);
3142
+ font-family: var(--font-mono);
3143
+ font-size: 10px;
3144
+ }
3145
+
3146
+ .dql-app-research-head button {
3147
+ height: 26px;
3148
+ border: 1px solid var(--dql-app-line);
3149
+ border-radius: 999px;
3150
+ background: var(--dql-app-surface-muted);
3151
+ color: var(--dql-app-muted);
3152
+ padding: 0 9px;
3153
+ cursor: pointer;
3154
+ font: 800 10px var(--font-ui);
3155
+ }
3156
+
3157
+ .dql-app-research-head button:hover {
3158
+ color: var(--dql-app-accent);
3159
+ border-color: rgba(79, 99, 215, 0.34);
3160
+ background: var(--dql-app-accent-soft);
3161
+ }
3162
+
3163
+ .dql-app-research-new {
3164
+ height: 32px;
3165
+ border: 1px solid var(--dql-app-line);
3166
+ border-radius: 7px;
3167
+ background: var(--dql-app-control);
3168
+ color: var(--dql-app-ink);
3169
+ display: inline-flex;
3170
+ align-items: center;
3171
+ justify-content: center;
3172
+ gap: 7px;
3173
+ font: 800 12px var(--font-ui);
3174
+ cursor: pointer;
3175
+ }
3176
+
3177
+ .dql-app-research-new:disabled { opacity: 0.65; cursor: not-allowed; }
3178
+ .dql-app-research-items { display: grid; gap: 6px; overflow: auto; }
3179
+ .dql-app-research-group-label {
3180
+ margin: 4px 2px 1px;
3181
+ color: var(--dql-app-faint);
3182
+ font: 850 9.5px var(--font-mono);
3183
+ letter-spacing: 0;
3184
+ text-transform: uppercase;
3185
+ }
3186
+ .dql-app-research-items button {
3187
+ border: 1px solid transparent;
3188
+ border-radius: 7px;
3189
+ background: transparent;
3190
+ color: var(--dql-app-ink);
3191
+ text-align: left;
3192
+ padding: 9px;
3193
+ cursor: pointer;
3194
+ min-width: 0;
3195
+ }
3196
+
3197
+ .dql-app-research-items button.on,
3198
+ .dql-app-research-items button:hover {
3199
+ border-color: var(--dql-app-line);
3200
+ background: var(--dql-app-control);
3201
+ }
3202
+
3203
+ .dql-app-research-items button.status-error:not(.on) {
3204
+ color: var(--dql-app-muted);
3205
+ opacity: 0.72;
3206
+ }
3207
+
3208
+ .dql-app-research-items button.status-error small {
3209
+ color: var(--dql-app-orange);
3210
+ }
3211
+
3212
+ .dql-app-research-items button.status-ready small {
3213
+ color: var(--dql-app-green);
3214
+ }
3215
+
3216
+ .dql-app-research-history-toggle {
3217
+ border-style: dashed !important;
3218
+ background: var(--dql-app-surface-muted) !important;
3219
+ color: var(--dql-app-muted) !important;
3220
+ }
3221
+
3222
+ .dql-app-research-items span,
3223
+ .dql-app-research-items small {
3224
+ display: block;
3225
+ overflow: hidden;
3226
+ text-overflow: ellipsis;
3227
+ white-space: nowrap;
3228
+ }
3229
+
3230
+ .dql-app-research-items span { font-weight: 800; font-size: 12px; }
3231
+ .dql-app-research-items small { margin-top: 3px; color: var(--dql-app-muted); font-size: 10.5px; }
3232
+ .dql-app-research-titlebar { align-items: flex-start; margin-bottom: 14px; }
3233
+ .dql-app-research-titlebar h2 {
3234
+ margin: 2px 0 0;
3235
+ font-size: 20px;
3236
+ line-height: 1.2;
3237
+ }
3238
+
3239
+ .dql-app-research-status {
3240
+ margin: 0 0 12px;
3241
+ border: 1px solid rgba(37, 99, 235, 0.26);
3242
+ border-radius: 8px;
3243
+ background: var(--dql-app-accent-soft);
3244
+ color: var(--dql-app-accent);
3245
+ padding: 10px 12px;
3246
+ display: flex;
3247
+ align-items: flex-start;
3248
+ gap: 8px;
3249
+ font: 800 12px var(--font-ui);
3250
+ }
3251
+
3252
+ .dql-app-research-status.opening {
3253
+ border-color: rgba(79, 99, 215, 0.28);
3254
+ background: color-mix(in srgb, var(--dql-app-accent-soft) 72%, var(--dql-app-surface));
3255
+ }
3256
+
3257
+ .dql-app-research-status > div {
3258
+ min-width: 0;
3259
+ display: grid;
3260
+ gap: 3px;
3261
+ }
3262
+
3263
+ .dql-app-research-status small {
3264
+ color: var(--dql-app-muted);
3265
+ font: 700 11px/1.35 var(--font-ui);
3266
+ overflow: hidden;
3267
+ text-overflow: ellipsis;
3268
+ }
3269
+
3270
+ .dql-app-report-toolbar {
3271
+ max-width: 1120px;
3272
+ margin: 0 auto 12px;
3273
+ display: flex;
3274
+ align-items: center;
3275
+ justify-content: space-between;
3276
+ gap: 12px;
3277
+ }
3278
+
3279
+ .dql-app-report-toolbar > div {
3280
+ min-width: 0;
3281
+ display: grid;
3282
+ gap: 3px;
3283
+ }
3284
+
3285
+ .dql-app-report-toolbar span {
3286
+ color: var(--dql-app-faint);
3287
+ font: 850 9.5px var(--font-mono);
3288
+ text-transform: uppercase;
3289
+ }
3290
+
3291
+ .dql-app-report-toolbar b {
3292
+ min-width: 0;
3293
+ color: var(--dql-app-ink);
3294
+ font-size: 13px;
3295
+ overflow: hidden;
3296
+ text-overflow: ellipsis;
3297
+ white-space: nowrap;
3298
+ }
3299
+
3300
+ .dql-app-research-creating {
3301
+ max-width: 760px;
3302
+ min-height: 340px;
3303
+ margin: 40px auto;
3304
+ border: 1px solid var(--dql-app-line);
3305
+ border-radius: 12px;
3306
+ background: var(--dql-app-surface);
3307
+ box-shadow: var(--dql-app-shadow);
3308
+ color: var(--dql-app-muted);
3309
+ padding: 42px;
3310
+ display: grid;
3311
+ place-items: center;
3312
+ align-content: center;
3313
+ gap: 12px;
3314
+ text-align: center;
3315
+ }
3316
+
3317
+ .dql-app-research-creating.active {
3318
+ max-width: 920px;
3319
+ min-height: 420px;
3320
+ border-color: rgba(79, 99, 215, 0.24);
3321
+ background:
3322
+ linear-gradient(180deg, color-mix(in srgb, var(--dql-app-accent-soft) 24%, var(--dql-app-surface)), var(--dql-app-surface) 48%),
3323
+ var(--dql-app-surface);
3324
+ }
3325
+
3326
+ .dql-app-research-creating svg {
3327
+ color: var(--dql-app-accent);
3328
+ }
3329
+
3330
+ .dql-app-research-creating > span {
3331
+ color: var(--dql-app-accent);
3332
+ font: 850 10.5px var(--font-mono);
3333
+ letter-spacing: 0;
3334
+ text-transform: uppercase;
3335
+ }
3336
+
3337
+ .dql-app-research-creating h2 {
3338
+ margin: 0;
3339
+ color: var(--dql-app-ink);
3340
+ font-size: 24px;
3341
+ }
3342
+
3343
+ .dql-app-research-creating p {
3344
+ margin: 0;
3345
+ max-width: 520px;
3346
+ font-size: 13px;
3347
+ line-height: 1.6;
3348
+ }
3349
+
3350
+ .dql-app-research-creating-steps {
3351
+ display: flex;
3352
+ flex-wrap: wrap;
3353
+ justify-content: center;
3354
+ gap: 8px;
3355
+ margin-top: 4px;
3356
+ max-width: 680px;
3357
+ }
3358
+
3359
+ .dql-app-research-creating-steps small {
3360
+ border: 1px solid var(--dql-app-line);
3361
+ border-radius: 999px;
3362
+ background: var(--dql-app-surface-muted);
3363
+ color: var(--dql-app-muted);
3364
+ padding: 5px 9px;
3365
+ font: 750 11px var(--font-ui);
3366
+ }
3367
+
3368
+ .dql-app-research-report {
3369
+ max-width: 1040px;
3370
+ margin: 0 auto;
3371
+ border: 0;
3372
+ border-radius: 0;
3373
+ background: var(--dql-app-surface);
3374
+ box-shadow: none;
3375
+ overflow: visible;
3376
+ }
3377
+
3378
+ .dql-app-report-hero {
3379
+ padding: 26px 34px 20px;
3380
+ border-bottom: 0;
3381
+ background: var(--dql-app-surface);
3382
+ }
3383
+
3384
+ .dql-app-report-status-row {
3385
+ display: flex;
3386
+ align-items: center;
3387
+ justify-content: space-between;
3388
+ gap: 14px;
3389
+ }
3390
+
3391
+ .dql-app-report-status-row > span {
3392
+ display: inline-flex;
3393
+ align-items: center;
3394
+ gap: 7px;
3395
+ color: var(--dql-app-muted);
3396
+ font: 850 10px var(--font-mono);
3397
+ text-transform: uppercase;
3398
+ }
3399
+
3400
+ .dql-app-report-hero h2 {
3401
+ margin: 18px 0 0;
3402
+ color: var(--dql-app-ink);
3403
+ font-size: clamp(25px, 2.4vw, 34px);
3404
+ line-height: 1.08;
3405
+ max-width: 860px;
3406
+ text-wrap: balance;
3407
+ }
3408
+
3409
+ .dql-app-report-hero p {
3410
+ margin: 14px 0 0;
3411
+ color: var(--dql-app-muted);
3412
+ font-size: 14px;
3413
+ line-height: 1.6;
3414
+ max-width: 850px;
3415
+ }
3416
+
3417
+ .dql-app-report-context-line {
3418
+ display: flex;
3419
+ flex-wrap: wrap;
3420
+ gap: 8px;
3421
+ margin-top: 18px;
3422
+ }
3423
+
3424
+ .dql-app-report-context-line span {
3425
+ display: inline-flex;
3426
+ align-items: center;
3427
+ gap: 6px;
3428
+ border: 1px solid var(--dql-app-line);
3429
+ border-radius: 999px;
3430
+ background: var(--dql-app-surface);
3431
+ color: var(--dql-app-muted);
3432
+ padding: 6px 10px;
3433
+ font-size: 11.5px;
3434
+ max-width: 100%;
3435
+ }
3436
+
3437
+ .dql-app-report-context-line b {
3438
+ color: var(--dql-app-ink);
3439
+ font-weight: 850;
3440
+ }
3441
+
3442
+ .dql-app-report-route {
3443
+ display: flex;
3444
+ align-items: flex-start;
3445
+ gap: 10px;
3446
+ margin-top: 14px;
3447
+ border: 1px solid rgba(79, 99, 215, 0.18);
3448
+ border-radius: 10px;
3449
+ background: rgba(79, 99, 215, 0.055);
3450
+ padding: 10px 12px;
3451
+ max-width: 900px;
3452
+ }
3453
+
3454
+ .dql-app-report-route > svg {
3455
+ color: var(--dql-app-accent);
3456
+ flex: 0 0 auto;
3457
+ margin-top: 2px;
3458
+ }
3459
+
3460
+ .dql-app-report-route span {
3461
+ display: block;
3462
+ color: var(--dql-app-accent);
3463
+ font: 850 10.5px var(--font-mono);
3464
+ letter-spacing: .02em;
3465
+ text-transform: uppercase;
3466
+ }
3467
+
3468
+ .dql-app-report-route p {
3469
+ margin: 5px 0 0;
3470
+ color: var(--dql-app-ink);
3471
+ font-size: 12.5px;
3472
+ line-height: 1.45;
3473
+ }
3474
+
3475
+ .dql-app-report-route small {
3476
+ display: block;
3477
+ margin-top: 5px;
3478
+ color: var(--dql-app-muted);
3479
+ font-size: 12px;
3480
+ line-height: 1.45;
3481
+ }
3482
+
3483
+ .dql-app-report-actions {
3484
+ display: flex;
3485
+ flex-wrap: wrap;
3486
+ gap: 8px;
3487
+ margin-top: 18px;
3488
+ }
3489
+
3490
+ .dql-app-report-review-actions {
3491
+ position: relative;
3492
+ }
3493
+
3494
+ .dql-app-report-review-actions summary {
3495
+ list-style: none;
3496
+ height: 32px;
3497
+ border: 1px solid var(--dql-app-line);
3498
+ border-radius: 8px;
3499
+ background: var(--dql-app-surface);
3500
+ color: var(--dql-app-muted);
3501
+ padding: 0 10px;
3502
+ display: inline-flex;
3503
+ align-items: center;
3504
+ cursor: pointer;
3505
+ font: 800 11.5px var(--font-ui);
3506
+ }
3507
+
3508
+ .dql-app-report-review-actions summary::-webkit-details-marker {
3509
+ display: none;
3510
+ }
3511
+
3512
+ .dql-app-report-review-actions[open] summary,
3513
+ .dql-app-report-review-actions summary:hover {
3514
+ color: var(--dql-app-accent);
3515
+ border-color: rgba(79, 99, 215, 0.34);
3516
+ background: var(--dql-app-accent-soft);
3517
+ }
3518
+
3519
+ .dql-app-report-review-actions > div {
3520
+ position: absolute;
3521
+ z-index: 5;
3522
+ right: 0;
3523
+ top: calc(100% + 6px);
3524
+ min-width: 220px;
3525
+ border: 1px solid var(--dql-app-line);
3526
+ border-radius: 10px;
3527
+ background: var(--dql-app-surface);
3528
+ box-shadow: var(--dql-app-shadow);
3529
+ padding: 8px;
3530
+ display: grid;
3531
+ gap: 7px;
3532
+ }
3533
+
3534
+ .dql-app-report-review-actions > div .dql-apps-btn {
3535
+ justify-content: flex-start;
3536
+ width: 100%;
3537
+ }
3538
+
3539
+ .dql-app-report-warning {
3540
+ display: flex;
3541
+ align-items: flex-start;
3542
+ gap: 8px;
3543
+ margin-top: 14px;
3544
+ border: 1px solid rgba(217, 119, 6, 0.24);
3545
+ border-radius: 9px;
3546
+ background: rgba(251, 191, 36, 0.12);
3547
+ color: #92400e;
3548
+ padding: 10px 12px;
3549
+ font-size: 12px;
3550
+ line-height: 1.45;
3551
+ }
3552
+
3553
+ .dql-app-report-warning svg {
3554
+ flex: none;
3555
+ margin-top: 1px;
3556
+ }
3557
+
3558
+ .dql-app-report-section {
3559
+ padding: 24px 34px;
3560
+ border-bottom: 0;
3561
+ }
3562
+
3563
+ .dql-app-report-section:last-child {
3564
+ border-bottom: 0;
3565
+ }
3566
+
3567
+ .dql-app-report-section h3 {
3568
+ margin: 0 0 12px;
3569
+ color: var(--dql-app-ink);
3570
+ font-size: 17px;
3571
+ line-height: 1.25;
3572
+ }
3573
+
3574
+ .dql-app-report-paper {
3575
+ color: var(--dql-app-ink);
3576
+ font-size: 14.5px;
3577
+ line-height: 1.78;
3578
+ padding: 26px 54px 20px;
3579
+ }
3580
+
3581
+ .dql-app-report-paper h2,
3582
+ .dql-app-report-paper h3 {
3583
+ margin: 18px 0 8px;
3584
+ color: var(--dql-app-ink);
3585
+ font-size: 18px;
3586
+ line-height: 1.22;
3587
+ }
3588
+
3589
+ .dql-app-report-paper h2:first-child,
3590
+ .dql-app-report-paper h3:first-child {
3591
+ margin-top: 0;
3592
+ }
3593
+
3594
+ .dql-app-report-paper p,
3595
+ .dql-app-report-paper ul,
3596
+ .dql-app-report-paper ol {
3597
+ max-width: 900px;
3598
+ }
3599
+
3600
+ .dql-app-report-dynamic-sections {
3601
+ display: grid;
3602
+ gap: 30px;
3603
+ }
3604
+
3605
+ .dql-app-report-dynamic-section {
3606
+ border-left: 0;
3607
+ padding: 0;
3608
+ display: grid;
3609
+ gap: 10px;
3610
+ }
3611
+
3612
+ .dql-app-report-dynamic-head {
3613
+ display: grid;
3614
+ gap: 5px;
3615
+ }
3616
+
3617
+ .dql-app-report-dynamic-head span {
3618
+ color: var(--dql-app-muted);
3619
+ font: 850 9.5px var(--font-mono);
3620
+ letter-spacing: 0;
3621
+ text-transform: uppercase;
3622
+ }
3623
+
3624
+ .dql-app-report-dynamic-head h3 {
3625
+ margin: 0;
3626
+ font-size: 20px;
3627
+ line-height: 1.18;
3628
+ }
3629
+
3630
+ .dql-app-report-memo-body {
3631
+ display: grid;
3632
+ gap: 10px;
3633
+ max-width: 900px;
3634
+ }
3635
+
3636
+ .dql-app-report-memo-body p {
3637
+ margin: 0;
3638
+ color: var(--dql-app-ink);
3639
+ font-size: 14.5px;
3640
+ line-height: 1.72;
3641
+ }
3642
+
3643
+ .dql-app-report-dynamic-section ul {
3644
+ margin: 4px 0 0;
3645
+ padding-left: 20px;
3646
+ display: grid;
3647
+ gap: 7px;
3648
+ max-width: 820px;
3649
+ }
3650
+
3651
+ .dql-app-report-dynamic-section li {
3652
+ color: var(--dql-app-ink);
3653
+ font-size: 14.5px;
3654
+ line-height: 1.6;
3655
+ }
3656
+
3657
+ .dql-app-report-evidence-story {
3658
+ display: grid;
3659
+ grid-template-columns: minmax(280px, 0.9fr) minmax(360px, 1.1fr);
3660
+ gap: 24px;
3661
+ align-items: start;
3662
+ margin: 6px 34px 12px;
3663
+ border: 1px solid color-mix(in srgb, var(--dql-app-line) 75%, transparent);
3664
+ border-radius: 12px;
3665
+ background: linear-gradient(180deg, color-mix(in srgb, var(--dql-app-surface-muted) 64%, var(--dql-app-surface)), var(--dql-app-surface));
3666
+ }
3667
+
3668
+ .dql-app-report-evidence-story.single {
3669
+ grid-template-columns: minmax(0, 1fr);
3670
+ }
3671
+
3672
+ .dql-app-report-evidence-story .dql-app-report-numbers {
3673
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3674
+ }
3675
+
3676
+ .dql-app-report-prose {
3677
+ font-size: 14px;
3678
+ line-height: 1.65;
3679
+ }
3680
+
3681
+ .dql-app-report-callout {
3682
+ margin-top: 16px;
3683
+ border-left: 3px solid var(--dql-app-accent);
3684
+ background: var(--dql-app-surface-muted);
3685
+ padding: 12px 14px;
3686
+ color: var(--dql-app-muted);
3687
+ }
3688
+
3689
+ .dql-app-report-numbers {
3690
+ display: grid;
3691
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3692
+ gap: 10px;
3693
+ }
3694
+
3695
+ .dql-app-report-number {
3696
+ border: 1px solid var(--dql-app-line);
3697
+ border-radius: 9px;
3698
+ background: var(--dql-app-surface);
3699
+ padding: 13px;
3700
+ min-width: 0;
3701
+ }
3702
+
3703
+ .dql-app-report-number span,
3704
+ .dql-app-report-number small {
3705
+ display: block;
3706
+ color: var(--dql-app-muted);
3707
+ }
3708
+
3709
+ .dql-app-report-number span {
3710
+ font: 850 9.5px var(--font-mono);
3711
+ letter-spacing: 0;
3712
+ text-transform: uppercase;
3713
+ }
3714
+
3715
+ .dql-app-report-number b {
3716
+ display: block;
3717
+ margin-top: 7px;
3718
+ color: var(--dql-app-ink);
3719
+ font-size: 23px;
3720
+ line-height: 1;
3721
+ overflow: hidden;
3722
+ text-overflow: ellipsis;
3723
+ }
3724
+
3725
+ .dql-app-report-number small {
3726
+ margin-top: 7px;
3727
+ font-size: 11.5px;
3728
+ line-height: 1.35;
3729
+ }
3730
+
3731
+ .dql-app-report-drivers {
3732
+ display: grid;
3733
+ gap: 12px;
3734
+ }
3735
+
3736
+ .dql-app-report-driver {
3737
+ display: grid;
3738
+ grid-template-columns: 34px minmax(0, 1fr);
3739
+ gap: 12px;
3740
+ align-items: start;
3741
+ padding: 13px 0;
3742
+ border-bottom: 1px solid var(--dql-app-line);
3743
+ }
3744
+
3745
+ .dql-app-report-driver:last-child { border-bottom: 0; }
3746
+
3747
+ .dql-app-report-driver > span {
3748
+ width: 28px;
3749
+ height: 28px;
3750
+ border-radius: 999px;
3751
+ background: var(--dql-app-accent-soft);
3752
+ color: var(--dql-app-accent);
3753
+ display: inline-flex;
3754
+ align-items: center;
3755
+ justify-content: center;
3756
+ font: 850 12px var(--font-mono);
3757
+ }
3758
+
3759
+ .dql-app-report-driver b {
3760
+ display: inline;
3761
+ color: var(--dql-app-ink);
3762
+ font-size: 14px;
3763
+ }
3764
+
3765
+ .dql-app-report-driver em {
3766
+ margin-left: 8px;
3767
+ color: var(--dql-app-accent);
3768
+ font: 850 12px var(--font-mono);
3769
+ font-style: normal;
3770
+ }
3771
+
3772
+ .dql-app-report-driver p,
3773
+ .dql-app-report-muted {
3774
+ margin: 7px 0 0;
3775
+ color: var(--dql-app-muted);
3776
+ font-size: 13px;
3777
+ line-height: 1.55;
3778
+ }
3779
+
3780
+ .dql-app-report-driver-chart {
3781
+ display: grid;
3782
+ gap: 13px;
3783
+ }
3784
+
3785
+ .dql-app-report-driver-bar {
3786
+ display: grid;
3787
+ gap: 7px;
3788
+ }
3789
+
3790
+ .dql-app-report-driver-bar > div {
3791
+ display: flex;
3792
+ align-items: baseline;
3793
+ justify-content: space-between;
3794
+ gap: 12px;
3795
+ }
3796
+
3797
+ .dql-app-report-driver-bar b {
3798
+ min-width: 0;
3799
+ color: var(--dql-app-ink);
3800
+ font-size: 13.5px;
3801
+ overflow: hidden;
3802
+ text-overflow: ellipsis;
3803
+ white-space: nowrap;
3804
+ }
3805
+
3806
+ .dql-app-report-driver-bar span {
3807
+ flex: none;
3808
+ color: var(--dql-app-accent);
3809
+ font: 850 11px var(--font-mono);
3810
+ }
3811
+
3812
+ .dql-app-report-driver-bar i {
3813
+ display: block;
3814
+ width: var(--driver-width);
3815
+ min-width: 28px;
3816
+ height: 9px;
3817
+ border-radius: 999px;
3818
+ background: linear-gradient(90deg, var(--dql-app-accent), rgba(79, 99, 215, 0.42));
3819
+ }
3820
+
3821
+ .dql-app-report-driver-bar p {
3822
+ margin: 0;
3823
+ color: var(--dql-app-muted);
3824
+ font-size: 12px;
3825
+ line-height: 1.45;
3826
+ }
3827
+
3828
+ .dql-app-report-appendix {
3829
+ padding: 0;
3830
+ }
3831
+
3832
+ .dql-app-report-appendix summary {
3833
+ list-style: none;
3834
+ display: grid;
3835
+ grid-template-columns: minmax(0, 1fr) auto;
3836
+ gap: 4px 14px;
3837
+ align-items: center;
3838
+ cursor: pointer;
3839
+ padding: 18px 30px;
3840
+ }
3841
+
3842
+ .dql-app-report-appendix summary::-webkit-details-marker {
3843
+ display: none;
3844
+ }
3845
+
3846
+ .dql-app-report-appendix summary span {
3847
+ color: var(--dql-app-ink);
3848
+ font: 850 14px var(--font-ui);
3849
+ }
3850
+
3851
+ .dql-app-report-appendix summary small {
3852
+ grid-column: 1 / 2;
3853
+ color: var(--dql-app-muted);
3854
+ font-size: 12px;
3855
+ line-height: 1.4;
3856
+ }
3857
+
3858
+ .dql-app-report-appendix summary svg {
3859
+ grid-row: 1 / span 2;
3860
+ grid-column: 2;
3861
+ color: var(--dql-app-muted);
3862
+ transition: transform 140ms ease;
3863
+ }
3864
+
3865
+ .dql-app-report-appendix[open] summary {
3866
+ border-bottom: 1px solid var(--dql-app-line);
3867
+ }
3868
+
3869
+ .dql-app-report-appendix[open] summary svg {
3870
+ transform: rotate(180deg);
3871
+ }
3872
+
3873
+ .dql-app-report-appendix .dql-app-research-evidence-head {
3874
+ align-items: flex-start;
3875
+ margin: 18px 30px 10px;
3876
+ }
3877
+
3878
+ .dql-app-report-appendix .dql-app-research-evidence-head h3 {
3879
+ margin-bottom: 4px;
3880
+ }
3881
+
3882
+ .dql-app-report-appendix .dql-app-research-evidence-head p {
3883
+ margin: 0;
3884
+ color: var(--dql-app-muted);
3885
+ font-size: 12px;
3886
+ line-height: 1.45;
3887
+ }
3888
+
3889
+ .dql-app-report-appendix .dql-app-research-table,
3890
+ .dql-app-report-appendix .dql-app-research-sql-review,
3891
+ .dql-app-report-appendix .dql-app-research-assumptions,
3892
+ .dql-app-report-appendix .dql-app-research-code {
3893
+ margin-left: 30px;
3894
+ margin-right: 30px;
3895
+ }
3896
+
3897
+ .dql-app-report-appendix > :last-child {
3898
+ margin-bottom: 24px;
3899
+ }
3900
+
3901
+ .dql-app-research-tabs {
3902
+ display: flex;
3903
+ gap: 4px;
3904
+ flex-wrap: wrap;
3905
+ }
3906
+
3907
+ .dql-app-research-tabs button,
3908
+ .dql-app-research-next button {
3909
+ border: 1px solid var(--dql-app-line);
3910
+ border-radius: 999px;
3911
+ background: var(--dql-app-surface);
3912
+ color: var(--dql-app-muted);
3913
+ font: 800 11px var(--font-ui);
3914
+ padding: 5px 9px;
3915
+ cursor: pointer;
3916
+ }
3917
+
3918
+ .dql-app-research-tabs button.on,
3919
+ .dql-app-research-tabs button:hover,
3920
+ .dql-app-research-next button:hover {
3921
+ color: var(--dql-app-accent);
3922
+ border-color: rgba(37, 99, 235, 0.34);
3923
+ background: var(--dql-app-accent-soft);
3924
+ }
3925
+
3926
+ .dql-app-research-code {
3927
+ margin: 10px 0 0;
3928
+ max-height: 320px;
3929
+ overflow: auto;
3930
+ border-radius: 8px;
3931
+ border: 1px solid var(--dql-app-line);
3932
+ background: var(--dql-app-surface);
3933
+ padding: 11px;
3934
+ color: var(--dql-app-ink);
3935
+ font: 11px/1.5 var(--font-mono);
3936
+ white-space: pre-wrap;
3937
+ }
3938
+
3939
+ .dql-app-research-sql-review {
3940
+ display: grid;
3941
+ gap: 10px;
3942
+ margin-top: 10px;
3943
+ }
3944
+
3945
+ .dql-app-research-sql-review textarea {
3946
+ min-height: 260px;
3947
+ resize: vertical;
3948
+ border-radius: 8px;
3949
+ border: 1px solid var(--dql-app-line);
3950
+ background: var(--dql-app-surface);
3951
+ color: var(--dql-app-ink);
3952
+ padding: 11px;
3953
+ font: 11px/1.5 var(--font-mono);
3954
+ outline: none;
3955
+ }
3956
+
3957
+ .dql-app-research-sql-review textarea:focus {
3958
+ border-color: rgba(37, 99, 235, 0.42);
3959
+ box-shadow: 0 0 0 3px var(--dql-app-accent-soft);
3960
+ }
3961
+
3962
+ .dql-app-research-assumptions {
3963
+ display: grid;
3964
+ gap: 8px;
3965
+ margin-top: 10px;
3966
+ }
3967
+
3968
+ .dql-app-research-assumptions p {
3969
+ margin: 0;
3970
+ border: 1px solid var(--dql-app-line);
3971
+ border-radius: 7px;
3972
+ background: var(--dql-app-surface);
3973
+ padding: 9px;
3974
+ color: var(--dql-app-muted);
3975
+ font-size: 12px;
3976
+ }
3977
+
3978
+ .dql-app-research-table {
3979
+ margin-top: 10px;
3980
+ overflow: auto;
3981
+ border: 1px solid var(--dql-app-line);
3982
+ border-radius: 8px;
3983
+ background: var(--dql-app-surface);
3984
+ }
3985
+
3986
+ .dql-app-research-table table {
3987
+ width: 100%;
3988
+ border-collapse: collapse;
3989
+ min-width: 520px;
3990
+ }
3991
+
3992
+ .dql-app-research-table th,
3993
+ .dql-app-research-table td {
3994
+ padding: 8px 9px;
3995
+ border-bottom: 1px solid var(--dql-app-line);
3996
+ text-align: left;
3997
+ font-size: 11.5px;
3998
+ white-space: nowrap;
3999
+ }
4000
+
4001
+ .dql-app-research-table th {
4002
+ color: var(--dql-app-muted);
4003
+ background: var(--dql-app-control);
4004
+ font-weight: 850;
4005
+ }
4006
+
4007
+ .dql-app-research-next {
4008
+ display: flex;
4009
+ gap: 7px;
4010
+ flex-wrap: wrap;
4011
+ margin-top: 10px;
4012
+ }
4013
+
4014
+ .dql-app-simple-list,
4015
+ .dql-app-settings-grid { display: grid; gap: 10px; }
4016
+ .dql-app-settings-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
4017
+ .dql-app-panel-card {
4018
+ border: 1px solid var(--dql-app-line);
4019
+ border-radius: 8px;
4020
+ background: var(--dql-app-surface);
4021
+ padding: 13px;
4022
+ display: flex;
4023
+ gap: 10px;
4024
+ align-items: flex-start;
4025
+ }
4026
+
4027
+ .dql-app-panel-card > span {
4028
+ width: 30px;
4029
+ height: 30px;
4030
+ border-radius: 7px;
4031
+ display: inline-flex;
4032
+ align-items: center;
4033
+ justify-content: center;
4034
+ color: var(--dql-app-accent);
4035
+ background: var(--dql-app-accent-soft);
4036
+ flex: none;
4037
+ }
4038
+
4039
+ .dql-app-panel-card b { display: block; }
4040
+ .dql-app-panel-card span:last-child { color: var(--dql-app-muted); font-size: 12px; }
4041
+ .dql-app-empty {
4042
+ min-height: 260px;
4043
+ border: 1px dashed var(--dql-app-line-2);
4044
+ border-radius: 8px;
4045
+ background: var(--dql-app-surface);
4046
+ color: var(--dql-app-faint);
4047
+ display: flex;
4048
+ flex-direction: column;
4049
+ align-items: center;
4050
+ justify-content: center;
4051
+ text-align: center;
4052
+ gap: 8px;
4053
+ padding: 28px;
4054
+ }
4055
+
4056
+ .dql-app-empty.compact { min-height: 120px; padding: 18px; }
4057
+ .dql-app-empty b { color: var(--dql-app-ink); }
4058
+ .dql-app-empty span { max-width: 440px; font-size: 12px; line-height: 1.45; }
4059
+ .dql-app-modal-backdrop {
4060
+ position: fixed;
4061
+ inset: 0;
4062
+ z-index: 100;
4063
+ background: rgba(15, 23, 42, 0.36);
4064
+ display: flex;
4065
+ align-items: center;
4066
+ justify-content: center;
4067
+ padding: 24px;
4068
+ }
4069
+
4070
+ .dql-app-modal {
4071
+ width: min(480px, 94vw);
4072
+ border-radius: 8px;
4073
+ background: var(--dql-app-surface);
4074
+ box-shadow: 0 18px 60px rgba(15, 23, 42, 0.28);
4075
+ padding: 18px;
4076
+ display: grid;
4077
+ gap: 12px;
4078
+ }
4079
+
4080
+ .dql-app-modal h3 { margin: 0; }
4081
+ .dql-app-modal p { margin: 0; color: var(--dql-app-muted); font-size: 12px; }
4082
+ .dql-app-modal > div:last-child { display: flex; justify-content: flex-end; gap: 8px; }
4083
+ .dql-app-page-explore {
4084
+ display: grid;
4085
+ grid-template-columns: 22px 1fr;
4086
+ gap: 2px 8px;
4087
+ align-items: center;
4088
+ text-align: left;
4089
+ border: 1px solid var(--dql-app-line);
4090
+ border-radius: 8px;
4091
+ background: var(--dql-app-control);
4092
+ color: var(--dql-app-ink);
4093
+ padding: 9px 10px;
4094
+ cursor: pointer;
4095
+ }
4096
+ .dql-app-page-explore.on { border-color: var(--dql-app-accent); background: var(--dql-app-accent-soft); }
4097
+ .dql-app-page-explore > span { grid-row: 1 / span 2; display: grid; place-items: center; width: 18px; height: 18px; border: 1px solid var(--dql-app-line-2); border-radius: 5px; }
4098
+ .dql-app-page-explore.on > span { border-color: var(--dql-app-accent); color: var(--dql-app-accent); }
4099
+ .dql-app-page-explore b { font-size: 12px; }
4100
+ .dql-app-page-explore small,
4101
+ .dql-app-page-source-policy { color: var(--dql-app-muted); font-size: 10.5px; line-height: 1.35; }
4102
+
4103
+ @media (max-width: 1120px) {
4104
+ .dql-apps-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
4105
+ .dql-app-create-workspace,
4106
+ .dql-app-create-workspace.classic {
4107
+ grid-template-columns: 1fr;
4108
+ align-content: start;
4109
+ overflow: auto;
4110
+ }
4111
+ .dql-app-create-workspace .dql-app-panel {
4112
+ min-height: auto;
4113
+ border-right: 0;
4114
+ border-bottom: 1px solid var(--dql-app-line);
4115
+ }
4116
+ .dql-app-ai-start,
4117
+ .dql-app-ai-generated-grid {
4118
+ grid-template-columns: 1fr;
4119
+ }
4120
+ .dql-app-filterbar {
4121
+ flex-wrap: nowrap;
4122
+ gap: 6px;
4123
+ padding: 7px 22px;
4124
+ overflow-x: auto;
4125
+ }
4126
+ .dql-app-filter-note {
4127
+ width: 30px;
4128
+ height: 30px;
4129
+ justify-content: center;
4130
+ gap: 0;
4131
+ border: 1px solid var(--dql-app-line);
4132
+ border-radius: 8px;
4133
+ background: var(--dql-app-control);
4134
+ font-size: 0;
4135
+ flex: 0 0 auto;
4136
+ }
4137
+ .dql-app-filter-note svg {
4138
+ width: 14px;
4139
+ height: 14px;
4140
+ }
4141
+ .dql-app-filter-select,
4142
+ .dql-app-toggle {
4143
+ flex: 0 0 auto;
4144
+ }
4145
+ .dql-app-toggle {
4146
+ gap: 6px;
4147
+ font-weight: 750;
4148
+ }
4149
+ .dql-app-review-backlog-grid {
4150
+ grid-template-columns: 1fr;
4151
+ }
4152
+ }
4153
+
4154
+ @media (max-width: 900px) {
4155
+ .dql-app-view-layout { grid-template-columns: 1fr; }
4156
+ .dql-app-view-topbar {
4157
+ align-content: flex-start;
4158
+ align-items: flex-start;
4159
+ min-height: 132px;
4160
+ row-gap: 8px;
4161
+ }
4162
+ .dql-app-topbar-divider {
4163
+ display: none;
4164
+ }
4165
+ .dql-app-topbar-filters {
4166
+ flex: 1 1 100%;
4167
+ order: 2;
4168
+ }
4169
+ .dql-app-filter-row { align-items: stretch; }
4170
+ .dql-app-filter-row-copy, .dql-app-filter-row-actions { width: 100%; }
4171
+ .dql-app-filter-row-actions { justify-content: flex-end; }
4172
+ .dql-app-view-actions {
4173
+ flex: 1 1 100%;
4174
+ justify-content: flex-start;
4175
+ margin-left: 0;
4176
+ order: 3;
4177
+ }
4178
+ .dql-app-research-shell {
4179
+ grid-template-columns: 1fr;
4180
+ }
4181
+ .dql-app-research-detail {
4182
+ order: 1;
4183
+ }
4184
+ .dql-app-research-list {
4185
+ order: 2;
4186
+ }
4187
+ .dql-app-explain-panel {
4188
+ position: static;
4189
+ width: 100%;
4190
+ max-width: none;
4191
+ height: min(680px, calc(100vh - 24px));
4192
+ resize: none;
4193
+ max-height: none;
4194
+ }
4195
+ .dql-app-explain-panel[data-expanded="true"] {
4196
+ width: 100%;
4197
+ max-width: none;
4198
+ }
4199
+ }
4200
+
4201
+ @media (max-width: 760px) {
4202
+ .dql-apps-wrap,
4203
+ .dql-app-view-wrap {
4204
+ width: min(100% - 16px, calc(100vw - 104px));
4205
+ max-width: calc(100vw - 104px);
4206
+ margin: 0 auto;
4207
+ padding-bottom: 48px;
4208
+ }
4209
+ .dql-apps-libbar,
4210
+ .dql-app-buildbar,
4211
+ .dql-app-view-topbar,
4212
+ .dql-app-filterbar {
4213
+ align-items: stretch;
4214
+ flex-direction: column;
4215
+ overflow-x: visible;
4216
+ }
4217
+ .dql-app-filter-note {
4218
+ width: auto;
4219
+ height: auto;
4220
+ margin-left: 0;
4221
+ justify-content: flex-start;
4222
+ gap: 6px;
4223
+ font-size: 11px;
4224
+ }
4225
+ .dql-apps-grid,
4226
+ .dql-app-form-grid.two,
4227
+ .dql-app-settings-grid,
4228
+ .dql-app-ai-filter-preview { grid-template-columns: 1fr; }
4229
+ .dql-apps-ai-entry-box {
4230
+ grid-template-columns: 1fr;
4231
+ }
4232
+ .dql-apps-ai-entry-box button {
4233
+ width: 100%;
4234
+ }
4235
+ .dql-apps-ai-entry-foot {
4236
+ align-items: stretch;
4237
+ flex-direction: column;
4238
+ }
4239
+ .dql-apps-ai-entry-secondary {
4240
+ justify-content: center;
4241
+ }
4242
+ .dql-app-create-workspace.clean {
4243
+ padding: 16px;
4244
+ }
4245
+ .dql-app-ai-start-card {
4246
+ padding: 15px;
4247
+ }
4248
+ .dql-app-ai-start-card textarea {
4249
+ min-height: 150px;
4250
+ font-size: 15px;
4251
+ padding-bottom: 48px;
4252
+ }
4253
+ .dql-app-ai-start-send {
4254
+ right: 14px;
4255
+ bottom: 14px;
4256
+ }
4257
+ .dql-app-ai-generated-head {
4258
+ align-items: stretch;
4259
+ flex-direction: column;
4260
+ }
4261
+ .dql-app-mode-seg { margin: 0; width: 100%; }
4262
+ .dql-app-mode-seg button { flex: 1; }
4263
+ .dql-app-build-actions,
4264
+ .dql-app-view-actions { margin-left: 0; width: 100%; flex-wrap: wrap; }
4265
+ .dql-app-nav-row {
4266
+ width: 100%;
4267
+ justify-content: flex-start;
4268
+ flex-wrap: nowrap;
4269
+ overflow-x: auto;
4270
+ padding-bottom: 2px;
4271
+ }
4272
+ .dql-app-section-tabs {
4273
+ flex: 0 0 auto;
4274
+ max-width: none;
4275
+ }
4276
+ .dql-app-section-tabs button {
4277
+ min-width: auto;
4278
+ white-space: nowrap;
4279
+ }
4280
+ .dql-app-section-tabs .dql-app-tab-label {
4281
+ display: inline;
4282
+ }
4283
+ .dql-app-explain-panel {
4284
+ order: -1;
4285
+ min-width: 0;
4286
+ height: min(620px, calc(100vh - 160px));
4287
+ min-height: 420px;
4288
+ margin-bottom: 12px;
4289
+ }
4290
+ .dql-app-assistant-top {
4291
+ grid-template-columns: minmax(0, 1fr);
4292
+ align-items: stretch;
4293
+ }
4294
+ .dql-app-assistant-focus {
4295
+ flex: 1 1 100%;
4296
+ }
4297
+ .dql-app-assistant-focus select {
4298
+ width: 100%;
4299
+ max-width: none;
4300
+ }
4301
+ .dql-app-assistant-context-btn {
4302
+ position: static;
4303
+ justify-self: start;
4304
+ }
4305
+ .dql-app-direct-ask-row {
4306
+ grid-template-columns: minmax(0, 1fr);
4307
+ }
4308
+ .dql-app-direct-ask-row button {
4309
+ width: 100%;
4310
+ }
4311
+ .dql-app-page-picker {
4312
+ flex: 0 0 min(100%, 360px);
4313
+ }
4314
+ .dql-app-page-picker select { min-width: 0; max-width: 100%; }
4315
+ .dql-app-report-hero {
4316
+ padding: 18px 16px 16px;
4317
+ }
4318
+ .dql-app-report-status-row {
4319
+ align-items: flex-start;
4320
+ flex-direction: column;
4321
+ }
4322
+ .dql-app-report-hero h2 {
4323
+ font-size: 26px;
4324
+ line-height: 1.08;
4325
+ overflow-wrap: anywhere;
4326
+ }
4327
+ .dql-app-report-section {
4328
+ padding: 18px 16px;
4329
+ }
4330
+ .dql-app-report-paper {
4331
+ padding: 18px 18px 14px;
4332
+ }
4333
+ .dql-app-report-evidence-story {
4334
+ margin: 4px 16px 10px;
4335
+ }
4336
+ .dql-app-report-appendix {
4337
+ padding: 0;
4338
+ }
4339
+ .dql-app-report-appendix summary {
4340
+ padding: 16px;
4341
+ }
4342
+ .dql-app-report-appendix .dql-app-research-evidence-head,
4343
+ .dql-app-report-appendix .dql-app-research-table,
4344
+ .dql-app-report-appendix .dql-app-research-sql-review,
4345
+ .dql-app-report-appendix .dql-app-research-assumptions,
4346
+ .dql-app-report-appendix .dql-app-research-code {
4347
+ margin-left: 16px;
4348
+ margin-right: 16px;
4349
+ }
4350
+ .dql-app-direct-quick,
4351
+ .dql-app-report-evidence-story,
4352
+ .dql-app-report-numbers {
4353
+ grid-template-columns: 1fr;
4354
+ }
4355
+ .dql-app-report-evidence-story .dql-app-report-numbers {
4356
+ grid-template-columns: 1fr;
4357
+ }
4358
+ .dql-app-report-context-line span {
4359
+ white-space: normal;
4360
+ }
4361
+ .dql-app-preview-tile,
4362
+ .dql-app-preview-tile.wide { grid-column: 1 / -1; }
4363
+ .dql-app-drilldown-grid {
4364
+ grid-template-columns: 1fr;
4365
+ }
4366
+ }
4367
+
4368
+ /* ══ Redesigned AI build flow (Apps Redesign.dc.html) ══ */
4369
+ @keyframes dql-app-fadein { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } }
4370
+ @keyframes dql-app-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
4371
+ @keyframes dql-app-orb { 0%, 100% { box-shadow: 0 0 0 0 rgba(107, 93, 211, 0); } 50% { box-shadow: 0 0 13px 1px rgba(107, 93, 211, 0.4); } }
4372
+ @keyframes dql-app-step { from { opacity: 0; transform: translateX(-4px); } to { opacity: 1; transform: none; } }
4373
+
4374
+ .dql-app-flow-scroll { min-height: 100%; }
4375
+ .dql-app-flow {
4376
+ width: min(880px, calc(100% - 48px));
4377
+ margin: 0 auto;
4378
+ padding: 28px 0 40px;
4379
+ display: flex;
4380
+ flex-direction: column;
4381
+ gap: 16px;
4382
+ }
4383
+ .dql-app-flow-head h2 { margin: 0; font-size: 18px; font-weight: 700; letter-spacing: -0.01em; color: var(--dql-app-ink); }
4384
+ .dql-app-flow-head p { margin: 3px 0 0; font-size: 12.5px; color: var(--dql-app-faint); }
4385
+ .dql-app-flow-bubble {
4386
+ align-self: flex-end;
4387
+ max-width: 78%;
4388
+ background: var(--dql-app-surface-muted);
4389
+ color: var(--dql-app-ink);
4390
+ border-radius: 16px 16px 4px 16px;
4391
+ padding: 10px 14px;
4392
+ font-size: 13px;
4393
+ line-height: 1.5;
4394
+ animation: dql-app-fadein 0.2s ease-out;
4395
+ }
4396
+ .dql-app-buildstream { display: flex; gap: 12px; animation: dql-app-fadein 0.25s ease-out; }
4397
+ .dql-app-buildorb {
4398
+ width: 30px; height: 30px; border-radius: 50%;
4399
+ background: var(--dql-app-accent-soft);
4400
+ border: 1px solid var(--dql-app-line);
4401
+ color: var(--dql-app-accent);
4402
+ display: inline-flex; align-items: center; justify-content: center;
4403
+ flex: none;
4404
+ animation: dql-app-orb 1.8s ease-in-out infinite;
4405
+ }
4406
+ .dql-app-buildorb.still { animation: none; }
4407
+ .dql-app-buildbody { display: flex; flex-direction: column; gap: 7px; padding-top: 4px; min-width: 0; }
4408
+ .dql-app-buildbody.wide { flex: 1; gap: 10px; }
4409
+ .dql-app-shimmer {
4410
+ font-size: 13.5px; font-weight: 700; letter-spacing: -0.01em;
4411
+ background-image: linear-gradient(100deg, var(--dql-app-ink) 25%, var(--dql-app-accent) 50%, var(--dql-app-ink) 75%);
4412
+ background-size: 220% 100%;
4413
+ -webkit-background-clip: text; background-clip: text;
4414
+ color: transparent; -webkit-text-fill-color: transparent;
4415
+ animation: dql-app-shimmer 2.4s linear infinite;
4416
+ }
4417
+ .dql-app-buildsteps { display: flex; flex-direction: column; gap: 5px; font-size: 11.5px; color: var(--dql-app-faint); line-height: 1.45; }
4418
+ .dql-app-buildsteps > span { display: inline-flex; align-items: center; gap: 6px; animation: dql-app-step 0.3s ease-out both; }
4419
+ .dql-app-buildsteps .ok { color: var(--dql-app-green); flex: none; }
4420
+ .dql-app-buildsteps code { font-family: var(--font-mono); font-size: 10.5px; }
4421
+ .dql-app-buildsteps .dot { width: 5px; height: 5px; border-radius: 999px; background: var(--dql-app-accent); margin: 0 3px; flex: none; }
4422
+ .dql-app-proposal-lede { font-size: 13.5px; line-height: 1.6; color: var(--dql-app-ink); }
4423
+ .dql-app-buildbrief-name {
4424
+ display: grid;
4425
+ grid-template-columns: auto minmax(180px, 1fr);
4426
+ align-items: center;
4427
+ gap: 9px;
4428
+ color: var(--dql-app-faint);
4429
+ font-size: 10.5px;
4430
+ font-weight: 750;
4431
+ }
4432
+ .dql-app-buildbrief-name input {
4433
+ min-width: 0;
4434
+ border: 1px solid var(--dql-app-line);
4435
+ border-radius: 7px;
4436
+ background: var(--dql-app-control);
4437
+ color: var(--dql-app-ink);
4438
+ padding: 6px 8px;
4439
+ font: 12px var(--font-ui);
4440
+ }
4441
+ .dql-app-buildbrief-edit {
4442
+ border: 1px solid var(--dql-app-line);
4443
+ border-radius: 8px;
4444
+ background: var(--dql-app-surface);
4445
+ padding: 7px 9px;
4446
+ }
4447
+ .dql-app-buildbrief-edit summary {
4448
+ color: var(--dql-app-muted);
4449
+ cursor: pointer;
4450
+ font-size: 11px;
4451
+ font-weight: 750;
4452
+ }
4453
+ .dql-app-buildbrief-edit > div { display: grid; gap: 6px; margin-top: 8px; }
4454
+ .dql-app-buildbrief-edit label { display: grid; grid-template-columns: minmax(0, 1fr) 130px; gap: 7px; }
4455
+ .dql-app-buildbrief-edit input,
4456
+ .dql-app-buildbrief-edit select {
4457
+ min-width: 0;
4458
+ border: 1px solid var(--dql-app-line);
4459
+ border-radius: 6px;
4460
+ background: var(--dql-app-control);
4461
+ color: var(--dql-app-ink);
4462
+ padding: 5px 7px;
4463
+ font: 11px var(--font-ui);
4464
+ }
4465
+ .dql-app-proposal-card {
4466
+ border: 1px solid var(--dql-app-line);
4467
+ border-radius: 11px;
4468
+ background: var(--dql-app-surface);
4469
+ overflow: hidden;
4470
+ }
4471
+ .dql-app-proposal-row {
4472
+ display: flex; align-items: center; gap: 10px;
4473
+ width: 100%;
4474
+ padding: 10px 13px;
4475
+ border: 0; border-bottom: 1px solid var(--dql-app-line);
4476
+ background: var(--dql-app-surface);
4477
+ cursor: pointer; text-align: left; font-family: inherit;
4478
+ }
4479
+ .dql-app-proposal-row:hover { background: var(--dql-app-canvas); }
4480
+ .dql-app-proposal-row.off { background: var(--dql-app-canvas); }
4481
+ .dql-app-prop-check {
4482
+ width: 16px; height: 16px; border-radius: 4.5px;
4483
+ border: 1.5px solid var(--dql-app-line-2);
4484
+ background: var(--dql-app-surface);
4485
+ color: #fff;
4486
+ display: inline-flex; align-items: center; justify-content: center;
4487
+ flex: none;
4488
+ }
4489
+ .dql-app-prop-check.on { border-color: var(--dql-app-accent); background: var(--dql-app-accent); }
4490
+ .dql-app-prop-glyph {
4491
+ width: 26px; height: 26px; border-radius: 6px;
4492
+ background: var(--dql-app-accent-soft); color: var(--dql-app-accent);
4493
+ display: inline-flex; align-items: center; justify-content: center;
4494
+ flex: none; font-size: 13px;
4495
+ }
4496
+ .dql-app-prop-glyph.green { background: var(--dql-app-green-soft); color: var(--dql-app-green); }
4497
+ .dql-app-prop-name { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
4498
+ .dql-app-prop-name b { font-size: 12.5px; font-weight: 650; color: var(--dql-app-ink); font-family: var(--font-mono); }
4499
+ .dql-app-prop-name small { font-size: 11px; color: var(--dql-app-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4500
+ .dql-app-prop-badge {
4501
+ flex: none; border-radius: 999px; padding: 2px 8px;
4502
+ font-size: 9.5px; font-weight: 700;
4503
+ }
4504
+ .dql-app-prop-badge.certified { border: 1px solid rgba(46, 139, 87, 0.33); color: var(--dql-app-green); background: var(--dql-app-green-soft); }
4505
+ .dql-app-prop-badge.draft { border: 1px solid rgba(178, 107, 31, 0.31); color: var(--dql-app-orange); background: var(--dql-app-orange-soft); }
4506
+ .dql-app-prop-viz { flex: none; font-size: 10.5px; color: var(--dql-app-faint); }
4507
+ .dql-app-addmore {
4508
+ display: flex; align-items: center; gap: 7px;
4509
+ width: 100%; padding: 10px 13px;
4510
+ border: 0; background: none;
4511
+ color: var(--dql-app-accent);
4512
+ font-size: 12px; font-weight: 650; cursor: pointer; font-family: inherit; text-align: left;
4513
+ }
4514
+ .dql-app-addmore:hover { background: var(--dql-app-accent-soft); }
4515
+ .dql-app-addmore-panel { border-top: 1px solid var(--dql-app-line); animation: dql-app-fadein 0.15s ease-out; }
4516
+ .dql-app-addmore-search {
4517
+ display: flex; align-items: center; gap: 7px;
4518
+ padding: 9px 13px;
4519
+ border-bottom: 1px solid var(--dql-app-line);
4520
+ background: var(--dql-app-canvas);
4521
+ color: var(--dql-app-faint);
4522
+ }
4523
+ .dql-app-addmore-search input {
4524
+ flex: 1; border: 0; background: none; outline: none;
4525
+ font-size: 12px; font-family: inherit; color: var(--dql-app-ink); min-width: 0;
4526
+ }
4527
+ .dql-app-addmore-row {
4528
+ display: flex; align-items: center; gap: 9px;
4529
+ width: 100%; padding: 8px 13px;
4530
+ border: 0; border-bottom: 1px solid var(--dql-app-line);
4531
+ background: none; cursor: pointer; text-align: left; font-family: inherit;
4532
+ color: var(--dql-app-accent);
4533
+ }
4534
+ .dql-app-addmore-row:hover { background: var(--dql-app-accent-soft); }
4535
+ .dql-app-addmore-row span { flex: 1; min-width: 0; font-size: 12px; font-family: var(--font-mono); color: var(--dql-app-ink); }
4536
+ .dql-app-addmore-row small { flex: none; font-size: 10.5px; color: var(--dql-app-faint); }
4537
+ .dql-app-addmore-hint { padding: 9px 13px; font-size: 11px; color: var(--dql-app-faint); }
4538
+ .dql-app-detected { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 11px; color: var(--dql-app-faint); }
4539
+ .dql-app-detected-label { font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; font-size: 9.5px; }
4540
+ .dql-app-detected-pill {
4541
+ border: 1px solid var(--dql-app-line);
4542
+ background: var(--dql-app-surface);
4543
+ border-radius: 999px; padding: 2.5px 9px;
4544
+ color: var(--dql-app-muted);
4545
+ }
4546
+ .dql-app-flow-gaps { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: var(--dql-app-orange); }
4547
+ .dql-app-flow-gaps span { display: inline-flex; align-items: center; gap: 6px; }
4548
+ .dql-app-flow-actions { display: flex; align-items: center; gap: 8px; }
4549
+ .dql-app-flow-build {
4550
+ display: inline-flex; align-items: center; gap: 7px;
4551
+ height: 34px; padding: 0 16px;
4552
+ border-radius: 8px; border: 0;
4553
+ background: var(--dql-app-accent); color: #fff;
4554
+ font-size: 12.5px; font-weight: 650; cursor: pointer; font-family: inherit;
4555
+ box-shadow: 0 1px 5px rgba(107, 93, 211, 0.3);
4556
+ }
4557
+ .dql-app-flow-build:hover { filter: brightness(0.95); }
4558
+ .dql-app-flow-build:disabled { opacity: 0.55; cursor: default; }
4559
+ .dql-app-flow-reset {
4560
+ height: 34px; padding: 0 13px;
4561
+ border-radius: 8px; border: 1px solid var(--dql-app-line);
4562
+ background: var(--dql-app-surface); color: var(--dql-app-muted);
4563
+ font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit;
4564
+ }
4565
+ .dql-app-flow-reset:hover { background: var(--dql-app-surface-muted); }
4566
+ /* View / Edit segmented toggle (app workspace top bar) */
4567
+ .dql-app-modeseg {
4568
+ display: inline-flex; align-items: center; gap: 2px;
4569
+ padding: 2px;
4570
+ border: 1px solid var(--dql-app-line);
4571
+ border-radius: 7px;
4572
+ background: var(--dql-app-canvas);
4573
+ }
4574
+ .dql-app-modeseg button {
4575
+ border: 0; border-radius: 5px;
4576
+ padding: 4px 12px;
4577
+ font-size: 11.5px; font-weight: 600;
4578
+ cursor: pointer; font-family: inherit;
4579
+ display: inline-flex; align-items: center; gap: 5px;
4580
+ background: transparent; color: var(--dql-app-faint);
4581
+ }
4582
+ .dql-app-modeseg button.on { background: var(--dql-app-accent-soft); color: var(--dql-app-accent); }
4583
+ `;export{mo as AppsView};