@duckcodeailabs/dql-cli 1.12.10 → 1.12.11

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 (71) hide show
  1. package/dist/assets/dql-notebook/assets/{AgentAnswerCard-Dp4odOLE.js → AgentAnswerCard-CpL2kDCV.js} +1 -1
  2. package/dist/assets/dql-notebook/assets/{AgentLogPage-uvVs284-.js → AgentLogPage-hzHqpD3-.js} +1 -1
  3. package/dist/assets/dql-notebook/assets/{AiBuildDialog-DEUS19WF.js → AiBuildDialog-BQRWoxp9.js} +1 -1
  4. package/dist/assets/dql-notebook/assets/AiBuildResult-D9t_4sQl.js +33 -0
  5. package/dist/assets/dql-notebook/assets/{AiSidePanel-C7BZVSkM.js → AiSidePanel-BCQB9rVF.js} +1 -1
  6. package/dist/assets/dql-notebook/assets/{AnalyticsHome-4TgtH6SB.js → AnalyticsHome-Ba4Ve_Gd.js} +1 -1
  7. package/dist/assets/dql-notebook/assets/AppsView-CdAT9BOq.js +4466 -0
  8. package/dist/assets/dql-notebook/assets/{BlockStudio-DUXN3MKz.js → BlockStudio-Brg4fwn5.js} +13 -13
  9. package/dist/assets/dql-notebook/assets/{BusinessArtifactView-D8FIgrkF.js → BusinessArtifactView-CnTbFVGT.js} +1 -1
  10. package/dist/assets/dql-notebook/assets/DbtFirstModelingPage-CQe2FUZq.js +22 -0
  11. package/dist/assets/dql-notebook/assets/{GitPage-BS2sm9zh.js → GitPage-DHyDBChc.js} +1 -1
  12. package/dist/assets/dql-notebook/assets/{GlobalAiRail-B_MZsB0z.js → GlobalAiRail-Cys4n_rq.js} +1 -1
  13. package/dist/assets/dql-notebook/assets/GovernedContextPage-DyKoDSZ2.js +7 -0
  14. package/dist/assets/dql-notebook/assets/{HelpDocsPage-Bc5pLakt.js → HelpDocsPage-CL0vbSER.js} +3 -3
  15. package/dist/assets/dql-notebook/assets/{HomePage-DQSo-K4y.js → HomePage-DzAucwBW.js} +9 -4
  16. package/dist/assets/dql-notebook/assets/{LineageDAG-RdpWmGmR.js → LineageDAG-QHqd_AM5.js} +1 -1
  17. package/dist/assets/dql-notebook/assets/{LineageDetailView-CZEx2r1H.js → LineageDetailView-DdVH-nz6.js} +1 -1
  18. package/dist/assets/dql-notebook/assets/{LineageDrawer-P7ZdOW8-.js → LineageDrawer-BvrVZNKY.js} +1 -1
  19. package/dist/assets/dql-notebook/assets/LineagePathBreadcrumb-CSut-zvm.js +14 -0
  20. package/dist/assets/dql-notebook/assets/{MiniLineageGraph-Ctp_yFh8.js → MiniLineageGraph-zg_1wW3M.js} +1 -1
  21. package/dist/assets/dql-notebook/assets/NewBlockModal-9cDletl-.js +1 -0
  22. package/dist/assets/dql-notebook/assets/NewNotebookModal-V6de8L4d.js +46 -0
  23. package/dist/assets/dql-notebook/assets/NotebookEditor-EZ0pfWVs.js +200 -0
  24. package/dist/assets/dql-notebook/assets/{ReadinessPage-C8hATaT_.js → ReadinessPage-BaGvjyfd.js} +1 -1
  25. package/dist/assets/dql-notebook/assets/{SetupOnboarding-DX2f53J2.js → SetupOnboarding-Bg-MjbC9.js} +2 -2
  26. package/dist/assets/dql-notebook/assets/{TrustBadge-DPnKzRSY.js → TrustBadge-DGuHB8kP.js} +1 -1
  27. package/dist/assets/dql-notebook/assets/{UnifiedAgentRunPanel-CwxQ4T19.js → UnifiedAgentRunPanel-BlWAVEwO.js} +17 -17
  28. package/dist/assets/dql-notebook/assets/{answer-to-notebook-Bm9oByWA.js → answer-to-notebook-BDzY4MuQ.js} +1 -1
  29. package/dist/assets/dql-notebook/assets/{arrow-left-D2FbLWqh.js → arrow-left-IjlnAihE.js} +1 -1
  30. package/dist/assets/dql-notebook/assets/{arrow-right-OYItAZ-s.js → arrow-right-BI4cXgOY.js} +2 -2
  31. package/dist/assets/dql-notebook/assets/{book-open-text-BnnirfAc.js → book-open-text-i6xhxu_I.js} +1 -1
  32. package/dist/assets/dql-notebook/assets/{bot-BJNxPYFm.js → bot-C6DE7Q6m.js} +1 -1
  33. package/dist/assets/dql-notebook/assets/{chevron-up-DM5LX-26.js → chevron-up-DSEILnDs.js} +2 -2
  34. package/dist/assets/dql-notebook/assets/{circle-x-Dic_-4tF.js → circle-x-BoAorVSm.js} +1 -1
  35. package/dist/assets/dql-notebook/assets/{codemirror-1_I9gm6Z.js → codemirror-DXt7RW72.js} +1 -1
  36. package/dist/assets/dql-notebook/assets/{dagre.esm-C9zxjHHX.js → dagre.esm-CycymVj6.js} +1 -1
  37. package/dist/assets/dql-notebook/assets/{external-link-DHxAcoCE.js → external-link-ZwE5iHsX.js} +1 -1
  38. package/dist/assets/dql-notebook/assets/{grip-vertical-02I-EOjL.js → grip-vertical-Dnp2st8l.js} +1 -1
  39. package/dist/assets/dql-notebook/assets/index-BTuliKhK.js +634 -0
  40. package/dist/assets/dql-notebook/assets/{link-2-Delh-lai.js → link-2-CTKe6Snr.js} +2 -2
  41. package/dist/assets/dql-notebook/assets/{list-tree-BrIZg6l6.js → list-tree-Ced8e_S1.js} +1 -1
  42. package/dist/assets/dql-notebook/assets/{maximize-2-CQOA-bbN.js → maximize-2-Cojc6867.js} +1 -1
  43. package/dist/assets/dql-notebook/assets/{minimize-2-CUDBPkwe.js → minimize-2-CBIAE0XH.js} +1 -1
  44. package/dist/assets/dql-notebook/assets/{panel-right-open-CwhZfkKJ.js → panel-right-open-po3bWSeL.js} +2 -2
  45. package/dist/assets/dql-notebook/assets/{pencil-Cf6-MgpT.js → pencil-Cb45c6WU.js} +2 -2
  46. package/dist/assets/dql-notebook/assets/{rotate-ccw-DndbJAiz.js → rotate-ccw-B9v1LTJ0.js} +2 -2
  47. package/dist/assets/dql-notebook/assets/{semantic-fields-DwKPY_mU.js → semantic-fields-B6ii0an0.js} +1 -1
  48. package/dist/assets/dql-notebook/assets/{star-DvcMC9wZ.js → star-CO4tfaDq.js} +2 -2
  49. package/dist/assets/dql-notebook/assets/{triangle-alert-DUf4Ook0.js → triangle-alert-BSdIu2El.js} +1 -1
  50. package/dist/assets/dql-notebook/assets/{usePersistedAgentThreadId-DbdBi0oH.js → usePersistedAgentThreadId-CkVFrrjk.js} +2 -2
  51. package/dist/assets/dql-notebook/assets/{user-round-DSt0xU3K.js → user-round-BfrV8U-W.js} +3 -3
  52. package/dist/assets/dql-notebook/assets/{wand-sparkles-ro8Cq0ro.js → wand-sparkles-BgTxZNBc.js} +1 -1
  53. package/dist/assets/dql-notebook/assets/{workflow-DVJXehjU.js → workflow--2ycp0yy.js} +2 -2
  54. package/dist/assets/dql-notebook/assets/{wrench-DxUnoHtz.js → wrench-LMCrpa9_.js} +1 -1
  55. package/dist/assets/dql-notebook/assets/{x-9Gtb3EAd.js → x-CeNgQwGm.js} +2 -2
  56. package/dist/assets/dql-notebook/index.html +1 -1
  57. package/dist/local-runtime.d.ts +40 -1
  58. package/dist/local-runtime.d.ts.map +1 -1
  59. package/dist/local-runtime.js +602 -172
  60. package/dist/local-runtime.js.map +1 -1
  61. package/dist/package.json +10 -10
  62. package/package.json +10 -10
  63. package/dist/assets/dql-notebook/assets/AiBuildResult-B9KmBRsh.js +0 -33
  64. package/dist/assets/dql-notebook/assets/AppsView-CnfNtk5W.js +0 -4466
  65. package/dist/assets/dql-notebook/assets/DbtFirstModelingPage-DR8hTZ95.js +0 -22
  66. package/dist/assets/dql-notebook/assets/GovernedContextPage-CNM5UCAH.js +0 -7
  67. package/dist/assets/dql-notebook/assets/LineagePathBreadcrumb-DTUMFkJ8.js +0 -14
  68. package/dist/assets/dql-notebook/assets/NewBlockModal-BLtjuWGy.js +0 -1
  69. package/dist/assets/dql-notebook/assets/NewNotebookModal-xgaKB2kI.js +0 -46
  70. package/dist/assets/dql-notebook/assets/NotebookEditor-D6RgLQw-.js +0 -202
  71. package/dist/assets/dql-notebook/assets/index-Ca3UeUWI.js +0 -644
@@ -1,4466 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/UnifiedAgentRunPanel-CwxQ4T19.js","assets/index-Ca3UeUWI.js","assets/react-CRB3T2We.js","assets/index-DKu4CZt3.css","assets/AgentAnswerCard-Dp4odOLE.js","assets/usePersistedAgentThreadId-DbdBi0oH.js","assets/TrustBadge-DPnKzRSY.js","assets/AiBuildResult-B9KmBRsh.js","assets/user-round-DSt0xU3K.js","assets/triangle-alert-DUf4Ook0.js","assets/rotate-ccw-DndbJAiz.js","assets/x-9Gtb3EAd.js","assets/pencil-Cf6-MgpT.js","assets/list-tree-BrIZg6l6.js","assets/wrench-DxUnoHtz.js","assets/arrow-right-OYItAZ-s.js","assets/chevron-up-DM5LX-26.js"])))=>i.map(i=>d[i]);
2
- import{g as We,u as At,t as Ne,r as u,a as Z,j as t,G as Er,P as kt,S as Re,o as ma,n as ba,an as va,aG as Ut,h as Fe,T as ya,aH as Ye,ax as qa,ai as Be,f as nt,B as er,b as Lr,aI as _r,aD as wa,k as tr}from"./index-Ca3UeUWI.js";import{A as Mr,a as Qt,b as ja}from"./AiSidePanel-C7BZVSkM.js";import{u as Or,C as ka,c as Sa,i as za,T as Aa,b as Ca,e as Na,S as Ia,A as Ta}from"./usePersistedAgentThreadId-DbdBi0oH.js";import{c as $a,r as Fr}from"./semantic-fields-DwKPY_mU.js";import{W as Wr}from"./wand-sparkles-ro8Cq0ro.js";import{B as Ct}from"./bot-BJNxPYFm.js";import{G as Pa}from"./grip-vertical-02I-EOjL.js";import{T as Qe}from"./triangle-alert-DUf4Ook0.js";import{M as Ra}from"./maximize-2-CQOA-bbN.js";import{A as Vr}from"./arrow-left-D2FbLWqh.js";import{W as Me}from"./workflow-DVJXehjU.js";import{P as Hr}from"./pencil-Cf6-MgpT.js";import{S as Ba}from"./star-DvcMC9wZ.js";import{B as Qr}from"./book-open-text-BnnirfAc.js";import"./react-CRB3T2We.js";import"./minimize-2-CUDBPkwe.js";import"./x-9Gtb3EAd.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 Ea=[["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"}]],La=We("calendar-days",Ea);/**
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 _a=[["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"}]],Kr=We("chart-column",_a);/**
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 Ma=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],rr=We("chart-line",Ma);/**
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 Oa=[["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"}]],Fa=We("chart-pie",Oa);/**
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 Wa=[["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"}]],Va=We("map-pin",Wa);/**
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 Ha=[["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"}]],Qa=We("share-2",Ha);/**
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 Ka=[["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"}]],Ga=We("sliders-horizontal",Ka);/**
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 Ya=[["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"}]],Xa=We("table-2",Ya),Ja=u.lazy(()=>Ut(()=>import("./UnifiedAgentRunPanel-CwxQ4T19.js").then(e=>e.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(e=>({default:e.UnifiedAgentRunPanel}))),Za="clamp(320px, calc(100vh - 220px), 760px)",ar=[{value:"table",label:"Table"},...ka];function Da(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 Gr=[{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 Ua({appId:e,dashboard:r,variables:a,editable:i=!1,embeddedHeader:n=!1,onDashboardChanged:l,selectedBlockId:s,onBlockFocus:o,onAskBlock:p,onOpenLineageNode:d,copilotOpen:f,onCopilotChange:x,onRunChange:c}){var ft;const{state:A}=At(),S=Ne[A.themeMode],[q,h]=u.useState(null),[T,z]=u.useState(null),Y=u.useRef(null),[$,k]=u.useState(!1),[L,M]=u.useState(null),[I,Q]=u.useState(!1),re=Or(`app:${e}:${r.id}`),[D,_]=u.useState(!1),[V,W]=u.useState([]),[de,C]=u.useState(""),[le,we]=u.useState(!1),[B,ee]=u.useState(null),[ne,he]=u.useState(!1),[X,K]=u.useState(!1),[me,pe]=u.useState(!1),[ye,ce]=u.useState(null),[be,J]=u.useState(""),[b,P]=u.useState(null),U=u.useRef(null),[G,N]=u.useState(!1),E=r.layout.cols,se=r.layout.rowHeight,ve=u.useMemo(()=>JSON.stringify(a??{}),[a]),oe=u.useMemo(()=>JSON.parse(ve),[ve]),ue=u.useMemo(()=>{const m=new Map;for(const j of(q==null?void 0:q.tiles)??[])m.set(j.tileId,j);return m},[q]),xe=u.useMemo(()=>i?r.layout.items:r.layout.items.filter(m=>!Si(m)),[r.layout.items,i]),ae=u.useMemo(()=>i?xe:zi(xe,ue,E),[xe,E,i,ue]),Ce=r.layout.items.length-xe.length,H=xe.length-ae.length,y=u.useMemo(()=>!i&&!r.story&&r.sections&&r.sections.length>0?[...r.sections].sort((m,j)=>m.order-j.order):null,[r.sections,r.story,i]),te=u.useMemo(()=>y?r.layout.items:null,[r.layout.items,y]),ie=u.useMemo(()=>i||y?null:Pi(ae,ue,oe),[i,oe,y,ue,ae]);u.useEffect(()=>{let m=!1;return k(!0),M(null),Z.runDashboard(e,r.id,oe).then(j=>{m||(h(j),z((j==null?void 0:j.story)??null),Y.current=(j==null?void 0:j.runId)??null,c==null||c(j),j||M("Dashboard run failed."),j!=null&&j.runId&&Z.getDashboardStory(e,r.id,j.runId).then(w=>{m||!w||Y.current!==w.runId||w.snapshotId!==j.snapshotId||w.filterFingerprint!==j.filterFingerprint||w.resultFingerprint!==j.resultFingerprint||w.personaFingerprint!==j.personaFingerprint||z(w.story)}))}).catch(j=>{m||(M(j instanceof Error?j.message:String(j)),c==null||c(null))}).finally(()=>{m||k(!1)}),()=>{m=!0}},[e,r.id,r.layout.items.length,c,oe,(ft=A.activePersona)==null?void 0:ft.userId]),u.useEffect(()=>{const m=j=>{const w=j.detail;(w==null?void 0:w.appId)!==e||w.dashboardId!==r.id||(Z.getDashboard(e,r.id).then(F=>{F!=null&&F.dashboard&&(l==null||l(F.dashboard))}),Z.runDashboard(e,r.id,oe).then(F=>{F&&(h(F),z(F.story),Y.current=F.runId,c==null||c(F))}))};return window.addEventListener("dql-app-dashboard-updated",m),()=>window.removeEventListener("dql-app-dashboard-updated",m)},[e,r.id,l,c,oe]),u.useEffect(()=>{const m=()=>N(window.innerWidth<760);return m(),window.addEventListener("resize",m),()=>window.removeEventListener("resize",m)},[]);const Le=u.useMemo(()=>{const m=r.layout.items.map(j=>{var fe,je,g,v,R;const w=ue.get(j.i),F=j.block?"blockId"in j.block?j.block.blockId:j.block.ref:j.semantic?`semantic:${j.semantic.id}`:j.aiPin?`aiPin:${j.aiPin.id}`:"text";return{title:j.title,blockRef:F,viz:j.viz.type,certificationStatus:w==null?void 0:w.certificationStatus,status:w==null?void 0:w.status,rowCount:(fe=w==null?void 0:w.result)==null?void 0:fe.rowCount,columns:(g=(je=w==null?void 0:w.result)==null?void 0:je.columns)==null?void 0:g.slice(0,8),sampleRows:Da((v=w==null?void 0:w.result)==null?void 0:v.rows,(R=w==null?void 0:w.result)==null?void 0:R.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:q?{runId:q.runId,snapshotId:q.snapshotId,filterFingerprint:q.filterFingerprint,resultFingerprint:q.resultFingerprint,personaFingerprint:q.personaFingerprint,story:q.story,facts:q.facts}:null,tiles:m},null,2)},[e,r,q,oe,ue]),Se=u.useCallback(async m=>{he(!0);const j={...r,layout:{...r.layout,items:m}},w=await Z.patchDashboardLayout(e,r.id,j.layout);he(!1),w.ok?l==null||l(w.dashboard):M(w.error)},[e,r,l]),tt=u.useCallback(async()=>{_(!0);const m=await Z.getAppEditorCatalog(e);W((m==null?void 0:m.blocks)??[])},[e]),ct=u.useCallback(async m=>{const j=dt(m.chartType),w=await Z.recommendDashboardTile(e,r.id,{blockRef:m.name,appAudience:r.metadata.audience,prompt:`${r.metadata.title} ${m.name} ${m.description}`,defaultVisualization:j}),F=or(j,E),fe={i:Mt(r,m.name),..._t(r,F),block:{blockId:m.name},viz:{type:j},...w.ok?{display:w.display,filterBindings:"filterBindings"in w?w.filterBindings:void 0,parameterBindings:"parameterBindings"in w?w.parameterBindings:void 0,sourceEvidence:"sourceEvidence"in w?w.sourceEvidence:void 0,trustState:"trustState"in w?w.trustState:w.display.trustState,reviewStatus:"reviewStatus"in w?w.reviewStatus:w.display.reviewStatus}:{},title:m.name};await Se([...r.layout.items,fe]),_(!1)},[e,E,r,Se]),_e=u.useCallback(async()=>{ce("text"),J("")},[]),Ve=u.useCallback(async()=>{ce("heading"),J("")},[]),Nt=u.useCallback(async()=>{var j;const m=be.trim();if(!(!m||!ye)){if(ye==="heading")await Se([...r.layout.items,{i:Mt(r,"section"),..._t(r,Ie("wide",E,"heading")),text:{markdown:m},viz:{type:"heading"},display:mr("heading",m),title:m}]);else{const w=((j=m.split(/\r?\n/)[0])==null?void 0:j.slice(0,60))||"Summary";await Se([...r.layout.items,{i:Mt(r,"text"),..._t(r,Ie("standard",E,"text")),text:{markdown:m},viz:{type:"text"},display:mr("text",w),title:w}])}ce(null),J("")}},[E,r,Se,ye,be]),He=u.useCallback(async(m,j)=>{const w=j===null?r.layout.items.filter(F=>F.i!==m):r.layout.items.map(F=>F.i===m?{...F,...j}:F);await Se(wt(w,E))},[E,r.layout.items,Se]),It=u.useCallback(async(m,j)=>{const w=U.current,F=r.layout.items.find(ht=>ht.i===m);if(!w||!F)return;const fe=w.getBoundingClientRect(),je=12,v=(fe.width-je*(E-1))/E+je,R=se+je,O=Math.round((j.clientX-fe.left)/v),ze=Math.round((j.clientY-fe.top)/R),Je={...F,x:St(O,0,Math.max(0,E-F.w)),y:Math.max(0,ze)};P(null);const gt=jn(r.layout.items,Je,E);await Se(wt(gt,E))},[E,r.layout.items,se,Se]),Tt=u.useCallback((m,j)=>{const w=U.current,F=r.layout.items.find(O=>O.i===m);if(!w||!F)return;const fe=w.getBoundingClientRect(),je=12,g=(fe.width-je*(E-1))/E,v=Math.round((j.clientX-fe.left)/(g+je)),R=Math.round((j.clientY-fe.top)/(se+je));P({tileId:m,x:St(v,0,Math.max(0,E-F.w)),y:Math.max(0,R),w:F.w,h:F.h})},[E,r.layout.items,se]),$t=u.useCallback(()=>P(null),[]),Pt=u.useCallback(async()=>{const m=r.layout.items;if(m.length===0)return;const j=[...m].map((w,F)=>({item:w,index:F})).sort((w,F)=>{const fe=Jt(w.item)-Jt(F.item);return fe!==0?fe:w.index-F.index}).map(({item:w})=>{const F=pr(w,E);return{...w,w:F.w,h:F.h}});await Se(wt(j,E))},[E,r.layout.items,Se]),ut=u.useCallback(async()=>{if(we(m=>!m),!B){const m=await Z.fetchScopedLineage({domain:r.metadata.domain,appId:e,dashboardId:r.id});ee(m)}},[e,r.id,r.metadata.domain,B]),Xe=u.useCallback(()=>{if(d){d(`dashboard:${e}/${r.id}`);return}ut()},[e,r.id,ut,d]),xt=x?!!f:I,rt=u.useCallback(()=>{if(K(!1),x){x(!0);return}Q(!0)},[x]),Rt=u.useCallback(()=>{if(K(!1),x){x(!f);return}Q(m=>!m)},[f,x]);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:Ki,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(fr,{open:X,onToggle:()=>K(m=>!m),buttonStyle:Qi,onCertifiedBlock:()=>{K(!1),tt()},onText:()=>{K(!1),_e()},onHeading:()=>{K(!1),Ve()},onAi:rt}),i&&r.layout.items.length>1&&t.jsx("button",{type:"button",onClick:()=>void Pt(),disabled:ne,style:Hi(!1),title:"Auto-arrange every tile into a clean, gap-free grid",children:t.jsx(Wr,{size:15,strokeWidth:2})}),!n&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",onClick:Rt,style:Ue(xt),children:[t.jsx(Ct,{size:14,strokeWidth:2}),xt?"Hide copilot":"AI Copilot"]}),t.jsxs("button",{type:"button",onClick:Xe,style:Ue(!1),title:"Open focused dashboard lineage",children:[t.jsx(Er,{size:14,strokeWidth:2}),"Lineage"]})]})]}),i&&t.jsx("div",{style:Gi,children:"Drag tiles, select a block for Copilot context, or use the tile controls for sizing and chart settings."}),!i&&T?t.jsx(ii,{story:T,onResearch:rt,onEvidence:Xe}):ie?t.jsx(ai,{story:ie}):null,ae.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:Ce>0||H>0?"No stakeholder-ready tiles yet":"Build this dashboard page"}),t.jsx("div",{style:{maxWidth:520,opacity:.68,lineHeight:1.45},children:Ce>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.":H>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(fr,{open:X,onToggle:()=>K(m=>!m),buttonLabel:"Add tile",buttonStyle:la,onCertifiedBlock:()=>{K(!1),tt()},onText:()=>{K(!1),_e()},onHeading:()=>{K(!1),Ve()},onAi:rt})})]}):y?t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:22},children:y.map(m=>{var v,R;const j=(v=y.find(O=>O.kind==="appendix"))==null?void 0:v.id,w=((R=y.find(O=>O.kind==="insight"))==null?void 0:R.id)??y[0].id,F=O=>O.sectionId&&y.some(ze=>ze.id===O.sectionId)?O.sectionId:(O.trustState==="review_required"||O.reviewStatus==="review_required")&&j?j:w,fe=(te??ae).filter(O=>F(O)===m.id);if(fe.length===0)return null;const je=Math.min(...fe.map(O=>O.y)),g=m.kind==="appendix";return t.jsxs("section",{"aria-label":m.title,children:[m.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:m.title}),g?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]}),m.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:m.narrative}):null]}):null,t.jsx("div",{style:{display:"grid",gridTemplateColumns:G?"minmax(0, 1fr)":`repeat(${E}, 1fr)`,gridAutoRows:G?"auto":`${se}px`,gap:12,...g?{opacity:.96}:{}},children:fe.map(O=>t.jsx(cr,{item:{...O,y:O.y-je},tile:ue.get(O.i),loading:$,error:L,themeMode:A.themeMode,editable:!1,narrow:G,cols:E,selected:!!(Te(O)&&Te(O)===s),onFocusBlock:o,onAskBlock:p,onMove:()=>{},onDragMove:()=>{},onDragEnd:()=>{},onPatch:ze=>void He(O.i,ze)},O.i))})]},m.id)})}):t.jsxs("div",{ref:U,style:{display:"grid",gridTemplateColumns:G?"minmax(0, 1fr)":`repeat(${E}, 1fr)`,gridAutoRows:G?"auto":`${se}px`,gap:12},children:[b&&!G&&t.jsx("div",{"aria-hidden":"true",style:{gridColumn:`${b.x+1} / span ${b.w}`,gridRow:`${b.y+1} / span ${b.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}}),ae.map(m=>t.jsx(cr,{item:m,tile:ue.get(m.i),loading:$,error:L,themeMode:A.themeMode,editable:i,narrow:G,cols:E,selected:!!(Te(m)&&Te(m)===s),onFocusBlock:o,onAskBlock:p,onMove:j=>void It(m.i,j),onDragMove:j=>Tt(m.i,j),onDragEnd:$t,onPatch:j=>void He(m.i,j)},m.i))]}),!i&&q?t.jsx(ni,{run:q,variables:oe}):null]}),le&&!d&&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:Za,position:"sticky",top:12,padding:12},children:t.jsx(wi,{lineage:B})}),I&&!x&&t.jsx(Mr,{t:S,title:"Dashboard AI",subtitle:"Scoped to this App dashboard first",expanded:me,onToggleExpanded:()=>pe(m=>!m),onClose:()=>{Q(!1),pe(!1)},floating:!0,ariaLabel:"Dashboard AI",style:Yi(me),children:t.jsx(u.Suspense,{fallback:t.jsx("div",{style:{padding:16,fontSize:12,color:S.textSecondary},children:"Loading Dashboard AI…"}),children:t.jsx(Ja,{themeMode:A.themeMode,title:"Dashboard AI",scopeHint:"Scoped to this App dashboard first",audience:"stakeholder",workspaceContext:{appId:e,dashboardId:r.id,dashboardContext:Le},initialMode:"auto",threadId:re.threadId,onThreadIdChange:re.onThreadIdChange},`${e}:${r.id}`)})}),D&&t.jsx(qi,{blocks:V,search:de,onSearch:C,onClose:()=>_(!1),onAdd:m=>void ct(m)}),ye&&t.jsx(yi,{kind:ye,value:be,onChange:J,onClose:()=>{ce(null),J("")},onSave:()=>void Nt()})]})}function cr({item:e,tile:r,loading:a,error:i,themeMode:n,editable:l,narrow:s,cols:o,selected:p,onFocusBlock:d,onAskBlock:f,onMove:x,onDragMove:c,onDragEnd:A,onPatch:S}){var he;const q=u.useRef(null),[h,T]=u.useState(null),[z,Y]=u.useState(!1),$=Te(e),k=!!(!l&&$&&f),L=$?`block:${$}`:e.semantic?`semantic:${e.semantic.id}`:e.aiPin?`aiPin:${e.aiPin.id}`:"text",M=dt(String(e.viz.type??"table")),I=Ee(e),Q=I==null?void 0:I.component,re=(I==null?void 0:I.insightTitle)||e.title||L,D=(r==null?void 0:r.tileType)==="aiPin"?((he=r.aiPin)==null?void 0:he.certification)==="certified"?"certified":"review_required":void 0,_=(I==null?void 0:I.trustState)??D??((r==null?void 0:r.certificationStatus)==="certified"?"certified":void 0),V=!!I,W=e.h<=2&&(M==="single_value"||M==="kpi"||M==="gauge"),[de,C]=u.useState(!1),le=l&&(de||p||z),we=_i(e,I),B=!!(k&&(de||p)),ee=X=>{const K=Kt(X),me=e.viz.options??{},pe=Ee(e);S({viz:{...e.viz,type:K,options:{...me,chart:X,...pe?{dqlGenUi:{...pe,defaultVisualization:K}}:{}}},display:Xr(e,K,pe)})},ne=X=>{if(s)return;const K=q.current;if(!K)return;X.preventDefault(),X.stopPropagation();const me=K.getBoundingClientRect(),pe={x:X.clientX-me.left,y:X.clientY-me.top},ye={x:X.clientX,y:X.clientY},ce=J=>{T({x:J.clientX-ye.x,y:J.clientY-ye.y}),c==null||c({clientX:J.clientX-pe.x,clientY:J.clientY-pe.y})},be=J=>{window.removeEventListener("pointermove",ce),window.removeEventListener("pointerup",be),T(null),A==null||A(),x({clientX:J.clientX-pe.x,clientY:J.clientY-pe.y})};window.addEventListener("pointermove",ce),window.addEventListener("pointerup",be,{once:!0})};return t.jsxs("div",{ref:q,onMouseEnter:()=>C(!0),onMouseLeave:()=>C(!1),onClick:()=>{$&&(d==null||d($))},style:{gridColumn:s?"1 / -1":`${e.x+1} / span ${e.w}`,gridRow:s?"auto":`${e.y+1} / span ${e.h}`,transform:h?`translate(${h.x}px, ${h.y}px) scale(1.02)`:void 0,opacity:h?.92:1,zIndex:h?30:void 0,position:"relative",background:V?Mi(Q):"var(--dql-app-surface, var(--surface, rgba(0,0,0,0.02)))",border:p||h?"1.5px solid var(--dql-app-accent, var(--accent, #4f46e5))":V?"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:W?12:14,paddingBottom:B?W?42:46:W?12:14,display:"flex",flexDirection:"column",gap:W?4:V?10:6,minHeight:s?yn(e,I):0,overflow:"visible",boxShadow:h?"0 16px 40px rgba(0,0,0,0.22)":p?"0 0 0 3px var(--dql-app-accent-soft, rgba(79,70,229,0.12))":void 0,cursor:h?"grabbing":$?"pointer":void 0,transition:h?void 0:"box-shadow 120ms ease, transform 120ms ease"},children:[B?t.jsxs("button",{type:"button",style:pi,onClick:X=>{X.stopPropagation(),$&&(d==null||d($)),$&&(f==null||f($,di(e.title??$)))},title:"Open app Copilot for this tile",children:[t.jsx(Re,{size:11,strokeWidth:2})," Ask AI"]}):null,l&&!s?t.jsx("div",{style:{position:"absolute",top:10,left:10,zIndex:3,opacity:le?1:0,pointerEvents:le?"auto":"none",transition:"opacity 120ms ease"},children:t.jsx("button",{type:"button",title:"Drag to move tile",onPointerDown:ne,style:hn,children:t.jsx(Pa,{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:le?1:0,pointerEvents:le?"auto":"none",transition:"opacity 120ms ease"},children:[W?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(ui,{item:e,cols:o,settingsOpen:z,onToggleSettings:()=>Y(X=>!X),onPatch:S})]}):null,V?t.jsx("div",{style:{minHeight:W?26:42,paddingLeft:le?30:0,paddingRight:le?W?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",{style:{fontSize:W?12:13,fontWeight:780,lineHeight:1.25,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:re}),t.jsxs("div",{style:rn,children:[_?t.jsx(ot,{trust:_}):null,I?t.jsx("span",{style:$e,children:Dr(I)}):null,I!=null&&I.layoutIntent?t.jsx("span",{style:$e,children:Ae(String(I.layoutIntent))}):null]})]}),l&&we.length>1?t.jsx(ri,{value:Ze(e.viz.type),options:we,onChange:ee}):null]})}):t.jsxs("div",{style:{minHeight:W?22:26,paddingLeft:le?30:0,paddingRight:le?W?82:134:0,transition:"padding 120ms ease"},children:[t.jsx("div",{style:{fontSize:W?12:13,fontWeight:720,lineHeight:1.25,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title??L}),D?t.jsxs("div",{style:{marginTop:5,display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[t.jsx(ot,{trust:D}),t.jsx("span",{style:$e,children:"AI generated"})]}):W?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&&z?t.jsx(fi,{item:e,tile:r,cols:o,onPatch:S}):null,t.jsx("div",{style:{flex:1,minHeight:0,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",marginTop:W?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(ci,{item:e,tile:r,loading:a,error:i,themeMode:n,genUi:I})}),l?null:t.jsx(ei,{tile:r,themeMode:n})]})}function ei({tile:e,themeMode:r}){const a=Ne[r],i=u.useMemo(()=>ti(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 ti(e){var f,x;const r=(f=e==null?void 0:e.result)==null?void 0:f.rows,a=(x=e==null?void 0:e.result)==null?void 0:x.columns;if(!Array.isArray(r)||r.length===0||!Array.isArray(a)||a.length===0)return null;const i=r[0],n=c=>{if(typeof c=="number"&&Number.isFinite(c))return c;if(typeof c=="string"){const A=Number(c.replace(/[$,%\s]/g,""));return Number.isFinite(A)&&c.trim()?A:void 0}},l=a.find(c=>n(i==null?void 0:i[c])!==void 0),s=a.find(c=>c!==l&&typeof(i==null?void 0:i[c])=="string");if(!l)return null;if(r.length===1){const c=n(r[0][l]);return c!==void 0?`${l}: ${Bt(c)}.`:null}const o=r.map(c=>({label:s?String(c[s]??"—"):"top",value:n(c[l])??0})).sort((c,A)=>A.value-c.value),p=o.reduce((c,A)=>c+A.value,0),d=o[0];return d?p>0?`${d.label} leads ${l} at ${Bt(d.value)} (${Math.round(d.value/p*100)}%).`:`${d.label} leads ${l} at ${Bt(d.value)}.`:null}function Bt(e){const r=Math.abs(e);return r>=1e6?`${(e/1e6).toFixed(1)}M`:r>=1e3?`${(e/1e3).toFixed(1)}K`:Number.isInteger(e)?String(e):e.toFixed(2)}function ri({value:e,options:r,onChange:a}){return t.jsx("div",{style:nn,"aria-label":"Visualization",children:r.map(i=>t.jsx("button",{type:"button",title:i.label,onClick:n=>{n.stopPropagation(),a(i.value)},style:ln(e===i.value),children:Oi(i.value)},i.value))})}function ot({trust:e}){const r=e==="certified",a=r?"Certified":e==="review_required"?"Review required":"Draft ready";return t.jsxs("span",{style:an(r),children:[r?t.jsx(Fe,{size:10,strokeWidth:2.4}):t.jsx(Qe,{size:10,strokeWidth:2.4}),a]})}function ai({story:e}){return t.jsxs("section",{style:Ur,"aria-label":"Current dashboard story",children:[t.jsxs("div",{style:ea,children:[t.jsx("div",{style:ta,children:t.jsx(Re,{size:15,strokeWidth:2.2})}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:ra,children:"Story from current results"}),t.jsx("h3",{style:aa,children:e.title})]}),e.trust?t.jsx(ot,{trust:e.trust}):null]}),t.jsx("p",{style:ia,children:e.summary}),t.jsxs("div",{style:sr,children:[t.jsx("span",{style:na,children:e.sourceTitle}),e.filters.map(r=>t.jsxs("span",{style:et,children:[r.label,": ",r.value]},`${r.label}:${r.value}`)),e.chips.map(r=>t.jsx("span",{style:et,children:r},r))]})]})}function ii({story:e,onEvidence:r,onResearch:a}){return t.jsxs("section",{style:{...Ur,padding:"20px 22px",marginBottom:16},"aria-label":"Business Story",children:[t.jsxs("div",{style:ea,children:[t.jsx("div",{style:ta,children:t.jsx(Re,{size:15,strokeWidth:2.2})}),t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:ra,children:"Business Story · current filters"}),t.jsx("h2",{style:{...aa,fontSize:19},children:e.headline})]}),t.jsx(ot,{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:{...ia,margin:0,fontSize:14,lineHeight:1.65},children:ur(i)},n)),e.implication?t.jsxs("p",{style:{margin:0,fontSize:13,lineHeight:1.55,fontWeight:650},children:["What this means: ",ur(e.implication)]}):null]}),t.jsxs("div",{style:{...sr,marginTop:14},children:[t.jsx("span",{style:na,children:e.generatedBy==="ai"?"AI wording · verified facts":"Verified result summary"}),t.jsxs("span",{style:et,children:[e.evidenceRefs.length," evidence source",e.evidenceRefs.length===1?"":"s"]}),e.caveat?t.jsx("span",{style:et,children:e.caveat}):null,t.jsx("span",{style:{flex:1}}),t.jsx("button",{type:"button",onClick:r,style:zr,children:"View evidence"}),t.jsx("button",{type:"button",onClick:a,style:zr,children:"Research deeper"})]})]})}function ni({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:li,"aria-label":"Evidence and review appendix",children:[t.jsxs("summary",{style:si,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:oi,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:{...sr,marginTop:7},children:e.story.evidenceRefs.map(n=>t.jsx("span",{style:et,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 ur(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 li={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))"},si={cursor:"pointer",padding:"12px 16px",fontSize:12.5,fontWeight:760,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},oi={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))"},pi={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 di(e){return`/ask Explain ${e} for a stakeholder. Start with the business meaning, current result, active filters, caveats, and recommended next action.`}function ci({item:e,tile:r,loading:a,error:i,themeMode:n,genUi:l}){var p,d,f,x;if(a&&!r)return t.jsx("span",{children:"Loading data..."});if((r==null?void 0:r.tileType)==="text")return l?t.jsx(gi,{title:e.title??l.insightTitle??"Generated section",markdown:((p=r.text)==null?void 0:p.markdown)??"",genUi:l,themeMode:n}):t.jsx(mi,{markdown:((d=r.text)==null?void 0:d.markdown)??"",variant:((f=r.viz)==null?void 0:f.type)==="heading"?"heading":"text",themeMode:n});if((r==null?void 0:r.tileType)==="aiPin"&&r.aiPin)return t.jsx(bi,{pin:r.aiPin,result:r.result,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.jsx("span",{children:r.error??"Tile failed."});if(!r.result)return t.jsx("span",{children:"No result."});const s=Yr(e,r.chartConfig);return String(s.chart??((x=r.viz)==null?void 0:x.type)??"").toLowerCase()==="table"||e.viz.type==="table"||e.viz.type==="pivot"?(l==null?void 0:l.component)==="EvidenceTable"||(l==null?void 0:l.component)==="PivotTable"?t.jsx(hi,{result:r.result,genUi:l,themeMode:n}):t.jsx("div",{style:{width:"100%",alignSelf:"stretch"},children:t.jsx(Aa,{result:r.result,themeMode:n})}):t.jsx("div",{style:{width:"100%",alignSelf:"stretch"},children:t.jsx(Ca,{result:r.result,themeMode:n,chartConfig:s})})}function ui({item:e,cols:r,settingsOpen:a,onToggleSettings:i,onPatch:n}){const[l,s]=u.useState(!1),o=p=>{s(!1),n(oa(e,r,p))};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(p=>!p),style:Lt,children:t.jsx(Ra,{size:13,strokeWidth:2})}),l?t.jsx(xi,{onPick:o,onClose:()=>s(!1)}):null]}),t.jsx("button",{type:"button",title:"Chart and field settings",onClick:i,style:Lt,children:t.jsx(Ga,{size:13,strokeWidth:2,color:a?"var(--accent, #4f46e5)":void 0})}),t.jsx("button",{type:"button",title:"Remove tile",onClick:()=>n(null),style:Lt,children:t.jsx(ya,{size:13,strokeWidth:2})})]})}function xi({onPick:e,onClose:r}){return t.jsx("div",{style:mn,onMouseLeave:r,children:Gr.map(a=>t.jsxs("button",{type:"button",onClick:()=>e(a.id),style:bn,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 fi({item:e,tile:r,cols:a,onPatch:i}){var $;const n=r==null?void 0:r.result,l=Yr(e,r==null?void 0:r.chartConfig),s=Ze(l.chart),o=Ee(e),[p,d]=u.useState(!1),[f,x]=u.useState(null),[c,A]=u.useState(null),S=u.useMemo(()=>$a(n),[n]),q=u.useMemo(()=>{const k=new Map;if(!n)return k;const L=new Set(S.metrics),M=new Set(S.dimensions);for(const I of n.columns)L.has(I)?k.set(I,"measure"):M.has(I)?k.set(I,"dimension"):k.set(I,Sa(za(I,n.rows)));return k},[n,S]),h=(n==null?void 0:n.columns.filter(k=>q.get(k)==="measure"))??[],T=(n==null?void 0:n.columns.filter(k=>q.get(k)!=="measure"))??[],z=k=>{const L=hr({...l,...k}),M=Kt(L.chart),I=Ee(e),Q={...L};I&&(Q.dqlGenUi={...I,defaultVisualization:M}),i({title:L.title||e.title,viz:{...e.viz,type:M,options:Q},display:Xr(e,M,I)})},Y=async()=>{d(!0),A(null),x(null);const k=Te(e)??e.title,L=await Z.recommendVisualization({...k?{blockRef:k}:{},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(d(!1),!L.ok){A(L.error);return}const M=Ze(L.display.defaultVisualization),I=Kt(M),Q=L.display.fieldHints??{},re=hr({...l,chart:M,title:l.title??e.title,x:Q.x??Q.label??l.x,y:Q.y??Q.value??l.y,color:Q.color??l.color});i({title:re.title||e.title,viz:{...e.viz,type:I,options:{...re}},display:L.display});const D=L.evidence.map(V=>V.source).slice(0,3).join(", "),_=L.warnings[0];x(_?`${L.display.component}: ${_}`:`${L.display.component}${D?` from ${D}`:""}`)};return t.jsxs("div",{style:Ji,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:Gr.map(k=>t.jsx("button",{type:"button",title:k.description,onClick:()=>i(oa(e,a,k.id)),style:vn(qn(e,a,k.id)),children:k.label},k.id))})]}),t.jsxs("div",{style:Di,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)??(($=e.display)==null?void 0:$.rationale)??"Choose a governed visualization for this app tile."})]}),t.jsxs("button",{type:"button",onClick:()=>void Y(),disabled:p,style:Ui(p),title:"Recommend visualization from block hints and result fields",children:[t.jsx(Wr,{size:12,strokeWidth:2.2}),p?"Thinking":"AI recommend"]})]}),t.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:5},children:[o!=null&&o.component?t.jsx("span",{style:$e,children:Dr(o)}):null,o!=null&&o.defaultVisualization?t.jsx("span",{style:$e,children:Ae(String(o.defaultVisualization))}):null,o!=null&&o.reviewStatus?t.jsx("span",{style:$e,children:Ae(String(o.reviewStatus))}):null]}),f?t.jsx("div",{style:sa,children:f}):null,c?t.jsx("div",{style:en,children:c}):null]}),t.jsxs("div",{style:Zi,children:[t.jsxs("label",{style:Yt,children:["Title",t.jsx("input",{value:l.title??e.title??"",onChange:k=>z({title:k.target.value||void 0}),style:Xt})]}),t.jsxs("label",{style:Yt,children:["Chart",t.jsx("select",{value:s,onChange:k=>z({chart:k.target.value}),style:Xt,children:ar.map(k=>t.jsx("option",{value:k.value,children:k.label},k.value))})]}),t.jsx(mt,{label:"X",value:l.x,columns:(n==null?void 0:n.columns)??[],onChange:k=>z({x:k})}),t.jsx(mt,{label:"Y",value:l.y,columns:(n==null?void 0:n.columns)??[],onChange:k=>z({y:k})}),t.jsx(mt,{label:"Color",value:l.color,columns:(n==null?void 0:n.columns)??[],onChange:k=>z({color:k})}),t.jsx(mt,{label:"Facet",value:l.facet,columns:(n==null?void 0:n.columns)??[],onChange:k=>z({facet:k})})]}),n?t.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[t.jsx(xr,{title:"Measures",columns:h,onPick:k=>z({y:k})}),t.jsx(xr,{title:"Dimensions",columns:T,onPick:k=>z({x:k})})]}):t.jsx("div",{style:{fontSize:11,opacity:.64},children:"Run results are needed before field slots can be inferred."})]})}function mt({label:e,value:r,columns:a,onChange:i}){return t.jsxs("label",{style:Yt,children:[e,t.jsxs("select",{value:r??"",onChange:n=>i(n.target.value||void 0),style:Xt,children:[t.jsx("option",{value:"",children:"Auto"}),a.map(n=>t.jsx("option",{value:n,children:n},n))]})]})}function xr({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:tn,children:i},i))})]})}function fr({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??Ue(e),children:[t.jsx(kt,{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(bt,{title:"Certified block",description:"Chart, table, or KPI from this App domain",onClick:a}),t.jsx(bt,{title:"Text / summary",description:"Narrative, notes, caveats, or CXO context",onClick:i}),t.jsx(bt,{title:"Section heading",description:"Separate an App page into readable groups",onClick:n}),t.jsx(bt,{title:"Copilot insight",description:"Open scoped AI, then pin the reviewed answer to this App",onClick:l})]})]})}function bt({title:e,description:r,onClick:a}){return t.jsxs("button",{type:"button",onClick:a,style:Xi,children:[t.jsx("span",{style:{fontSize:12,fontWeight:700},children:e}),t.jsx("span",{style:{fontSize:11,opacity:.66},children:r})]})}function gi({title:e,markdown:r,genUi:a,themeMode:i}){var p;const n=Ne[i],l=Fi(r,e),s=a.component==="TrustCallout",o=a.component==="ResearchActions";return t.jsxs("div",{style:sn(s),children:[t.jsxs("div",{style:{display:"flex",gap:8,alignItems:"flex-start"},children:[t.jsx("span",{style:on(s),children:s?t.jsx(Qe,{size:15}):o?t.jsx(Re,{size:15}):t.jsx(Fe,{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(ot,{trust:a.trustState}):null,a.reviewStatus?t.jsx("span",{style:$e,children:Ae(a.reviewStatus)}):null]}),(p=a.followUpActions)!=null&&p.length?t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:a.followUpActions.slice(0,3).map(d=>t.jsx("span",{style:pn,children:Ae(d)},d))}):null]})}function hi({result:e,genUi:r,themeMode:a}){var x;const i=Ne[a],n=e.rows??[],l=e.columns??[],s=Wi(l,n,(x=r.fieldHints)==null?void 0:x.label),o=l.find(c=>/\b(status|quality|trust|certification|review)\b/i.test(c)),p=l.filter(c=>c!==s&&c!==o).filter(c=>Et(c)<90||De(c,n)).sort((c,A)=>Et(c)-Et(A)).slice(0,2),d=l.filter(c=>c!==s&&c!==o&&!p.includes(c)).slice(0,2),f=e.rowCount??n.length;return t.jsxs("div",{style:dn,children:[t.jsxs("div",{style:{fontSize:11.5,color:i.textSecondary},children:[f," ",f===1?"row":"rows"," across ",l.length," ",l.length===1?"field":"fields"]}),t.jsx("div",{style:cn,children:n.slice(0,4).map((c,A)=>{const S=s?Pe(c[s]):`Row ${A+1}`,q=o?Pe(c[o]):null;return t.jsxs("div",{style:un,children:[t.jsxs("div",{style:{minWidth:0},children:[t.jsx("div",{style:{fontSize:12.5,fontWeight:760,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S}),d.length?t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:4},children:d.map(h=>t.jsxs("span",{style:xn,children:[Ae(h),": ",Pe(c[h])]},h))}):null]}),t.jsxs("div",{style:{display:"flex",gap:5,flexWrap:"wrap",justifyContent:"flex-start",minWidth:0},children:[p.map(h=>t.jsxs("span",{style:fn,children:[t.jsx("span",{style:{opacity:.62},children:Ae(h)}),t.jsx("strong",{children:Pe(c[h])})]},h)),q?t.jsx("span",{style:gn,children:q}):null]})]},A)})}),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 mi({markdown:e,variant:r="text",themeMode:a}){const i=Ne[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:Fr(e,i)})}function bi({pin:e,result:r,themeMode:a}){var p;const[i,n]=u.useState(null),l=Ne[a]??Ne.light,s=async()=>{n("Refreshing...");const d=await Z.refreshAiPin(e.appId,e.id);n(d.ok?"Refreshed.":d.error??"Refresh failed."),window.dispatchEvent(new CustomEvent("dql-app-dashboard-updated",{detail:{appId:e.appId,dashboardId:e.dashboardId}}))},o=async()=>{n("Creating draft...");const d=await Z.promoteAiPin(e.appId,e.id);n(d.ok?`Draft created: ${d.blockPath}`:d.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:[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:Fr(e.answer,l)}),(p=r==null?void 0:r.rows)!=null&&p.length?t.jsx(vi,{result:r}):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:Cr,children:"Refresh"}),e.sql&&e.reviewStatus==="needs_review"&&t.jsx("button",{type:"button",onClick:()=>void o(),style:Cr,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 vi({result:e}){var i,n;const r=((i=e.columns)!=null&&i.length?e.columns:Object.keys(((n=e.rows)==null?void 0:n[0])??{})).slice(0,4),a=(e.rows??[]).slice(0,3);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(l=>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:Ae(l)},l))})}),t.jsx("tbody",{children:a.map((l,s)=>t.jsx("tr",{children:r.map(o=>t.jsx("td",{style:{padding:"5px 7px",borderBottom:s===a.length-1?"none":"1px solid var(--border-color, rgba(0,0,0,0.06))"},children:Pe(l[o])},o))},s))})]})})]})}function yi({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:Ar}):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:{...Ar,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:Ue(!1),children:"Cancel"}),t.jsx("button",{type:"button",onClick:n,disabled:!r.trim(),style:{...la,opacity:r.trim()?1:.65},children:"Add"})]})]})})}function qi({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:Ue(!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 wi({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:ba[s.type]??"#8b949e",borderRadius:3,padding:"1px 4px",fontSize:9,fontWeight:800,flexShrink:0},children:ma[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:[va[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 Te(e){return e.block?"blockId"in e.block?e.block.blockId??null:e.block.ref??null:null}function Yr(e,r){const a=e.viz.options??{};return{...r??{},...a,chart:Ze(String(a.chart??(r==null?void 0:r.chart)??e.viz.type)),title:a.title??(r==null?void 0:r.title)??e.title,colorPalette:a.colorPalette??(r==null?void 0:r.colorPalette)??"corporate"}}function Ze(e){const r=String(e??"table").toLowerCase().replace(/_/g,"-");return r==="single-value"?"kpi":ar.some(a=>a.value===r)?r:"table"}function Kt(e){const r=Ze(e);return r==="table"?"table":r.replace(/-/g,"_")}function hr(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 Ee(e){var a;if(yt(e.display)){const i=e.display,n=typeof i.component=="string"?i.component:void 0;return{version:1,component:n,role:Jr(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:yt(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 yt(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:yt(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 mr(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 Xr(e,r,a){var l,s,o,p,d,f,x,c,A;const i=ji([r,...((l=e.display)==null?void 0:l.allowedVisualizations)??[],...(a==null?void 0:a.allowedVisualizations)??[]]),n=((s=e.display)==null?void 0:s.component)??ki(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],...(p=e.display)!=null&&p.fieldHints||a!=null&&a.fieldHints?{fieldHints:((d=e.display)==null?void 0:d.fieldHints)??(a==null?void 0:a.fieldHints)}:{},layoutIntent:Ei(((f=e.display)==null?void 0:f.layoutIntent)??(a==null?void 0:a.layoutIntent)),rationale:((x=e.display)==null?void 0:x.rationale)??(a==null?void 0:a.rationale)??"Visualization selected for this consumer surface.",trustState:lr(((c=e.display)==null?void 0:c.trustState)??(a==null?void 0:a.trustState)),reviewStatus:Li(((A=e.display)==null?void 0:A.reviewStatus)??(a==null?void 0:a.reviewStatus))}}function ji(e){return Array.from(new Set(e.filter(r=>typeof r=="string"&&r.trim()).map(r=>r.trim())))}function ki(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 Jr(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 Si(e){var s,o,p,d;if(Te(e)||e.aiPin)return!1;const r=Ee(e),a=(r==null?void 0:r.component)??((s=e.display)==null?void 0:s.component),i=(r==null?void 0:r.role)??Jr(a),n=lr(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,(p=e.text)==null?void 0:p.markdown,(d=e.display)==null?void 0:d.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 zi(e,r,a){const n=[...e.filter(l=>!Ai(l,r.get(l.i))&&!Ii(l,e,r)&&!Ci(l,e,r))].sort((l,s)=>{const o=vr(s,r.get(s.i),a)-vr(l,r.get(l.i),a);return o!==0?o:Ke(l,a)-Ke(s,a)});return wt(n,a)}function Ai(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 Ci(e,r,a){if(!e.aiPin)return!1;const i=br(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:br(l,a.get(l.i))===i)}function br(e,r){const a=r==null?void 0:r.aiPin,i=a!=null&&a.analysisPlan&&typeof a.analysisPlan=="object"?a.analysisPlan:null,n=vt(a==null?void 0:a.question)||vt(e.title),l=vt(i==null?void 0:i.sourceBlockId),s=vt(i==null?void 0:i.sourceTileId),o=a!=null&&a.result?Ni(a.result):"";return!n&&!l&&!s?"":[n,l,s,o].filter(Boolean).join("|")}function vt(e){return String(e??"").toLowerCase().replace(/[^a-z0-9]+/g," ").replace(/\s+/g," ").trim()}function Ni(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=>Gt(n)).join(";"):"";return a||i?`${a}:${i}`:""}function Gt(e){if(e==null)return"";if(typeof e!="object")return String(e);if(Array.isArray(e))return`[${e.map(Gt).join(",")}]`;const r=e;return`{${Object.keys(r).sort().map(a=>`${a}:${Gt(r[a])}`).join(",")}}`}function vr(e,r,a){var n,l,s,o,p;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),Te(e)&&(i+=900),(r==null?void 0:r.status)==="ok"&&((p=(o=r.result)==null?void 0:o.rows)!=null&&p.length)&&(i+=500),i-=Jt(e)*80,i-=Ke(e,a)/1e3,i}function Ii(e,r,a){var l;if((l=e.parameterBindings)!=null&&l.length||e.aiPin||!Te(e))return!1;const i=a.get(e.i),n=i!=null&&i.result?yr(i.result):null;return n?r.some(s=>{if(s.i===e.i||!Ti(s,a.get(s.i)))return!1;const o=a.get(s.i),p=o!=null&&o.result?yr(o.result):null;return!!(p&&$i(n,p))}):!1}function Ti(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 yr(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=ir(a,r),n=nr(a,r),l=r[0];return{columns:a.map(o=>o.toLowerCase()).sort().join("|"),label:i?qr(l[i]):"",metric:(n==null?void 0:n.toLowerCase())??"",metricValue:n?qr(l[n]):""}}function $i(e,r){return e.columns===r.columns&&e.label===r.label&&e.metric===r.metric&&e.metricValue===r.metricValue}function qr(e){return e==null?"":typeof e=="number"?Number.isFinite(e)?String(e):"":String(e).trim().toLowerCase().replace(/\s+/g," ")}function Pi(e,r,a){var I,Q,re,D;const i=e.map((_,V)=>({item:_,tile:r.get(_.i),index:V})).filter(_=>{var V,W;return((V=_.tile)==null?void 0:V.status)==="ok"&&!!_.tile.result&&Array.isArray((W=_.tile.result)==null?void 0:W.rows)&&_.tile.result.rows.length>0}).sort((_,V)=>{const W=wr(_.item,_.tile,_.index);return wr(V.item,V.tile,V.index)-W})[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=Ee(i.item),p=ir(s,l,(I=o==null?void 0:o.fieldHints)==null?void 0:I.label),d=nr(s,l,((Q=o==null?void 0:o.fieldHints)==null?void 0:Q.value)??((re=o==null?void 0:o.fieldHints)==null?void 0:re.y)),f=l[0],x=l[1],c=p?Pe(f[p]):"The leading result",A=x&&p?Pe(x[p]):null,S=d?Sr(f[d]):null,q=d&&x?Sr(x[d]):null,h=d?Ri(d):null,T=Bi(a),z=T.length?"under the selected app filters":"in the current dashboard view",Y=i.item.title??i.tile.title??Te(i.item)??"Dashboard result",$=n.rowCount??l.length,k=i.tile.certificationStatus==="certified"?"certified":lr(String(((D=i.item.display)==null?void 0:D.trustState)??(o==null?void 0:o.trustState)??"review_required")),L=h?`${Ae(h)} snapshot`:"Dashboard snapshot";let M;if(h&&S!==null){const _=`${c} leads ${h} with ${Pe(S)}`;if(A&&q!==null&&Number.isFinite(S-q)){const V=Math.abs(S-q);M=`${_}, ahead of ${A} by ${Pe(V)} ${z}.`}else M=`${_} ${z}.`}else M=`${Y} returned ${$} ${$===1?"row":"rows"} ${z}.`;return{title:L,summary:M,sourceTitle:Y,trust:k,filters:T,chips:[`${$} ${$===1?"row":"rows"}`,s.length?`${s.length} fields`:""].filter(Boolean)}}function wr(e,r,a){var o,p,d,f;const i=Ee(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),Te(e)&&(s+=180),(d=(p=r.filters)==null?void 0:p.applied)!=null&&d.length&&(s+=260),(f=e.parameterBindings)!=null&&f.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&&nr(l.columns,l.rows)&&(s+=80),l&&ir(l.columns,l.rows)&&(s+=50),s}function ir(e,r,a){const i=Zr(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=>!De(n,r)&&!/\b(date|time|year|month|id)\b/i.test(n))??e.find(n=>!De(n,r)))}function nr(e,r,a){const i=Zr(e,a);return i&&De(i,r)?i:e.filter(n=>De(n,r)).sort((n,l)=>jr(n)-jr(l))[0]}function Zr(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 jr(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 Ri(e){return Ae(e).toLowerCase()}function Bi(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:Ae(r),value:Array.isArray(a)?a.map(i=>kr(r,i)).join(", "):kr(r,a)}))}function kr(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):Pe(r)}function Sr(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 Ei(e){return e==="compact"||e==="standard"||e==="wide"||e==="tall"||e==="full"||e==="auto"?e:"auto"}function lr(e){return e==="certified"||e==="draft_ready"||e==="review_required"?e:"review_required"}function Li(e){return e==="certified"||e==="draft_ready"||e==="review_required"?e:"review_required"}function yt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function _i(e,r){const a=new Set([String(e.viz.type??"table"),...(r==null?void 0:r.allowedVisualizations)??[]]),i=Array.from(a).map(n=>Ze(n)).filter((n,l,s)=>s.indexOf(n)===l);return i.map(n=>ar.find(l=>l.value===n)??{value:n,label:Ae(n)}).filter(n=>n.value!=="table"||i.length===1||e.block)}function Mi(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 Oi(e){return e==="line"||e==="area"?t.jsx(rr,{size:13,strokeWidth:2.2}):e==="pie"||e==="donut"?t.jsx(Fa,{size:13,strokeWidth:2.2}):e==="table"?t.jsx(Xa,{size:13,strokeWidth:2.2}):t.jsx(Kr,{size:13,strokeWidth:2.2})}function Ae(e){return e.replace(/[_-]+/g," ").replace(/\b\w/g,r=>r.toUpperCase())}function Dr(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?Ae(e.role):"Generated"}}function Fi(e,r){const a=new RegExp(`^###\\s*${Vi(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 Wi(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=>!De(n,r))??e[0]}function Et(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 De(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 Pe(e){if(e==null||e==="")return"N/A";if(typeof e=="number")return Number.isFinite(e)?new Intl.NumberFormat("en-US",{maximumFractionDigits:2}).format(e):String(e);if(typeof e=="boolean")return e?"Yes":"No";const r=String(e),a=Number(r);return r.trim()!==""&&Number.isFinite(a)&&/^-?\d+(\.\d+)?$/.test(r.trim())?new Intl.NumberFormat("en-US",{maximumFractionDigits:2}).format(a):r.replace(/_/g," ")}function Vi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ue(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}}function Hi(e){return{...Ue(e),width:34,height:34,padding:0,justifyContent:"center"}}const Qi={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"},Ki={display:"flex",alignItems:"center",gap:6,marginBottom:10},Gi={marginBottom:12,color:"var(--dql-app-muted, var(--color-text-secondary, rgba(0,0,0,0.64)))",fontSize:12,lineHeight:1.45},Ur={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},ta={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},ra={fontSize:10.5,fontWeight:820,letterSpacing:0,textTransform:"uppercase",color:"var(--dql-app-muted, rgba(15,23,42,0.58))"},aa={margin:"2px 0 0",fontSize:15,lineHeight:1.25,fontWeight:820,color:"var(--dql-app-text, inherit)"},ia={margin:0,fontSize:13.5,lineHeight:1.48,color:"var(--dql-app-muted, rgba(15,23,42,0.72))"},sr={display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},et={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"},na={...et,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))"},zr={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 Yi(e){return{position:"fixed",right:24,top:76,bottom:24,zIndex:70,width:e?`min(${Qt}px, calc(100vw - 96px))`:`min(${ja}px, calc(100vw - 64px))`,minWidth:0}}const Ar={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"},la={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},Xi={border:"none",borderRadius:6,background:"transparent",color:"inherit",padding:"9px 10px",cursor:"pointer",textAlign:"left",display:"grid",gap:2},Ji={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"},Zi={display:"grid",gridTemplateColumns:"repeat(4, minmax(0, 1fr))",gap:6},Yt={display:"grid",gap:3,fontSize:10,fontWeight:700,opacity:.78},Xt={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},Di={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 Ui(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 sa={fontSize:11,lineHeight:1.35,color:"var(--dql-app-muted, rgba(15,23,42,0.68))"},en={...sa,color:"var(--error-color, #b91c1c)"},tn={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"},rn={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 an(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 nn={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 ln(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 sn(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 on(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 pn={...$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)"},dn={width:"100%",alignSelf:"stretch",overflow:"auto",display:"flex",flexDirection:"column",gap:9,fontStyle:"normal",opacity:1,lineHeight:1.35},cn={display:"grid",gap:6},un={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"},xn={...$e,minHeight:16,borderRadius:5,padding:"1px 5px",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},fn={display:"grid",gap:1,minWidth:82,textAlign:"left",fontSize:10.5},gn={...$e,minHeight:18,background:"rgba(22,163,74,0.09)",border:"1px solid rgba(22,163,74,0.18)",color:"#15803d"},Lt={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"},hn={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},mn={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},bn={border:"none",borderRadius:6,background:"transparent",color:"inherit",padding:"8px 9px",cursor:"pointer",textAlign:"left",display:"grid",gap:2};function vn(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 Cr={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 or(e,r){const a=dt(e);return a==="heading"?Ie("wide",r,"heading"):a==="text"?Ie("standard",r,"text"):Ie(a==="single_value"||a==="kpi"||a==="gauge"?"compact":a==="table"||a==="pivot"?"tall":a==="line"||a==="area"?"wide":"standard",r,a)}function pr(e,r){const a=Ee(e),i=wn(a==null?void 0:a.layoutIntent);return i&&i!=="auto"?Ie(i,r,String(e.viz.type??"table")):or(dt(String(e.viz.type??"table")),r)}function yn(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 Ie(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"?or(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 oa(e,r,a){const i=String(e.viz.type??"table"),n=a==="auto"?pr(e,r):Ie(a,r,i);return{w:n.w,h:n.h,x:St(e.x,0,Math.max(0,r-n.w))}}function qn(e,r,a){const i=a==="auto"?pr(e,r):Ie(a,r,String(e.viz.type??"table"));return e.w===i.w&&e.h===i.h}function wn(e){return e==="auto"||e==="compact"||e==="standard"||e==="wide"||e==="tall"||e==="full"?e:null}function _t(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 Mt(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 wt(e,r){const a=Math.max(1,r),i=[],n=(s,o,p,d)=>{for(let f=0;f<d;f++){const x=i[o+f];if(x){for(let c=0;c<p;c++)if(x[s+c])return!1}}return!0},l=(s,o,p,d)=>{for(let f=0;f<d;f++){const x=o+f;i[x]||(i[x]=new Array(a).fill(!1));for(let c=0;c<p;c++)i[x][s+c]=!0}};return e.map(s=>{const o=St(Math.round(s.w||1),1,a),p=Math.max(1,Math.round(s.h||1));let d=0,f=0;e:for(let x=0;;x++)for(let c=0;c+o<=a;c++)if(n(c,x,o,p)){d=c,f=x;break e}return l(d,f,o,p),{...s,x:d,y:f,w:o,h:p}})}function jn(e,r,a){const i=e.filter(s=>s.i!==r.i).sort((s,o)=>Ke(s,a)-Ke(o,a)),n=Ke(r,a),l=i.findIndex(s=>Ke(s,a)>n);return l===-1?[...i,r]:[...i.slice(0,l),r,...i.slice(l)]}function Ke(e,r){return e.y*r+e.x}function Jt(e){const r=Ee(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=dt(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 dt(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 St(e,r,a){return Math.min(a,Math.max(r,e))}function kn({app:e}){var o,p;const{state:r,dispatch:a}=At(),[i,n]=u.useState(!1),l=u.useRef(null);u.useEffect(()=>{if(!i)return;const d=f=>{var x;(x=l.current)!=null&&x.contains(f.target)||n(!1)};return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[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(d=>!d),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)??((p=r.activePersona)==null?void 0:p.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 Z.clearPersona(),a({type:"SET_ACTIVE_PERSONA",persona:null}),n(!1)},style:Nr(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(d=>{var f;return t.jsxs("button",{role:"menuitem",onClick:async()=>{const x=await Z.setPersona(d.userId,e.id);a({type:"SET_ACTIVE_PERSONA",persona:x}),n(!1)},style:Nr(((f=r.activePersona)==null?void 0:f.userId)===d.userId),children:[t.jsx("div",{style:{fontWeight:500},children:d.displayName??d.userId}),t.jsxs("div",{style:{fontSize:11,opacity:.65},children:["[",d.roles.join(", "),"]",d.attributes&&Object.keys(d.attributes).length>0?` · ${Object.entries(d.attributes).map(([x,c])=>`${x}=${c}`).join(", ")}`:""]})]},d.userId)})]})]})}function Nr(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 Ir(e){if(!e)return[];const r=new Map;for(const i of e.filters??[])Sn(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)||An(r,l)||r.set(s,zn(l)))}}return Array.from(r.values())}function Sn(e){var r;return!(e.type==="select"&&!((r=e.options)!=null&&r.length)&&e.default===void 0)}function zn(e){const r=e.filter||e.field||e.param;return{id:r,type:Cn(r,e.parameterType),default:e.default??pa(r),bindsTo:e.param}}function An(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 Cn(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 pa(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:""}const Nn=u.lazy(()=>Ut(()=>import("./UnifiedAgentRunPanel-CwxQ4T19.js").then(e=>e.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])).then(e=>({default:e.UnifiedAgentRunPanel}))),In=u.lazy(()=>Ut(()=>import("./AgentAnswerCard-Dp4odOLE.js").then(e=>e.A),__vite__mapDeps([4,1,2,3,5,6,7,8,9,10])).then(e=>({default:e.StructuredAnswerText}))),Ot=new Map,da="Build an analytics app from my certified DQL blocks and available warehouse tables.",ca=[{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."}],Tn=[{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."}],$n={all:"All",mine:"Mine",shared:"Shared",fav:"Favourites"};function Pn(e){return e==="obsidian"||e==="dark"||e==="midnight"?"obsidian":e==="white"||e==="arctic"?"white":"paper"}function ts(){const{state:e,dispatch:r}=At(),a=u.useMemo(()=>Pn(e.themeMode),[e.themeMode]),[i,n]=u.useState(()=>e.activeAppId?"workspace":"library"),l=e.activeAppExperience,s=e.activeAppSection,o=g=>{r({type:"SET_APP_WORKSPACE_STATE",experience:g})},p=g=>{r({type:"SET_APP_WORKSPACE_STATE",section:g})},[d,f]=u.useState(""),[x,c]=u.useState("all"),[A,S]=u.useState(()=>new Set),[q,h]=u.useState(null),[T,z]=u.useState(null),[Y,$]=u.useState(!1),[k,L]=u.useState("ai"),[M,I]=u.useState(da),[Q,re]=u.useState("Business Analytics"),[D,_]=u.useState(""),[V,W]=u.useState("analytics"),[de,C]=u.useState([]),[le,we]=u.useState(!1),[B,ee]=u.useState(()=>new Set),[ne,he]=u.useState(null),[X,K]=u.useState(null),[me,pe]=u.useState(new Set),[ye,ce]=u.useState(!1),[be,J]=u.useState(null),[b,P]=u.useState(!1),[U,G]=u.useState(!1),[N,E]=u.useState(""),[se,ve]=u.useState(null),[oe,ue]=u.useState({}),[xe,ae]=u.useState({}),[Ce,H]=u.useState(!1),[y,te]=u.useState(!1),ie=u.useCallback(g=>{H(g),g||te(!1)},[]),[Le,Se]=u.useState(0),tt=u.useRef(0);u.useEffect(()=>{let g=!1;return r({type:"SET_APPS_LOADING",loading:!0}),Z.listApps().then(v=>{g||(r({type:"SET_APPS",apps:v}),r({type:"SET_APPS_LOADING",loading:!1}))}),()=>{g=!0}},[r]),u.useEffect(()=>{Z.getPersona().then(g=>r({type:"SET_ACTIVE_PERSONA",persona:g}))},[r]),u.useEffect(()=>{if(i!=="create")return;let g=!1;return we(!0),Z.recommendAppBlocks({domain:D||void 0,purpose:M,audience:"stakeholder",certifiedOnly:!0}).then(v=>{g||C(v)}).finally(()=>{g||we(!1)}),()=>{g=!0}},[i,k,D,M]),u.useEffect(()=>{if(!e.activeAppId||i!=="workspace"){h(null),z(null);return}let g=!1;return $(!0),Z.getApp(e.activeAppId).then(v=>{g||h(v)}),e.activeDashboardId?Z.getDashboard(e.activeAppId,e.activeDashboardId).then(v=>{g||z(v)}).finally(()=>{g||$(!1)}):(z(null),$(!1)),()=>{g=!0}},[e.activeAppId,e.activeDashboardId,i]);const ct=u.useMemo(()=>JSON.stringify(Ir((T==null?void 0:T.dashboard)??null)),[T==null?void 0:T.dashboard]),_e=u.useMemo(()=>Ir((T==null?void 0:T.dashboard)??null),[T==null?void 0:T.dashboard,ct]);u.useEffect(()=>{const g=_e;ue(v=>{const R={};for(const O of g)R[O.id]=v[O.id]??lt(O);return $r(v,R)?v:R}),ae(v=>{const R={};for(const O of g)R[O.id]=v[O.id]??lt(O);return $r(v,R)?v:R})},[T==null?void 0:T.dashboard.id,ct,_e]);const Ve=async(g,v,R,O)=>{r({type:"SET_APPS_LOADING",loading:!0});const ze=await Z.listApps();r({type:"SET_APPS",apps:ze}),r({type:"SET_APPS_LOADING",loading:!1}),g&&r({type:"OPEN_APP",appId:g,dashboardId:v,...O}),n(R)},Nt=u.useMemo(()=>{const g=d.trim().toLowerCase();return e.apps.filter(v=>x==="mine"&&(v.storage??"shared")!=="mine"||x==="shared"&&(v.storage??"shared")!=="shared"||x==="fav"&&!A.has(v.id)?!1:g?[v.name,v.description??"",v.domain,v.audience??"",v.lifecycle??"",...v.tags??[],...v.owners??[],...v.dashboards.map(O=>O.title)].join(" ").toLowerCase().includes(g):!0)},[A,x,d,e.apps]),He=u.useMemo(()=>e.apps.find(g=>g.id===e.activeAppId)??null,[e.apps,e.activeAppId]),It=u.useCallback(g=>{h(v=>v&&{...v,investigations:g})},[]),Tt=(g,v="view")=>{r({type:"OPEN_APP",appId:g.id,experience:v,section:"dashboards"}),n("workspace")},$t=(g=M,v)=>{L("ai"),I(g),_(""),ee(new Set),J(null),he(null),K(null),n("create"),Se(R=>R+1)},Pt=()=>{L("classic"),J(null),he(null),K(null),n("create")},ut=g=>{ee(v=>{const R=new Set(v);return R.has(g)?R.delete(g):R.add(g),R})},Xe=async g=>{var ht;const v=Array.isArray(g)?g.filter(ha=>typeof ha=="string"):[],R=M.trim();if(!R){J("Describe the app you want to build.");return}P(!0),J(null);const O=Array.from(k==="classic"?B:new Set([...Array.from(B),...v])),ze=await Z.proposeAppAiBuild({prompt:R,domain:D.trim()||void 0,owner:V.trim()||void 0,force:!1,selectedBlockIds:O,plannerMode:"ai_assisted"});if(P(!1),!ze.ok){J(ze.error),ze.session&&K(ze.session);return}const Je=ze.session;K(Je),he(null),pe(Je.proposal?Na(Je.proposal):new Set);const gt=(ht=Je.plan)==null?void 0:ht.name;gt&&re(gt)};u.useEffect(()=>{i!=="create"||k!=="ai"||Le===0||tt.current===Le||(tt.current=Le,Xe())},[i,k,Le]);const xt=g=>{ee(v=>{const R=new Set(v);return R.add(g),R}),Xe([g])},rt=g=>{pe(v=>{const R=new Set(v);return R.has(g)?R.delete(g):R.add(g),R})},Rt=async()=>{var O;if(!X||X.status!=="proposed")return;ce(!0),J(null);const g=await Z.commitAppAiBuild(X.id,{selectedTileIds:Array.from(me),expectedProposalHash:X.proposalHash});if(ce(!1),!g.ok){J(g.error);return}const v=g.session;K(v);const R={ok:!0,plan:v.plan,validation:v.validation,generated:{paths:v.generatedPaths},app:g.app,dashboardId:g.dashboardId};he(R),H(!0),await Ve(((O=g.app)==null?void 0:O.id)??R.plan.appId,g.dashboardId,"workspace",{experience:"view",section:"dashboards"})},ft=async()=>{if(!Q.trim()){J("Name the app before creating it.");return}if(!D.trim()){J("Choose a domain before creating the app.");return}P(!0),J(null);try{const g=await Z.createApp({name:Q.trim(),domain:D.trim(),dashboardTitle:"Overview",purpose:M.trim(),audience:"stakeholder",visibility:"shared",lifecycle:"draft",tags:["app-builder",D.trim().toLowerCase()],owners:[V.trim()||"owner@local"],selectedBlockIds:Array.from(B)});await Ve(g.app.id,g.dashboardId,"workspace",{experience:"build",section:"dashboards"})}catch(g){J(g instanceof Error?g.message:String(g))}finally{P(!1)}},m=()=>{var v;const g=((v=ne==null?void 0:ne.app)==null?void 0:v.id)??(ne==null?void 0:ne.plan.appId);g&&(r({type:"OPEN_APP",appId:g,dashboardId:(ne==null?void 0:ne.dashboardId)??void 0,experience:"build",section:"dashboards"}),n("workspace"))},j=async()=>{if(!e.activeAppId)return;const g=N.trim();if(!g){ve("Enter a dashboard page name.");return}ve(null);const v=await Z.createAppDashboard(e.activeAppId,{title:g});if(!v.ok){ve(v.error);return}G(!1),E(""),r({type:"OPEN_APP",appId:e.activeAppId,dashboardId:v.dashboard.id,experience:l,section:s}),await Ve(e.activeAppId,v.dashboard.id,"workspace")},w=u.useMemo(()=>({...xe}),[xe]),F=u.useCallback((g,v)=>{ue(R=>({...R,[g.id]:Un(g,v)}))},[]),fe=u.useCallback(()=>{ae({...oe})},[oe]),je=u.useCallback(()=>{const g=Object.fromEntries(_e.map(v=>[v.id,lt(v)]));ue(g),ae(g)},[_e]);return t.jsxs("div",{className:`dql-apps-waterline dql-apps-theme-${a}`,children:[t.jsx("style",{children:Ll}),i==="library"?t.jsx(Rn,{apps:Nt,allApps:e.apps,loading:e.appsLoading,search:d,filter:x,favorites:A,onSearch:f,onFilter:c,onToggleFavorite:g=>{S(v=>{const R=new Set(v);return R.has(g)?R.delete(g):R.add(g),R})},onStartAi:g=>$t(g),onStartClassic:Pt,onOpenApp:Tt}):i==="create"?t.jsx(En,{mode:k,appName:Q,prompt:M,domain:D,owner:V,promptExamples:ca,catalog:de,catalogLoading:le,selectedBlocks:B,generated:ne,buildSession:X,proposalSelection:me,committing:ye,themeMode:e.themeMode,onToggleProposalTile:rt,onCommitProposal:()=>void Rt(),onAddBlock:xt,saving:b,error:be,onBack:()=>n("library"),onModeChange:g=>{L(g),g==="ai"&&ee(new Set)},onAppNameChange:re,onPromptChange:I,onDomainChange:_,onOwnerChange:W,onToggleBlock:ut,onBuild:()=>k==="ai"?void Xe():void ft(),onOpenGenerated:m}):t.jsx(Ln,{app:He,appDoc:q,dashboardDoc:T,loading:Y,experience:l,section:s,explainOpen:Ce,explainExpanded:y,dashboardFilters:_e,dashboardFilterValues:oe,themeMode:e.themeMode,variables:w,onBack:()=>n("library"),onExperienceChange:o,onSectionChange:p,onDashboardFilterChange:F,onApplyDashboardFilters:fe,onResetDashboardFilters:je,onExplainChange:ie,onExplainExpandedChange:te,onAddPage:()=>G(!0),onOpenDashboard:g=>r({type:"OPEN_DASHBOARD",dashboardId:g}),onDashboardChanged:g=>{z(v=>v&&{...v,dashboard:g}),Ve(e.activeAppId,g.id,"workspace")},onInvestigationsChanged:It,onOpenLineageNode:g=>{r({type:"OPEN_LINEAGE_DETAIL",nodeId:g,returnTo:e.activeAppId?{view:"apps",appId:e.activeAppId,dashboardId:e.activeDashboardId,label:He==null?void 0:He.name,experience:l,section:s}:null})}}),U&&t.jsx($l,{title:N,error:se,onChange:E,onCancel:()=>{G(!1),ve(null)},onCreate:()=>void j()})]})}function Rn({apps:e,allApps:r,loading:a,search:i,filter:n,favorites:l,onSearch:s,onFilter:o,onToggleFavorite:p,onStartAi:d,onStartClassic:f,onOpenApp:x}){const c=Rl(r,l),[A,S]=u.useState(da),q=()=>{const h=A.trim();h&&d(h)};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:"One request. DQL finds certified blocks, binds filters, and opens a stakeholder-ready app."})]}),t.jsxs("section",{className:"dql-apps-composer","aria-label":"Build an app with AI",children:[t.jsx("textarea",{value:A,onChange:h=>S(h.target.value),rows:2,"aria-label":"App build request",placeholder:"Build an EMEA revenue app for the CFO…",onKeyDown:h=>{h.key==="Enter"&&!h.shiftKey&&(h.preventDefault(),q())}}),t.jsxs("div",{className:"dql-apps-composer-row",children:[t.jsxs("span",{className:"dql-apps-composer-chip",children:[t.jsx(Fe,{size:11})," Certified blocks first"]}),t.jsx("i",{}),t.jsxs("button",{type:"button",className:"dql-apps-composer-blank",onClick:f,children:[t.jsx(Ye,{size:12})," Create blank"]}),t.jsx("button",{type:"button",className:"dql-apps-composer-send",onClick:q,disabled:!A.trim(),title:"Build",children:t.jsx(qa,{size:15,strokeWidth:2})})]})]}),t.jsxs("div",{className:"dql-apps-try",children:[t.jsx("span",{children:"Try:"}),ca.slice(0,3).map(h=>t.jsx("button",{type:"button",onClick:()=>S(h.prompt),children:h.title},h.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(h=>t.jsxs("button",{className:n===h?"on":"",onClick:()=>o(h),children:[$n[h]," ",t.jsx("span",{children:c[h]})]},h))}),t.jsxs("label",{className:"dql-apps-search",children:[t.jsx(Be,{size:15,strokeWidth:2,"aria-hidden":"true"}),t.jsx("input",{value:i,onChange:h=>s(h.target.value),placeholder:"Search apps, domains, owners..."})]})]}),a&&r.length===0?t.jsx(qe,{title:"Loading Apps...",detail:"Reading local app files from this DQL project."}):e.length===0?t.jsx(qe,{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(h=>t.jsx(Bn,{app:h,favorite:l.has(h.id),onToggleFavorite:()=>p(h.id),onOpen:()=>x(h,"view"),onEdit:()=>x(h,"build")},h.id))})]})}function Bn({app:e,favorite:r,onToggleFavorite:a,onOpen:i,onEdit:n}){var f,x;const l=e.certification==="certified"||e.lifecycle==="certified",s=((f=e.drafts)==null?void 0:f.length)??0,o=e.investigations??0,p=e.aiPins??0,d=l?"Certified app":s>0||o>0||p>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:c=>{c.stopPropagation(),a()},"aria-label":r?"Remove favourite":"Add favourite",children:t.jsx(Ba,{size:14,strokeWidth:1.8})})]}),t.jsx(Oe,{tone:l?"certified":s>0?"draft":"agentic",children:l?"certified":s>0?"mixed":e.lifecycle??"draft"}),t.jsx("h3",{children:e.name}),t.jsx("p",{children:xa(e.description||`${e.name} consumption surface for ${e.domain}.`)}),t.jsxs("div",{className:"dql-app-card-mini",children:[t.jsx(Ht,{label:"Pages",value:String(e.dashboards.length)}),t.jsx(Ht,{label:"Books",value:String(((x=e.notebooks)==null?void 0:x.length)??0)}),t.jsx(Ht,{label:"Drafts",value:String(s)})]}),t.jsxs("div",{className:"dql-app-card-signals",children:[t.jsxs("span",{children:[t.jsx(Fe,{size:13})," ",d]}),t.jsxs("span",{children:[t.jsx(Be,{size:13})," ",o," analysis"]}),t.jsxs("span",{children:[t.jsx(Re,{size:13})," ",p," local insights"]})]})]}),t.jsxs("div",{className:"dql-app-card-depth",children:[t.jsx("span",{children:Bl(e)}),t.jsxs("button",{type:"button",className:"dql-app-card-act",onClick:i,title:"View app",children:[t.jsx(_r,{size:12})," View"]}),t.jsxs("button",{type:"button",className:"dql-app-card-act",onClick:n,title:"Edit app",children:[t.jsx(Hr,{size:12})," Edit"]})]})]})}function En({mode:e,appName:r,prompt:a,domain:i,owner:n,promptExamples:l,catalog:s,catalogLoading:o,selectedBlocks:p,generated:d,buildSession:f,proposalSelection:x,committing:c,themeMode:A,onToggleProposalTile:S,onCommitProposal:q,saving:h,error:T,onBack:z,onModeChange:Y,onAppNameChange:$,onPromptChange:k,onDomainChange:L,onOwnerChange:M,onToggleBlock:I,onBuild:Q,onOpenGenerated:re,onAddBlock:D}){var me,pe,ye,ce,be,J,b,P,U,G;const[_,V]=u.useState(!1),[W,de]=u.useState(""),C=s.filter(N=>p.has(N.id)),le=i.trim()||"Auto domain",we=n.trim()||"Local owner",B=(f==null?void 0:f.status)==="proposed"?f.proposal:void 0,ee=(d==null?void 0:d.plan)??(f==null?void 0:f.plan)??Pl(r,a,i,n,C),he=(((me=ee.pages[0])==null?void 0:me.tiles)??[]).filter(Gn),X=(f==null?void 0:f.warnings)??[],K=Yn(ee);if(e==="ai"){const N=(B==null?void 0:B.tiles)??[],E=N.filter(y=>y.certification==="certified").length,se=N.filter(y=>y.certification==="reviewed_semantic").length,ve=N.filter(y=>x.has(y.id)).length,oe=new Set(N.map(y=>y.blockId).filter(Boolean)),ue=W.trim().toLowerCase(),xe=s.filter(y=>!oe.has(y.id)&&(!ue||y.name.toLowerCase().includes(ue)||(y.description??"").toLowerCase().includes(ue))),ae=((pe=ee.globalFilters)!=null&&pe.length?ee.globalFilters:((ye=ee.pages[0])==null?void 0:ye.filters)??[]).slice(0,4),Ce=y=>{const te=y.toLowerCase();return te.includes("kpi")||te.includes("metric")||te.includes("single")?"Σ":te.includes("table")?"▤":"▦"},H=y=>{const te=y.toLowerCase();return te.includes("kpi")||te.includes("single")?"KPI":te.includes("table")?"Table":te.includes("line")?"Line chart":te.includes("bar")?"Bar chart":y?y.charAt(0).toUpperCase()+y.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:"Build an app"}),t.jsx("p",{children:"One request. DQL finds certified blocks, binds filters, and opens a stakeholder-ready app."})]}),t.jsx("div",{className:"dql-app-flow-bubble",children:a}),h?t.jsxs("div",{className:"dql-app-buildstream",children:[t.jsx("span",{className:"dql-app-buildorb",children:t.jsx(Re,{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(nt,{size:11,className:"ok"}),"Matched domain ",t.jsx("code",{children:le.toLowerCase()})]}),t.jsxs("span",{style:{animationDelay:"0.8s"},children:[t.jsx(nt,{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,!h&&B?t.jsxs("div",{className:"dql-app-buildstream proposal",children:[t.jsx("span",{className:"dql-app-buildorb still",children:t.jsx(Re,{size:14})}),t.jsxs("div",{className:"dql-app-buildbody wide",children:[t.jsxs("div",{className:"dql-app-proposal-lede",children:["Found ",t.jsxs("strong",{children:[E," certified block",E===1?"":"s"]}),se>0?` and ${se} reviewed semantic view${se===1?"":"s"}`:""," for your app. Uncheck any you don't need, or add more — everything ships governed."]}),t.jsxs("div",{className:"dql-app-proposal-card",children:[N.map(y=>{const te=x.has(y.id),ie=y.certification==="certified",Le=y.certification==="reviewed_semantic";return t.jsxs("button",{type:"button",className:`dql-app-proposal-row ${te?"":"off"}`,onClick:()=>S(y.id),children:[t.jsx("span",{className:`dql-app-prop-check ${te?"on":""}`,children:te?t.jsx(nt,{size:10,strokeWidth:3.2}):null}),t.jsx("span",{className:`dql-app-prop-glyph ${ie&&Ce(y.viz)==="▤"?"green":""}`,children:Ce(y.viz)}),t.jsxs("span",{className:"dql-app-prop-name",children:[t.jsx("b",{children:y.blockId??y.title}),t.jsx("small",{children:y.description??y.question??y.title})]}),t.jsx("span",{className:`dql-app-prop-badge ${ie?"certified":"draft"}`,children:ie?"Certified":Le?"Reviewed semantic":"Draft"}),t.jsx("span",{className:"dql-app-prop-viz",children:H(y.viz)})]},y.id)}),t.jsxs("button",{type:"button",className:"dql-app-addmore",onClick:()=>V(y=>!y),children:[t.jsx(kt,{size:13,strokeWidth:2.2})," Add more blocks"]}),_?t.jsxs("div",{className:"dql-app-addmore-panel",children:[t.jsxs("div",{className:"dql-app-addmore-search",children:[t.jsx(Be,{size:12}),t.jsx("input",{value:W,onChange:y=>de(y.target.value),placeholder:`Search ${s.length} certified block${s.length===1?"":"s"}…`})]}),o?t.jsx("div",{className:"dql-app-addmore-hint",children:"Loading certified blocks…"}):null,xe.slice(0,6).map(y=>t.jsxs("button",{type:"button",className:"dql-app-addmore-row",onClick:()=>{de(""),D(y.id)},children:[t.jsx(kt,{size:12,strokeWidth:2.2}),t.jsx("span",{children:y.name}),t.jsxs("small",{children:[y.domain??"certified"," · ",y.status]})]},y.id)),!o&&xe.length===0?t.jsx("div",{className:"dql-app-addmore-hint",children:"No more matching certified blocks."}):null]}):null]}),ae.length>0?t.jsxs("div",{className:"dql-app-detected",children:[t.jsx("span",{className:"dql-app-detected-label",children:"Detected filters"}),ae.map(y=>t.jsxs("span",{className:"dql-app-detected-pill",children:[y.label," · ",t.jsx("strong",{children:zt(y.default??"Any")})]},y.id))]}):null,B.gaps.length>0?t.jsx("div",{className:"dql-app-flow-gaps",children:B.gaps.slice(0,3).map(y=>t.jsxs("span",{children:[t.jsx(Qe,{size:12})," ",y.question]},y.id))}):null,t.jsxs("div",{className:"dql-app-flow-actions",children:[t.jsxs("button",{type:"button",className:"dql-app-flow-build",onClick:q,disabled:c||ve===0,children:[t.jsx(Ye,{size:13}),c?"Building app…":`Build app with ${ve} governed tile${ve===1?"":"s"}`]}),t.jsx("button",{type:"button",className:"dql-app-flow-reset",onClick:z,children:"Start over"})]})]})]}):null,!h&&!B?t.jsxs("div",{className:"dql-app-flow-actions",children:[t.jsxs("button",{type:"button",className:"dql-app-flow-build",onClick:Q,children:[t.jsx(Re,{size:13})," Find certified blocks"]}),t.jsx("button",{type:"button",className:"dql-app-flow-reset",onClick:z,children:"Start over"})]}):null,T?t.jsx("div",{className:"dql-app-error",children:T}):null,X.length>0&&!h?t.jsx("div",{className:"dql-app-flow-gaps",children:X.slice(0,2).map((y,te)=>t.jsxs("span",{children:[t.jsx(Qe,{size:12})," ",y]},`${y}-${te}`))}):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:z,children:[t.jsx(Vr,{size:14}),t.jsx("span",{children:"Apps"})]}),t.jsx("span",{className:"dql-app-name-input",children:t.jsx("input",{value:r,onChange:N=>$(N.target.value),spellCheck:!1})}),t.jsx(Oe,{tone:d?"agentic":"draft",children:d?"generated":"draft"}),t.jsxs("div",{className:"dql-app-mode-seg",children:[t.jsxs("button",{type:"button",onClick:()=>Y("ai"),children:[t.jsx(Re,{size:15})," Build AI"]}),t.jsxs("button",{type:"button",className:"on",onClick:()=>Y("classic"),children:[t.jsx(er,{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"]}),d?t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:re,children:"Open app"}):null,t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:Q,disabled:h,children:h?"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:a,onChange:N=>k(N.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:Q,disabled:h||!a.trim(),title:"Build app",children:h?t.jsx(Me,{size:19}):t.jsx(Ia,{size:19})})]}),t.jsxs("div",{className:"dql-app-suggestions dql-app-ai-start-examples","aria-label":"Prompt examples",children:[t.jsx("span",{children:"Examples"}),l.slice(0,4).map(N=>t.jsx("button",{type:"button",onClick:()=>{k(N.prompt),L(N.domain)},children:N.title},N.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:[le," / ",we]}),t.jsx(Lr,{size:14})]}),t.jsxs("div",{className:"dql-app-ai-context-grid",children:[t.jsxs("label",{children:["Domain",t.jsx("input",{value:i,onChange:N=>L(N.target.value)})]}),t.jsxs("label",{children:["Owner",t.jsx("input",{value:n,onChange:N=>M(N.target.value)})]}),t.jsxs("label",{children:["Build mode",t.jsxs("select",{value:e,onChange:N=>Y(N.target.value),children:[t.jsx("option",{value:"ai",children:"AI first"}),t.jsx("option",{value:"classic",children:"Manual block selection"})]})]})]}),e==="classic"?t.jsx(_n,{title:"Manual certified block selection",subtitle:`${p.size} selected`,catalog:s,loading:o,selectedBlocks:p,onToggleBlock:I}):null]}),B&&!d?t.jsx("div",{style:{border:`1px solid ${Ne[A].cellBorder}`,background:Ne[A].appBg,borderRadius:10,padding:14},children:t.jsx(Ta,{proposal:B,t:Ne[A],selected:x,onToggle:S,onCreate:q,busy:c,error:null})}):null,d?t.jsxs("div",{className:"dql-app-ai-result dql-app-ai-start-result",children:["Generated ",t.jsx("b",{children:d.plan.name})," with ",d.validation.certifiedTiles," certified app tile",d.validation.certifiedTiles===1?"":"s"," and ",K," scoped report",K===1?"":"s",".",f?t.jsxs("small",{children:["Session ",f.id]}):null]}):null,T?t.jsx("div",{className:"dql-app-error",children:T}):null]}),t.jsxs("aside",{className:"dql-app-ai-start-context",children:[t.jsxs("section",{className:"dql-app-ai-context-card",children:[t.jsx(Ft,{title:"Certified blocks found",meta:ee.coverage?`${ee.coverage.certifiedTiles} certified · ${ee.coverage.gaps} gap${ee.coverage.gaps===1?"":"s"}`:`${he.length||s.length} matches`}),t.jsxs("div",{className:"dql-app-ai-evidence-list",children:[(he.length?he:s.slice(0,4)).map((N,E)=>"name"in N?t.jsxs("div",{className:"dql-app-ai-evidence-row",children:[t.jsx("span",{children:t.jsx(Fe,{size:14})}),t.jsxs("div",{children:[t.jsx("b",{children:N.name}),t.jsx("small",{children:N.description})]}),t.jsx(Oe,{tone:N.status==="certified"?"certified":"draft",children:N.status})]},`catalog-${N.id}-${E}`):t.jsxs("div",{className:"dql-app-ai-evidence-row",children:[t.jsx("span",{children:t.jsx(Fe,{size:14})}),t.jsxs("div",{children:[t.jsx("b",{children:N.title}),t.jsx("small",{children:N.description??N.rationale??"Certified DQL block"})]}),t.jsx(Oe,{tone:"certified",children:"Certified"})]},`plan-${N.id}-${E}`)),!he.length&&!s.length?t.jsx(qe,{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(Ft,{title:"Detected app filters",meta:"bound to block params"}),t.jsxs("div",{className:"dql-app-ai-filter-preview",children:[((ce=ee.globalFilters)!=null&&ce.length?ee.globalFilters:((be=ee.pages[0])==null?void 0:be.filters)??[]).slice(0,4).map(N=>t.jsxs("span",{children:[t.jsx("small",{children:N.label}),t.jsx("b",{children:zt(N.default??"Any")})]},N.id)),(J=ee.globalFilters)!=null&&J.length||(P=(b=ee.pages[0])==null?void 0:b.filters)!=null&&P.length?null:t.jsxs(t.Fragment,{children:[t.jsxs("span",{children:[t.jsx("small",{children:"Domain"}),t.jsx("b",{children:le})]}),t.jsxs("span",{children:[t.jsx("small",{children:"Owner"}),t.jsx("b",{children:we})]}),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(Ft,{title:"Possible deeper analysis",meta:"Copilot asks for context first"}),t.jsxs("div",{className:"dql-app-ai-gap-list",children:[((U=ee.missingEvidence)!=null&&U.length?ee.missingEvidence:X).slice(0,4).map((N,E)=>t.jsxs("span",{children:[t.jsx(Qe,{size:13})," ",N]},`${N}-${E}`)),!((G=ee.missingEvidence)!=null&&G.length)&&!X.length?t.jsxs("span",{children:[t.jsx(Qe,{size:13})," Driver explanations, new grains, and reusable block proposals require typed context before DQL creates SQL."]}):null]})]})]})]})})]})}function Ln({app:e,appDoc:r,dashboardDoc:a,loading:i,experience:n,section:l,explainOpen:s,explainExpanded:o,dashboardFilters:p,dashboardFilterValues:d,themeMode:f,variables:x,onBack:c,onExperienceChange:A,onSectionChange:S,onDashboardFilterChange:q,onApplyDashboardFilters:h,onResetDashboardFilters:T,onExplainChange:z,onExplainExpandedChange:Y,onAddPage:$,onOpenDashboard:k,onDashboardChanged:L,onInvestigationsChanged:M,onOpenLineageNode:I}){var Ce;const{dispatch:Q}=At(),re=(a==null?void 0:a.dashboard.layout.items.filter(H=>!!H.block).length)??0,D=((Ce=r==null?void 0:r.drafts)==null?void 0:Ce.length)??0,_=u.useMemo(()=>ua((a==null?void 0:a.dashboard)??null).map(H=>H.blockId),[a]),V=_.join("|"),[W,de]=u.useState(_[0]??null),[C,le]=u.useState(null),[we,B]=u.useState(null),[ee,ne]=u.useState(null),[he,X]=u.useState(null),[K,me]=u.useState("idle"),[pe,ye]=u.useState(""),[ce,be]=u.useState("idle"),[J,b]=u.useState(""),P=u.useCallback(H=>{le(H)},[]);u.useCallback(H=>{ne({...H,nonce:Date.now()}),S("research"),z(!0)},[z,S]);const U=u.useCallback(H=>{X(H)},[]),G=u.useCallback(()=>{ne(null)},[]),N=u.useCallback((H,y)=>{var te,ie;if(de(H),n==="view"){Q({type:"OPEN_GLOBAL_AI",audience:"stakeholder",context:{title:"App copilot",scopeHint:qt(e==null?void 0:e.name)?`Follow up on ${qt(e==null?void 0:e.name)}`:"Follow up on this tile",selectedObject:{kind:"block",id:H,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:H},suggestedQuestions:(ie=(te=a==null?void 0:a.app)==null?void 0:te.copilot)==null?void 0:ie.suggestedQuestions},autoRun:{text:y,mode:"auto"}});return}z(!0),B({text:y,nonce:Date.now()})},[Q,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,z]);u.useEffect(()=>{n==="view"&&(l==="notebooks"||l==="ai"||l==="drafts"||l==="settings")&&S("dashboards")},[n,l,S]),u.useEffect(()=>{if(_.length===0){W!==null&&de(null);return}(!W||!_.includes(W))&&de(_[0])},[_,V,W]),u.useEffect(()=>{le(null),X(null)},[e==null?void 0:e.id,a==null?void 0:a.dashboard.id]);const E=!!(e&&a&&(l==="dashboards"||l==="research")),se=E&&s,ve=H=>{me(H),H!=="ready"&&window.setTimeout(()=>me("idle"),1800)},oe=async()=>{var te;const H=nl(e,r,a);ye(H);let y=!1;try{typeof navigator<"u"&&((te=navigator.clipboard)!=null&&te.writeText)&&(await navigator.clipboard.writeText(H),y=!0)}catch{y=!1}if(!y){const ie=document.createElement("textarea");ie.value=H,ie.style.position="fixed",ie.style.left="-9999px",document.body.appendChild(ie),ie.focus(),ie.select(),y=document.execCommand("copy"),document.body.removeChild(ie)}ve(y?"copied":"ready")},ue=()=>{const H=ll(e,r,a),y=new Blob([H],{type:"text/markdown;charset=utf-8"}),te=URL.createObjectURL(y),ie=document.createElement("a");ie.href=te,ie.download=`${(e==null?void 0:e.id)??(r==null?void 0:r.app.id)??"dql-app"}-brief.md`,document.body.appendChild(ie),ie.click(),document.body.removeChild(ie),URL.revokeObjectURL(te),ve("downloaded")},xe=async()=>{if(!(e!=null&&e.id))return;be("running"),b("");const H=await Z.promoteApp(e.id,{lifecycle:"review"});if(!H.ok){be("error"),b(H.error);return}be("done"),b(`${H.paths.length} shared files updated${H.removedLocalTiles?`, ${H.removedLocalTiles} local AI tile removed`:""}.`),window.setTimeout(()=>be("idle"),2400)},ae=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:c,title:"Back to apps",children:[t.jsx(Vr,{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(Oe,{tone:"certified",children:D>0?`${re} certified`:"All certified"}),D>0?t.jsxs(Oe,{tone:"draft",children:[D," 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:()=>A("view"),title:"Clean stakeholder view",children:[t.jsx(_r,{size:12})," View"]}),t.jsxs("button",{type:"button",className:n==="build"?"on":"",onClick:()=>A("build"),title:"Rearrange tiles and edit this app",children:[t.jsx(Hr,{size:12})," Edit"]})]}),t.jsxs("div",{className:"dql-app-view-actions",children:[t.jsx(kn,{app:(r==null?void 0:r.app)??null}),n==="build"?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void xe(),disabled:ce==="running",children:[t.jsx(Fe,{size:14})," ",ce==="running"?"Promoting":"Promote"]}):null,t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line dql-apps-btn-icon",title:K==="copied"?"Copied handoff":"Share local app handoff",onClick:()=>void oe(),children:K==="copied"?t.jsx(nt,{size:15}):t.jsx(Qa,{size:15})}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line dql-apps-btn-icon",title:K==="downloaded"?"Brief saved":"Download app brief",onClick:ue,children:K==="downloaded"?t.jsx(nt,{size:15}):t.jsx(wa,{size:15})}),K==="ready"?t.jsxs("div",{className:"dql-app-share-popover",children:[t.jsx("b",{children:"Local handoff"}),t.jsx("textarea",{readOnly:!0,value:pe,onFocus:H=>H.currentTarget.select()})]}):null,ce==="done"||ce==="error"?t.jsx("div",{className:`dql-app-promote-popover ${ce==="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(Ye,{size:14})," ",(e==null?void 0:e.domain)??(a==null?void 0:a.dashboard.metadata.domain)??"DQL App"]}),ae?t.jsx("span",{className:"dql-app-title-context",children:qt(e==null?void 0:e.name)||"App"}):null,n==="build"?t.jsx(Oe,{tone:"draft",children:"Customizing"}):null]}),t.jsx("h1",{children:qt(ae?a==null?void 0:a.dashboard.metadata.title:e==null?void 0:e.name)||"App"}),t.jsx("p",{children:xa((ae?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(Mn,{appDoc:r,section:l,experience:n,onChange:S}),l==="dashboards"&&(r!=null&&r.dashboards.length)?t.jsx(On,{dashboards:r.dashboards,activeDashboardId:a==null?void 0:a.dashboard.id,isBuild:n==="build",onOpen:k,onAdd:$}):null,E?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:()=>z(!s),children:t.jsx(Ct,{size:15})}):null,ae?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&&I(`dashboard:${e.id}/${a.dashboard.id}`)},children:t.jsx(Er,{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&&p.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(Xn,{filters:p,values:d,onChange:q}),t.jsxs("div",{className:"dql-app-filter-row-actions",children:[t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:T,children:"Reset"}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:h,children:"Apply"})]})]}):null,i?t.jsx(qe,{title:"Loading app...",detail:"Reading dashboard files and running local blocks."}):l==="dashboards"&&a&&e?t.jsx(Ua,{appId:e.id,dashboard:a.dashboard,editable:n==="build",embeddedHeader:!0,variables:x,selectedBlockId:W,onBlockFocus:de,onAskBlock:N,onOpenLineageNode:I,copilotOpen:s,onCopilotChange:z,onDashboardChanged:L,onRunChange:P}):l==="notebooks"?t.jsx(Vn,{appDoc:r}):l==="research"?t.jsx(Wn,{appDoc:r,dashboardDoc:a,seed:ee,themeMode:f,onSeedHandled:G,onDashboardChanged:L,onInvestigationsChanged:M,onActiveInvestigationChange:U}):l==="ai"?t.jsx(Hn,{appDoc:r}):l==="drafts"?t.jsx(Qn,{appDoc:r}):l==="settings"?t.jsx(Kn,{appDoc:r}):t.jsx(qe,{title:"No dashboard page selected.",detail:"Choose a dashboard page or add one in Build mode."})]}),se?t.jsx(Fn,{app:e,appDoc:r,dashboardDoc:a,dashboardRun:C,variables:x,selectedBlockId:W,askSeed:we,themeMode:f,expanded:o,onToggleExpanded:()=>Y(!o),onClose:()=>z(!1)}):null]})]})]})}function _n({title:e,subtitle:r,catalog:a,loading:i,selectedBlocks:n,onToggleBlock:l}){const[s,o]=u.useState(""),p=u.useMemo(()=>{const d=s.trim().toLowerCase();return d?a.filter(f=>[f.name,f.domain,f.status,f.description,f.owner??"",...f.tags??[]].join(" ").toLowerCase().includes(d)):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(er,{size:14})," ",e]}),t.jsx("b",{children:r})]}),t.jsxs("label",{className:"dql-app-palette-search",children:[t.jsx(Be,{size:14}),t.jsx("input",{value:s,onChange:d=>o(d.target.value),placeholder:"Search blocks, domains, tags"})]}),i?t.jsx(qe,{title:"Loading blocks...",detail:"Finding certified blocks for this domain.",compact:!0}):null,!i&&p.length===0?t.jsx(qe,{title:"No blocks found.",detail:"Try another domain or search term.",compact:!0}):null,p.slice(0,24).map((d,f)=>{const x=n.has(d.id);return t.jsxs("button",{type:"button",className:x?"selected":"",onClick:()=>l(d.id),children:[t.jsx("span",{className:"dql-app-palette-icon",children:t.jsx(rr,{size:14})}),t.jsxs("span",{children:[t.jsx("b",{children:d.name}),t.jsxs("small",{children:[d.domain," / ",d.chartType??"table"]})]}),t.jsx("i",{children:x?"using":d.status})]},`${d.id}-${f}`)}),p.length>24?t.jsxs("div",{className:"dql-app-palette-more",children:[p.length-24," more matches"]}):null]})}function Mn({appDoc:e,section:r,experience:a,onChange:i}){var s,o,p,d,f;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(Ye,{size:14})}]:[{id:"dashboards",label:"App",count:(e==null?void 0:e.dashboards.length)??0,icon:t.jsx(Ye,{size:14})},{id:"research",label:"Analysis",count:n,icon:t.jsx(Be,{size:14})},{id:"notebooks",label:"Notebooks",count:((o=e==null?void 0:e.notebooks)==null?void 0:o.length)??((p=e==null?void 0:e.app.notebooks)==null?void 0:p.length)??0,icon:t.jsx(Qr,{size:14})},{id:"ai",label:"Pins",count:((d=e==null?void 0:e.aiPins)==null?void 0:d.length)??0,icon:t.jsx(Ct,{size:14})},{id:"drafts",label:"Drafts",count:((f=e==null?void 0:e.drafts)==null?void 0:f.length)??0,icon:t.jsx(tr,{size:14})},{id:"settings",label:"Settings",icon:t.jsx(Me,{size:14})}];return t.jsx("nav",{className:"dql-app-section-tabs","aria-label":"App sections",children:l.map(x=>t.jsxs("button",{className:r===x.id?"on":"","data-app-section":x.id,onClick:()=>i(x.id),title:x.label,"aria-label":`${x.label}${x.count!==void 0?` ${x.count}`:""}`,children:[t.jsx("i",{className:"dql-app-tab-icon",children:x.icon}),t.jsx("span",{className:"dql-app-tab-label",children:x.label}),x.count!==void 0?t.jsx("b",{children:x.count}):null]},x.id))})}function On({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(rr,{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(kt,{size:14})}):null]})}function Fn({app:e,appDoc:r,dashboardDoc:a,dashboardRun:i,variables:n,selectedBlockId:l,askSeed:s,themeMode:o,expanded:p,onToggleExpanded:d,onClose:f}){const x=Ne[o],c=(a==null?void 0:a.dashboard)??null,S=u.useMemo(()=>ua(c,i),[c,i]).find(re=>re.blockId===l)??null,q=S?i==null?void 0:i.tiles.find(re=>re.tileId===S.tileId||re.blockId===S.blockId):null,h=(e==null?void 0:e.id)??(r==null?void 0:r.app.id)??"app",T=(c==null?void 0:c.id)??"dashboard",z=Or(`app:${h}:${T}`),[Y,$]=u.useState(!1),k=ke((e==null?void 0:e.name)??(r==null?void 0:r.app.name)??(c==null?void 0:c.metadata.title)??"App workspace"),L=ke((c==null?void 0:c.metadata.title)??"Dashboard"),M=S?`Focused on ${ke(S.title)} in ${L}`:`Scoped to ${L}`,I=S?{kind:"block",id:S.blockId,title:S.title}:c?{kind:"dashboard",id:c.id,title:c.metadata.title}:{kind:"app",id:h,title:k},Q=u.useMemo(()=>{var re,D,_,V,W;return{surface:"apps",appId:h,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:c==null?void 0:c.id,dashboardTitle:c==null?void 0:c.metadata.title,dashboardDescription:c==null?void 0:c.metadata.description,dashboardFilters:n,selectedBlock:S?{blockId:S.blockId,tileId:S.tileId,title:S.title,visualization:S.viz,status:q==null?void 0:q.status,certificationStatus:q==null?void 0:q.certificationStatus,rowCount:(re=q==null?void 0:q.result)==null?void 0:re.rowCount,columns:(_=(D=q==null?void 0:q.result)==null?void 0:D.columns)==null?void 0:_.slice(0,12),sampleRows:il((V=q==null?void 0:q.result)==null?void 0:V.rows,(W=q==null?void 0:q.result)==null?void 0:W.columns)}:void 0}},[e,r,h,c,S,q,n]);return t.jsx(Mr,{t:x,title:"App AI",subtitle:k,expanded:p,onToggleExpanded:d,onClose:f,onNewChat:z.resetThreadId,running:Y,ariaLabel:"App AI",className:"dql-app-explain-panel dql-app-assistant-panel",children:t.jsx(u.Suspense,{fallback:t.jsx("div",{style:{padding:16,fontSize:12,color:x.textSecondary},children:"Loading App AI…"}),children:t.jsx(Nn,{themeMode:o,title:"App AI",scopeHint:M,audience:"stakeholder",selectedObject:I,workspaceContext:Q,initialMode:"auto",autoRun:s!=null&&s.text?{text:s.text,mode:"ask",nonce:s.nonce}:void 0,threadId:z.threadId,onThreadIdChange:z.onThreadIdChange,onRunningChange:$,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."}]},`${h}:${T}`)})})}function Wn({appDoc:e,dashboardDoc:r,seed:a,themeMode:i,onSeedHandled:n,onDashboardChanged:l,onInvestigationsChanged:s,onActiveInvestigationChange:o}){var J;const p=e==null?void 0:e.app.id,d=r==null?void 0:r.dashboard.id,f=Ne[i],[x,c]=u.useState(()=>(e==null?void 0:e.investigations)??[]),[A,S]=u.useState(null),[q,h]=u.useState(!1),[T,z]=u.useState(null),[Y,$]=u.useState(null),[k,L]=u.useState("preview"),[M,I]=u.useState(""),[Q,re]=u.useState(!1),[D,_]=u.useState(!1),[V,W]=u.useState(null);u.useEffect(()=>{if(!p){c([]),S(null);return}let b=!1;return h(!0),Z.listAppInvestigations(p).then(P=>{if(b)return;$(null),c(P);const U=Dt(P);S(G=>{var N,E;return G??((N=U.find(se=>se.status==="ready"))==null?void 0:N.id)??((E=U[0])==null?void 0:E.id)??null})}).finally(()=>{b||h(!1)}),()=>{b=!0}},[p]),u.useEffect(()=>{s(x)},[x,s]),u.useEffect(()=>{if(!a||!p)return;let b=!1;const P={dashboardId:a.dashboardId??d,sourceTileId:a.sourceTileId,sourceBlockId:a.sourceBlockId,title:a.title,question:a.question,intent:a.intent,context:a.context,generatedSql:a.generatedSql,run:!0},U=pt(a.title??a.question)||"requested follow-up",G=`${p}:${JSON.stringify(P)}`,N=async()=>{z("create"),W(U),$(null);let se=Ot.get(G);se||(se=Z.createAppInvestigation(p,P),Ot.set(G,se),se.finally(()=>{window.setTimeout(()=>Ot.delete(G),5e3)}));const ve=await se;if(b)return;if(z(null),!ve.ok){$(ve.error),W(null),n();return}const oe=ve.investigation,ue=xe=>{c(ae=>it(ae,xe)),S(xe.id),L("preview"),_(!1),xe.status!=="draft"&&xe.status!=="running"&&W(null)};if(ue(oe),oe.status!=="draft"&&oe.status!=="running"){n();return}z(oe.id);for(let xe=0;xe<20;xe+=1){if(await new Promise(Ce=>{window.setTimeout(Ce,1e3)}),b)return;const ae=await Z.getAppInvestigation(p,oe.id);if(b)return;if(ae&&ae.status!=="draft"&&ae.status!=="running"){z(null),ue(ae),n();return}}n(),z(null),W(null),$("Analysis is still running. Reopen it or refresh to load the latest proof.")},E=window.setTimeout(()=>void N(),0);return()=>{b=!0,window.clearTimeout(E)}},[a==null?void 0:a.nonce,p,d,n]);const de=u.useMemo(()=>Dt(x),[x]),C=de.find(b=>b.id===A)??de.find(b=>b.status==="ready")??de[0]??null;u.useEffect(()=>(o(C),()=>o(null)),[C,o]);const le=de.filter(b=>b.id!==(C==null?void 0:C.id)).filter(b=>Q||b.status!=="error").slice(0,Q?40:5),we=Math.max(0,de.length-(C?1:0)-le.length),B=C?pl(C):null,ee=B?vl(B):"",ne=T==="create"||!!V,he=ne&&!!V,X=ne&&!C;u.useEffect(()=>{I((C==null?void 0:C.generatedSql)??"")},[C==null?void 0:C.id,C==null?void 0:C.generatedSql]);const K=async(b,P)=>{if(!p)return null;z(b.id),$(null);const U=P==null?void 0:P.trim(),G=await Z.runAppInvestigation(p,b.id,U?{generatedSql:U}:void 0);return z(null),G.ok?(c(N=>it(N,G.investigation)),L("preview"),G.investigation):($(G.error),null)},me=async b=>{if(!p)return null;z(`rebuild:${b.id}`),$(null);const P=await Z.runAppInvestigation(p,b.id,{repairMode:"rebuild_from_certified"});return z(null),P.ok?(c(U=>it(U,P.investigation)),L(P.investigation.error?"sql":"preview"),P.investigation):($(P.error),null)},pe=async b=>{if(!p)return null;z(`pin:${b.id}`),$(null);const P=await Z.pinAppInvestigation(p,b.id,{dashboardId:b.dashboardId??d,title:b.title});return z(null),P.ok?(c(U=>it(U,P.investigation)),S(P.investigation.id),P.dashboard&&l(P.dashboard),P.investigation):($(P.error),null)},ye=async b=>{if(!p)return;if(!b.generatedSql){$("Add reviewed SQL before creating a draft block.");return}const P=b.pinnedAiPinId?b:await pe(b),U=P==null?void 0:P.pinnedAiPinId;if(!U)return;z(`promote:${b.id}`),$(null);const G=await Z.promoteAiPin(p,U);if(z(null),!G.ok){$(G.error??"Draft block could not be created.");return}const N=await Z.getAppInvestigation(p,b.id);N&&c(E=>it(E,N))},ce=async b=>{const P=M.trim();let U=b;if(P&&P!==(b.generatedSql??"").trim()){const G=await K(b,P);if(!G)return;U=G}await ye(U)},be=async b=>{const P=M.trim();let U=b;if(P&&P!==(b.generatedSql??"").trim()){const G=await K(b,P);if(!G)return null;U=G}return pe(U)};return e?t.jsxs("div",{className:`dql-app-research-shell ${D||!C&&!X?"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(Be,{size:14})," Analysis"]}),t.jsxs("div",{children:[t.jsx("b",{children:x.length}),C?t.jsx("button",{type:"button",onClick:()=>_(!1),title:"Close analysis history",children:"Close"}):null]})]}),q?t.jsx(qe,{title:"Loading analysis...",detail:"Reading local app analysis.",compact:!0}):null,Y?t.jsx("div",{className:"dql-app-error",children:Y}):null,!q&&x.length===0?t.jsx(qe,{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(Tr,{item:C,selected:!0,onClick:()=>{$(null),S(C.id),L("preview"),_(!1)}})]}):null,le.length?t.jsx("div",{className:"dql-app-research-group-label",children:"Recent history"}):null,le.map(b=>t.jsx(Tr,{item:b,selected:(C==null?void 0:C.id)===b.id,onClick:()=>{$(null),S(b.id),L("preview"),_(!1)}},b.id)),we>0?t.jsxs("button",{type:"button",className:"dql-app-research-history-toggle",onClick:()=>re(b=>!b),children:[t.jsx("span",{children:Q?"Hide older runs":`Show ${we} older run${we===1?"":"s"}`}),t.jsx("small",{children:Q?"Keep the current analysis focused":"Includes failed and superseded analysis attempts"})]}):null]})]}),t.jsx("section",{className:"dql-app-research-detail",children:he?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:V})]}),x.length?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>_(b=>!b),children:[t.jsx(Be,{size:13})," ",D?"Hide history":`Analysis history (${x.length})`]}):null]}),Y?t.jsx("div",{className:"dql-app-error",children:Y}):null,t.jsxs("div",{className:"dql-app-research-creating active",children:[t.jsx(Me,{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 "',V,'". 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&&B?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:ga(C)})]}),t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>_(b=>!b),children:[t.jsx(Be,{size:13})," ",D?"Hide history":`Memo history (${x.length})`]})]}),ne||T===C.id||C.status==="running"?t.jsxs("div",{className:`dql-app-research-status ${ne?"opening":""}`,children:[t.jsx(Me,{size:14}),t.jsxs("div",{children:[t.jsx("span",{children:ne?"Opening a new business memo...":"Refreshing the memo from certified evidence, active filters, and optional preview proof..."}),V?t.jsx("small",{children:V}):null]})]}):null,Y?t.jsx("div",{className:"dql-app-error",children:Y}):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(Be,{size:13})," Business memo"]}),t.jsx(Oe,{tone:C.status==="error"?"draft":"agentic",children:C.reviewStatus})]}),t.jsx("h2",{children:B.title}),t.jsx("p",{children:B.scope}),t.jsx("div",{className:"dql-app-report-context-line",children:B.contextFacts.map(b=>t.jsxs("span",{children:[t.jsx("b",{children:b.label}),b.value]},b.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 be(C),disabled:T===`pin:${C.id}`,children:[t.jsx(Va,{size:13})," ",C.pinnedAiPinId?"Pinned to app":"Pin insight"]}),t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:()=>void ce(C),disabled:!(M.trim()||C.generatedSql)||T===`promote:${C.id}`,children:[t.jsx(tr,{size:13})," ",T===`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 K(C,M),disabled:T===C.id,children:[t.jsx(Me,{size:13})," ",T===C.id?"Refreshing...":"Refresh memo"]}),(J=B.previewIssue)!=null&&J.canRebuild?t.jsxs("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:()=>void me(C),disabled:T===`rebuild:${C.id}`,children:[t.jsx(Me,{size:13})," ",T===`rebuild:${C.id}`?"Rebuilding...":"Rebuild SQL"]}):null]})]})]}),B.previewIssue?t.jsxs("div",{className:"dql-app-report-warning",children:[t.jsx(Qe,{size:14}),t.jsx("span",{children:B.previewIssue.message})]}):null]}),t.jsx("section",{className:"dql-app-report-section dql-app-report-paper",children:B.sections.length?t.jsx(yl,{sections:B.sections}):t.jsx(In,{text:ee,t:f,compact:!0})}),B.keyNumbers.length||B.drivers.length?t.jsxs("section",{className:`dql-app-report-section dql-app-report-evidence-story ${B.keyNumbers.length&&B.drivers.length?"":"single"}`,children:[B.keyNumbers.length?t.jsxs("div",{children:[t.jsx("h3",{children:B.intent==="segment_compare"?"Segment numbers":B.intent==="diagnose_change"?"Movement numbers":"Key numbers"}),t.jsx("div",{className:"dql-app-report-numbers",children:B.keyNumbers.map(b=>t.jsxs("div",{className:"dql-app-report-number",children:[t.jsx("span",{children:b.label}),t.jsx("b",{children:b.value}),t.jsx("small",{children:b.detail})]},b.label))})]}):null,B.drivers.length?t.jsxs("div",{children:[t.jsx("h3",{children:B.intent==="anomaly_investigation"?"Exception view":B.intent==="entity_drilldown"?"Entity view":"Driver view"}),t.jsx(kl,{drivers:B.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(Lr,{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(b=>t.jsx("button",{type:"button",className:k===b?"on":"",onClick:()=>L(b),children:b==="assumptions"?"Caveats":ke(b)},b))})]}),t.jsx(Al,{investigation:C,tab:k,sqlDraft:M,onSqlDraftChange:I})]})]})]}):t.jsxs(t.Fragment,{children:[Y?t.jsx("div",{className:"dql-app-error",children:Y}):null,X?t.jsxs("div",{className:"dql-app-research-creating",children:[t.jsx(Me,{size:22}),t.jsx("span",{children:"Preparing business memo"}),t.jsx("h2",{children:"Writing business memo..."}),t.jsx("p",{children:V?`DQL is opening a scoped memo for "${V}".`:"DQL is using the Copilot context, active filters, certified block evidence, and any available preview proof to create the main-canvas memo."})]}):t.jsx(qe,{title:"Start analysis from Copilot.",detail:"Ask a follow-up, add context, then review the analysis here."})]})})]}):t.jsx(qe,{title:"No App selected.",detail:"Choose an App before writing analysis."})}function Tr({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:ga(e)}),t.jsx("small",{children:Nl(e)})]})}function Vn({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(Ge,{icon:t.jsx(Qr,{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(qe,{title:"No notebooks attached.",detail:"Attach analysis notebooks in Build mode when this App needs supporting work."})}function Hn({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(Ge,{icon:t.jsx(Ct,{size:16}),children:[t.jsx("b",{children:a.title}),t.jsxs("span",{children:[a.certification," / ",a.reviewStatus]})]},a.id))}):t.jsx(qe,{title:"No pinned insights yet.",detail:"Use Copilot from a dashboard page, create analysis, then add useful reviewed insights to this App."})}function Qn({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(Ge,{icon:t.jsx(tr,{size:16}),children:[t.jsx("b",{children:a.name}),t.jsxs("span",{children:[a.reviewStatus??"needs review"," / ",a.path]})]},a.path))}):t.jsx(qe,{title:"No drafts.",detail:"Generated and promoted draft blocks will appear here for review."})}function Kn({appDoc:e}){var r;return e?t.jsxs("div",{className:"dql-app-settings-grid",children:[t.jsxs(Ge,{icon:t.jsx(Fe,{size:16}),children:[t.jsx("b",{children:"Owners"}),t.jsx("span",{children:e.app.owners.join(", ")})]}),t.jsxs(Ge,{icon:t.jsx(Me,{size:16}),children:[t.jsx("b",{children:"Lifecycle"}),t.jsx("span",{children:e.app.lifecycle??"draft"})]}),t.jsxs(Ge,{icon:t.jsx(er,{size:16}),children:[t.jsx("b",{children:"Policies"}),t.jsxs("span",{children:[e.app.policies.length," local access policies"]})]}),t.jsxs(Ge,{icon:t.jsx(Ye,{size:16}),children:[t.jsx("b",{children:"Homepage"}),t.jsx("span",{children:((r=e.app.homepage)==null?void 0:r.type)??"dashboard"})]})]}):t.jsx(qe,{title:"No App selected.",detail:"Choose an App to inspect its settings."})}function Ft({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 Gn(e){return e.kind==="certified_block"&&e.certification==="certified"}function Yn(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 Xn({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(Jn,{filter:i,value:r[i.id]??lt(i),onChange:n=>a(i,n)},i.id))})}function Jn({filter:e,value:r,onChange:a}){var f;const i=ke(e.id),n=Dn(e,r),l=e.sourceBlockId,s=e.bindsTo||e.id,o=(e.type==="string"||e.type==="select")&&!!l&&!((f=e.options)!=null&&f.length),[p,d]=u.useState(null);if(u.useEffect(()=>{if(!o||!l)return;let x=!1;return Z.dashboardFilterOptions(l,s).then(c=>{!x&&c&&c.options.length>0&&!c.truncated&&d(c.options)}),()=>{x=!0}},[l,s,o]),p&&p.length>0)return t.jsx(Wt,{icon:at(e),label:i,value:n,onChange:a,options:[["",`All ${i.toLowerCase()}`],...p.map(x=>[x,x])]});if(e.type==="select")return t.jsx(Wt,{icon:at(e),label:i,value:n,onChange:a,options:Zn(e)});if(e.type==="boolean")return t.jsx(Wt,{icon:at(e),label:i,value:String(!!r),onChange:x=>a(x==="true"),options:[["true","Yes"],["false","No"]]});if(e.type==="daterange"){const x=r&&typeof r=="object"&&!Array.isArray(r)?r:{},c=typeof x.start=="string"?x.start:"",A=typeof x.end=="string"?x.end:"",S=(q,h)=>a(q&&h?{start:q,end:h}: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:at(e)}),t.jsx("input",{type:"date",value:c,"aria-label":`${i} from`,onChange:q=>S(q.target.value,A)}),t.jsx("span",{className:"dql-app-filter-range-sep",children:"–"}),t.jsx("input",{type:"date",value:A,"aria-label":`${i} to`,onChange:q=>S(c,q.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:at(e)}),t.jsx("input",{type:e.type==="number"?"number":e.type==="date"?"date":"text",value:n,placeholder:i,onChange:x=>a(x.target.value)})]})}function at(e){return e.type==="date"||e.type==="daterange"||/season|year|date|time|period/i.test(e.id)?t.jsx(La,{size:13}):t.jsx(Kr,{size:13})}function Zn(e){var a;return((a=e.options)!=null&&a.length?e.options:[e.default].filter(i=>i!==void 0)).map(i=>[String(i),ke(String(i))])}function lt(e){var r;return e.default!==void 0?e.default:e.type==="number"?pa(e.id):e.type==="boolean"?!1:e.type==="select"?((r=e.options)==null?void 0:r[0])??"":""}function Dn(e,r){return r==null?String(lt(e)??""):e.type==="daterange"&&typeof r=="object"?JSON.stringify(r):String(r)}function Un(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 $r(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 Wt({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 Vt(e){return e.block?"blockId"in e.block?e.block.blockId??null:e.block.ref??null:null}function ua(e,r){if(!e)return[];const a=new Map(((r==null?void 0:r.tiles)??[]).map(p=>[p.tileId,p])),i=new Map(((r==null?void 0:r.tiles)??[]).filter(p=>p.blockId).map(p=>[p.blockId,p])),n=new Set(e.layout.items.filter(p=>Vt(p)&&Pr(p)).map(p=>Zt(`${p.title??""} ${Vt(p)??""}`)).filter(Boolean)),l=e.layout.items.map((p,d)=>{const f=Vt(p);if(!f)return null;const x=Zt(`${p.title??""} ${f}`);if(x&&n.has(x)&&!Pr(p))return null;const c=a.get(p.i)??i.get(f);return{block:{blockId:f,title:p.title??f,viz:p.viz.type,tileId:p.i},duplicateKeys:el(p,c,f),score:al(p,c,d)}}).filter(p=>!!p).sort((p,d)=>d.score-p.score),s=new Set,o=[];for(const p of l)if(!p.duplicateKeys.some(d=>s.has(d))){for(const d of p.duplicateKeys)s.add(d);o.push(p.block)}return o}function Pr(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 el(e,r,a){const i=[`block:${a}`],n=tl(r==null?void 0:r.result);n&&i.push(`result:${n}`);const l=Zt(`${e.title??""} ${a}`);return l&&i.push(`topic:${l}`),i}function tl(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=>rl(l[s]??l[e.columns.find(o=>o.toLowerCase()===s)??s])).join(","));return[...r,...a].join("|")}function rl(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 Zt(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 al(e,r,a){var n,l,s,o,p;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??((p=e.display)==null?void 0:p.trustState)??"").toLowerCase()==="certified"&&(i+=3e3),/codex\s+e2e|test|pasted/i.test(String(e.title??""))&&(i-=6e3),i}function il(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 qt(e){return String(e??"").replace(/\s+/g," ").replace(/[\s,;:.–—-]+$/,"").trim()}function ke(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 xa(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 zt(e){return e==null||e===""?"All":Array.isArray(e)?e.map(zt).join(", "):typeof e=="boolean"?e?"On":"Off":typeof e=="number"?e.toLocaleString():typeof e=="object"?JSON.stringify(e):String(e)}function fa(e,r){if(Array.isArray(r))return r.map(i=>fa(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):zt(r)}function nl(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(`
43
- `)}function ll(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)??[],p=(r==null?void 0:r.aiPins)??[],d=a==null?void 0:a.dashboard,f=(d==null?void 0:d.layout.items.map(c=>c.block?c.block.blockId??c.block.ref??c.title??c.i:null).filter(c=>!!c))??[];return`${[`# ${n}`,"",(e==null?void 0:e.description)??(d==null?void 0:d.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)??(d==null?void 0:d.metadata.domain)??"unknown"}`,`- Lifecycle: ${(e==null?void 0:e.lifecycle)??(i==null?void 0:i.lifecycle)??(d==null?void 0:d.metadata.lifecycle)??"draft"}`,`- Audience: ${(e==null?void 0:e.audience)??(i==null?void 0:i.audience)??(d==null?void 0:d.metadata.audience)??"stakeholder"}`,`- Owners: ${((e==null?void 0:e.owners)??(i==null?void 0:i.owners)??[]).join(", ")||"owner@local"}`,"","## Pages","",...l.length?l.map(c=>`- ${c.title} (${c.itemCount} tiles)`):["- No dashboard pages found."],"","## Governed Blocks","",...f.length?f.map(c=>`- ${c}`):["- No block-backed tiles found."],"","## Supporting Assets","",`- Notebooks: ${s.length}`,`- Pinned insights: ${p.length}`,`- Drafts needing review: ${o.length}`,""].join(`
44
- `)}
45
- `}function Oe({children:e,tone:r="certified"}){return t.jsx("span",{className:`dql-app-seal ${r}`,children:e})}function Ht({label:e,value:r}){return t.jsxs("span",{children:[t.jsx("small",{children:e}),t.jsx("b",{children:r})]})}function Rr({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 sl(e,r){const a=pt(r)||"Review this app result.",i=typeof e=="string"?e.trim():"";if(!i)return a;const n=ol(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 pt(l)||a}function ol(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 pt(s)}function pt(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 pl(e){var M,I;const r=ge(e.metrics),a=ge(e.context),i=ge(e.evidence),n=ge(i.planner),l=dl(a,i,n),s=ge(a.focusBlock),o=dr(e),p=ge(o==null?void 0:o.result),d=Array.isArray(p.rows)?p.rows.length:0,f=sl(a.userProvidedContext,e.question),x=typeof a.actionMode=="string"?a.actionMode:void 0,c=String(r.context??s.title??e.sourceBlockId??"selected app result"),A=String(a.activeFilterSummary??zl(ge(a.activeFilters))),S=ml(e.intent,x),q=fl(e,f,x,c),h=gl(S,f,c,A),T=((M=e.summary)==null?void 0:M.trim())||`DQL wrote review-required analysis for ${c}: ${e.question}. The selected app result is available, but this analysis still needs human review before it becomes governed business logic.`,z=((I=e.recommendation)==null?void 0:I.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.",Y=[{label:String(r.currentLabel??"Current"),value:st(r.currentValue),detail:String(r.currentDetail??"current selected result")},{label:String(r.baselineLabel??"Baseline"),value:st(r.baselineValue),detail:String(r.baselineDetail??"comparison or prior value")},{label:String(r.deltaLabel??"Delta"),value:st(r.delta),detail:String(r.deltaDetail??"change or gap to explain")},{label:"Preview",value:d?`${d} rows`:"not captured",detail:"bounded preview sample"}].filter(xl),$=bl(e),k=d>0||Y.length>0||$.length>0||Object.keys(r).length>0,L=jl(e.reportSections).filter(Q=>ul(Q,e.error,k));return{title:q,intent:e.intent,actionMode:x,scope:h,summary:T,recommendation:z,routeDecision:l,sections:L,previewIssue:cl(e.error,typeof n.sqlErrorKind=="string"?n.sqlErrorKind:void 0,k),contextFacts:[{label:"Type",value:S},{label:"Source",value:c},{label:"Filters",value:A},{label:"Review",value:ke(e.reviewStatus)}],keyNumbers:Y,drivers:$}}function dl(e,r,a){const i=ge(e.originatingAnswer),n=ge(e.routeDecision),l=ge(i.decision),s=ge(r.routeDecision),o=ge(a.routeDecision),p=Object.keys(n).length?n:Object.keys(l).length?l:Object.keys(s).length?s:Object.keys(o).length?o:{},d=typeof p.reason=="string"?p.reason.trim():"",f=typeof p.nextAction=="string"?p.nextAction.trim():"";if(!d&&!f)return null;const x=typeof p.mode=="string"&&p.mode.trim()?ke(p.mode):"Analysis",c=typeof p.confidence=="number"&&Number.isFinite(p.confidence)?Math.round(Math.max(0,Math.min(1,p.confidence))*100):void 0;return{mode:x,reason:d,nextAction:f,confidence:c}}function cl(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 ul(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 xl(e){const r=e.value.trim().toLowerCase();return!!r&&r!=="n/a"&&r!=="not captured"&&r!=="not available"}function fl(e,r,a,i){const n=jt(r)||jt(e.title)||jt(e.question),l=a==="block"?"Reusable logic":a==="evidence"?"Proof brief":"Analysis",s=ke(i);return`${l}: ${hl(n||s)}`}function gl(e,r,a,i){const n=jt(r);return[n?`Question: ${n}`:"",`Source: ${a}`,i&&i!=="No app filters set"?`Filters: ${i}`:"",`Status: ${e} / review-required`].filter(Boolean).join(" · ")}function jt(e){return pt(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 hl(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 ml(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 bl(e){const r=(e.driverCards??[]).map(ge).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=dr(e),i=ge(a==null?void 0:a.result);return(Array.isArray(i.rows)?i.rows.map(ge).filter(l=>Object.keys(l).length>0):[]).slice(0,5).map((l,s)=>{const o=Object.keys(l),p=o.find(f=>/name|player|customer|account|segment|team/i.test(f))??o[0]??`row_${s+1}`,d=o.find(f=>/point|revenue|total|score|value|delta|count/i.test(f)&&f!==p)??o[1]??p;return{title:String(l[p]??`Preview row ${s+1}`),value:st(l[d]),explanation:`This row is part of the bounded preview sample for ${ke(d)}.`}})}function vl(e){var S,q;if(e.sections.length>0)return e.sections.map(h=>{var z;const T=(z=h.bullets)!=null&&z.length?`
46
-
47
- ${h.bullets.map(Y=>`- ${Y}`).join(`
48
- `)}`:"";return`## ${h.title}
49
- ${h.body}${T}`}).join(`
50
-
51
- `);const r=e.keyNumbers.find(h=>h.value!=="not available"&&h.label!=="Preview"),a=e.keyNumbers.find(h=>/baseline|comparison|next/i.test(h.label)&&h.value!=="not available"),i=e.keyNumbers.find(h=>/delta|gap|change/i.test(h.label)&&h.value!=="not available"),n=e.drivers[0],l=e.drivers[1],s=(S=e.contextFacts.find(h=>h.label==="Source"))==null?void 0:S.value,o=(q=e.contextFacts.find(h=>h.label==="Filters"))==null?void 0:q.value,p=[r?`${r.label}: ${r.value} (${r.detail})`:"",a?`${a.label}: ${a.value} (${a.detail})`:"",i?`${i.label}: ${i.value} (${i.detail})`:""].filter(Boolean).join("; "),d=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.",f=[s?`source: ${s}`:"",o?`filters: ${o}`:""].filter(Boolean).join("; "),x=e.actionMode==="block"?"## Reusable logic decision":e.actionMode==="evidence"||e.intent==="trust_gap_review"?"## Validation result":"## Business interpretation",c=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${f?` (${f})`:""}. Use the appendix when a reviewer needs SQL, preview rows, caveats, or source trace.`:`${d} Treat the conclusion as a directional stakeholder explanation until the analyst confirms SQL, grain, filters, joins, and lineage.`,A=["## Executive answer",e.summary,x,c];return p&&A.push("## Key numbers",`The bounded preview shows ${p}. These numbers are useful for review and stakeholder framing but still need source validation before promotion.`),A.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."),A.join(`
52
-
53
- `)}function yl({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:wl(r)}),t.jsx("h3",{children:r.title})]}),t.jsx(ql,{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 ql({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 wl(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 jl(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 kl({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(Sl(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 Sl(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 zl(e){const r=Object.entries(e).filter(([a])=>a!=="smartView");return r.length?r.map(([a,i])=>`${ke(a)} ${fa(a,i)}`).join(", "):"No app filters set"}function Al({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=ge(e.evidence);if(r==="assumptions"){const l=Array.isArray(n.assumptions)?n.assumptions:[],s=ge(n.trustStatus);return t.jsxs("div",{className:"dql-app-research-assumptions",children:[l.length?l.map((o,p)=>t.jsx("p",{children:String(o)},p)):t.jsx("p",{children:"Refresh the report to capture assumptions."}),t.jsx(Rr,{label:"Trust",value:String(s.label??"AI-generated report")}),t.jsx(Rr,{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(Cl,{investigation:e})}function Cl({investigation:e}){const r=dr(e);if(!r)return t.jsx(qe,{title:"No preview rows yet.",detail:"Refresh the report with SQL or selected tile results to capture proof.",compact:!0});const a=ge(r.result),i=Array.isArray(a.rows)?a.rows.map(ge).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(qe,{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:ke(l)},l))})}),t.jsx("tbody",{children:i.map((l,s)=>t.jsx("tr",{children:n.map(o=>t.jsx("td",{children:Tl(l[o])},o))},s))})]})})}function dr(e){return(Array.isArray(e.resultPreviews)?e.resultPreviews:[]).map(ge).find(a=>!!a.result)??null}function it(e,r){const a=e.filter(i=>i.id!==r.id);return Dt([r,...a])}function Dt(e){return[...e].sort((r,a)=>Br(a)-Br(r))}function Br(e){const r=new Date(e.updatedAt||e.lastRunAt||e.createdAt).getTime();return Number.isFinite(r)?r:0}function ga(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=ke(r||e.title);return a.length<=64?a:`${a.slice(0,61).trim()}...`}function Nl(e){const r=e.status==="error"?"Needs SQL review":e.status==="ready"?"Ready":e.status==="running"?"Running":"Draft",a=Il(e.updatedAt||e.lastRunAt||e.createdAt);return`${ke(e.intent)} / ${r}${a?` / ${a}`:""}`}function Il(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 st(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 Tl(e){return e==null?"":typeof e=="number"?st(e):typeof e=="string"?e:JSON.stringify(e)}function ge(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Ge({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 qe({title:e,detail:r,compact:a=!1}){return t.jsxs("div",{className:`dql-app-empty ${a?"compact":""}`,children:[t.jsx(Ye,{size:a?24:34,strokeWidth:1.5}),t.jsx("b",{children:e}),t.jsx("span",{children:r})]})}function $l({title:e,error:r,onChange:a,onCancel:i,onCreate:n}){return t.jsx("div",{className:"dql-app-modal-backdrop",children:t.jsxs("div",{className:"dql-app-modal",children:[t.jsx("h3",{children:"Add dashboard page"}),t.jsx("p",{children:"Create a new page inside this local App package."}),t.jsxs("label",{children:["Page name",t.jsx("input",{value:e,onChange:l=>a(l.target.value),autoFocus:!0,placeholder:"Executive Overview"})]}),r?t.jsx("div",{className:"dql-app-error",children:r}):null,t.jsxs("div",{children:[t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-line",onClick:i,children:"Cancel"}),t.jsx("button",{type:"button",className:"dql-apps-btn dql-apps-btn-primary",onClick:n,children:"Create page"})]})]})})}function Pl(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",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:El(e)||"new-app",name:e,prompt:r,skills:Tn.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 Rl(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 Bl(e){var r;return((r=e.owners)==null?void 0:r[0])??"owner@local"}function El(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}const Ll=`
54
- .dql-apps-waterline {
55
- --dql-app-canvas: var(--color-bg-primary, #f7f8fb);
56
- --dql-app-surface: var(--color-bg-card, #ffffff);
57
- --dql-app-surface-muted: var(--color-bg-secondary, #f8fafc);
58
- --dql-app-control: var(--color-bg-sunken, #f4f6f9);
59
- --dql-app-line: var(--color-border-subtle, rgba(15, 23, 42, 0.10));
60
- --dql-app-line-2: var(--color-border-primary, rgba(15, 23, 42, 0.16));
61
- --dql-app-ink: var(--color-text-primary, #0f172a);
62
- --dql-app-muted: var(--color-text-secondary, #64748b);
63
- --dql-app-faint: var(--color-text-tertiary, #94a3b8);
64
- --dql-app-accent: var(--color-accent-blue, #2563eb);
65
- --dql-app-accent-soft: var(--accent-dim, rgba(37, 99, 235, 0.10));
66
- --dql-app-deep: #111827;
67
- --dql-app-green: var(--color-status-success, #16a34a);
68
- --dql-app-green-soft: var(--status-success-bg, rgba(22, 163, 74, 0.08));
69
- --dql-app-orange: var(--color-status-warning, #ca8a04);
70
- --dql-app-orange-soft: var(--status-warning-bg, rgba(202, 138, 4, 0.10));
71
- --dql-app-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 10px 28px rgba(15, 23, 42, 0.06);
72
- --surface: var(--dql-app-surface);
73
- --surface-hover: var(--dql-app-control);
74
- --border-color: var(--dql-app-line);
75
- flex: 1;
76
- min-height: 0;
77
- overflow-x: hidden;
78
- overflow-y: auto;
79
- background: var(--dql-app-canvas);
80
- color: var(--dql-app-ink);
81
- font-family: var(--font-ui);
82
- font-size: 14px;
83
- line-height: 1.45;
84
- text-rendering: geometricPrecision;
85
- }
86
-
87
- .dql-apps-waterline * {
88
- letter-spacing: 0;
89
- }
90
-
91
- /* Per-theme palettes come straight from the Luna tokens the base block maps
92
- (tokens.css under [data-theme]) — the redesign handoff palette IS the Paper
93
- token set, so no per-theme hex overrides remain here. Obsidian only mutes
94
- card shadows. */
95
- .dql-apps-theme-obsidian {
96
- --dql-app-deep: #05070b;
97
- --dql-app-shadow: none;
98
- }
99
-
100
- .dql-apps-wrap {
101
- width: min(880px, calc(100% - 48px));
102
- margin: 0 auto;
103
- padding: 28px 0 40px;
104
- display: flex;
105
- flex-direction: column;
106
- gap: 12px;
107
- }
108
-
109
- .dql-apps-createhead h1 {
110
- margin: 0;
111
- font-size: 18px;
112
- line-height: 1.2;
113
- font-weight: 700;
114
- letter-spacing: -0.01em;
115
- }
116
-
117
- .dql-apps-createhead p {
118
- margin: 3px 0 0;
119
- color: var(--dql-app-faint);
120
- font-size: 12.5px;
121
- line-height: 1.55;
122
- max-width: 720px;
123
- }
124
-
125
- /* Prototype composer card (library) */
126
- .dql-apps-composer {
127
- background: var(--dql-app-surface);
128
- border: 1px solid var(--dql-app-line-2);
129
- border-radius: 14px;
130
- box-shadow: 0 1px 2px rgba(26, 26, 26, 0.03), 0 6px 22px rgba(26, 26, 26, 0.05);
131
- display: flex;
132
- flex-direction: column;
133
- }
134
- .dql-apps-composer textarea {
135
- border: 0; background: transparent; resize: none; outline: none;
136
- padding: 13px 15px 4px;
137
- font-size: 13.5px; line-height: 1.5;
138
- color: var(--dql-app-ink); font-family: inherit;
139
- }
140
- .dql-apps-composer-row { display: flex; align-items: center; gap: 8px; padding: 8px 10px 10px 12px; }
141
- .dql-apps-composer-row > i { flex: 1; }
142
- .dql-apps-composer-chip {
143
- display: inline-flex; align-items: center; gap: 6px;
144
- padding: 4px 9px; border-radius: 8px;
145
- border: 1px solid var(--dql-app-line);
146
- background: var(--dql-app-canvas);
147
- font-size: 11.5px; color: var(--dql-app-muted); white-space: nowrap;
148
- }
149
- .dql-apps-composer-chip svg { color: var(--dql-app-green); }
150
- .dql-apps-composer-blank {
151
- display: inline-flex; align-items: center; gap: 6px;
152
- height: 30px; padding: 0 11px;
153
- border-radius: 8px; border: 1px solid var(--dql-app-line);
154
- background: var(--dql-app-surface); color: var(--dql-app-muted);
155
- font-size: 11.5px; font-weight: 600; cursor: pointer; font-family: inherit;
156
- }
157
- .dql-apps-composer-blank:hover { background: var(--dql-app-surface-muted); }
158
- .dql-apps-composer-send {
159
- width: 34px; height: 34px; border-radius: 10px; border: 0;
160
- background: var(--dql-app-accent); color: #fff;
161
- display: inline-flex; align-items: center; justify-content: center;
162
- cursor: pointer; box-shadow: 0 1px 5px rgba(107, 93, 211, 0.3);
163
- }
164
- .dql-apps-composer-send:hover { filter: brightness(0.95); }
165
- .dql-apps-composer-send:disabled { opacity: 0.5; cursor: default; box-shadow: none; }
166
- .dql-apps-try { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
167
- .dql-apps-try > span { font-size: 10.5px; color: var(--dql-app-faint); }
168
- .dql-apps-try button {
169
- border: 1px solid var(--dql-app-line);
170
- background: var(--dql-app-surface);
171
- color: var(--dql-app-muted);
172
- border-radius: 999px; padding: 3.5px 11px;
173
- font-size: 11px; font-weight: 550; cursor: pointer; font-family: inherit;
174
- }
175
- .dql-apps-try button:hover { border-color: var(--dql-app-accent); color: var(--dql-app-accent); background: var(--dql-app-accent-soft); }
176
-
177
- .dql-apps-btn {
178
- height: 32px;
179
- border-radius: 8px;
180
- border: 1px solid transparent;
181
- padding: 0 12px;
182
- display: inline-flex;
183
- align-items: center;
184
- justify-content: center;
185
- gap: 7px;
186
- font: 750 12px var(--font-ui);
187
- cursor: pointer;
188
- white-space: nowrap;
189
- }
190
-
191
- .dql-apps-btn:disabled { opacity: 0.62; cursor: not-allowed; }
192
- .dql-apps-btn-primary { background: var(--dql-app-accent); color: #fff; }
193
- .dql-apps-btn-line { background: var(--dql-app-surface); border-color: var(--dql-app-line-2); color: var(--dql-app-ink); }
194
- .dql-apps-btn-icon { width: 32px; padding: 0; flex: none; }
195
- .dql-apps-btn-icon:hover,
196
- .dql-apps-btn-icon.on { color: var(--dql-app-accent); border-color: rgba(79, 99, 215, 0.34); background: var(--dql-app-accent-soft); }
197
- .dql-apps-btn-dark { width: 100%; background: var(--dql-app-deep); border-color: #1f2937; color: #fff; margin-top: 12px; }
198
-
199
- .dql-apps-ai-entry {
200
- margin-top: 18px;
201
- border: 1px solid rgba(79, 99, 215, 0.26);
202
- border-radius: 12px;
203
- background: var(--dql-app-surface);
204
- box-shadow: var(--dql-app-shadow);
205
- padding: 16px;
206
- display: grid;
207
- gap: 12px;
208
- }
209
-
210
- .dql-apps-ai-entry-head {
211
- display: flex;
212
- align-items: center;
213
- justify-content: space-between;
214
- gap: 10px;
215
- }
216
-
217
- .dql-apps-ai-entry-head span,
218
- .dql-apps-ai-entry-head b {
219
- display: inline-flex;
220
- align-items: center;
221
- gap: 6px;
222
- font: 850 11px var(--font-ui);
223
- }
224
-
225
- .dql-apps-ai-entry-head span {
226
- color: var(--dql-app-accent);
227
- }
228
-
229
- .dql-apps-ai-entry-head b {
230
- color: var(--dql-app-green);
231
- }
232
-
233
- .dql-apps-ai-entry-box {
234
- display: grid;
235
- grid-template-columns: minmax(0, 1fr) auto;
236
- align-items: end;
237
- gap: 12px;
238
- }
239
-
240
- .dql-apps-ai-entry-box textarea {
241
- width: 100%;
242
- min-height: 112px;
243
- resize: vertical;
244
- border: 1px solid var(--dql-app-line-2);
245
- border-radius: 10px;
246
- background: var(--dql-app-control);
247
- color: var(--dql-app-ink);
248
- outline: 0;
249
- padding: 13px 14px;
250
- font: 540 15px/1.5 var(--font-ui);
251
- }
252
-
253
- .dql-apps-ai-entry-box textarea:focus {
254
- border-color: rgba(79, 99, 215, 0.52);
255
- box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
256
- }
257
-
258
- .dql-apps-ai-entry-box button {
259
- height: 46px;
260
- border: 0;
261
- border-radius: 10px;
262
- background: var(--dql-app-accent);
263
- color: #fff;
264
- padding: 0 16px;
265
- display: inline-flex;
266
- align-items: center;
267
- justify-content: center;
268
- gap: 7px;
269
- font: 800 12.5px var(--font-ui);
270
- cursor: pointer;
271
- box-shadow: 0 12px 26px rgba(79, 99, 215, 0.2);
272
- }
273
-
274
- .dql-apps-ai-entry-box button:disabled {
275
- opacity: 0.6;
276
- cursor: not-allowed;
277
- }
278
-
279
- .dql-apps-ai-entry-foot {
280
- display: flex;
281
- align-items: center;
282
- justify-content: space-between;
283
- gap: 10px;
284
- }
285
-
286
- .dql-apps-ai-entry-foot > div {
287
- min-width: 0;
288
- display: flex;
289
- flex-wrap: wrap;
290
- gap: 6px;
291
- }
292
-
293
- .dql-apps-ai-entry-foot button {
294
- border: 1px solid var(--dql-app-line);
295
- border-radius: 999px;
296
- background: var(--dql-app-surface);
297
- color: var(--dql-app-muted);
298
- padding: 6px 9px;
299
- display: inline-flex;
300
- align-items: center;
301
- gap: 5px;
302
- font: 750 11.5px var(--font-ui);
303
- cursor: pointer;
304
- }
305
-
306
- .dql-apps-ai-entry-foot button:hover {
307
- color: var(--dql-app-accent);
308
- border-color: rgba(79, 99, 215, 0.32);
309
- background: var(--dql-app-accent-soft);
310
- }
311
-
312
- .dql-apps-ai-entry-secondary {
313
- flex: none;
314
- color: var(--dql-app-ink) !important;
315
- }
316
-
317
- .dql-apps-sectionhead {
318
- margin: 30px 0 14px;
319
- display: flex;
320
- align-items: center;
321
- gap: 12px;
322
- color: var(--dql-app-muted);
323
- }
324
-
325
- .dql-apps-sectionhead span,
326
- .dql-app-eyebrow {
327
- font-family: var(--font-mono);
328
- font-size: 10px;
329
- letter-spacing: 0;
330
- text-transform: uppercase;
331
- }
332
-
333
- .dql-apps-sectionhead i { flex: 1; border-top: 1px solid var(--dql-app-line); }
334
- .dql-apps-sectionhead b { font-family: var(--font-mono); font-size: 10px; color: var(--dql-app-faint); }
335
-
336
- .dql-apps-libbar {
337
- display: flex;
338
- align-items: center;
339
- gap: 12px;
340
- margin-bottom: 16px;
341
- }
342
-
343
- .dql-apps-filter-tabs {
344
- display: flex;
345
- gap: 3px;
346
- border: 1px solid var(--dql-app-line);
347
- border-radius: 999px;
348
- background: var(--dql-app-control);
349
- padding: 4px;
350
- flex-wrap: wrap;
351
- }
352
-
353
- .dql-apps-filter-tabs button {
354
- border: 0;
355
- background: transparent;
356
- border-radius: 999px;
357
- padding: 6px 12px;
358
- cursor: pointer;
359
- color: var(--dql-app-muted);
360
- font: 800 12px var(--font-ui);
361
- }
362
-
363
- .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); }
364
- .dql-apps-filter-tabs span { margin-left: 5px; color: var(--dql-app-accent); font-family: var(--font-mono); font-size: 10px; }
365
-
366
- .dql-apps-search {
367
- flex: 1;
368
- min-width: 220px;
369
- height: 38px;
370
- display: flex;
371
- align-items: center;
372
- gap: 8px;
373
- background: var(--dql-app-surface);
374
- border: 1px solid var(--dql-app-line);
375
- border-radius: 7px;
376
- padding: 0 12px;
377
- color: var(--dql-app-faint);
378
- }
379
-
380
- .dql-apps-search input {
381
- flex: 1;
382
- min-width: 0;
383
- border: 0;
384
- outline: 0;
385
- background: transparent;
386
- color: var(--dql-app-ink);
387
- font: 13px var(--font-ui);
388
- }
389
-
390
- .dql-apps-grid {
391
- display: grid;
392
- grid-template-columns: repeat(3, minmax(0, 1fr));
393
- gap: 16px;
394
- }
395
-
396
- .dql-app-card {
397
- min-width: 0;
398
- border: 1px solid var(--dql-app-line);
399
- border-radius: 8px;
400
- background: var(--dql-app-surface);
401
- overflow: hidden;
402
- box-shadow: var(--dql-app-shadow);
403
- }
404
-
405
- .dql-app-card-body {
406
- padding: 16px;
407
- cursor: pointer;
408
- }
409
-
410
- .dql-app-card-top {
411
- display: flex;
412
- align-items: flex-start;
413
- justify-content: space-between;
414
- gap: 10px;
415
- margin-bottom: 9px;
416
- }
417
-
418
- .dql-app-star {
419
- width: 28px;
420
- height: 28px;
421
- border-radius: 6px;
422
- border: 1px solid var(--dql-app-line);
423
- background: var(--dql-app-surface);
424
- color: var(--dql-app-faint);
425
- display: inline-flex;
426
- align-items: center;
427
- justify-content: center;
428
- cursor: pointer;
429
- }
430
-
431
- .dql-app-star.on { color: var(--dql-app-accent); background: var(--dql-app-accent-soft); border-color: rgba(37, 99, 235, 0.35); }
432
- .dql-app-card h3 { margin: 13px 0 0; font-size: 17px; line-height: 1.2; }
433
- .dql-app-card p { min-height: 54px; margin: 7px 0 0; color: var(--dql-app-muted); font-size: 12px; line-height: 1.5; }
434
-
435
- .dql-app-card-mini {
436
- margin-top: 13px;
437
- display: grid;
438
- grid-template-columns: repeat(3, minmax(0, 1fr));
439
- gap: 6px;
440
- }
441
-
442
- .dql-app-card-mini span {
443
- border-radius: 6px;
444
- background: var(--dql-app-control);
445
- padding: 7px 9px;
446
- }
447
-
448
- .dql-app-card-mini small {
449
- display: block;
450
- font-family: var(--font-mono);
451
- font-size: 7.5px;
452
- letter-spacing: 0;
453
- text-transform: uppercase;
454
- color: var(--dql-app-muted);
455
- }
456
-
457
- .dql-app-card-mini b { display: block; margin-top: 1px; font-size: 15px; }
458
-
459
- .dql-app-card-signals {
460
- margin-top: 12px;
461
- display: flex;
462
- flex-wrap: wrap;
463
- gap: 7px;
464
- color: var(--dql-app-muted);
465
- font: 700 10px var(--font-mono);
466
- }
467
-
468
- .dql-app-card-signals span {
469
- display: inline-flex;
470
- align-items: center;
471
- gap: 5px;
472
- min-height: 24px;
473
- padding: 4px 8px;
474
- border: 1px solid var(--dql-app-line);
475
- border-radius: 7px;
476
- background: var(--dql-app-surface-muted);
477
- white-space: nowrap;
478
- }
479
-
480
- .dql-app-card-depth {
481
- min-height: 42px;
482
- display: flex;
483
- align-items: center;
484
- gap: 8px;
485
- padding: 8px 16px;
486
- border-top: 1px solid var(--dql-app-line);
487
- background: var(--dql-app-surface-muted);
488
- font-family: var(--font-mono);
489
- font-size: 10px;
490
- color: var(--dql-app-muted);
491
- }
492
-
493
- .dql-app-card-depth span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
494
- .dql-app-card-depth button { border: 0; background: transparent; color: var(--dql-app-accent); cursor: pointer; font: 800 11px var(--font-ui); }
495
- .dql-app-card-act {
496
- display: inline-flex;
497
- align-items: center;
498
- gap: 5px;
499
- flex: none !important;
500
- min-height: 26px;
501
- padding: 0 10px;
502
- border: 1px solid var(--dql-app-line) !important;
503
- border-radius: 6px;
504
- background: var(--dql-app-surface) !important;
505
- color: var(--dql-app-muted) !important;
506
- font: 650 11px var(--font-ui) !important;
507
- transition: border-color 0.12s ease, color 0.12s ease;
508
- }
509
- .dql-app-card-act:hover {
510
- border-color: var(--dql-app-accent) !important;
511
- color: var(--dql-app-accent) !important;
512
- }
513
-
514
- .dql-app-block-cite i,
515
- .dql-app-plan-item > i {
516
- width: 7px;
517
- height: 7px;
518
- border-radius: 999px;
519
- background: var(--dql-app-green);
520
- flex: none;
521
- }
522
-
523
- .dql-app-block-cite i.draft,
524
- .dql-app-plan-item > i.draft { background: var(--dql-app-orange); }
525
-
526
- .dql-app-seal {
527
- display: inline-flex;
528
- align-items: center;
529
- gap: 5px;
530
- border-radius: 999px;
531
- min-height: 22px;
532
- padding: 2px 9px;
533
- width: fit-content;
534
- border: 1px solid rgba(22, 163, 74, 0.26);
535
- background: var(--dql-app-green-soft);
536
- color: var(--dql-app-green);
537
- font-family: var(--font-mono);
538
- font-size: 10.5px;
539
- font-weight: 700;
540
- letter-spacing: 0;
541
- text-transform: uppercase;
542
- }
543
-
544
- .dql-app-seal::before {
545
- content: "";
546
- width: 6px;
547
- height: 6px;
548
- border-radius: 999px;
549
- background: currentColor;
550
- }
551
-
552
- .dql-app-seal.draft { border-color: rgba(202, 138, 4, 0.30); background: var(--dql-app-orange-soft); color: var(--dql-app-orange); }
553
- .dql-app-seal.agentic { border-color: rgba(37, 99, 235, 0.32); background: var(--dql-app-accent-soft); color: var(--dql-app-accent); }
554
-
555
- .dql-app-create-shell,
556
- .dql-app-workspace {
557
- height: 100%;
558
- min-height: 0;
559
- display: grid;
560
- }
561
-
562
- .dql-app-create-shell { grid-template-rows: auto 1fr; overflow: hidden; }
563
- .dql-app-workspace { grid-template-rows: auto auto 1fr; }
564
-
565
- .dql-app-buildbar,
566
- .dql-app-view-topbar {
567
- min-height: 54px;
568
- display: flex;
569
- align-items: center;
570
- gap: 10px;
571
- padding: 9px 18px;
572
- border-bottom: 1px solid var(--dql-app-line);
573
- background: var(--dql-app-surface);
574
- flex-wrap: wrap;
575
- }
576
-
577
- .dql-app-back {
578
- width: 30px;
579
- height: 30px;
580
- border: 1px solid var(--dql-app-line);
581
- border-radius: 8px;
582
- background: var(--dql-app-control);
583
- display: inline-flex;
584
- align-items: center;
585
- justify-content: center;
586
- color: var(--dql-app-muted);
587
- cursor: pointer;
588
- flex: none;
589
- }
590
-
591
- .dql-app-back:hover { color: var(--dql-app-ink); border-color: var(--dql-app-line-2); }
592
-
593
- .dql-app-back-label {
594
- width: auto;
595
- min-width: 72px;
596
- padding: 0 11px 0 9px;
597
- gap: 6px;
598
- justify-content: flex-start;
599
- color: var(--dql-app-ink);
600
- font: 750 12px var(--font-ui);
601
- }
602
-
603
- .dql-app-back-label span {
604
- line-height: 1;
605
- }
606
-
607
- .dql-app-topbar-divider {
608
- width: 1px;
609
- height: 22px;
610
- background: var(--dql-app-line);
611
- flex: none;
612
- }
613
-
614
- .dql-app-topbar-filters {
615
- display: flex;
616
- align-items: center;
617
- gap: 8px;
618
- flex-wrap: wrap;
619
- }
620
-
621
- .dql-app-filter-icon {
622
- display: inline-flex;
623
- align-items: center;
624
- color: var(--dql-app-faint);
625
- }
626
-
627
- .dql-app-name-input input {
628
- width: 240px;
629
- border: 1px solid transparent;
630
- border-radius: 6px;
631
- padding: 5px 8px;
632
- outline: 0;
633
- background: transparent;
634
- color: var(--dql-app-ink);
635
- font: 800 16px var(--font-ui);
636
- }
637
-
638
- .dql-app-name-input input:focus { border-color: var(--dql-app-accent); background: var(--dql-app-control); }
639
- .dql-app-mode-seg {
640
- margin: 0 auto;
641
- display: flex;
642
- gap: 2px;
643
- border: 1px solid var(--dql-app-line);
644
- border-radius: 999px;
645
- background: var(--dql-app-control);
646
- padding: 3px;
647
- }
648
-
649
- .dql-app-mode-seg button {
650
- min-width: 78px;
651
- border: 0;
652
- background: transparent;
653
- border-radius: 999px;
654
- display: inline-flex;
655
- align-items: center;
656
- justify-content: center;
657
- gap: 6px;
658
- min-height: 30px;
659
- padding: 6px 12px;
660
- color: var(--dql-app-muted);
661
- cursor: pointer;
662
- font: 750 12px var(--font-ui);
663
- }
664
-
665
- .dql-app-mode-seg button.on { background: var(--dql-app-deep); color: #fff; }
666
-
667
- .dql-app-customize-btn {
668
- display: inline-flex;
669
- align-items: center;
670
- justify-content: center;
671
- gap: 6px;
672
- min-height: 32px;
673
- padding: 6px 14px;
674
- border: 1px solid var(--dql-app-line);
675
- border-radius: 999px;
676
- background: var(--dql-app-control);
677
- color: var(--dql-app-ink);
678
- cursor: pointer;
679
- font: 750 12px var(--font-ui);
680
- }
681
-
682
- .dql-app-customize-btn:hover {
683
- border-color: rgba(79, 99, 215, 0.34);
684
- background: var(--dql-app-accent-soft);
685
- color: var(--dql-app-accent);
686
- }
687
-
688
- .dql-app-customize-btn.on {
689
- border-color: var(--dql-app-deep);
690
- background: var(--dql-app-deep);
691
- color: #fff;
692
- }
693
- .dql-app-build-actions,
694
- .dql-app-view-actions {
695
- margin-left: auto;
696
- display: flex;
697
- align-items: center;
698
- gap: 8px;
699
- }
700
-
701
- .dql-app-view-actions { position: relative; }
702
-
703
- .dql-app-share-popover {
704
- position: absolute;
705
- right: 0;
706
- top: calc(100% + 8px);
707
- z-index: 20;
708
- width: min(340px, 80vw);
709
- border: 1px solid var(--dql-app-line-2);
710
- border-radius: 8px;
711
- background: var(--dql-app-surface);
712
- box-shadow: var(--dql-app-shadow);
713
- padding: 10px;
714
- display: grid;
715
- gap: 7px;
716
- }
717
-
718
- .dql-app-share-popover b {
719
- color: var(--dql-app-ink);
720
- font: 850 12px var(--font-ui);
721
- }
722
-
723
- .dql-app-share-popover textarea {
724
- width: 100%;
725
- min-height: 92px;
726
- resize: none;
727
- border: 1px solid var(--dql-app-line);
728
- border-radius: 7px;
729
- background: var(--dql-app-control);
730
- color: var(--dql-app-ink);
731
- padding: 8px;
732
- font: 11px/1.45 var(--font-mono);
733
- box-sizing: border-box;
734
- }
735
-
736
- .dql-app-promote-popover {
737
- position: absolute;
738
- right: 0;
739
- top: calc(100% + 8px);
740
- z-index: 21;
741
- max-width: min(360px, 80vw);
742
- border: 1px solid rgba(22, 163, 74, 0.28);
743
- border-radius: 8px;
744
- background: var(--dql-app-green-soft);
745
- color: var(--dql-app-ink);
746
- box-shadow: var(--dql-app-shadow);
747
- padding: 10px 12px;
748
- font-size: 12px;
749
- line-height: 1.4;
750
- }
751
-
752
- .dql-app-promote-popover.error {
753
- border-color: rgba(202, 138, 4, 0.28);
754
- background: var(--dql-app-orange-soft);
755
- }
756
-
757
- .dql-app-persona {
758
- display: inline-flex;
759
- align-items: center;
760
- gap: 6px;
761
- border: 1px solid var(--dql-app-line);
762
- border-radius: 999px;
763
- padding: 3px 9px 3px 4px;
764
- color: var(--dql-app-muted);
765
- font-size: 12px;
766
- }
767
-
768
- .dql-app-persona b {
769
- width: 26px;
770
- height: 26px;
771
- border-radius: 999px;
772
- display: inline-flex;
773
- align-items: center;
774
- justify-content: center;
775
- background: var(--dql-app-accent);
776
- color: #fff;
777
- font-size: 9px;
778
- }
779
-
780
- .dql-app-create-workspace {
781
- min-height: 0;
782
- display: grid;
783
- grid-template-columns: 380px minmax(420px, 1fr) 300px;
784
- }
785
-
786
- .dql-app-create-workspace.classic { grid-template-columns: 286px minmax(420px, 1fr) 320px; }
787
- .dql-app-create-workspace.clean {
788
- display: block;
789
- min-height: calc(100vh - 56px);
790
- overflow: auto;
791
- padding: 26px;
792
- background: var(--dql-app-canvas);
793
- }
794
-
795
- .dql-app-ai-start {
796
- max-width: 1260px;
797
- margin: 0 auto;
798
- display: grid;
799
- grid-template-columns: minmax(0, 1fr) minmax(320px, 380px);
800
- gap: 18px;
801
- align-items: start;
802
- }
803
-
804
- .dql-app-ai-start-main {
805
- min-width: 0;
806
- display: grid;
807
- gap: 14px;
808
- }
809
-
810
- .dql-app-ai-start-copy h1 {
811
- margin: 0 0 7px;
812
- color: var(--dql-app-ink);
813
- font-size: clamp(30px, 4vw, 52px);
814
- line-height: 0.98;
815
- letter-spacing: 0;
816
- }
817
-
818
- .dql-app-ai-start-copy p {
819
- margin: 0;
820
- max-width: 650px;
821
- color: var(--dql-app-muted);
822
- font-size: 14px;
823
- line-height: 1.55;
824
- }
825
-
826
- .dql-app-ai-start-card {
827
- position: relative;
828
- border: 1px solid rgba(79, 99, 215, 0.32);
829
- border-radius: 12px;
830
- background: var(--dql-app-surface);
831
- box-shadow: var(--dql-app-shadow);
832
- padding: 18px 76px 18px 18px;
833
- }
834
-
835
- .dql-app-ai-start-card textarea {
836
- width: 100%;
837
- min-height: 124px;
838
- resize: vertical;
839
- border: 0;
840
- outline: 0;
841
- background: transparent;
842
- color: var(--dql-app-ink);
843
- padding: 0;
844
- font: 520 18px/1.45 var(--font-ui);
845
- }
846
-
847
- .dql-app-ai-start-send {
848
- position: absolute;
849
- right: 18px;
850
- bottom: 18px;
851
- width: 46px;
852
- height: 46px;
853
- border: 0;
854
- border-radius: 999px;
855
- background: var(--dql-app-accent);
856
- color: white;
857
- display: inline-flex;
858
- align-items: center;
859
- justify-content: center;
860
- cursor: pointer;
861
- box-shadow: 0 14px 30px rgba(79, 99, 215, 0.24);
862
- }
863
-
864
- .dql-app-ai-start-send:disabled {
865
- opacity: 0.6;
866
- cursor: not-allowed;
867
- }
868
-
869
- .dql-app-ai-start-examples {
870
- padding-left: 2px;
871
- }
872
-
873
- .dql-app-ai-start-advanced {
874
- border: 1px solid var(--dql-app-line);
875
- border-radius: 8px;
876
- background: var(--dql-app-surface);
877
- padding: 0 12px;
878
- }
879
-
880
- .dql-app-ai-start-advanced .dql-app-palette {
881
- max-height: 340px;
882
- margin: 0 0 12px;
883
- }
884
-
885
- .dql-app-ai-start-result {
886
- margin: 0;
887
- }
888
-
889
- .dql-app-ai-start-context {
890
- display: grid;
891
- gap: 12px;
892
- }
893
-
894
- .dql-app-ai-context-card {
895
- border: 1px solid var(--dql-app-line);
896
- border-radius: 10px;
897
- background: var(--dql-app-surface);
898
- box-shadow: 0 10px 30px rgba(15, 23, 42, 0.04);
899
- overflow: hidden;
900
- }
901
-
902
- .dql-app-ai-evidence-list {
903
- display: grid;
904
- gap: 8px;
905
- padding: 12px;
906
- }
907
-
908
- .dql-app-ai-evidence-row {
909
- display: grid;
910
- grid-template-columns: 30px minmax(0, 1fr) auto;
911
- gap: 9px;
912
- align-items: start;
913
- border: 1px solid var(--dql-app-line);
914
- border-radius: 8px;
915
- background: var(--dql-app-surface-muted);
916
- padding: 10px;
917
- }
918
-
919
- .dql-app-ai-evidence-row > span:first-child {
920
- width: 30px;
921
- height: 30px;
922
- border-radius: 8px;
923
- background: var(--dql-app-green-soft);
924
- color: var(--dql-app-green);
925
- display: inline-flex;
926
- align-items: center;
927
- justify-content: center;
928
- }
929
-
930
- .dql-app-ai-evidence-row b {
931
- display: block;
932
- color: var(--dql-app-ink);
933
- font-size: 12px;
934
- line-height: 1.25;
935
- }
936
-
937
- .dql-app-ai-evidence-row small {
938
- display: block;
939
- margin-top: 3px;
940
- color: var(--dql-app-muted);
941
- font-size: 11px;
942
- line-height: 1.35;
943
- display: -webkit-box;
944
- -webkit-line-clamp: 2;
945
- -webkit-box-orient: vertical;
946
- overflow: hidden;
947
- }
948
-
949
- .dql-app-ai-filter-preview {
950
- display: grid;
951
- grid-template-columns: repeat(3, minmax(0, 1fr));
952
- gap: 8px;
953
- padding: 12px;
954
- }
955
-
956
- .dql-app-ai-filter-preview span {
957
- min-height: 70px;
958
- border: 1px solid var(--dql-app-line);
959
- border-radius: 8px;
960
- background: var(--dql-app-surface-muted);
961
- padding: 10px;
962
- }
963
-
964
- .dql-app-ai-filter-preview small {
965
- display: block;
966
- color: var(--dql-app-faint);
967
- font: 800 9.5px var(--font-mono);
968
- text-transform: uppercase;
969
- margin-bottom: 8px;
970
- }
971
-
972
- .dql-app-ai-filter-preview b {
973
- color: var(--dql-app-accent);
974
- font-size: 18px;
975
- line-height: 1.1;
976
- }
977
-
978
- .dql-app-ai-gap-list {
979
- display: grid;
980
- gap: 8px;
981
- padding: 12px;
982
- }
983
-
984
- .dql-app-ai-gap-list span {
985
- display: flex;
986
- gap: 8px;
987
- color: var(--dql-app-muted);
988
- font-size: 12px;
989
- line-height: 1.4;
990
- }
991
-
992
- .dql-app-ai-gap-list svg {
993
- flex: 0 0 auto;
994
- margin-top: 1px;
995
- color: var(--dql-app-orange);
996
- }
997
-
998
- .dql-app-ai-generated-section {
999
- max-width: 1260px;
1000
- margin: 18px auto 0;
1001
- display: grid;
1002
- gap: 12px;
1003
- }
1004
-
1005
- .dql-app-ai-generated-head {
1006
- display: flex;
1007
- align-items: flex-end;
1008
- justify-content: space-between;
1009
- gap: 14px;
1010
- }
1011
-
1012
- .dql-app-ai-generated-head h2 {
1013
- margin: 0;
1014
- color: var(--dql-app-ink);
1015
- font-size: 20px;
1016
- }
1017
-
1018
- .dql-app-ai-generated-head p {
1019
- margin: 4px 0 0;
1020
- color: var(--dql-app-muted);
1021
- font-size: 12.5px;
1022
- }
1023
-
1024
- .dql-app-ai-generated-grid {
1025
- display: grid;
1026
- grid-template-columns: minmax(0, 1fr) minmax(280px, 340px);
1027
- gap: 14px;
1028
- align-items: start;
1029
- }
1030
-
1031
- .dql-app-ai-plan-compact {
1032
- border: 1px solid var(--dql-app-line);
1033
- border-radius: 10px;
1034
- background: var(--dql-app-surface);
1035
- overflow: hidden;
1036
- box-shadow: 0 10px 30px rgba(15, 23, 42, 0.04);
1037
- }
1038
-
1039
- .dql-app-plan-list.compact {
1040
- max-height: 520px;
1041
- }
1042
- .dql-app-panel {
1043
- min-height: 0;
1044
- display: flex;
1045
- flex-direction: column;
1046
- border-right: 1px solid var(--dql-app-line);
1047
- background: var(--dql-app-surface-muted);
1048
- }
1049
-
1050
- .dql-app-panel:last-child { border-right: 0; }
1051
- .dql-app-panel-head {
1052
- min-height: 48px;
1053
- display: flex;
1054
- align-items: center;
1055
- gap: 8px;
1056
- padding: 12px 15px;
1057
- border-bottom: 1px solid var(--dql-app-line);
1058
- background: var(--dql-app-surface);
1059
- }
1060
-
1061
- .dql-app-panel-head span { font-weight: 850; font-size: 14px; }
1062
- .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; }
1063
-
1064
- .dql-app-agent-scroll,
1065
- .dql-app-plan-list {
1066
- flex: 1;
1067
- min-height: 0;
1068
- overflow: auto;
1069
- padding: 16px;
1070
- }
1071
-
1072
- .dql-app-agent-panel.ai-clean { background: var(--dql-app-surface); }
1073
- .dql-app-ai-brief {
1074
- padding: 18px 16px 2px;
1075
- display: grid;
1076
- gap: 8px;
1077
- }
1078
-
1079
- .dql-app-ai-brief > span {
1080
- display: inline-flex;
1081
- align-items: center;
1082
- gap: 7px;
1083
- color: var(--dql-app-ink);
1084
- font: 850 13px var(--font-ui);
1085
- }
1086
-
1087
- .dql-app-ai-brief > span svg { color: var(--dql-app-accent); }
1088
- .dql-app-ai-brief p {
1089
- margin: 0;
1090
- color: var(--dql-app-muted);
1091
- font-size: 12px;
1092
- line-height: 1.5;
1093
- }
1094
-
1095
- .dql-app-ai-result {
1096
- margin-top: 5px;
1097
- border: 1px solid rgba(22, 163, 74, 0.26);
1098
- border-radius: 7px;
1099
- background: var(--dql-app-green-soft);
1100
- color: var(--dql-app-ink);
1101
- padding: 8px 10px;
1102
- font-size: 12px;
1103
- line-height: 1.45;
1104
- }
1105
-
1106
- .dql-app-ai-result small {
1107
- display: block;
1108
- margin-top: 3px;
1109
- color: var(--dql-app-muted);
1110
- font: 700 10px var(--font-mono);
1111
- }
1112
-
1113
- .dql-app-composer {
1114
- border-top: 1px solid var(--dql-app-line);
1115
- background: var(--dql-app-surface);
1116
- padding: 12px;
1117
- display: grid;
1118
- gap: 9px;
1119
- }
1120
-
1121
- .dql-app-composer.ai-clean {
1122
- border-top: 0;
1123
- padding: 10px 16px 16px;
1124
- gap: 9px;
1125
- }
1126
-
1127
- .dql-app-suggestions {
1128
- display: flex;
1129
- align-items: center;
1130
- gap: 10px;
1131
- flex-wrap: wrap;
1132
- }
1133
-
1134
- .dql-app-suggestions > span {
1135
- color: var(--dql-app-faint);
1136
- font: 750 10px var(--font-mono);
1137
- text-transform: uppercase;
1138
- }
1139
-
1140
- .dql-app-suggestions button,
1141
- .dql-app-suggests button {
1142
- border: 0;
1143
- border-radius: 0;
1144
- background: transparent;
1145
- color: var(--dql-app-muted);
1146
- padding: 2px 0;
1147
- cursor: pointer;
1148
- font: 750 11.5px var(--font-ui);
1149
- }
1150
-
1151
- .dql-app-suggestions button:hover,
1152
- .dql-app-suggests button:hover {
1153
- color: var(--dql-app-accent);
1154
- }
1155
-
1156
- .dql-app-composer textarea,
1157
- .dql-app-form-grid input,
1158
- .dql-app-select-label select,
1159
- .dql-app-modal input {
1160
- width: 100%;
1161
- border: 1px solid var(--dql-app-line);
1162
- border-radius: 7px;
1163
- background: var(--dql-app-control);
1164
- color: var(--dql-app-ink);
1165
- outline: 0;
1166
- padding: 8px 10px;
1167
- font: 12.5px var(--font-ui);
1168
- }
1169
-
1170
- .dql-app-composer textarea { resize: vertical; min-height: 92px; line-height: 1.45; }
1171
- .dql-app-composer.ai-clean textarea {
1172
- min-height: 130px;
1173
- background: var(--dql-app-surface);
1174
- border-color: var(--dql-app-line-2);
1175
- border-radius: 10px;
1176
- padding: 11px 12px;
1177
- font-size: 13.5px;
1178
- }
1179
- .dql-app-form-grid.two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
1180
- .dql-app-form-grid label,
1181
- .dql-app-select-label,
1182
- .dql-app-modal label {
1183
- display: grid;
1184
- gap: 5px;
1185
- color: var(--dql-app-muted);
1186
- font: 700 10px var(--font-mono);
1187
- text-transform: uppercase;
1188
- letter-spacing: 0;
1189
- }
1190
-
1191
- .dql-app-ai-context {
1192
- border-top: 1px solid var(--dql-app-line);
1193
- border-bottom: 1px solid var(--dql-app-line);
1194
- background: transparent;
1195
- }
1196
-
1197
- .dql-app-ai-context summary {
1198
- min-height: 34px;
1199
- display: flex;
1200
- align-items: center;
1201
- gap: 8px;
1202
- padding: 0 2px;
1203
- cursor: pointer;
1204
- list-style: none;
1205
- }
1206
-
1207
- .dql-app-ai-context summary::-webkit-details-marker { display: none; }
1208
-
1209
- .dql-app-ai-context summary span {
1210
- color: var(--dql-app-muted);
1211
- font: 800 10px var(--font-mono);
1212
- text-transform: uppercase;
1213
- }
1214
-
1215
- .dql-app-ai-context summary b {
1216
- margin-left: auto;
1217
- min-width: 0;
1218
- overflow: hidden;
1219
- text-overflow: ellipsis;
1220
- white-space: nowrap;
1221
- color: var(--dql-app-ink);
1222
- font: 750 11px var(--font-ui);
1223
- }
1224
-
1225
- .dql-app-ai-context summary svg {
1226
- flex: 0 0 auto;
1227
- color: var(--dql-app-faint);
1228
- transition: transform 140ms ease;
1229
- }
1230
-
1231
- .dql-app-ai-context[open] summary svg { transform: rotate(180deg); }
1232
-
1233
- .dql-app-ai-context-grid {
1234
- display: grid;
1235
- grid-template-columns: 1fr;
1236
- gap: 8px;
1237
- padding: 0 0 10px;
1238
- border-top: 1px solid var(--dql-app-line);
1239
- }
1240
-
1241
- .dql-app-ai-context-grid label {
1242
- display: grid;
1243
- gap: 5px;
1244
- color: var(--dql-app-muted);
1245
- font: 700 10px var(--font-mono);
1246
- text-transform: uppercase;
1247
- }
1248
-
1249
- .dql-app-ai-context-grid input,
1250
- .dql-app-ai-context-grid select {
1251
- width: 100%;
1252
- height: 34px;
1253
- border: 1px solid var(--dql-app-line);
1254
- border-radius: 7px;
1255
- background: var(--dql-app-surface-muted);
1256
- color: var(--dql-app-ink);
1257
- outline: 0;
1258
- padding: 0 10px;
1259
- font: 12.5px var(--font-ui);
1260
- }
1261
-
1262
- .dql-app-ai-send-row {
1263
- display: flex;
1264
- align-items: center;
1265
- justify-content: space-between;
1266
- gap: 10px;
1267
- padding-top: 3px;
1268
- }
1269
-
1270
- .dql-app-ai-send-row span {
1271
- display: inline-flex;
1272
- align-items: center;
1273
- gap: 6px;
1274
- color: var(--dql-app-muted);
1275
- font: 750 11px var(--font-ui);
1276
- }
1277
-
1278
- .dql-app-ai-send-row span svg {
1279
- color: var(--dql-app-green);
1280
- }
1281
-
1282
- .dql-app-preview-panel { background: var(--dql-app-canvas); }
1283
- .dql-app-preview-scroll { flex: 1; min-height: 0; overflow: auto; padding: 18px 20px 40px; }
1284
- .dql-app-preview-card {
1285
- border: 1px solid var(--dql-app-line);
1286
- border-radius: 8px;
1287
- background: var(--dql-app-surface);
1288
- overflow: hidden;
1289
- }
1290
-
1291
- .dql-app-preview-head {
1292
- min-height: 58px;
1293
- display: flex;
1294
- align-items: center;
1295
- gap: 10px;
1296
- padding: 12px 18px;
1297
- border-bottom: 1px solid var(--dql-app-line);
1298
- }
1299
-
1300
- .dql-app-preview-head h2 { margin: 0; font-size: 19px; }
1301
- .dql-app-preview-filters {
1302
- display: flex;
1303
- gap: 7px;
1304
- padding: 10px 18px;
1305
- border-bottom: 1px solid var(--dql-app-line);
1306
- background: var(--dql-app-surface-muted);
1307
- }
1308
-
1309
- .dql-app-preview-filters span {
1310
- display: inline-flex;
1311
- align-items: center;
1312
- gap: 6px;
1313
- border: 1px solid var(--dql-app-line);
1314
- border-radius: 6px;
1315
- background: var(--dql-app-surface);
1316
- color: var(--dql-app-muted);
1317
- padding: 4px 9px;
1318
- font-size: 11px;
1319
- }
1320
-
1321
- .dql-app-preview-grid {
1322
- display: grid;
1323
- grid-template-columns: repeat(12, minmax(0, 1fr));
1324
- gap: 12px;
1325
- padding: 16px 18px;
1326
- min-height: 300px;
1327
- }
1328
-
1329
- .dql-app-preview-empty {
1330
- grid-column: 1 / -1;
1331
- min-height: 260px;
1332
- display: flex;
1333
- flex-direction: column;
1334
- align-items: center;
1335
- justify-content: center;
1336
- gap: 10px;
1337
- color: var(--dql-app-faint);
1338
- text-align: center;
1339
- }
1340
-
1341
- .dql-app-preview-tile {
1342
- grid-column: span 4;
1343
- min-height: 136px;
1344
- border: 1px solid var(--dql-app-line);
1345
- border-radius: 8px;
1346
- background: var(--dql-app-surface);
1347
- overflow: hidden;
1348
- display: flex;
1349
- flex-direction: column;
1350
- }
1351
-
1352
- .dql-app-preview-tile.wide { grid-column: span 6; }
1353
- .dql-app-preview-tile.draft { border-color: rgba(202, 138, 4, 0.34); }
1354
- .dql-app-preview-tile-head,
1355
- .dql-app-preview-tile-foot {
1356
- display: flex;
1357
- align-items: center;
1358
- gap: 8px;
1359
- padding: 8px 10px;
1360
- border-bottom: 1px solid var(--dql-app-line);
1361
- }
1362
-
1363
- .dql-app-preview-tile-head b { font-size: 12px; }
1364
- .dql-app-preview-tile-head span,
1365
- .dql-app-preview-tile-foot {
1366
- color: var(--dql-app-faint);
1367
- font: 700 9px var(--font-mono);
1368
- text-transform: uppercase;
1369
- letter-spacing: 0;
1370
- }
1371
-
1372
- .dql-app-preview-tile-head span { margin-left: auto; }
1373
- .dql-app-preview-tile-body {
1374
- flex: 1;
1375
- display: flex;
1376
- flex-direction: column;
1377
- justify-content: center;
1378
- padding: 10px;
1379
- }
1380
-
1381
- .dql-app-preview-tile-body strong { font-size: 26px; }
1382
- .dql-app-preview-tile-body small { color: var(--dql-app-muted); }
1383
- .dql-app-preview-source {
1384
- display: grid;
1385
- grid-template-columns: 34px minmax(0, 1fr);
1386
- gap: 10px;
1387
- align-items: center;
1388
- }
1389
- .dql-app-preview-source > span {
1390
- width: 34px;
1391
- height: 34px;
1392
- border-radius: 8px;
1393
- display: inline-flex;
1394
- align-items: center;
1395
- justify-content: center;
1396
- background: var(--dql-app-accent-soft);
1397
- color: var(--dql-app-accent);
1398
- }
1399
- .dql-app-preview-source b {
1400
- display: block;
1401
- color: var(--dql-app-ink);
1402
- font-size: 13px;
1403
- line-height: 1.2;
1404
- }
1405
- .dql-app-preview-source p {
1406
- margin: 4px 0 0;
1407
- color: var(--dql-app-muted);
1408
- font-size: 11.5px;
1409
- line-height: 1.4;
1410
- display: -webkit-box;
1411
- -webkit-line-clamp: 2;
1412
- -webkit-box-orient: vertical;
1413
- overflow: hidden;
1414
- }
1415
- .dql-app-preview-viz-row {
1416
- display: flex;
1417
- gap: 4px;
1418
- padding: 0 10px 8px;
1419
- align-items: center;
1420
- }
1421
- .dql-app-preview-viz-row button {
1422
- width: 26px;
1423
- height: 26px;
1424
- border: 1px solid var(--dql-app-line);
1425
- border-radius: 6px;
1426
- background: var(--dql-app-surface);
1427
- color: var(--dql-app-muted);
1428
- display: inline-flex;
1429
- align-items: center;
1430
- justify-content: center;
1431
- cursor: pointer;
1432
- }
1433
- .dql-app-preview-viz-row button.on {
1434
- background: var(--dql-app-accent);
1435
- border-color: var(--dql-app-accent);
1436
- color: #fff;
1437
- }
1438
- .dql-app-preview-viz-row button:disabled {
1439
- cursor: default;
1440
- opacity: 0.58;
1441
- }
1442
- .dql-app-preview-tile-foot { border-bottom: 0; border-top: 1px solid var(--dql-app-line); }
1443
- .dql-app-preview-tile-foot b { margin-left: auto; color: var(--dql-app-green); }
1444
- .dql-app-preview-tile.draft .dql-app-preview-tile-foot b { color: var(--dql-app-orange); }
1445
- .dql-app-review-backlog {
1446
- border-top: 1px solid var(--dql-app-line);
1447
- background: var(--dql-app-surface-muted);
1448
- padding: 14px 18px 18px;
1449
- }
1450
- .dql-app-review-backlog-head {
1451
- display: flex;
1452
- align-items: center;
1453
- gap: 8px;
1454
- margin-bottom: 10px;
1455
- color: var(--dql-app-muted);
1456
- }
1457
- .dql-app-review-backlog-head span {
1458
- display: inline-flex;
1459
- align-items: center;
1460
- gap: 6px;
1461
- font: 850 12px var(--font-ui);
1462
- color: var(--dql-app-ink);
1463
- }
1464
- .dql-app-review-backlog-head b {
1465
- margin-left: auto;
1466
- min-width: 22px;
1467
- height: 22px;
1468
- border-radius: 999px;
1469
- display: inline-flex;
1470
- align-items: center;
1471
- justify-content: center;
1472
- background: var(--dql-app-orange-soft);
1473
- color: var(--dql-app-orange);
1474
- font: 800 10px var(--font-mono);
1475
- }
1476
- .dql-app-review-backlog-grid {
1477
- display: grid;
1478
- grid-template-columns: repeat(2, minmax(0, 1fr));
1479
- gap: 10px;
1480
- }
1481
- .dql-app-review-backlog-item {
1482
- border: 1px solid rgba(202, 138, 4, 0.22);
1483
- border-radius: 8px;
1484
- background: var(--dql-app-surface);
1485
- padding: 11px;
1486
- display: grid;
1487
- gap: 9px;
1488
- }
1489
- .dql-app-review-backlog-item b {
1490
- display: block;
1491
- font-size: 12.5px;
1492
- line-height: 1.25;
1493
- }
1494
- .dql-app-review-backlog-item p {
1495
- margin: 5px 0 0;
1496
- color: var(--dql-app-muted);
1497
- font-size: 11.5px;
1498
- line-height: 1.4;
1499
- }
1500
- .dql-app-review-backlog-item > div:last-child {
1501
- display: flex;
1502
- gap: 5px;
1503
- flex-wrap: wrap;
1504
- }
1505
- .dql-app-review-backlog-item span {
1506
- border: 1px solid rgba(79, 99, 215, 0.18);
1507
- border-radius: 999px;
1508
- background: var(--dql-app-accent-soft);
1509
- color: var(--dql-app-accent);
1510
- padding: 3px 7px;
1511
- font: 750 10px var(--font-ui);
1512
- }
1513
- .dql-app-planner-flow {
1514
- border: 1px solid var(--dql-app-line);
1515
- border-radius: 8px;
1516
- background: var(--dql-app-surface);
1517
- padding: 11px;
1518
- margin-bottom: 12px;
1519
- }
1520
- .dql-app-planner-flow-title {
1521
- display: flex;
1522
- align-items: center;
1523
- gap: 7px;
1524
- color: var(--dql-app-accent);
1525
- font: 850 12px var(--font-ui);
1526
- }
1527
- .dql-app-planner-flow p {
1528
- margin: 7px 0 0;
1529
- color: var(--dql-app-muted);
1530
- font-size: 11.5px;
1531
- line-height: 1.42;
1532
- }
1533
- .dql-app-planner-flow-steps {
1534
- display: grid;
1535
- gap: 6px;
1536
- margin-top: 10px;
1537
- }
1538
- .dql-app-planner-flow-steps span {
1539
- display: grid;
1540
- grid-template-columns: 20px minmax(0, 1fr);
1541
- gap: 7px;
1542
- color: var(--dql-app-muted);
1543
- font-size: 11px;
1544
- line-height: 1.35;
1545
- }
1546
- .dql-app-planner-flow-steps b {
1547
- width: 20px;
1548
- height: 20px;
1549
- border-radius: 999px;
1550
- display: inline-flex;
1551
- align-items: center;
1552
- justify-content: center;
1553
- background: var(--dql-app-accent-soft);
1554
- color: var(--dql-app-accent);
1555
- font: 850 10px var(--font-mono);
1556
- }
1557
- .dql-app-plan-group-label {
1558
- margin: 14px 0 4px;
1559
- color: var(--dql-app-faint);
1560
- font: 850 10px var(--font-mono);
1561
- text-transform: uppercase;
1562
- }
1563
- .dql-app-plan-item {
1564
- display: flex;
1565
- align-items: center;
1566
- gap: 10px;
1567
- padding: 10px 0;
1568
- border-bottom: 1px solid var(--dql-app-line);
1569
- }
1570
-
1571
- .dql-app-plan-item span { flex: 1; min-width: 0; }
1572
- .dql-app-plan-item b { display: block; font: 700 11.5px var(--font-mono); }
1573
- .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; }
1574
- .dql-app-plan-item em { color: var(--dql-app-faint); font: 700 9px var(--font-mono); text-transform: uppercase; font-style: normal; }
1575
-
1576
- .dql-app-plan-session,
1577
- .dql-app-plan-warning,
1578
- .dql-app-plan-task {
1579
- border: 1px solid var(--dql-app-line);
1580
- border-radius: 7px;
1581
- padding: 8px 9px;
1582
- background: var(--dql-app-surface-muted);
1583
- color: var(--dql-app-muted);
1584
- font-size: 11.5px;
1585
- line-height: 1.35;
1586
- }
1587
-
1588
- .dql-app-plan-session span {
1589
- display: block;
1590
- color: var(--dql-app-ink);
1591
- font-weight: 800;
1592
- }
1593
-
1594
- .dql-app-plan-session small {
1595
- display: block;
1596
- margin-top: 2px;
1597
- color: var(--dql-app-faint);
1598
- }
1599
-
1600
- .dql-app-plan-warning {
1601
- border-color: rgba(202, 138, 4, 0.24);
1602
- background: var(--dql-app-orange-soft);
1603
- }
1604
-
1605
- .dql-app-plan-task {
1606
- display: flex;
1607
- align-items: flex-start;
1608
- gap: 7px;
1609
- }
1610
-
1611
- .dql-app-plan-foot {
1612
- margin-top: auto;
1613
- padding: 14px;
1614
- border-top: 2px solid var(--dql-app-accent);
1615
- background: var(--dql-app-accent-soft);
1616
- }
1617
-
1618
- .dql-app-leader {
1619
- display: flex;
1620
- align-items: baseline;
1621
- gap: 8px;
1622
- font-size: 11.5px;
1623
- color: var(--dql-app-muted);
1624
- margin: 5px 0;
1625
- }
1626
-
1627
- .dql-app-leader i { flex: 1; border-bottom: 1.5px dotted var(--dql-app-line-2); transform: translateY(-3px); }
1628
- .dql-app-leader b { font-family: var(--font-mono); color: var(--dql-app-ink); }
1629
- .dql-app-leader.certified b { color: var(--dql-app-green); }
1630
- .dql-app-leader.draft b { color: var(--dql-app-orange); }
1631
-
1632
- .dql-app-error {
1633
- border: 1px solid rgba(220, 38, 38, 0.24);
1634
- border-radius: 6px;
1635
- background: rgba(220, 38, 38, 0.06);
1636
- color: #b91c1c;
1637
- padding: 8px 10px;
1638
- font-size: 12px;
1639
- line-height: 1.45;
1640
- margin-top: 10px;
1641
- }
1642
-
1643
- .dql-app-palette { flex: 1; min-height: 0; overflow: auto; padding: 12px; }
1644
- .dql-app-agent-scroll .dql-app-palette {
1645
- margin-top: 12px;
1646
- border: 1px solid var(--dql-app-line);
1647
- border-radius: 8px;
1648
- background: var(--dql-app-surface-muted);
1649
- padding: 10px;
1650
- max-height: 360px;
1651
- }
1652
-
1653
- .dql-app-palette-title {
1654
- display: flex;
1655
- align-items: center;
1656
- gap: 8px;
1657
- margin-bottom: 8px;
1658
- }
1659
-
1660
- .dql-app-palette-title span {
1661
- display: inline-flex;
1662
- align-items: center;
1663
- gap: 7px;
1664
- color: var(--dql-app-ink);
1665
- font: 850 12px var(--font-ui);
1666
- }
1667
-
1668
- .dql-app-palette-title b {
1669
- margin-left: auto;
1670
- color: var(--dql-app-faint);
1671
- font: 700 9.5px var(--font-mono);
1672
- text-transform: uppercase;
1673
- }
1674
-
1675
- .dql-app-palette-search {
1676
- display: flex;
1677
- align-items: center;
1678
- gap: 8px;
1679
- border: 1px solid var(--dql-app-line);
1680
- border-radius: 7px;
1681
- background: var(--dql-app-surface);
1682
- color: var(--dql-app-muted);
1683
- padding: 8px 10px;
1684
- margin-bottom: 10px;
1685
- font-size: 12px;
1686
- }
1687
-
1688
- .dql-app-palette-search input {
1689
- flex: 1;
1690
- min-width: 0;
1691
- border: 0;
1692
- outline: 0;
1693
- background: transparent;
1694
- color: var(--dql-app-ink);
1695
- font: 12px var(--font-ui);
1696
- }
1697
-
1698
- .dql-app-palette button {
1699
- width: 100%;
1700
- border: 1px solid var(--dql-app-line);
1701
- border-radius: 7px;
1702
- background: var(--dql-app-surface);
1703
- color: var(--dql-app-ink);
1704
- padding: 9px 10px;
1705
- margin-bottom: 7px;
1706
- display: flex;
1707
- align-items: center;
1708
- gap: 9px;
1709
- text-align: left;
1710
- cursor: pointer;
1711
- }
1712
-
1713
- .dql-app-palette button.selected { border-color: var(--dql-app-accent); background: var(--dql-app-accent-soft); }
1714
- .dql-app-palette-icon {
1715
- width: 25px;
1716
- height: 25px;
1717
- border-radius: 6px;
1718
- background: #f1f5f9;
1719
- color: var(--dql-app-accent);
1720
- display: inline-flex;
1721
- align-items: center;
1722
- justify-content: center;
1723
- flex: none;
1724
- }
1725
-
1726
- .dql-app-palette span:nth-child(2) { flex: 1; min-width: 0; }
1727
- .dql-app-palette b { display: block; font: 700 11px var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1728
- .dql-app-palette small { display: block; color: var(--dql-app-faint); font-size: 10px; }
1729
- .dql-app-palette i { color: var(--dql-app-green); font: 700 9px var(--font-mono); text-transform: uppercase; font-style: normal; }
1730
- .dql-app-palette-more {
1731
- color: var(--dql-app-faint);
1732
- text-align: center;
1733
- font: 700 10px var(--font-mono);
1734
- padding: 8px 0 2px;
1735
- }
1736
-
1737
- .dql-app-view-topbar { position: relative; z-index: 4; }
1738
- .dql-app-view-topbar {
1739
- min-height: 48px;
1740
- padding: 7px 22px;
1741
- box-shadow: 0 1px 0 var(--dql-app-line);
1742
- background: var(--dql-app-surface);
1743
- backdrop-filter: blur(10px);
1744
- }
1745
-
1746
- .dql-app-crumb { color: var(--dql-app-muted); font: 700 11.5px var(--font-mono); }
1747
- .dql-app-filterbar {
1748
- position: relative;
1749
- z-index: 3;
1750
- min-height: 52px;
1751
- display: flex;
1752
- align-items: center;
1753
- gap: 8px;
1754
- padding: 8px 26px;
1755
- border-bottom: 1px solid var(--dql-app-line);
1756
- background: var(--dql-app-surface);
1757
- flex-wrap: wrap;
1758
- }
1759
-
1760
- .dql-app-filter-select {
1761
- height: 34px;
1762
- display: inline-flex;
1763
- align-items: center;
1764
- gap: 8px;
1765
- border: 1px solid var(--dql-app-line);
1766
- border-radius: 8px;
1767
- background: var(--dql-app-control);
1768
- padding: 0 10px;
1769
- }
1770
-
1771
- .dql-app-filter-select span {
1772
- color: var(--dql-app-faint);
1773
- font: 700 9px var(--font-mono);
1774
- letter-spacing: 0;
1775
- text-transform: uppercase;
1776
- }
1777
-
1778
- .dql-app-filter-select select,
1779
- .dql-app-filter-select input {
1780
- border: 0;
1781
- background: transparent;
1782
- color: var(--dql-app-ink);
1783
- outline: 0;
1784
- font: 750 12.5px var(--font-ui);
1785
- min-width: 0;
1786
- max-width: 110px;
1787
- }
1788
-
1789
- .dql-app-filter-select input[type="number"] {
1790
- width: 64px;
1791
- }
1792
-
1793
- .dql-app-filter-empty {
1794
- color: var(--dql-app-faint);
1795
- font: 750 11px var(--font-ui);
1796
- }
1797
-
1798
- .dql-app-filter-note {
1799
- margin-left: auto;
1800
- color: var(--dql-app-faint);
1801
- font: 700 11px var(--font-ui);
1802
- display: inline-flex;
1803
- align-items: center;
1804
- gap: 6px;
1805
- }
1806
-
1807
- .dql-app-toggle {
1808
- border: 0;
1809
- background: transparent;
1810
- display: inline-flex;
1811
- align-items: center;
1812
- gap: 8px;
1813
- color: var(--dql-app-muted);
1814
- cursor: pointer;
1815
- font: 800 12px var(--font-ui);
1816
- }
1817
-
1818
- .dql-app-toggle i {
1819
- width: 32px;
1820
- height: 18px;
1821
- border-radius: 999px;
1822
- background: #cbd5e1;
1823
- position: relative;
1824
- }
1825
-
1826
- .dql-app-toggle i::after {
1827
- content: "";
1828
- width: 14px;
1829
- height: 14px;
1830
- border-radius: 999px;
1831
- position: absolute;
1832
- top: 2px;
1833
- left: 2px;
1834
- background: #fff;
1835
- transition: transform 140ms ease;
1836
- }
1837
-
1838
- .dql-app-toggle.on i { background: var(--dql-app-accent); }
1839
- .dql-app-toggle.on i::after { transform: translateX(14px); }
1840
-
1841
- .dql-app-view-wrap {
1842
- position: relative;
1843
- z-index: 1;
1844
- width: min(1560px, calc(100% - 40px));
1845
- margin: 0 auto;
1846
- padding: 12px 0 60px;
1847
- }
1848
-
1849
- .dql-app-title-row {
1850
- display: flex;
1851
- align-items: flex-end;
1852
- justify-content: space-between;
1853
- gap: 18px;
1854
- margin-bottom: 12px;
1855
- flex-wrap: wrap;
1856
- }
1857
-
1858
- .dql-app-title-copy {
1859
- flex: 1 1 420px;
1860
- min-width: 0;
1861
- }
1862
-
1863
- .dql-app-title-meta {
1864
- display: flex;
1865
- align-items: center;
1866
- gap: 8px;
1867
- margin-bottom: 6px;
1868
- }
1869
-
1870
- .dql-app-title-meta > span {
1871
- display: inline-flex;
1872
- align-items: center;
1873
- gap: 6px;
1874
- color: var(--dql-app-muted);
1875
- font: 750 11.5px var(--font-ui);
1876
- text-transform: capitalize;
1877
- }
1878
-
1879
- .dql-app-title-row h1 {
1880
- margin: 0;
1881
- font-size: 26px;
1882
- line-height: 1.1;
1883
- font-weight: 820;
1884
- }
1885
-
1886
- .dql-app-title-row p {
1887
- margin: 6px 0 0;
1888
- color: var(--dql-app-muted);
1889
- font-size: 13px;
1890
- line-height: 1.45;
1891
- max-width: 720px;
1892
- display: -webkit-box;
1893
- -webkit-line-clamp: 2;
1894
- -webkit-box-orient: vertical;
1895
- overflow: hidden;
1896
- }
1897
-
1898
- .dql-app-title-context {
1899
- display: inline-flex;
1900
- align-items: center;
1901
- color: var(--dql-app-faint);
1902
- font: 700 11.5px var(--font-mono);
1903
- }
1904
- .dql-app-title-context::before { content: "·"; margin-right: 8px; color: var(--dql-app-line-2); }
1905
-
1906
- .dql-app-nav-row {
1907
- display: flex;
1908
- align-items: center;
1909
- justify-content: flex-end;
1910
- gap: 8px;
1911
- flex-wrap: wrap;
1912
- min-width: 0;
1913
- }
1914
-
1915
- .dql-app-section-tabs,
1916
- .dql-app-page-picker {
1917
- display: flex;
1918
- align-items: center;
1919
- gap: 6px;
1920
- }
1921
-
1922
- .dql-app-section-tabs {
1923
- overflow-x: auto;
1924
- }
1925
-
1926
- .dql-app-section-tabs button,
1927
- .dql-app-page-picker {
1928
- border: 1px solid var(--dql-app-line);
1929
- border-radius: 8px;
1930
- background: var(--dql-app-surface);
1931
- color: var(--dql-app-muted);
1932
- min-height: 32px;
1933
- display: inline-flex;
1934
- align-items: center;
1935
- font: 750 12px var(--font-ui);
1936
- }
1937
-
1938
- .dql-app-section-tabs {
1939
- gap: 6px;
1940
- }
1941
-
1942
- .dql-app-section-tabs button {
1943
- border: 0;
1944
- border-radius: 8px;
1945
- background: transparent;
1946
- color: var(--dql-app-muted);
1947
- min-height: 32px;
1948
- padding: 6px 9px;
1949
- display: inline-flex;
1950
- align-items: center;
1951
- gap: 6px;
1952
- cursor: pointer;
1953
- font: 750 12px var(--font-ui);
1954
- }
1955
-
1956
- .dql-app-section-tabs button {
1957
- min-width: 38px;
1958
- justify-content: center;
1959
- }
1960
-
1961
- .dql-app-section-tabs .dql-app-tab-icon {
1962
- display: inline-flex;
1963
- align-items: center;
1964
- justify-content: center;
1965
- font-style: normal;
1966
- }
1967
-
1968
- .dql-app-section-tabs .dql-app-tab-label {
1969
- display: none;
1970
- }
1971
-
1972
- .dql-app-section-tabs button.on .dql-app-tab-label {
1973
- display: inline;
1974
- }
1975
-
1976
- .dql-app-section-tabs button.on,
1977
- .dql-app-section-tabs button:hover {
1978
- color: var(--dql-app-ink);
1979
- background: var(--dql-app-accent-soft);
1980
- }
1981
-
1982
- .dql-app-section-tabs button.on {
1983
- box-shadow: inset 0 0 0 1px var(--dql-app-accent);
1984
- }
1985
-
1986
- .dql-app-section-tabs b {
1987
- color: var(--dql-app-accent);
1988
- font-family: var(--font-mono);
1989
- font-size: 10px;
1990
- }
1991
-
1992
- .dql-app-page-picker {
1993
- padding: 0 5px 0 10px;
1994
- white-space: nowrap;
1995
- max-width: min(440px, 100%);
1996
- }
1997
-
1998
- .dql-app-page-picker > span {
1999
- display: inline-flex;
2000
- align-items: center;
2001
- gap: 6px;
2002
- color: var(--dql-app-faint);
2003
- font: 800 10px var(--font-mono);
2004
- text-transform: uppercase;
2005
- }
2006
-
2007
- .dql-app-page-picker select {
2008
- min-width: 210px;
2009
- max-width: 310px;
2010
- height: 30px;
2011
- border: 0;
2012
- outline: 0;
2013
- background: transparent;
2014
- color: var(--dql-app-ink);
2015
- font: 800 12px var(--font-ui);
2016
- text-overflow: ellipsis;
2017
- }
2018
-
2019
- .dql-app-page-picker button {
2020
- width: 26px;
2021
- height: 26px;
2022
- border: 0;
2023
- border-radius: 6px;
2024
- background: var(--dql-app-accent-soft);
2025
- color: var(--dql-app-accent);
2026
- display: inline-flex;
2027
- align-items: center;
2028
- justify-content: center;
2029
- cursor: pointer;
2030
- }
2031
-
2032
- .dql-app-dashboard-label {
2033
- min-width: 0;
2034
- overflow: hidden;
2035
- text-overflow: ellipsis;
2036
- white-space: nowrap;
2037
- }
2038
- .dql-app-view-layout {
2039
- display: grid;
2040
- grid-template-columns: minmax(0, 1fr) auto;
2041
- gap: 14px;
2042
- align-items: start;
2043
- }
2044
-
2045
- .dql-app-view-layout.no-explain { grid-template-columns: minmax(0, 1fr); }
2046
- .dql-app-main-column { min-width: 0; }
2047
- .dql-app-filter-row {
2048
- display: flex;
2049
- align-items: center;
2050
- gap: 12px;
2051
- flex-wrap: wrap;
2052
- margin-bottom: 14px;
2053
- padding: 12px 14px;
2054
- border: 1px solid var(--dql-app-line);
2055
- border-radius: 12px;
2056
- background: var(--dql-app-surface);
2057
- }
2058
- .dql-app-filter-row-copy { display: grid; gap: 2px; min-width: 170px; }
2059
- .dql-app-filter-row-copy b { font-size: 12px; color: var(--dql-app-ink); }
2060
- .dql-app-filter-row-copy span { font-size: 10.5px; color: var(--dql-app-faint); }
2061
- .dql-app-filter-row .dql-app-topbar-filters { flex: 1; }
2062
- .dql-app-filter-row-actions { display: flex; gap: 7px; margin-left: auto; }
2063
-
2064
- .dql-app-explain-panel {
2065
- position: sticky;
2066
- top: 110px;
2067
- width: clamp(420px, 29vw, 500px);
2068
- min-width: 390px;
2069
- max-width: min(520px, 40vw);
2070
- min-height: 580px;
2071
- height: calc(100vh - 142px);
2072
- max-height: calc(100vh - 142px);
2073
- border: 1px solid var(--dql-app-line);
2074
- border-radius: 16px;
2075
- background: var(--dql-app-surface);
2076
- overflow: hidden;
2077
- box-shadow: 0 20px 60px rgba(15, 23, 42, 0.14);
2078
- }
2079
-
2080
- .dql-app-explain-panel[data-expanded="true"] {
2081
- width: min(${Qt}px, 52vw);
2082
- max-width: min(${Qt}px, 52vw);
2083
- }
2084
-
2085
- .dql-app-copilot-panel {
2086
- display: flex;
2087
- flex-direction: column;
2088
- overflow: hidden;
2089
- }
2090
-
2091
- .dql-app-assistant-panel {
2092
- display: flex;
2093
- flex-direction: column;
2094
- min-height: 0;
2095
- overflow: hidden;
2096
- /* No background override: the shared AiSidePanel owns the surface so App AI,
2097
- Notebook AI and Block AI read as the same panel rather than three skins. */
2098
- }
2099
-
2100
- .dql-app-assistant-top {
2101
- display: grid;
2102
- grid-template-columns: minmax(0, 1fr) auto;
2103
- align-items: end;
2104
- gap: 10px;
2105
- padding: 10px 12px;
2106
- border-bottom: 1px solid var(--dql-app-line);
2107
- flex: none;
2108
- background: var(--dql-app-surface);
2109
- }
2110
-
2111
- .dql-app-assistant-focus {
2112
- min-width: 0;
2113
- display: grid;
2114
- gap: 5px;
2115
- }
2116
-
2117
- .dql-app-assistant-focus span {
2118
- color: var(--dql-app-muted);
2119
- font: 800 9.5px var(--font-mono);
2120
- letter-spacing: 0;
2121
- text-transform: uppercase;
2122
- }
2123
-
2124
- .dql-app-assistant-focus select {
2125
- width: 100%;
2126
- height: 36px;
2127
- border: 1px solid var(--dql-app-line-2);
2128
- border-radius: 8px;
2129
- background: var(--dql-app-surface);
2130
- color: var(--dql-app-ink);
2131
- padding: 0 10px;
2132
- font: 750 12px var(--font-ui);
2133
- cursor: pointer;
2134
- }
2135
-
2136
- .dql-app-assistant-context-btn {
2137
- flex: none;
2138
- height: 30px;
2139
- border: 1px solid var(--dql-app-line);
2140
- border-radius: 8px;
2141
- background: var(--dql-app-control);
2142
- color: var(--dql-app-muted);
2143
- display: inline-flex;
2144
- align-items: center;
2145
- gap: 5px;
2146
- padding: 0 9px;
2147
- cursor: pointer;
2148
- font: 800 11px var(--font-ui);
2149
- }
2150
-
2151
- .dql-app-assistant-context-btn.on,
2152
- .dql-app-assistant-context-btn:hover {
2153
- color: var(--dql-app-accent);
2154
- border-color: rgba(79, 99, 215, 0.34);
2155
- background: var(--dql-app-accent-soft);
2156
- }
2157
-
2158
- .dql-app-assistant-context-btn.on svg { transform: rotate(180deg); }
2159
-
2160
- .dql-app-assistant-context {
2161
- display: grid;
2162
- gap: 8px;
2163
- padding: 11px 14px;
2164
- border-bottom: 1px solid var(--dql-app-line);
2165
- background: var(--dql-app-surface-muted);
2166
- }
2167
-
2168
- .dql-app-assistant-context p {
2169
- margin: 0;
2170
- color: var(--dql-app-muted);
2171
- font-size: 12px;
2172
- line-height: 1.45;
2173
- }
2174
-
2175
- .dql-app-assistant-context > div {
2176
- display: grid;
2177
- gap: 6px;
2178
- }
2179
-
2180
- .dql-app-one-ai-panel {
2181
- flex: 1;
2182
- min-height: 0;
2183
- overflow: hidden;
2184
- display: flex;
2185
- flex-direction: column;
2186
- padding: 0;
2187
- background: var(--dql-app-surface);
2188
- }
2189
-
2190
- .dql-app-one-ai-status {
2191
- margin: 0;
2192
- display: grid;
2193
- gap: 6px;
2194
- padding: 10px 16px;
2195
- border-bottom: 1px solid var(--dql-app-line);
2196
- background: color-mix(in srgb, var(--dql-app-surface-muted) 72%, var(--dql-app-surface));
2197
- flex: none;
2198
- }
2199
-
2200
- .dql-app-one-ai-status span {
2201
- display: inline-flex;
2202
- align-items: center;
2203
- gap: 6px;
2204
- color: var(--dql-app-green);
2205
- font: 850 11px var(--font-ui);
2206
- }
2207
-
2208
- .dql-app-one-ai-status > div {
2209
- display: flex;
2210
- flex-wrap: nowrap;
2211
- gap: 6px;
2212
- overflow-x: auto;
2213
- scrollbar-width: none;
2214
- }
2215
-
2216
- .dql-app-one-ai-status > div::-webkit-scrollbar {
2217
- display: none;
2218
- }
2219
-
2220
- .dql-app-one-ai-status b {
2221
- flex: none;
2222
- min-width: 0;
2223
- max-width: 190px;
2224
- border: 1px solid var(--dql-app-line);
2225
- border-radius: 999px;
2226
- background: var(--dql-app-surface);
2227
- color: var(--dql-app-faint);
2228
- font: 750 10.5px var(--font-ui);
2229
- padding: 4px 8px;
2230
- overflow: hidden;
2231
- text-overflow: ellipsis;
2232
- white-space: nowrap;
2233
- }
2234
-
2235
- .dql-app-copilot-thread {
2236
- flex: 1;
2237
- min-height: 0;
2238
- overflow-y: auto;
2239
- display: flex;
2240
- flex-direction: column;
2241
- gap: 14px;
2242
- padding: 16px 0 20px;
2243
- }
2244
-
2245
- .dql-app-direct-ask {
2246
- margin-top: 0;
2247
- z-index: 4;
2248
- border-top: 1px solid var(--dql-app-line);
2249
- padding: 14px 16px 16px;
2250
- display: grid;
2251
- gap: 8px;
2252
- flex: none;
2253
- background: color-mix(in srgb, var(--dql-app-surface) 92%, transparent);
2254
- backdrop-filter: blur(10px);
2255
- box-shadow: 0 -12px 28px rgba(15, 23, 42, 0.05);
2256
- }
2257
-
2258
- .dql-app-direct-ask-row {
2259
- display: grid;
2260
- grid-template-columns: minmax(0, 1fr) auto;
2261
- gap: 8px;
2262
- align-items: end;
2263
- }
2264
-
2265
- .dql-app-direct-ask-row textarea {
2266
- width: 100%;
2267
- min-height: 96px;
2268
- max-height: 150px;
2269
- resize: vertical;
2270
- border: 1px solid var(--dql-app-line-2);
2271
- border-radius: 12px;
2272
- background: var(--dql-app-surface);
2273
- color: var(--dql-app-ink);
2274
- padding: 12px 13px;
2275
- font: 500 13.5px/1.45 var(--font-ui);
2276
- outline: none;
2277
- }
2278
-
2279
- .dql-app-direct-ask-row textarea:focus {
2280
- border-color: rgba(79, 99, 215, 0.48);
2281
- box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
2282
- }
2283
-
2284
- .dql-app-direct-ask-row button,
2285
- .dql-app-direct-quick button {
2286
- border: 1px solid var(--dql-app-line-2);
2287
- border-radius: 12px;
2288
- background: var(--dql-app-surface);
2289
- color: var(--dql-app-ink);
2290
- display: inline-flex;
2291
- align-items: center;
2292
- justify-content: center;
2293
- gap: 6px;
2294
- padding: 8px 10px;
2295
- font-weight: 750;
2296
- }
2297
-
2298
- .dql-app-direct-ask-row button {
2299
- min-height: 48px;
2300
- padding-inline: 13px;
2301
- background: var(--dql-app-accent);
2302
- border-color: var(--dql-app-accent);
2303
- color: #fff;
2304
- }
2305
-
2306
- .dql-app-direct-ask-row button:disabled {
2307
- opacity: 0.55;
2308
- }
2309
-
2310
- .dql-app-direct-quick {
2311
- display: grid;
2312
- grid-template-columns: repeat(3, minmax(0, 1fr));
2313
- gap: 6px;
2314
- }
2315
-
2316
- .dql-app-direct-quick button {
2317
- color: var(--dql-app-muted);
2318
- font-size: 11.5px;
2319
- padding: 7px 9px;
2320
- white-space: nowrap;
2321
- width: 100%;
2322
- min-width: 0;
2323
- overflow: hidden;
2324
- text-overflow: ellipsis;
2325
- }
2326
-
2327
- .dql-app-copilot-welcome {
2328
- margin: 2px 16px 0;
2329
- border: 1px dashed var(--dql-app-line-2);
2330
- border-radius: 12px;
2331
- background: var(--dql-app-surface);
2332
- padding: 12px;
2333
- display: grid;
2334
- gap: 6px;
2335
- }
2336
-
2337
- .dql-app-user-message {
2338
- align-self: flex-end;
2339
- max-width: calc(100% - 42px);
2340
- margin: 0 16px 0 42px;
2341
- border: 1px solid rgba(79, 99, 215, 0.28);
2342
- border-radius: 14px 14px 5px 14px;
2343
- background: var(--dql-app-accent);
2344
- color: #fff;
2345
- padding: 10px 12px;
2346
- box-shadow: 0 10px 28px rgba(79, 99, 215, 0.16);
2347
- }
2348
-
2349
- .dql-app-user-message span {
2350
- display: block;
2351
- font: 850 9.5px var(--font-mono);
2352
- letter-spacing: 0;
2353
- text-transform: uppercase;
2354
- opacity: .72;
2355
- }
2356
-
2357
- .dql-app-user-message p {
2358
- margin: 4px 0 0;
2359
- color: inherit;
2360
- font-size: 12.5px;
2361
- line-height: 1.45;
2362
- overflow-wrap: anywhere;
2363
- }
2364
-
2365
- .dql-app-copilot-welcome span {
2366
- color: var(--dql-app-accent);
2367
- font: 850 10.5px var(--font-mono);
2368
- letter-spacing: 0;
2369
- text-transform: uppercase;
2370
- }
2371
-
2372
- .dql-app-copilot-welcome p {
2373
- margin: 0;
2374
- color: var(--dql-app-muted);
2375
- font-size: 12.5px;
2376
- line-height: 1.48;
2377
- }
2378
-
2379
- .dql-app-direct-answer {
2380
- border: 1px solid var(--dql-app-line);
2381
- border-radius: 14px 14px 14px 5px;
2382
- background: var(--dql-app-surface);
2383
- margin: 0 42px 0 16px;
2384
- padding: 12px;
2385
- box-shadow: 0 10px 30px rgba(15, 23, 42, 0.05);
2386
- }
2387
-
2388
- .dql-app-direct-answer > div:first-child {
2389
- display: flex;
2390
- align-items: center;
2391
- gap: 8px;
2392
- margin-bottom: 6px;
2393
- }
2394
-
2395
- .dql-app-direct-answer p {
2396
- margin: 0;
2397
- color: var(--dql-app-ink);
2398
- font-size: 12.5px;
2399
- line-height: 1.45;
2400
- }
2401
-
2402
- .dql-app-direct-followups {
2403
- display: flex;
2404
- flex-wrap: wrap;
2405
- gap: 6px;
2406
- margin-top: 8px;
2407
- }
2408
-
2409
- .dql-app-direct-followups span,
2410
- .dql-app-direct-followups button {
2411
- border: 1px solid var(--dql-app-line);
2412
- border-radius: 999px;
2413
- padding: 3px 7px;
2414
- color: var(--dql-app-muted);
2415
- font-size: 10.5px;
2416
- background: var(--dql-app-surface);
2417
- }
2418
-
2419
- .dql-app-direct-followups button {
2420
- cursor: pointer;
2421
- font-weight: 750;
2422
- }
2423
-
2424
- .dql-app-direct-followups button:hover {
2425
- color: var(--dql-app-accent);
2426
- border-color: rgba(79, 99, 215, 0.34);
2427
- background: var(--dql-app-accent-soft);
2428
- }
2429
-
2430
- .dql-app-copilot-action-grid {
2431
- display: grid;
2432
- gap: 7px;
2433
- margin-top: 10px;
2434
- }
2435
-
2436
- .dql-app-copilot-next-step {
2437
- display: grid;
2438
- gap: 8px;
2439
- margin-top: 12px;
2440
- border: 1px solid rgba(79, 99, 215, 0.18);
2441
- border-radius: 11px;
2442
- background: color-mix(in srgb, var(--dql-app-accent-soft) 58%, var(--dql-app-surface));
2443
- padding: 10px;
2444
- }
2445
-
2446
- .dql-app-copilot-next-step > span {
2447
- color: var(--dql-app-accent);
2448
- font: 850 10.5px var(--font-mono);
2449
- text-transform: uppercase;
2450
- }
2451
-
2452
- .dql-app-copilot-next-step p {
2453
- margin: 0;
2454
- color: var(--dql-app-muted);
2455
- font-size: 12px;
2456
- line-height: 1.45;
2457
- }
2458
-
2459
- .dql-app-analysis-handoff {
2460
- margin: 0 16px;
2461
- border: 1px solid rgba(22, 163, 74, 0.2);
2462
- border-radius: 12px;
2463
- background: rgba(22, 163, 74, 0.06);
2464
- padding: 12px;
2465
- display: grid;
2466
- gap: 7px;
2467
- }
2468
-
2469
- .dql-app-analysis-handoff > span {
2470
- color: #15803d;
2471
- font: 850 10.5px var(--font-mono);
2472
- letter-spacing: .02em;
2473
- text-transform: uppercase;
2474
- }
2475
-
2476
- .dql-app-analysis-handoff p {
2477
- margin: 0;
2478
- color: var(--dql-app-ink);
2479
- font-size: 12.5px;
2480
- line-height: 1.45;
2481
- }
2482
-
2483
- .dql-app-analysis-handoff small {
2484
- color: var(--dql-app-muted);
2485
- font-size: 12px;
2486
- line-height: 1.45;
2487
- }
2488
-
2489
- .dql-app-analysis-handoff > div {
2490
- display: flex;
2491
- flex-wrap: wrap;
2492
- gap: 7px;
2493
- margin-top: 2px;
2494
- }
2495
-
2496
- .dql-app-context-composer {
2497
- margin: 0 16px;
2498
- border: 1px solid rgba(79, 99, 215, 0.28);
2499
- border-radius: 14px;
2500
- background: var(--dql-app-surface);
2501
- box-shadow: 0 16px 44px rgba(79, 99, 215, 0.11);
2502
- padding: 12px;
2503
- display: grid;
2504
- gap: 9px;
2505
- }
2506
-
2507
- .dql-app-context-composer-head {
2508
- display: flex;
2509
- align-items: center;
2510
- justify-content: space-between;
2511
- gap: 8px;
2512
- }
2513
-
2514
- .dql-app-context-composer h4 {
2515
- margin: 0;
2516
- color: var(--dql-app-ink);
2517
- font-size: 14px;
2518
- line-height: 1.25;
2519
- }
2520
-
2521
- .dql-app-context-composer p {
2522
- margin: 0;
2523
- color: var(--dql-app-muted);
2524
- font-size: 12px;
2525
- line-height: 1.45;
2526
- }
2527
-
2528
- .dql-app-context-composer textarea {
2529
- width: 100%;
2530
- min-height: 158px;
2531
- resize: vertical;
2532
- border: 1px solid var(--dql-app-line-2);
2533
- border-radius: 8px;
2534
- background: var(--dql-app-control);
2535
- color: var(--dql-app-ink);
2536
- outline: 0;
2537
- padding: 10px;
2538
- font: 12.5px/1.5 var(--font-ui);
2539
- }
2540
-
2541
- .dql-app-context-composer textarea:focus {
2542
- border-color: rgba(79, 99, 215, 0.54);
2543
- box-shadow: 0 0 0 3px rgba(79, 99, 215, 0.1);
2544
- }
2545
-
2546
- .dql-app-context-chips {
2547
- display: flex;
2548
- flex-wrap: wrap;
2549
- gap: 6px;
2550
- }
2551
-
2552
- .dql-app-context-chips span {
2553
- min-width: 0;
2554
- max-width: 100%;
2555
- border: 1px solid var(--dql-app-line);
2556
- border-radius: 999px;
2557
- background: var(--dql-app-surface-muted);
2558
- color: var(--dql-app-muted);
2559
- padding: 4px 8px;
2560
- font: 750 10px var(--font-ui);
2561
- overflow: hidden;
2562
- text-overflow: ellipsis;
2563
- white-space: nowrap;
2564
- }
2565
-
2566
- .dql-app-context-actions {
2567
- display: flex;
2568
- justify-content: flex-end;
2569
- gap: 8px;
2570
- }
2571
-
2572
- .dql-app-copilot-hero {
2573
- padding: 12px 14px 10px;
2574
- border-bottom: 1px solid var(--dql-app-line);
2575
- background: linear-gradient(180deg, var(--dql-app-surface), var(--dql-app-surface-muted));
2576
- }
2577
-
2578
- .dql-app-copilot-kicker {
2579
- display: inline-flex;
2580
- align-items: center;
2581
- gap: 7px;
2582
- color: var(--dql-app-muted);
2583
- font: 750 10px var(--font-mono);
2584
- letter-spacing: 0;
2585
- text-transform: uppercase;
2586
- }
2587
-
2588
- .dql-app-copilot-kicker svg { color: var(--dql-app-accent); }
2589
- .dql-app-copilot-hero h3 {
2590
- margin: 6px 0 0;
2591
- color: var(--dql-app-ink);
2592
- font-size: 19px;
2593
- line-height: 1.15;
2594
- }
2595
-
2596
- .dql-app-copilot-hero p {
2597
- margin: 6px 0 0;
2598
- color: var(--dql-app-muted);
2599
- font-size: 11.5px;
2600
- line-height: 1.42;
2601
- display: -webkit-box;
2602
- -webkit-line-clamp: 2;
2603
- -webkit-box-orient: vertical;
2604
- overflow: hidden;
2605
- }
2606
-
2607
- .dql-app-copilot-decision {
2608
- margin-top: 8px;
2609
- border: 1px solid var(--dql-app-line);
2610
- border-radius: 7px;
2611
- background: var(--dql-app-surface);
2612
- padding: 7px 9px;
2613
- }
2614
-
2615
- .dql-app-copilot-decision small,
2616
- .dql-app-copilot-facts small {
2617
- display: block;
2618
- color: var(--dql-app-muted);
2619
- font: 750 9px var(--font-mono);
2620
- letter-spacing: 0;
2621
- text-transform: uppercase;
2622
- }
2623
-
2624
- .dql-app-copilot-decision b {
2625
- display: block;
2626
- margin-top: 3px;
2627
- color: var(--dql-app-ink);
2628
- font-size: 11.5px;
2629
- line-height: 1.32;
2630
- }
2631
-
2632
- .dql-app-copilot-facts {
2633
- display: grid;
2634
- grid-template-columns: repeat(3, minmax(0, 1fr));
2635
- gap: 6px;
2636
- margin-top: 7px;
2637
- }
2638
-
2639
- .dql-app-copilot-facts span {
2640
- min-width: 0;
2641
- border-radius: 7px;
2642
- background: var(--dql-app-control);
2643
- padding: 6px 8px;
2644
- }
2645
-
2646
- .dql-app-copilot-facts b {
2647
- display: block;
2648
- margin-top: 2px;
2649
- color: var(--dql-app-ink);
2650
- font-size: 10.5px;
2651
- line-height: 1.25;
2652
- overflow: hidden;
2653
- text-overflow: ellipsis;
2654
- white-space: nowrap;
2655
- }
2656
-
2657
- .dql-app-copilot-chat {
2658
- flex: 1;
2659
- min-height: 210px;
2660
- padding: 9px 12px 12px;
2661
- }
2662
-
2663
- .dql-app-explain-head { padding: 14px 16px 12px; border-bottom: 1px solid var(--dql-app-line); }
2664
- .dql-app-explain-head span,
2665
- .dql-app-ex-label {
2666
- color: var(--dql-app-muted);
2667
- font: 700 9px var(--font-mono);
2668
- letter-spacing: 0;
2669
- text-transform: uppercase;
2670
- }
2671
-
2672
- .dql-app-explain-head h3 { margin: 3px 0 0; font-size: 17px; }
2673
- .dql-app-explain-head p { margin: 5px 0 0; color: var(--dql-app-muted); font-size: 11.5px; line-height: 1.45; }
2674
- .dql-app-ex-section { padding: 13px 16px; border-bottom: 1px solid var(--dql-app-line); }
2675
- .dql-app-ex-section.compact { padding-top: 11px; padding-bottom: 11px; }
2676
- .dql-app-copilot-controls {
2677
- padding: 8px 12px;
2678
- border-bottom: 1px solid var(--dql-app-line);
2679
- }
2680
-
2681
- .dql-app-copilot-focus {
2682
- display: grid;
2683
- gap: 5px;
2684
- }
2685
-
2686
- .dql-app-copilot-focus span {
2687
- color: var(--dql-app-muted);
2688
- font: 700 9px var(--font-mono);
2689
- letter-spacing: 0;
2690
- text-transform: uppercase;
2691
- }
2692
-
2693
- .dql-app-copilot-focus select {
2694
- width: 100%;
2695
- min-width: 0;
2696
- height: 34px;
2697
- border: 1px solid var(--dql-app-line-2);
2698
- border-radius: 7px;
2699
- background: var(--dql-app-control);
2700
- color: var(--dql-app-ink);
2701
- padding: 0 10px;
2702
- font: 800 12px var(--font-ui);
2703
- }
2704
-
2705
- .dql-app-copilot-empty {
2706
- margin-top: 7px;
2707
- color: var(--dql-app-faint);
2708
- font-size: 11px;
2709
- }
2710
-
2711
- .dql-app-copilot-brief {
2712
- display: flex;
2713
- align-items: flex-start;
2714
- gap: 10px;
2715
- padding: 9px 12px;
2716
- border-bottom: 1px solid var(--dql-app-line);
2717
- }
2718
-
2719
- .dql-app-copilot-brief > div {
2720
- min-width: 0;
2721
- flex: 1;
2722
- }
2723
-
2724
- .dql-app-copilot-brief span {
2725
- display: inline-flex;
2726
- color: var(--dql-app-green);
2727
- font: 750 9px var(--font-mono);
2728
- letter-spacing: 0;
2729
- text-transform: uppercase;
2730
- }
2731
-
2732
- .dql-app-copilot-brief b {
2733
- display: block;
2734
- margin-top: 4px;
2735
- color: var(--dql-app-ink);
2736
- font-size: 13px;
2737
- line-height: 1.25;
2738
- }
2739
-
2740
- .dql-app-copilot-brief p {
2741
- margin: 4px 0 0;
2742
- color: var(--dql-app-muted);
2743
- font-size: 11.5px;
2744
- line-height: 1.35;
2745
- }
2746
-
2747
- .dql-app-copilot-result-pill {
2748
- flex: none;
2749
- border-radius: 999px;
2750
- border: 1px solid rgba(22, 163, 74, 0.24);
2751
- background: var(--dql-app-green-soft);
2752
- color: var(--dql-app-green) !important;
2753
- padding: 4px 8px;
2754
- white-space: nowrap;
2755
- }
2756
-
2757
- .dql-app-copilot-prompts {
2758
- display: flex;
2759
- gap: 7px;
2760
- flex-wrap: wrap;
2761
- padding: 8px 12px;
2762
- border-bottom: 1px solid var(--dql-app-line);
2763
- }
2764
-
2765
- .dql-app-copilot-prompts button {
2766
- min-width: 0;
2767
- height: 31px;
2768
- border: 1px solid var(--dql-app-line);
2769
- border-radius: 999px;
2770
- background: var(--dql-app-surface);
2771
- color: var(--dql-app-muted);
2772
- padding: 0 9px;
2773
- display: inline-flex;
2774
- align-items: center;
2775
- gap: 5px;
2776
- cursor: pointer;
2777
- font: 800 10.5px var(--font-ui);
2778
- }
2779
-
2780
- .dql-app-copilot-prompts button:hover {
2781
- color: var(--dql-app-accent);
2782
- border-color: rgba(79, 99, 215, 0.34);
2783
- background: var(--dql-app-accent-soft);
2784
- }
2785
-
2786
- .dql-app-copilot-prompts svg {
2787
- flex: 0 0 auto;
2788
- }
2789
-
2790
- .dql-app-copilot-evidence {
2791
- border-bottom: 1px solid var(--dql-app-line);
2792
- }
2793
-
2794
- .dql-app-copilot-evidence summary {
2795
- min-height: 36px;
2796
- display: flex;
2797
- align-items: center;
2798
- gap: 8px;
2799
- padding: 0 12px;
2800
- cursor: pointer;
2801
- color: var(--dql-app-muted);
2802
- font: 800 11px var(--font-ui);
2803
- list-style: none;
2804
- }
2805
-
2806
- .dql-app-copilot-evidence summary::-webkit-details-marker { display: none; }
2807
- .dql-app-copilot-evidence summary span {
2808
- display: inline-flex;
2809
- align-items: center;
2810
- gap: 6px;
2811
- min-width: 0;
2812
- }
2813
-
2814
- .dql-app-copilot-evidence summary small {
2815
- margin-left: auto;
2816
- min-width: 0;
2817
- max-width: 160px;
2818
- color: var(--dql-app-faint);
2819
- font: 700 10px var(--font-mono);
2820
- overflow: hidden;
2821
- text-overflow: ellipsis;
2822
- white-space: nowrap;
2823
- }
2824
-
2825
- .dql-app-copilot-evidence > div {
2826
- display: grid;
2827
- gap: 6px;
2828
- padding: 0 12px 11px;
2829
- }
2830
-
2831
- .dql-app-keyvalue-inline {
2832
- display: grid;
2833
- grid-template-columns: 92px minmax(0, 1fr);
2834
- gap: 8px;
2835
- align-items: baseline;
2836
- font-size: 11px;
2837
- }
2838
-
2839
- .dql-app-keyvalue-inline span {
2840
- color: var(--dql-app-faint);
2841
- font-family: var(--font-mono);
2842
- }
2843
-
2844
- .dql-app-keyvalue-inline b {
2845
- min-width: 0;
2846
- color: var(--dql-app-muted);
2847
- font-weight: 700;
2848
- overflow: hidden;
2849
- text-overflow: ellipsis;
2850
- white-space: nowrap;
2851
- }
2852
- .dql-app-block-cite {
2853
- display: flex;
2854
- align-items: center;
2855
- gap: 9px;
2856
- padding: 5px 0;
2857
- font-size: 11.5px;
2858
- }
2859
-
2860
- .dql-app-block-cite span { flex: 1; min-width: 0; font-family: var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2861
- .dql-app-block-cite b { color: var(--dql-app-faint); font: 10px var(--font-mono); }
2862
- .dql-app-flow { margin-top: 8px; }
2863
- .dql-app-flow-node {
2864
- display: flex;
2865
- align-items: center;
2866
- gap: 8px;
2867
- padding: 5px 0;
2868
- font-size: 11.5px;
2869
- }
2870
-
2871
- .dql-app-flow-node span {
2872
- width: 28px;
2873
- height: 23px;
2874
- border-radius: 6px;
2875
- background: var(--dql-app-accent-soft);
2876
- color: var(--dql-app-accent);
2877
- display: inline-flex;
2878
- align-items: center;
2879
- justify-content: center;
2880
- font: 700 8px var(--font-mono);
2881
- }
2882
-
2883
- .dql-app-flow-node b { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2884
- .dql-app-flow-node small { color: var(--dql-app-faint); font: 9px var(--font-mono); }
2885
- .dql-app-flow i {
2886
- display: block;
2887
- width: 2px;
2888
- height: 9px;
2889
- background: var(--dql-app-accent);
2890
- margin-left: 13px;
2891
- }
2892
-
2893
- .dql-app-suggests { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 9px; }
2894
- .dql-app-focus-list {
2895
- display: grid;
2896
- gap: 6px;
2897
- margin-top: 8px;
2898
- }
2899
-
2900
- .dql-app-focus-list > span {
2901
- color: var(--dql-app-faint);
2902
- font-size: 12px;
2903
- }
2904
-
2905
- .dql-app-focus-list button {
2906
- min-width: 0;
2907
- min-height: 34px;
2908
- border: 1px solid var(--dql-app-line);
2909
- border-radius: 8px;
2910
- background: var(--dql-app-surface);
2911
- color: var(--dql-app-muted);
2912
- display: flex;
2913
- align-items: center;
2914
- gap: 8px;
2915
- padding: 7px 8px;
2916
- cursor: pointer;
2917
- text-align: left;
2918
- }
2919
-
2920
- .dql-app-focus-list button.on {
2921
- color: var(--dql-app-ink);
2922
- border-color: rgba(79, 99, 215, 0.42);
2923
- background: var(--dql-app-accent-soft);
2924
- }
2925
-
2926
- .dql-app-focus-list button svg {
2927
- flex: 0 0 auto;
2928
- color: var(--dql-app-accent);
2929
- }
2930
-
2931
- .dql-app-focus-list button span {
2932
- flex: 1;
2933
- min-width: 0;
2934
- overflow: hidden;
2935
- text-overflow: ellipsis;
2936
- white-space: nowrap;
2937
- font: 800 11.5px var(--font-ui);
2938
- }
2939
-
2940
- .dql-app-focus-list button b {
2941
- color: var(--dql-app-faint);
2942
- font: 700 8.5px var(--font-mono);
2943
- text-transform: uppercase;
2944
- }
2945
-
2946
- .dql-app-rail-title {
2947
- display: flex;
2948
- align-items: center;
2949
- gap: 8px;
2950
- margin-bottom: 8px;
2951
- }
2952
-
2953
- .dql-app-rail-title > span { flex: 1; }
2954
-
2955
- .dql-app-rail-title button {
2956
- height: 26px;
2957
- border: 1px solid var(--dql-app-line);
2958
- border-radius: 6px;
2959
- background: var(--dql-app-surface);
2960
- color: var(--dql-app-muted);
2961
- display: inline-flex;
2962
- align-items: center;
2963
- gap: 5px;
2964
- padding: 0 8px;
2965
- cursor: pointer;
2966
- font: 800 10.5px var(--font-ui);
2967
- }
2968
-
2969
- .dql-app-drilldown-grid {
2970
- display: grid;
2971
- grid-template-columns: repeat(3, minmax(0, 1fr));
2972
- gap: 7px;
2973
- }
2974
-
2975
- .dql-app-drilldown-grid button {
2976
- min-width: 0;
2977
- border: 1px solid var(--dql-app-line);
2978
- border-radius: 8px;
2979
- background: var(--dql-app-surface);
2980
- color: var(--dql-app-muted);
2981
- padding: 8px 6px;
2982
- display: grid;
2983
- justify-items: center;
2984
- gap: 5px;
2985
- cursor: pointer;
2986
- font: 800 10.5px var(--font-ui);
2987
- }
2988
-
2989
- .dql-app-drilldown-grid button:hover {
2990
- color: var(--dql-app-accent);
2991
- border-color: rgba(79, 99, 215, 0.34);
2992
- background: var(--dql-app-accent-soft);
2993
- }
2994
-
2995
- .dql-app-rail-chat {
2996
- height: 100%;
2997
- min-height: 0;
2998
- border: 1px solid var(--dql-app-line-2);
2999
- border-radius: 8px;
3000
- overflow: hidden;
3001
- background: var(--dql-app-surface);
3002
- }
3003
-
3004
- .dql-app-rail-chat.expanded {
3005
- position: fixed;
3006
- z-index: 80;
3007
- right: 24px;
3008
- top: 76px;
3009
- bottom: 24px;
3010
- width: min(760px, calc(100vw - 80px));
3011
- height: auto;
3012
- box-shadow: 0 18px 60px rgba(15, 23, 42, 0.24);
3013
- }
3014
-
3015
- .dql-app-gapcard {
3016
- margin: 12px;
3017
- border-radius: 7px;
3018
- background: var(--dql-app-orange-soft);
3019
- padding: 11px 12px;
3020
- }
3021
-
3022
- .dql-app-gapcard p { margin: 6px 0 0; color: var(--dql-app-muted); font-size: 11.5px; line-height: 1.45; }
3023
- .dql-app-research-shell {
3024
- display: grid;
3025
- gap: 14px;
3026
- min-height: 620px;
3027
- }
3028
-
3029
- .dql-app-research-shell.history-open {
3030
- grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
3031
- }
3032
-
3033
- .dql-app-research-shell.history-collapsed {
3034
- grid-template-columns: minmax(0, 1fr);
3035
- }
3036
-
3037
- .dql-app-research-shell.history-collapsed .dql-app-research-list {
3038
- display: none;
3039
- }
3040
-
3041
- .dql-app-research-list {
3042
- border: 1px solid var(--dql-app-line);
3043
- border-radius: 8px;
3044
- background: var(--dql-app-surface);
3045
- }
3046
-
3047
- .dql-app-research-list {
3048
- padding: 12px;
3049
- display: flex;
3050
- flex-direction: column;
3051
- gap: 10px;
3052
- min-width: 0;
3053
- }
3054
-
3055
- .dql-app-research-detail {
3056
- padding: 0;
3057
- min-width: 0;
3058
- overflow: auto;
3059
- background: transparent;
3060
- }
3061
-
3062
- .dql-app-research-head,
3063
- .dql-app-research-titlebar,
3064
- .dql-app-research-evidence-head {
3065
- display: flex;
3066
- align-items: center;
3067
- justify-content: space-between;
3068
- gap: 12px;
3069
- }
3070
-
3071
- .dql-app-research-head span {
3072
- display: inline-flex;
3073
- align-items: center;
3074
- gap: 7px;
3075
- font-weight: 850;
3076
- }
3077
-
3078
- .dql-app-research-head > div {
3079
- display: inline-flex;
3080
- align-items: center;
3081
- gap: 7px;
3082
- }
3083
-
3084
- .dql-app-research-head b {
3085
- color: var(--dql-app-faint);
3086
- font-family: var(--font-mono);
3087
- font-size: 10px;
3088
- }
3089
-
3090
- .dql-app-research-head button {
3091
- height: 26px;
3092
- border: 1px solid var(--dql-app-line);
3093
- border-radius: 999px;
3094
- background: var(--dql-app-surface-muted);
3095
- color: var(--dql-app-muted);
3096
- padding: 0 9px;
3097
- cursor: pointer;
3098
- font: 800 10px var(--font-ui);
3099
- }
3100
-
3101
- .dql-app-research-head button:hover {
3102
- color: var(--dql-app-accent);
3103
- border-color: rgba(79, 99, 215, 0.34);
3104
- background: var(--dql-app-accent-soft);
3105
- }
3106
-
3107
- .dql-app-research-new {
3108
- height: 32px;
3109
- border: 1px solid var(--dql-app-line);
3110
- border-radius: 7px;
3111
- background: var(--dql-app-control);
3112
- color: var(--dql-app-ink);
3113
- display: inline-flex;
3114
- align-items: center;
3115
- justify-content: center;
3116
- gap: 7px;
3117
- font: 800 12px var(--font-ui);
3118
- cursor: pointer;
3119
- }
3120
-
3121
- .dql-app-research-new:disabled { opacity: 0.65; cursor: not-allowed; }
3122
- .dql-app-research-items { display: grid; gap: 6px; overflow: auto; }
3123
- .dql-app-research-group-label {
3124
- margin: 4px 2px 1px;
3125
- color: var(--dql-app-faint);
3126
- font: 850 9.5px var(--font-mono);
3127
- letter-spacing: 0;
3128
- text-transform: uppercase;
3129
- }
3130
- .dql-app-research-items button {
3131
- border: 1px solid transparent;
3132
- border-radius: 7px;
3133
- background: transparent;
3134
- color: var(--dql-app-ink);
3135
- text-align: left;
3136
- padding: 9px;
3137
- cursor: pointer;
3138
- min-width: 0;
3139
- }
3140
-
3141
- .dql-app-research-items button.on,
3142
- .dql-app-research-items button:hover {
3143
- border-color: var(--dql-app-line);
3144
- background: var(--dql-app-control);
3145
- }
3146
-
3147
- .dql-app-research-items button.status-error:not(.on) {
3148
- color: var(--dql-app-muted);
3149
- opacity: 0.72;
3150
- }
3151
-
3152
- .dql-app-research-items button.status-error small {
3153
- color: var(--dql-app-orange);
3154
- }
3155
-
3156
- .dql-app-research-items button.status-ready small {
3157
- color: var(--dql-app-green);
3158
- }
3159
-
3160
- .dql-app-research-history-toggle {
3161
- border-style: dashed !important;
3162
- background: var(--dql-app-surface-muted) !important;
3163
- color: var(--dql-app-muted) !important;
3164
- }
3165
-
3166
- .dql-app-research-items span,
3167
- .dql-app-research-items small {
3168
- display: block;
3169
- overflow: hidden;
3170
- text-overflow: ellipsis;
3171
- white-space: nowrap;
3172
- }
3173
-
3174
- .dql-app-research-items span { font-weight: 800; font-size: 12px; }
3175
- .dql-app-research-items small { margin-top: 3px; color: var(--dql-app-muted); font-size: 10.5px; }
3176
- .dql-app-research-titlebar { align-items: flex-start; margin-bottom: 14px; }
3177
- .dql-app-research-titlebar h2 {
3178
- margin: 2px 0 0;
3179
- font-size: 20px;
3180
- line-height: 1.2;
3181
- }
3182
-
3183
- .dql-app-research-status {
3184
- margin: 0 0 12px;
3185
- border: 1px solid rgba(37, 99, 235, 0.26);
3186
- border-radius: 8px;
3187
- background: var(--dql-app-accent-soft);
3188
- color: var(--dql-app-accent);
3189
- padding: 10px 12px;
3190
- display: flex;
3191
- align-items: flex-start;
3192
- gap: 8px;
3193
- font: 800 12px var(--font-ui);
3194
- }
3195
-
3196
- .dql-app-research-status.opening {
3197
- border-color: rgba(79, 99, 215, 0.28);
3198
- background: color-mix(in srgb, var(--dql-app-accent-soft) 72%, var(--dql-app-surface));
3199
- }
3200
-
3201
- .dql-app-research-status > div {
3202
- min-width: 0;
3203
- display: grid;
3204
- gap: 3px;
3205
- }
3206
-
3207
- .dql-app-research-status small {
3208
- color: var(--dql-app-muted);
3209
- font: 700 11px/1.35 var(--font-ui);
3210
- overflow: hidden;
3211
- text-overflow: ellipsis;
3212
- }
3213
-
3214
- .dql-app-report-toolbar {
3215
- max-width: 1120px;
3216
- margin: 0 auto 12px;
3217
- display: flex;
3218
- align-items: center;
3219
- justify-content: space-between;
3220
- gap: 12px;
3221
- }
3222
-
3223
- .dql-app-report-toolbar > div {
3224
- min-width: 0;
3225
- display: grid;
3226
- gap: 3px;
3227
- }
3228
-
3229
- .dql-app-report-toolbar span {
3230
- color: var(--dql-app-faint);
3231
- font: 850 9.5px var(--font-mono);
3232
- text-transform: uppercase;
3233
- }
3234
-
3235
- .dql-app-report-toolbar b {
3236
- min-width: 0;
3237
- color: var(--dql-app-ink);
3238
- font-size: 13px;
3239
- overflow: hidden;
3240
- text-overflow: ellipsis;
3241
- white-space: nowrap;
3242
- }
3243
-
3244
- .dql-app-research-creating {
3245
- max-width: 760px;
3246
- min-height: 340px;
3247
- margin: 40px auto;
3248
- border: 1px solid var(--dql-app-line);
3249
- border-radius: 12px;
3250
- background: var(--dql-app-surface);
3251
- box-shadow: var(--dql-app-shadow);
3252
- color: var(--dql-app-muted);
3253
- padding: 42px;
3254
- display: grid;
3255
- place-items: center;
3256
- align-content: center;
3257
- gap: 12px;
3258
- text-align: center;
3259
- }
3260
-
3261
- .dql-app-research-creating.active {
3262
- max-width: 920px;
3263
- min-height: 420px;
3264
- border-color: rgba(79, 99, 215, 0.24);
3265
- background:
3266
- linear-gradient(180deg, color-mix(in srgb, var(--dql-app-accent-soft) 24%, var(--dql-app-surface)), var(--dql-app-surface) 48%),
3267
- var(--dql-app-surface);
3268
- }
3269
-
3270
- .dql-app-research-creating svg {
3271
- color: var(--dql-app-accent);
3272
- }
3273
-
3274
- .dql-app-research-creating > span {
3275
- color: var(--dql-app-accent);
3276
- font: 850 10.5px var(--font-mono);
3277
- letter-spacing: 0;
3278
- text-transform: uppercase;
3279
- }
3280
-
3281
- .dql-app-research-creating h2 {
3282
- margin: 0;
3283
- color: var(--dql-app-ink);
3284
- font-size: 24px;
3285
- }
3286
-
3287
- .dql-app-research-creating p {
3288
- margin: 0;
3289
- max-width: 520px;
3290
- font-size: 13px;
3291
- line-height: 1.6;
3292
- }
3293
-
3294
- .dql-app-research-creating-steps {
3295
- display: flex;
3296
- flex-wrap: wrap;
3297
- justify-content: center;
3298
- gap: 8px;
3299
- margin-top: 4px;
3300
- max-width: 680px;
3301
- }
3302
-
3303
- .dql-app-research-creating-steps small {
3304
- border: 1px solid var(--dql-app-line);
3305
- border-radius: 999px;
3306
- background: var(--dql-app-surface-muted);
3307
- color: var(--dql-app-muted);
3308
- padding: 5px 9px;
3309
- font: 750 11px var(--font-ui);
3310
- }
3311
-
3312
- .dql-app-research-report {
3313
- max-width: 1040px;
3314
- margin: 0 auto;
3315
- border: 0;
3316
- border-radius: 0;
3317
- background: var(--dql-app-surface);
3318
- box-shadow: none;
3319
- overflow: visible;
3320
- }
3321
-
3322
- .dql-app-report-hero {
3323
- padding: 26px 34px 20px;
3324
- border-bottom: 0;
3325
- background: var(--dql-app-surface);
3326
- }
3327
-
3328
- .dql-app-report-status-row {
3329
- display: flex;
3330
- align-items: center;
3331
- justify-content: space-between;
3332
- gap: 14px;
3333
- }
3334
-
3335
- .dql-app-report-status-row > span {
3336
- display: inline-flex;
3337
- align-items: center;
3338
- gap: 7px;
3339
- color: var(--dql-app-muted);
3340
- font: 850 10px var(--font-mono);
3341
- text-transform: uppercase;
3342
- }
3343
-
3344
- .dql-app-report-hero h2 {
3345
- margin: 18px 0 0;
3346
- color: var(--dql-app-ink);
3347
- font-size: clamp(25px, 2.4vw, 34px);
3348
- line-height: 1.08;
3349
- max-width: 860px;
3350
- text-wrap: balance;
3351
- }
3352
-
3353
- .dql-app-report-hero p {
3354
- margin: 14px 0 0;
3355
- color: var(--dql-app-muted);
3356
- font-size: 14px;
3357
- line-height: 1.6;
3358
- max-width: 850px;
3359
- }
3360
-
3361
- .dql-app-report-context-line {
3362
- display: flex;
3363
- flex-wrap: wrap;
3364
- gap: 8px;
3365
- margin-top: 18px;
3366
- }
3367
-
3368
- .dql-app-report-context-line span {
3369
- display: inline-flex;
3370
- align-items: center;
3371
- gap: 6px;
3372
- border: 1px solid var(--dql-app-line);
3373
- border-radius: 999px;
3374
- background: var(--dql-app-surface);
3375
- color: var(--dql-app-muted);
3376
- padding: 6px 10px;
3377
- font-size: 11.5px;
3378
- max-width: 100%;
3379
- }
3380
-
3381
- .dql-app-report-context-line b {
3382
- color: var(--dql-app-ink);
3383
- font-weight: 850;
3384
- }
3385
-
3386
- .dql-app-report-route {
3387
- display: flex;
3388
- align-items: flex-start;
3389
- gap: 10px;
3390
- margin-top: 14px;
3391
- border: 1px solid rgba(79, 99, 215, 0.18);
3392
- border-radius: 10px;
3393
- background: rgba(79, 99, 215, 0.055);
3394
- padding: 10px 12px;
3395
- max-width: 900px;
3396
- }
3397
-
3398
- .dql-app-report-route > svg {
3399
- color: var(--dql-app-accent);
3400
- flex: 0 0 auto;
3401
- margin-top: 2px;
3402
- }
3403
-
3404
- .dql-app-report-route span {
3405
- display: block;
3406
- color: var(--dql-app-accent);
3407
- font: 850 10.5px var(--font-mono);
3408
- letter-spacing: .02em;
3409
- text-transform: uppercase;
3410
- }
3411
-
3412
- .dql-app-report-route p {
3413
- margin: 5px 0 0;
3414
- color: var(--dql-app-ink);
3415
- font-size: 12.5px;
3416
- line-height: 1.45;
3417
- }
3418
-
3419
- .dql-app-report-route small {
3420
- display: block;
3421
- margin-top: 5px;
3422
- color: var(--dql-app-muted);
3423
- font-size: 12px;
3424
- line-height: 1.45;
3425
- }
3426
-
3427
- .dql-app-report-actions {
3428
- display: flex;
3429
- flex-wrap: wrap;
3430
- gap: 8px;
3431
- margin-top: 18px;
3432
- }
3433
-
3434
- .dql-app-report-review-actions {
3435
- position: relative;
3436
- }
3437
-
3438
- .dql-app-report-review-actions summary {
3439
- list-style: none;
3440
- height: 32px;
3441
- border: 1px solid var(--dql-app-line);
3442
- border-radius: 8px;
3443
- background: var(--dql-app-surface);
3444
- color: var(--dql-app-muted);
3445
- padding: 0 10px;
3446
- display: inline-flex;
3447
- align-items: center;
3448
- cursor: pointer;
3449
- font: 800 11.5px var(--font-ui);
3450
- }
3451
-
3452
- .dql-app-report-review-actions summary::-webkit-details-marker {
3453
- display: none;
3454
- }
3455
-
3456
- .dql-app-report-review-actions[open] summary,
3457
- .dql-app-report-review-actions summary:hover {
3458
- color: var(--dql-app-accent);
3459
- border-color: rgba(79, 99, 215, 0.34);
3460
- background: var(--dql-app-accent-soft);
3461
- }
3462
-
3463
- .dql-app-report-review-actions > div {
3464
- position: absolute;
3465
- z-index: 5;
3466
- right: 0;
3467
- top: calc(100% + 6px);
3468
- min-width: 220px;
3469
- border: 1px solid var(--dql-app-line);
3470
- border-radius: 10px;
3471
- background: var(--dql-app-surface);
3472
- box-shadow: var(--dql-app-shadow);
3473
- padding: 8px;
3474
- display: grid;
3475
- gap: 7px;
3476
- }
3477
-
3478
- .dql-app-report-review-actions > div .dql-apps-btn {
3479
- justify-content: flex-start;
3480
- width: 100%;
3481
- }
3482
-
3483
- .dql-app-report-warning {
3484
- display: flex;
3485
- align-items: flex-start;
3486
- gap: 8px;
3487
- margin-top: 14px;
3488
- border: 1px solid rgba(217, 119, 6, 0.24);
3489
- border-radius: 9px;
3490
- background: rgba(251, 191, 36, 0.12);
3491
- color: #92400e;
3492
- padding: 10px 12px;
3493
- font-size: 12px;
3494
- line-height: 1.45;
3495
- }
3496
-
3497
- .dql-app-report-warning svg {
3498
- flex: none;
3499
- margin-top: 1px;
3500
- }
3501
-
3502
- .dql-app-report-section {
3503
- padding: 24px 34px;
3504
- border-bottom: 0;
3505
- }
3506
-
3507
- .dql-app-report-section:last-child {
3508
- border-bottom: 0;
3509
- }
3510
-
3511
- .dql-app-report-section h3 {
3512
- margin: 0 0 12px;
3513
- color: var(--dql-app-ink);
3514
- font-size: 17px;
3515
- line-height: 1.25;
3516
- }
3517
-
3518
- .dql-app-report-paper {
3519
- color: var(--dql-app-ink);
3520
- font-size: 14.5px;
3521
- line-height: 1.78;
3522
- padding: 26px 54px 20px;
3523
- }
3524
-
3525
- .dql-app-report-paper h2,
3526
- .dql-app-report-paper h3 {
3527
- margin: 18px 0 8px;
3528
- color: var(--dql-app-ink);
3529
- font-size: 18px;
3530
- line-height: 1.22;
3531
- }
3532
-
3533
- .dql-app-report-paper h2:first-child,
3534
- .dql-app-report-paper h3:first-child {
3535
- margin-top: 0;
3536
- }
3537
-
3538
- .dql-app-report-paper p,
3539
- .dql-app-report-paper ul,
3540
- .dql-app-report-paper ol {
3541
- max-width: 900px;
3542
- }
3543
-
3544
- .dql-app-report-dynamic-sections {
3545
- display: grid;
3546
- gap: 30px;
3547
- }
3548
-
3549
- .dql-app-report-dynamic-section {
3550
- border-left: 0;
3551
- padding: 0;
3552
- display: grid;
3553
- gap: 10px;
3554
- }
3555
-
3556
- .dql-app-report-dynamic-head {
3557
- display: grid;
3558
- gap: 5px;
3559
- }
3560
-
3561
- .dql-app-report-dynamic-head span {
3562
- color: var(--dql-app-muted);
3563
- font: 850 9.5px var(--font-mono);
3564
- letter-spacing: 0;
3565
- text-transform: uppercase;
3566
- }
3567
-
3568
- .dql-app-report-dynamic-head h3 {
3569
- margin: 0;
3570
- font-size: 20px;
3571
- line-height: 1.18;
3572
- }
3573
-
3574
- .dql-app-report-memo-body {
3575
- display: grid;
3576
- gap: 10px;
3577
- max-width: 900px;
3578
- }
3579
-
3580
- .dql-app-report-memo-body p {
3581
- margin: 0;
3582
- color: var(--dql-app-ink);
3583
- font-size: 14.5px;
3584
- line-height: 1.72;
3585
- }
3586
-
3587
- .dql-app-report-dynamic-section ul {
3588
- margin: 4px 0 0;
3589
- padding-left: 20px;
3590
- display: grid;
3591
- gap: 7px;
3592
- max-width: 820px;
3593
- }
3594
-
3595
- .dql-app-report-dynamic-section li {
3596
- color: var(--dql-app-ink);
3597
- font-size: 14.5px;
3598
- line-height: 1.6;
3599
- }
3600
-
3601
- .dql-app-report-evidence-story {
3602
- display: grid;
3603
- grid-template-columns: minmax(280px, 0.9fr) minmax(360px, 1.1fr);
3604
- gap: 24px;
3605
- align-items: start;
3606
- margin: 6px 34px 12px;
3607
- border: 1px solid color-mix(in srgb, var(--dql-app-line) 75%, transparent);
3608
- border-radius: 12px;
3609
- background: linear-gradient(180deg, color-mix(in srgb, var(--dql-app-surface-muted) 64%, var(--dql-app-surface)), var(--dql-app-surface));
3610
- }
3611
-
3612
- .dql-app-report-evidence-story.single {
3613
- grid-template-columns: minmax(0, 1fr);
3614
- }
3615
-
3616
- .dql-app-report-evidence-story .dql-app-report-numbers {
3617
- grid-template-columns: repeat(2, minmax(0, 1fr));
3618
- }
3619
-
3620
- .dql-app-report-prose {
3621
- font-size: 14px;
3622
- line-height: 1.65;
3623
- }
3624
-
3625
- .dql-app-report-callout {
3626
- margin-top: 16px;
3627
- border-left: 3px solid var(--dql-app-accent);
3628
- background: var(--dql-app-surface-muted);
3629
- padding: 12px 14px;
3630
- color: var(--dql-app-muted);
3631
- }
3632
-
3633
- .dql-app-report-numbers {
3634
- display: grid;
3635
- grid-template-columns: repeat(4, minmax(0, 1fr));
3636
- gap: 10px;
3637
- }
3638
-
3639
- .dql-app-report-number {
3640
- border: 1px solid var(--dql-app-line);
3641
- border-radius: 9px;
3642
- background: var(--dql-app-surface);
3643
- padding: 13px;
3644
- min-width: 0;
3645
- }
3646
-
3647
- .dql-app-report-number span,
3648
- .dql-app-report-number small {
3649
- display: block;
3650
- color: var(--dql-app-muted);
3651
- }
3652
-
3653
- .dql-app-report-number span {
3654
- font: 850 9.5px var(--font-mono);
3655
- letter-spacing: 0;
3656
- text-transform: uppercase;
3657
- }
3658
-
3659
- .dql-app-report-number b {
3660
- display: block;
3661
- margin-top: 7px;
3662
- color: var(--dql-app-ink);
3663
- font-size: 23px;
3664
- line-height: 1;
3665
- overflow: hidden;
3666
- text-overflow: ellipsis;
3667
- }
3668
-
3669
- .dql-app-report-number small {
3670
- margin-top: 7px;
3671
- font-size: 11.5px;
3672
- line-height: 1.35;
3673
- }
3674
-
3675
- .dql-app-report-drivers {
3676
- display: grid;
3677
- gap: 12px;
3678
- }
3679
-
3680
- .dql-app-report-driver {
3681
- display: grid;
3682
- grid-template-columns: 34px minmax(0, 1fr);
3683
- gap: 12px;
3684
- align-items: start;
3685
- padding: 13px 0;
3686
- border-bottom: 1px solid var(--dql-app-line);
3687
- }
3688
-
3689
- .dql-app-report-driver:last-child { border-bottom: 0; }
3690
-
3691
- .dql-app-report-driver > span {
3692
- width: 28px;
3693
- height: 28px;
3694
- border-radius: 999px;
3695
- background: var(--dql-app-accent-soft);
3696
- color: var(--dql-app-accent);
3697
- display: inline-flex;
3698
- align-items: center;
3699
- justify-content: center;
3700
- font: 850 12px var(--font-mono);
3701
- }
3702
-
3703
- .dql-app-report-driver b {
3704
- display: inline;
3705
- color: var(--dql-app-ink);
3706
- font-size: 14px;
3707
- }
3708
-
3709
- .dql-app-report-driver em {
3710
- margin-left: 8px;
3711
- color: var(--dql-app-accent);
3712
- font: 850 12px var(--font-mono);
3713
- font-style: normal;
3714
- }
3715
-
3716
- .dql-app-report-driver p,
3717
- .dql-app-report-muted {
3718
- margin: 7px 0 0;
3719
- color: var(--dql-app-muted);
3720
- font-size: 13px;
3721
- line-height: 1.55;
3722
- }
3723
-
3724
- .dql-app-report-driver-chart {
3725
- display: grid;
3726
- gap: 13px;
3727
- }
3728
-
3729
- .dql-app-report-driver-bar {
3730
- display: grid;
3731
- gap: 7px;
3732
- }
3733
-
3734
- .dql-app-report-driver-bar > div {
3735
- display: flex;
3736
- align-items: baseline;
3737
- justify-content: space-between;
3738
- gap: 12px;
3739
- }
3740
-
3741
- .dql-app-report-driver-bar b {
3742
- min-width: 0;
3743
- color: var(--dql-app-ink);
3744
- font-size: 13.5px;
3745
- overflow: hidden;
3746
- text-overflow: ellipsis;
3747
- white-space: nowrap;
3748
- }
3749
-
3750
- .dql-app-report-driver-bar span {
3751
- flex: none;
3752
- color: var(--dql-app-accent);
3753
- font: 850 11px var(--font-mono);
3754
- }
3755
-
3756
- .dql-app-report-driver-bar i {
3757
- display: block;
3758
- width: var(--driver-width);
3759
- min-width: 28px;
3760
- height: 9px;
3761
- border-radius: 999px;
3762
- background: linear-gradient(90deg, var(--dql-app-accent), rgba(79, 99, 215, 0.42));
3763
- }
3764
-
3765
- .dql-app-report-driver-bar p {
3766
- margin: 0;
3767
- color: var(--dql-app-muted);
3768
- font-size: 12px;
3769
- line-height: 1.45;
3770
- }
3771
-
3772
- .dql-app-report-appendix {
3773
- padding: 0;
3774
- }
3775
-
3776
- .dql-app-report-appendix summary {
3777
- list-style: none;
3778
- display: grid;
3779
- grid-template-columns: minmax(0, 1fr) auto;
3780
- gap: 4px 14px;
3781
- align-items: center;
3782
- cursor: pointer;
3783
- padding: 18px 30px;
3784
- }
3785
-
3786
- .dql-app-report-appendix summary::-webkit-details-marker {
3787
- display: none;
3788
- }
3789
-
3790
- .dql-app-report-appendix summary span {
3791
- color: var(--dql-app-ink);
3792
- font: 850 14px var(--font-ui);
3793
- }
3794
-
3795
- .dql-app-report-appendix summary small {
3796
- grid-column: 1 / 2;
3797
- color: var(--dql-app-muted);
3798
- font-size: 12px;
3799
- line-height: 1.4;
3800
- }
3801
-
3802
- .dql-app-report-appendix summary svg {
3803
- grid-row: 1 / span 2;
3804
- grid-column: 2;
3805
- color: var(--dql-app-muted);
3806
- transition: transform 140ms ease;
3807
- }
3808
-
3809
- .dql-app-report-appendix[open] summary {
3810
- border-bottom: 1px solid var(--dql-app-line);
3811
- }
3812
-
3813
- .dql-app-report-appendix[open] summary svg {
3814
- transform: rotate(180deg);
3815
- }
3816
-
3817
- .dql-app-report-appendix .dql-app-research-evidence-head {
3818
- align-items: flex-start;
3819
- margin: 18px 30px 10px;
3820
- }
3821
-
3822
- .dql-app-report-appendix .dql-app-research-evidence-head h3 {
3823
- margin-bottom: 4px;
3824
- }
3825
-
3826
- .dql-app-report-appendix .dql-app-research-evidence-head p {
3827
- margin: 0;
3828
- color: var(--dql-app-muted);
3829
- font-size: 12px;
3830
- line-height: 1.45;
3831
- }
3832
-
3833
- .dql-app-report-appendix .dql-app-research-table,
3834
- .dql-app-report-appendix .dql-app-research-sql-review,
3835
- .dql-app-report-appendix .dql-app-research-assumptions,
3836
- .dql-app-report-appendix .dql-app-research-code {
3837
- margin-left: 30px;
3838
- margin-right: 30px;
3839
- }
3840
-
3841
- .dql-app-report-appendix > :last-child {
3842
- margin-bottom: 24px;
3843
- }
3844
-
3845
- .dql-app-research-tabs {
3846
- display: flex;
3847
- gap: 4px;
3848
- flex-wrap: wrap;
3849
- }
3850
-
3851
- .dql-app-research-tabs button,
3852
- .dql-app-research-next button {
3853
- border: 1px solid var(--dql-app-line);
3854
- border-radius: 999px;
3855
- background: var(--dql-app-surface);
3856
- color: var(--dql-app-muted);
3857
- font: 800 11px var(--font-ui);
3858
- padding: 5px 9px;
3859
- cursor: pointer;
3860
- }
3861
-
3862
- .dql-app-research-tabs button.on,
3863
- .dql-app-research-tabs button:hover,
3864
- .dql-app-research-next button:hover {
3865
- color: var(--dql-app-accent);
3866
- border-color: rgba(37, 99, 235, 0.34);
3867
- background: var(--dql-app-accent-soft);
3868
- }
3869
-
3870
- .dql-app-research-code {
3871
- margin: 10px 0 0;
3872
- max-height: 320px;
3873
- overflow: auto;
3874
- border-radius: 8px;
3875
- border: 1px solid var(--dql-app-line);
3876
- background: var(--dql-app-surface);
3877
- padding: 11px;
3878
- color: var(--dql-app-ink);
3879
- font: 11px/1.5 var(--font-mono);
3880
- white-space: pre-wrap;
3881
- }
3882
-
3883
- .dql-app-research-sql-review {
3884
- display: grid;
3885
- gap: 10px;
3886
- margin-top: 10px;
3887
- }
3888
-
3889
- .dql-app-research-sql-review textarea {
3890
- min-height: 260px;
3891
- resize: vertical;
3892
- border-radius: 8px;
3893
- border: 1px solid var(--dql-app-line);
3894
- background: var(--dql-app-surface);
3895
- color: var(--dql-app-ink);
3896
- padding: 11px;
3897
- font: 11px/1.5 var(--font-mono);
3898
- outline: none;
3899
- }
3900
-
3901
- .dql-app-research-sql-review textarea:focus {
3902
- border-color: rgba(37, 99, 235, 0.42);
3903
- box-shadow: 0 0 0 3px var(--dql-app-accent-soft);
3904
- }
3905
-
3906
- .dql-app-research-assumptions {
3907
- display: grid;
3908
- gap: 8px;
3909
- margin-top: 10px;
3910
- }
3911
-
3912
- .dql-app-research-assumptions p {
3913
- margin: 0;
3914
- border: 1px solid var(--dql-app-line);
3915
- border-radius: 7px;
3916
- background: var(--dql-app-surface);
3917
- padding: 9px;
3918
- color: var(--dql-app-muted);
3919
- font-size: 12px;
3920
- }
3921
-
3922
- .dql-app-research-table {
3923
- margin-top: 10px;
3924
- overflow: auto;
3925
- border: 1px solid var(--dql-app-line);
3926
- border-radius: 8px;
3927
- background: var(--dql-app-surface);
3928
- }
3929
-
3930
- .dql-app-research-table table {
3931
- width: 100%;
3932
- border-collapse: collapse;
3933
- min-width: 520px;
3934
- }
3935
-
3936
- .dql-app-research-table th,
3937
- .dql-app-research-table td {
3938
- padding: 8px 9px;
3939
- border-bottom: 1px solid var(--dql-app-line);
3940
- text-align: left;
3941
- font-size: 11.5px;
3942
- white-space: nowrap;
3943
- }
3944
-
3945
- .dql-app-research-table th {
3946
- color: var(--dql-app-muted);
3947
- background: var(--dql-app-control);
3948
- font-weight: 850;
3949
- }
3950
-
3951
- .dql-app-research-next {
3952
- display: flex;
3953
- gap: 7px;
3954
- flex-wrap: wrap;
3955
- margin-top: 10px;
3956
- }
3957
-
3958
- .dql-app-simple-list,
3959
- .dql-app-settings-grid { display: grid; gap: 10px; }
3960
- .dql-app-settings-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
3961
- .dql-app-panel-card {
3962
- border: 1px solid var(--dql-app-line);
3963
- border-radius: 8px;
3964
- background: var(--dql-app-surface);
3965
- padding: 13px;
3966
- display: flex;
3967
- gap: 10px;
3968
- align-items: flex-start;
3969
- }
3970
-
3971
- .dql-app-panel-card > span {
3972
- width: 30px;
3973
- height: 30px;
3974
- border-radius: 7px;
3975
- display: inline-flex;
3976
- align-items: center;
3977
- justify-content: center;
3978
- color: var(--dql-app-accent);
3979
- background: var(--dql-app-accent-soft);
3980
- flex: none;
3981
- }
3982
-
3983
- .dql-app-panel-card b { display: block; }
3984
- .dql-app-panel-card span:last-child { color: var(--dql-app-muted); font-size: 12px; }
3985
- .dql-app-empty {
3986
- min-height: 260px;
3987
- border: 1px dashed var(--dql-app-line-2);
3988
- border-radius: 8px;
3989
- background: var(--dql-app-surface);
3990
- color: var(--dql-app-faint);
3991
- display: flex;
3992
- flex-direction: column;
3993
- align-items: center;
3994
- justify-content: center;
3995
- text-align: center;
3996
- gap: 8px;
3997
- padding: 28px;
3998
- }
3999
-
4000
- .dql-app-empty.compact { min-height: 120px; padding: 18px; }
4001
- .dql-app-empty b { color: var(--dql-app-ink); }
4002
- .dql-app-empty span { max-width: 440px; font-size: 12px; line-height: 1.45; }
4003
- .dql-app-modal-backdrop {
4004
- position: fixed;
4005
- inset: 0;
4006
- z-index: 100;
4007
- background: rgba(15, 23, 42, 0.36);
4008
- display: flex;
4009
- align-items: center;
4010
- justify-content: center;
4011
- padding: 24px;
4012
- }
4013
-
4014
- .dql-app-modal {
4015
- width: min(480px, 94vw);
4016
- border-radius: 8px;
4017
- background: var(--dql-app-surface);
4018
- box-shadow: 0 18px 60px rgba(15, 23, 42, 0.28);
4019
- padding: 18px;
4020
- display: grid;
4021
- gap: 12px;
4022
- }
4023
-
4024
- .dql-app-modal h3 { margin: 0; }
4025
- .dql-app-modal p { margin: 0; color: var(--dql-app-muted); font-size: 12px; }
4026
- .dql-app-modal > div:last-child { display: flex; justify-content: flex-end; gap: 8px; }
4027
-
4028
- @media (max-width: 1120px) {
4029
- .dql-apps-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
4030
- .dql-app-create-workspace,
4031
- .dql-app-create-workspace.classic {
4032
- grid-template-columns: 1fr;
4033
- align-content: start;
4034
- overflow: auto;
4035
- }
4036
- .dql-app-create-workspace .dql-app-panel {
4037
- min-height: auto;
4038
- border-right: 0;
4039
- border-bottom: 1px solid var(--dql-app-line);
4040
- }
4041
- .dql-app-ai-start,
4042
- .dql-app-ai-generated-grid {
4043
- grid-template-columns: 1fr;
4044
- }
4045
- .dql-app-filterbar {
4046
- flex-wrap: nowrap;
4047
- gap: 6px;
4048
- padding: 7px 22px;
4049
- overflow-x: auto;
4050
- }
4051
- .dql-app-filter-note {
4052
- width: 30px;
4053
- height: 30px;
4054
- justify-content: center;
4055
- gap: 0;
4056
- border: 1px solid var(--dql-app-line);
4057
- border-radius: 8px;
4058
- background: var(--dql-app-control);
4059
- font-size: 0;
4060
- flex: 0 0 auto;
4061
- }
4062
- .dql-app-filter-note svg {
4063
- width: 14px;
4064
- height: 14px;
4065
- }
4066
- .dql-app-filter-select,
4067
- .dql-app-toggle {
4068
- flex: 0 0 auto;
4069
- }
4070
- .dql-app-toggle {
4071
- gap: 6px;
4072
- font-weight: 750;
4073
- }
4074
- .dql-app-review-backlog-grid {
4075
- grid-template-columns: 1fr;
4076
- }
4077
- }
4078
-
4079
- @media (max-width: 900px) {
4080
- .dql-app-view-layout { grid-template-columns: 1fr; }
4081
- .dql-app-view-topbar {
4082
- align-content: flex-start;
4083
- align-items: flex-start;
4084
- min-height: 132px;
4085
- row-gap: 8px;
4086
- }
4087
- .dql-app-topbar-divider {
4088
- display: none;
4089
- }
4090
- .dql-app-topbar-filters {
4091
- flex: 1 1 100%;
4092
- order: 2;
4093
- }
4094
- .dql-app-filter-row { align-items: stretch; }
4095
- .dql-app-filter-row-copy, .dql-app-filter-row-actions { width: 100%; }
4096
- .dql-app-filter-row-actions { justify-content: flex-end; }
4097
- .dql-app-view-actions {
4098
- flex: 1 1 100%;
4099
- justify-content: flex-start;
4100
- margin-left: 0;
4101
- order: 3;
4102
- }
4103
- .dql-app-research-shell {
4104
- grid-template-columns: 1fr;
4105
- }
4106
- .dql-app-research-detail {
4107
- order: 1;
4108
- }
4109
- .dql-app-research-list {
4110
- order: 2;
4111
- }
4112
- .dql-app-explain-panel {
4113
- position: static;
4114
- width: 100%;
4115
- max-width: none;
4116
- height: min(680px, calc(100vh - 24px));
4117
- resize: none;
4118
- max-height: none;
4119
- }
4120
- .dql-app-explain-panel[data-expanded="true"] {
4121
- width: 100%;
4122
- max-width: none;
4123
- }
4124
- }
4125
-
4126
- @media (max-width: 760px) {
4127
- .dql-apps-wrap,
4128
- .dql-app-view-wrap {
4129
- width: min(100% - 16px, calc(100vw - 104px));
4130
- max-width: calc(100vw - 104px);
4131
- margin: 0 auto;
4132
- padding-bottom: 48px;
4133
- }
4134
- .dql-apps-libbar,
4135
- .dql-app-buildbar,
4136
- .dql-app-view-topbar,
4137
- .dql-app-filterbar {
4138
- align-items: stretch;
4139
- flex-direction: column;
4140
- overflow-x: visible;
4141
- }
4142
- .dql-app-filter-note {
4143
- width: auto;
4144
- height: auto;
4145
- margin-left: 0;
4146
- justify-content: flex-start;
4147
- gap: 6px;
4148
- font-size: 11px;
4149
- }
4150
- .dql-apps-grid,
4151
- .dql-app-form-grid.two,
4152
- .dql-app-settings-grid,
4153
- .dql-app-ai-filter-preview { grid-template-columns: 1fr; }
4154
- .dql-apps-ai-entry-box {
4155
- grid-template-columns: 1fr;
4156
- }
4157
- .dql-apps-ai-entry-box button {
4158
- width: 100%;
4159
- }
4160
- .dql-apps-ai-entry-foot {
4161
- align-items: stretch;
4162
- flex-direction: column;
4163
- }
4164
- .dql-apps-ai-entry-secondary {
4165
- justify-content: center;
4166
- }
4167
- .dql-app-create-workspace.clean {
4168
- padding: 16px;
4169
- }
4170
- .dql-app-ai-start-card {
4171
- padding: 15px;
4172
- }
4173
- .dql-app-ai-start-card textarea {
4174
- min-height: 150px;
4175
- font-size: 15px;
4176
- padding-bottom: 48px;
4177
- }
4178
- .dql-app-ai-start-send {
4179
- right: 14px;
4180
- bottom: 14px;
4181
- }
4182
- .dql-app-ai-generated-head {
4183
- align-items: stretch;
4184
- flex-direction: column;
4185
- }
4186
- .dql-app-mode-seg { margin: 0; width: 100%; }
4187
- .dql-app-mode-seg button { flex: 1; }
4188
- .dql-app-build-actions,
4189
- .dql-app-view-actions { margin-left: 0; width: 100%; flex-wrap: wrap; }
4190
- .dql-app-nav-row {
4191
- width: 100%;
4192
- justify-content: flex-start;
4193
- flex-wrap: nowrap;
4194
- overflow-x: auto;
4195
- padding-bottom: 2px;
4196
- }
4197
- .dql-app-section-tabs {
4198
- flex: 0 0 auto;
4199
- max-width: none;
4200
- }
4201
- .dql-app-section-tabs button {
4202
- min-width: auto;
4203
- white-space: nowrap;
4204
- }
4205
- .dql-app-section-tabs .dql-app-tab-label {
4206
- display: inline;
4207
- }
4208
- .dql-app-explain-panel {
4209
- order: -1;
4210
- min-width: 0;
4211
- height: min(620px, calc(100vh - 160px));
4212
- min-height: 420px;
4213
- margin-bottom: 12px;
4214
- }
4215
- .dql-app-assistant-top {
4216
- grid-template-columns: minmax(0, 1fr);
4217
- align-items: stretch;
4218
- }
4219
- .dql-app-assistant-focus {
4220
- flex: 1 1 100%;
4221
- }
4222
- .dql-app-assistant-focus select {
4223
- width: 100%;
4224
- max-width: none;
4225
- }
4226
- .dql-app-assistant-context-btn {
4227
- position: static;
4228
- justify-self: start;
4229
- }
4230
- .dql-app-direct-ask-row {
4231
- grid-template-columns: minmax(0, 1fr);
4232
- }
4233
- .dql-app-direct-ask-row button {
4234
- width: 100%;
4235
- }
4236
- .dql-app-page-picker {
4237
- flex: 0 0 min(100%, 360px);
4238
- }
4239
- .dql-app-page-picker select { min-width: 0; max-width: 100%; }
4240
- .dql-app-report-hero {
4241
- padding: 18px 16px 16px;
4242
- }
4243
- .dql-app-report-status-row {
4244
- align-items: flex-start;
4245
- flex-direction: column;
4246
- }
4247
- .dql-app-report-hero h2 {
4248
- font-size: 26px;
4249
- line-height: 1.08;
4250
- overflow-wrap: anywhere;
4251
- }
4252
- .dql-app-report-section {
4253
- padding: 18px 16px;
4254
- }
4255
- .dql-app-report-paper {
4256
- padding: 18px 18px 14px;
4257
- }
4258
- .dql-app-report-evidence-story {
4259
- margin: 4px 16px 10px;
4260
- }
4261
- .dql-app-report-appendix {
4262
- padding: 0;
4263
- }
4264
- .dql-app-report-appendix summary {
4265
- padding: 16px;
4266
- }
4267
- .dql-app-report-appendix .dql-app-research-evidence-head,
4268
- .dql-app-report-appendix .dql-app-research-table,
4269
- .dql-app-report-appendix .dql-app-research-sql-review,
4270
- .dql-app-report-appendix .dql-app-research-assumptions,
4271
- .dql-app-report-appendix .dql-app-research-code {
4272
- margin-left: 16px;
4273
- margin-right: 16px;
4274
- }
4275
- .dql-app-direct-quick,
4276
- .dql-app-report-evidence-story,
4277
- .dql-app-report-numbers {
4278
- grid-template-columns: 1fr;
4279
- }
4280
- .dql-app-report-evidence-story .dql-app-report-numbers {
4281
- grid-template-columns: 1fr;
4282
- }
4283
- .dql-app-report-context-line span {
4284
- white-space: normal;
4285
- }
4286
- .dql-app-preview-tile,
4287
- .dql-app-preview-tile.wide { grid-column: 1 / -1; }
4288
- .dql-app-drilldown-grid {
4289
- grid-template-columns: 1fr;
4290
- }
4291
- }
4292
-
4293
- /* ══ Redesigned AI build flow (Apps Redesign.dc.html) ══ */
4294
- @keyframes dql-app-fadein { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } }
4295
- @keyframes dql-app-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
4296
- @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); } }
4297
- @keyframes dql-app-step { from { opacity: 0; transform: translateX(-4px); } to { opacity: 1; transform: none; } }
4298
-
4299
- .dql-app-flow-scroll { min-height: 100%; }
4300
- .dql-app-flow {
4301
- width: min(880px, calc(100% - 48px));
4302
- margin: 0 auto;
4303
- padding: 28px 0 40px;
4304
- display: flex;
4305
- flex-direction: column;
4306
- gap: 16px;
4307
- }
4308
- .dql-app-flow-head h2 { margin: 0; font-size: 18px; font-weight: 700; letter-spacing: -0.01em; color: var(--dql-app-ink); }
4309
- .dql-app-flow-head p { margin: 3px 0 0; font-size: 12.5px; color: var(--dql-app-faint); }
4310
- .dql-app-flow-bubble {
4311
- align-self: flex-end;
4312
- max-width: 78%;
4313
- background: var(--dql-app-surface-muted);
4314
- color: var(--dql-app-ink);
4315
- border-radius: 16px 16px 4px 16px;
4316
- padding: 10px 14px;
4317
- font-size: 13px;
4318
- line-height: 1.5;
4319
- animation: dql-app-fadein 0.2s ease-out;
4320
- }
4321
- .dql-app-buildstream { display: flex; gap: 12px; animation: dql-app-fadein 0.25s ease-out; }
4322
- .dql-app-buildorb {
4323
- width: 30px; height: 30px; border-radius: 50%;
4324
- background: var(--dql-app-accent-soft);
4325
- border: 1px solid var(--dql-app-line);
4326
- color: var(--dql-app-accent);
4327
- display: inline-flex; align-items: center; justify-content: center;
4328
- flex: none;
4329
- animation: dql-app-orb 1.8s ease-in-out infinite;
4330
- }
4331
- .dql-app-buildorb.still { animation: none; }
4332
- .dql-app-buildbody { display: flex; flex-direction: column; gap: 7px; padding-top: 4px; min-width: 0; }
4333
- .dql-app-buildbody.wide { flex: 1; gap: 10px; }
4334
- .dql-app-shimmer {
4335
- font-size: 13.5px; font-weight: 700; letter-spacing: -0.01em;
4336
- background-image: linear-gradient(100deg, var(--dql-app-ink) 25%, var(--dql-app-accent) 50%, var(--dql-app-ink) 75%);
4337
- background-size: 220% 100%;
4338
- -webkit-background-clip: text; background-clip: text;
4339
- color: transparent; -webkit-text-fill-color: transparent;
4340
- animation: dql-app-shimmer 2.4s linear infinite;
4341
- }
4342
- .dql-app-buildsteps { display: flex; flex-direction: column; gap: 5px; font-size: 11.5px; color: var(--dql-app-faint); line-height: 1.45; }
4343
- .dql-app-buildsteps > span { display: inline-flex; align-items: center; gap: 6px; animation: dql-app-step 0.3s ease-out both; }
4344
- .dql-app-buildsteps .ok { color: var(--dql-app-green); flex: none; }
4345
- .dql-app-buildsteps code { font-family: var(--font-mono); font-size: 10.5px; }
4346
- .dql-app-buildsteps .dot { width: 5px; height: 5px; border-radius: 999px; background: var(--dql-app-accent); margin: 0 3px; flex: none; }
4347
- .dql-app-proposal-lede { font-size: 13.5px; line-height: 1.6; color: var(--dql-app-ink); }
4348
- .dql-app-proposal-card {
4349
- border: 1px solid var(--dql-app-line);
4350
- border-radius: 11px;
4351
- background: var(--dql-app-surface);
4352
- overflow: hidden;
4353
- }
4354
- .dql-app-proposal-row {
4355
- display: flex; align-items: center; gap: 10px;
4356
- width: 100%;
4357
- padding: 10px 13px;
4358
- border: 0; border-bottom: 1px solid var(--dql-app-line);
4359
- background: var(--dql-app-surface);
4360
- cursor: pointer; text-align: left; font-family: inherit;
4361
- }
4362
- .dql-app-proposal-row:hover { background: var(--dql-app-canvas); }
4363
- .dql-app-proposal-row.off { background: var(--dql-app-canvas); }
4364
- .dql-app-prop-check {
4365
- width: 16px; height: 16px; border-radius: 4.5px;
4366
- border: 1.5px solid var(--dql-app-line-2);
4367
- background: var(--dql-app-surface);
4368
- color: #fff;
4369
- display: inline-flex; align-items: center; justify-content: center;
4370
- flex: none;
4371
- }
4372
- .dql-app-prop-check.on { border-color: var(--dql-app-accent); background: var(--dql-app-accent); }
4373
- .dql-app-prop-glyph {
4374
- width: 26px; height: 26px; border-radius: 6px;
4375
- background: var(--dql-app-accent-soft); color: var(--dql-app-accent);
4376
- display: inline-flex; align-items: center; justify-content: center;
4377
- flex: none; font-size: 13px;
4378
- }
4379
- .dql-app-prop-glyph.green { background: var(--dql-app-green-soft); color: var(--dql-app-green); }
4380
- .dql-app-prop-name { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
4381
- .dql-app-prop-name b { font-size: 12.5px; font-weight: 650; color: var(--dql-app-ink); font-family: var(--font-mono); }
4382
- .dql-app-prop-name small { font-size: 11px; color: var(--dql-app-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4383
- .dql-app-prop-badge {
4384
- flex: none; border-radius: 999px; padding: 2px 8px;
4385
- font-size: 9.5px; font-weight: 700;
4386
- }
4387
- .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); }
4388
- .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); }
4389
- .dql-app-prop-viz { flex: none; font-size: 10.5px; color: var(--dql-app-faint); }
4390
- .dql-app-addmore {
4391
- display: flex; align-items: center; gap: 7px;
4392
- width: 100%; padding: 10px 13px;
4393
- border: 0; background: none;
4394
- color: var(--dql-app-accent);
4395
- font-size: 12px; font-weight: 650; cursor: pointer; font-family: inherit; text-align: left;
4396
- }
4397
- .dql-app-addmore:hover { background: var(--dql-app-accent-soft); }
4398
- .dql-app-addmore-panel { border-top: 1px solid var(--dql-app-line); animation: dql-app-fadein 0.15s ease-out; }
4399
- .dql-app-addmore-search {
4400
- display: flex; align-items: center; gap: 7px;
4401
- padding: 9px 13px;
4402
- border-bottom: 1px solid var(--dql-app-line);
4403
- background: var(--dql-app-canvas);
4404
- color: var(--dql-app-faint);
4405
- }
4406
- .dql-app-addmore-search input {
4407
- flex: 1; border: 0; background: none; outline: none;
4408
- font-size: 12px; font-family: inherit; color: var(--dql-app-ink); min-width: 0;
4409
- }
4410
- .dql-app-addmore-row {
4411
- display: flex; align-items: center; gap: 9px;
4412
- width: 100%; padding: 8px 13px;
4413
- border: 0; border-bottom: 1px solid var(--dql-app-line);
4414
- background: none; cursor: pointer; text-align: left; font-family: inherit;
4415
- color: var(--dql-app-accent);
4416
- }
4417
- .dql-app-addmore-row:hover { background: var(--dql-app-accent-soft); }
4418
- .dql-app-addmore-row span { flex: 1; min-width: 0; font-size: 12px; font-family: var(--font-mono); color: var(--dql-app-ink); }
4419
- .dql-app-addmore-row small { flex: none; font-size: 10.5px; color: var(--dql-app-faint); }
4420
- .dql-app-addmore-hint { padding: 9px 13px; font-size: 11px; color: var(--dql-app-faint); }
4421
- .dql-app-detected { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 11px; color: var(--dql-app-faint); }
4422
- .dql-app-detected-label { font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; font-size: 9.5px; }
4423
- .dql-app-detected-pill {
4424
- border: 1px solid var(--dql-app-line);
4425
- background: var(--dql-app-surface);
4426
- border-radius: 999px; padding: 2.5px 9px;
4427
- color: var(--dql-app-muted);
4428
- }
4429
- .dql-app-flow-gaps { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: var(--dql-app-orange); }
4430
- .dql-app-flow-gaps span { display: inline-flex; align-items: center; gap: 6px; }
4431
- .dql-app-flow-actions { display: flex; align-items: center; gap: 8px; }
4432
- .dql-app-flow-build {
4433
- display: inline-flex; align-items: center; gap: 7px;
4434
- height: 34px; padding: 0 16px;
4435
- border-radius: 8px; border: 0;
4436
- background: var(--dql-app-accent); color: #fff;
4437
- font-size: 12.5px; font-weight: 650; cursor: pointer; font-family: inherit;
4438
- box-shadow: 0 1px 5px rgba(107, 93, 211, 0.3);
4439
- }
4440
- .dql-app-flow-build:hover { filter: brightness(0.95); }
4441
- .dql-app-flow-build:disabled { opacity: 0.55; cursor: default; }
4442
- .dql-app-flow-reset {
4443
- height: 34px; padding: 0 13px;
4444
- border-radius: 8px; border: 1px solid var(--dql-app-line);
4445
- background: var(--dql-app-surface); color: var(--dql-app-muted);
4446
- font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit;
4447
- }
4448
- .dql-app-flow-reset:hover { background: var(--dql-app-surface-muted); }
4449
- /* View / Edit segmented toggle (app workspace top bar) */
4450
- .dql-app-modeseg {
4451
- display: inline-flex; align-items: center; gap: 2px;
4452
- padding: 2px;
4453
- border: 1px solid var(--dql-app-line);
4454
- border-radius: 7px;
4455
- background: var(--dql-app-canvas);
4456
- }
4457
- .dql-app-modeseg button {
4458
- border: 0; border-radius: 5px;
4459
- padding: 4px 12px;
4460
- font-size: 11.5px; font-weight: 600;
4461
- cursor: pointer; font-family: inherit;
4462
- display: inline-flex; align-items: center; gap: 5px;
4463
- background: transparent; color: var(--dql-app-faint);
4464
- }
4465
- .dql-app-modeseg button.on { background: var(--dql-app-accent-soft); color: var(--dql-app-accent); }
4466
- `;export{ts as AppsView};