@zenfg/inspector 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/FrameGraphInspector.d.ts +153 -0
  4. package/dist/FrameGraphInspector.d.ts.map +1 -0
  5. package/dist/FrameGraphInspector.js +580 -0
  6. package/dist/FrameGraphInspector.js.map +1 -0
  7. package/dist/debugCaptureModel.d.ts +166 -0
  8. package/dist/debugCaptureModel.d.ts.map +1 -0
  9. package/dist/debugCaptureModel.js +364 -0
  10. package/dist/debugCaptureModel.js.map +1 -0
  11. package/dist/index.d.ts +17 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +15 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/panelAliasAnalysis.d.ts +20 -0
  16. package/dist/panelAliasAnalysis.d.ts.map +1 -0
  17. package/dist/panelAliasAnalysis.js +113 -0
  18. package/dist/panelAliasAnalysis.js.map +1 -0
  19. package/dist/panelCytoscapeGraphRenderer.d.ts +71 -0
  20. package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -0
  21. package/dist/panelCytoscapeGraphRenderer.js +559 -0
  22. package/dist/panelCytoscapeGraphRenderer.js.map +1 -0
  23. package/dist/panelDiagnosticsView.d.ts +22 -0
  24. package/dist/panelDiagnosticsView.d.ts.map +1 -0
  25. package/dist/panelDiagnosticsView.js +123 -0
  26. package/dist/panelDiagnosticsView.js.map +1 -0
  27. package/dist/panelDomHelpers.d.ts +26 -0
  28. package/dist/panelDomHelpers.d.ts.map +1 -0
  29. package/dist/panelDomHelpers.js +129 -0
  30. package/dist/panelDomHelpers.js.map +1 -0
  31. package/dist/panelGraphLayout.d.ts +28 -0
  32. package/dist/panelGraphLayout.d.ts.map +1 -0
  33. package/dist/panelGraphLayout.js +223 -0
  34. package/dist/panelGraphLayout.js.map +1 -0
  35. package/dist/panelGraphRenderer.d.ts +20 -0
  36. package/dist/panelGraphRenderer.d.ts.map +1 -0
  37. package/dist/panelGraphRenderer.js +2 -0
  38. package/dist/panelGraphRenderer.js.map +1 -0
  39. package/dist/panelGraphScene.d.ts +98 -0
  40. package/dist/panelGraphScene.d.ts.map +1 -0
  41. package/dist/panelGraphScene.js +559 -0
  42. package/dist/panelGraphScene.js.map +1 -0
  43. package/dist/panelGraphView.d.ts +9 -0
  44. package/dist/panelGraphView.d.ts.map +1 -0
  45. package/dist/panelGraphView.js +88 -0
  46. package/dist/panelGraphView.js.map +1 -0
  47. package/dist/panelGraphVisuals.d.ts +38 -0
  48. package/dist/panelGraphVisuals.d.ts.map +1 -0
  49. package/dist/panelGraphVisuals.js +330 -0
  50. package/dist/panelGraphVisuals.js.map +1 -0
  51. package/dist/panelIcons.d.ts +4 -0
  52. package/dist/panelIcons.d.ts.map +1 -0
  53. package/dist/panelIcons.js +43 -0
  54. package/dist/panelIcons.js.map +1 -0
  55. package/dist/panelInspectorView.d.ts +33 -0
  56. package/dist/panelInspectorView.d.ts.map +1 -0
  57. package/dist/panelInspectorView.js +357 -0
  58. package/dist/panelInspectorView.js.map +1 -0
  59. package/dist/panelMemoryView.d.ts +21 -0
  60. package/dist/panelMemoryView.d.ts.map +1 -0
  61. package/dist/panelMemoryView.js +134 -0
  62. package/dist/panelMemoryView.js.map +1 -0
  63. package/dist/panelPassesView.d.ts +31 -0
  64. package/dist/panelPassesView.d.ts.map +1 -0
  65. package/dist/panelPassesView.js +183 -0
  66. package/dist/panelPassesView.js.map +1 -0
  67. package/dist/panelResourcesView.d.ts +19 -0
  68. package/dist/panelResourcesView.d.ts.map +1 -0
  69. package/dist/panelResourcesView.js +89 -0
  70. package/dist/panelResourcesView.js.map +1 -0
  71. package/dist/panelSelection.d.ts +5 -0
  72. package/dist/panelSelection.d.ts.map +1 -0
  73. package/dist/panelSelection.js +88 -0
  74. package/dist/panelSelection.js.map +1 -0
  75. package/dist/panelTypes.d.ts +40 -0
  76. package/dist/panelTypes.d.ts.map +1 -0
  77. package/dist/panelTypes.js +2 -0
  78. package/dist/panelTypes.js.map +1 -0
  79. package/dist/panelVisualTheme.d.ts +76 -0
  80. package/dist/panelVisualTheme.d.ts.map +1 -0
  81. package/dist/panelVisualTheme.js +39 -0
  82. package/dist/panelVisualTheme.js.map +1 -0
  83. package/dist/panelWorkbenchHelpers.d.ts +34 -0
  84. package/dist/panelWorkbenchHelpers.d.ts.map +1 -0
  85. package/dist/panelWorkbenchHelpers.js +162 -0
  86. package/dist/panelWorkbenchHelpers.js.map +1 -0
  87. package/dist/panelWorkbenchView.d.ts +77 -0
  88. package/dist/panelWorkbenchView.d.ts.map +1 -0
  89. package/dist/panelWorkbenchView.js +409 -0
  90. package/dist/panelWorkbenchView.js.map +1 -0
  91. package/dist/query.d.ts +11 -0
  92. package/dist/query.d.ts.map +1 -0
  93. package/dist/query.js +21 -0
  94. package/dist/query.js.map +1 -0
  95. package/dist/styles.d.ts +8 -0
  96. package/dist/styles.d.ts.map +1 -0
  97. package/dist/styles.js +1073 -0
  98. package/dist/styles.js.map +1 -0
  99. package/package.json +29 -0
  100. package/src/FrameGraphInspector.ts +632 -0
  101. package/src/debugCaptureModel.ts +583 -0
  102. package/src/index.ts +21 -0
  103. package/src/panelAliasAnalysis.ts +164 -0
  104. package/src/panelCytoscapeGraphRenderer.ts +617 -0
  105. package/src/panelDiagnosticsView.ts +160 -0
  106. package/src/panelDomHelpers.ts +151 -0
  107. package/src/panelGraphLayout.ts +281 -0
  108. package/src/panelGraphRenderer.ts +21 -0
  109. package/src/panelGraphScene.ts +787 -0
  110. package/src/panelGraphView.ts +108 -0
  111. package/src/panelGraphVisuals.ts +364 -0
  112. package/src/panelIcons.ts +56 -0
  113. package/src/panelInspectorView.ts +377 -0
  114. package/src/panelMemoryView.ts +154 -0
  115. package/src/panelPassesView.ts +222 -0
  116. package/src/panelResourcesView.ts +115 -0
  117. package/src/panelSelection.ts +99 -0
  118. package/src/panelTypes.ts +28 -0
  119. package/src/panelVisualTheme.ts +39 -0
  120. package/src/panelWorkbenchHelpers.ts +216 -0
  121. package/src/panelWorkbenchView.ts +465 -0
  122. package/src/query.ts +22 -0
  123. package/src/styles.ts +1076 -0
package/dist/styles.js ADDED
@@ -0,0 +1,1073 @@
1
+ import { FRAME_GRAPH_DEBUG_VISUAL_THEME, GRAPH_VISUAL_THEME } from "./panelVisualTheme.js";
2
+ const STYLE_ELEMENT_ID = 'zenfg-inspector-panel-styles';
3
+ const theme = FRAME_GRAPH_DEBUG_VISUAL_THEME;
4
+ const FRAME_GRAPH_DEBUG_PANEL_CSS = `
5
+ /* Tokens and workbench root */
6
+ .zenfg-inspector {
7
+ --fgd-canvas: ${theme.canvas};
8
+ --fgd-panel: var(--zenfg-inspector-background, ${theme.panel});
9
+ --fgd-surface: var(--zenfg-inspector-surface, ${theme.surface});
10
+ --fgd-surface-raised: var(--zenfg-inspector-surface-raised, ${theme.surfaceRaised});
11
+ --fgd-surface-hover: var(--zenfg-inspector-surface-hover, ${theme.surfaceHover});
12
+ --fgd-border: var(--zenfg-inspector-border, ${theme.border});
13
+ --fgd-border-subtle: var(--zenfg-inspector-border-subtle, rgba(180, 190, 202, 0.11));
14
+ --fgd-border-strong: var(--zenfg-inspector-border-strong, rgba(180, 190, 202, 0.28));
15
+ --fgd-text: var(--zenfg-inspector-text, ${theme.text});
16
+ --fgd-text-secondary: var(--zenfg-inspector-text-secondary, ${theme.textSecondary});
17
+ --fgd-muted: var(--zenfg-inspector-muted, ${theme.muted});
18
+ --fgd-accent: var(--zenfg-inspector-accent, ${theme.accent});
19
+ --fgd-accent-soft: var(--zenfg-inspector-accent-soft, rgba(56, 189, 248, 0.12));
20
+ --fgd-accent-hover: var(--zenfg-inspector-accent-hover, rgba(56, 189, 248, 0.18));
21
+ --fgd-success: var(--zenfg-inspector-success, ${theme.success});
22
+ --fgd-warning: var(--zenfg-inspector-warning, ${theme.warning});
23
+ --fgd-danger: var(--zenfg-inspector-danger, ${theme.danger});
24
+ --fgd-font-ui: var(--zenfg-inspector-font-ui, ${theme.fontUi});
25
+ --fgd-font-mono: var(--zenfg-inspector-font-mono, ${theme.fontMono});
26
+ position: relative;
27
+ display: block;
28
+ width: 100%;
29
+ height: 100%;
30
+ min-width: 0;
31
+ min-height: 0;
32
+ overflow: hidden;
33
+ color: var(--fgd-text);
34
+ background: var(--fgd-canvas);
35
+ font-family: var(--fgd-font-ui);
36
+ font-size: 12px;
37
+ line-height: 1.45;
38
+ color-scheme: dark;
39
+ container-name: zenfg-inspector;
40
+ container-type: inline-size;
41
+ }
42
+
43
+ .zenfg-inspector,
44
+ .zenfg-inspector * { box-sizing: border-box; }
45
+
46
+ .zenfg-inspector-body {
47
+ width: 100%;
48
+ height: 100%;
49
+ min-height: 0;
50
+ padding: 10px;
51
+ overflow: hidden;
52
+ border: 0;
53
+ border-radius: 0;
54
+ background: var(--zenfg-inspector-background, var(--fgd-panel));
55
+ }
56
+
57
+ .zenfg-inspector-content {
58
+ min-width: 0;
59
+ min-height: 0;
60
+ height: 100%;
61
+ overflow: hidden;
62
+ }
63
+
64
+ .zenfg-inspector-drop-overlay {
65
+ position: absolute;
66
+ z-index: 40;
67
+ inset: 10px;
68
+ display: grid;
69
+ place-content: center;
70
+ gap: 6px;
71
+ border: 2px dashed var(--fgd-accent);
72
+ border-radius: var(--zenfg-inspector-radius-md, 6px);
73
+ color: #bae6fd;
74
+ background: color-mix(in srgb, var(--fgd-canvas) 90%, transparent);
75
+ font: 600 13px/1.4 var(--fgd-font-ui);
76
+ text-align: center;
77
+ pointer-events: none;
78
+ }
79
+ .zenfg-inspector-drop-overlay[hidden] { display: none; }
80
+ .zenfg-inspector-drop-overlay > span { color: var(--fgd-muted); font-size: 11px; }
81
+
82
+ .zenfg-inspector-capture-summary[hidden],
83
+ .zenfg-inspector-command-status[hidden],
84
+ .zenfg-inspector-capture-action[hidden],
85
+ .zenfg-inspector-workbench-empty[hidden],
86
+ .zenfg-inspector-open-inspector[hidden],
87
+ .zenfg-inspector-inspector.unavailable,
88
+ .zenfg-inspector-view[hidden],
89
+ .zenfg-inspector-graph-status[hidden] { display: none !important; }
90
+
91
+ .zenfg-inspector-muted {
92
+ margin: 0;
93
+ color: var(--fgd-muted);
94
+ font: 11px/1.5 var(--fgd-font-ui);
95
+ }
96
+
97
+ .zenfg-inspector-control-icon {
98
+ display: block;
99
+ flex: 0 0 auto;
100
+ width: 14px;
101
+ height: 14px;
102
+ }
103
+
104
+ .zenfg-inspector-table-scroller,
105
+ .zenfg-inspector-memory-scroller,
106
+ .zenfg-inspector-diagnostics-scroller,
107
+ .zenfg-inspector-inspector-content,
108
+ .zenfg-inspector-workbench-tabs,
109
+ .zenfg-inspector-graph-legend {
110
+ scrollbar-width: thin;
111
+ scrollbar-color: rgba(180, 190, 202, 0.25) transparent;
112
+ }
113
+
114
+ /* Workbench and summary */
115
+ .zenfg-inspector-workbench {
116
+ display: grid;
117
+ grid-template-rows: auto minmax(0, 1fr);
118
+ gap: 8px;
119
+ height: 100%;
120
+ min-width: 0;
121
+ min-height: 0;
122
+ font-family: var(--fgd-font-ui);
123
+ }
124
+
125
+ .zenfg-inspector-capture-summary {
126
+ display: grid;
127
+ grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr));
128
+ align-content: start;
129
+ gap: 8px;
130
+ min-width: 0;
131
+ background: transparent;
132
+ }
133
+
134
+ .zenfg-inspector-capture-summary > section {
135
+ min-width: 0;
136
+ padding: 12px;
137
+ border: 1px solid var(--fgd-border-subtle);
138
+ border-radius: 6px;
139
+ background: var(--fgd-surface);
140
+ }
141
+
142
+ .zenfg-inspector-capture-summary h2 {
143
+ margin: 0 0 5px;
144
+ color: var(--fgd-text-secondary);
145
+ font-size: 10px;
146
+ font-weight: 700;
147
+ letter-spacing: 0.075em;
148
+ line-height: 1.2;
149
+ text-transform: uppercase;
150
+ }
151
+
152
+ .zenfg-inspector-capture-summary section > div {
153
+ display: grid;
154
+ grid-template-columns: auto minmax(0, 1fr);
155
+ gap: 8px;
156
+ min-width: 0;
157
+ font-size: 11px;
158
+ line-height: 1.5;
159
+ }
160
+
161
+ .zenfg-inspector-capture-summary span { color: var(--fgd-muted); white-space: nowrap; }
162
+ .zenfg-inspector-capture-summary strong {
163
+ min-width: 0;
164
+ overflow: hidden;
165
+ color: var(--fgd-text);
166
+ font: 600 11px/1.5 var(--fgd-font-mono);
167
+ text-align: right;
168
+ text-overflow: ellipsis;
169
+ white-space: nowrap;
170
+ }
171
+
172
+ /* Command bar, tabs, and controls */
173
+ .zenfg-inspector-workbench-command-bar {
174
+ position: relative;
175
+ display: grid;
176
+ grid-template-columns: auto minmax(0, 1fr) auto;
177
+ align-items: center;
178
+ min-width: 0;
179
+ border-bottom: 1px solid var(--fgd-border-subtle);
180
+ }
181
+ .zenfg-inspector-workbench-command-bar.branding-hidden {
182
+ grid-template-columns: minmax(0, 1fr) auto;
183
+ }
184
+
185
+ .zenfg-inspector-brand {
186
+ position: relative;
187
+ display: flex;
188
+ align-items: center;
189
+ min-width: 0;
190
+ min-height: 32px;
191
+ padding: 0 12px 0 4px;
192
+ overflow: hidden;
193
+ color: var(--fgd-text);
194
+ font: 700 12px/1 var(--fgd-font-ui);
195
+ letter-spacing: 0.015em;
196
+ text-overflow: ellipsis;
197
+ white-space: nowrap;
198
+ }
199
+ .zenfg-inspector-brand::after {
200
+ position: absolute;
201
+ top: 50%;
202
+ right: 0;
203
+ width: 1px;
204
+ height: 16px;
205
+ background: var(--fgd-border);
206
+ content: '';
207
+ transform: translateY(-50%);
208
+ }
209
+
210
+ .zenfg-inspector-workbench-tabs,
211
+ .zenfg-inspector-subtabs,
212
+ .zenfg-inspector-inspector-tabs {
213
+ display: flex;
214
+ align-items: end;
215
+ min-width: 0;
216
+ border-bottom: 1px solid var(--fgd-border-subtle);
217
+ }
218
+
219
+ .zenfg-inspector-workbench-tabs {
220
+ overflow-x: auto;
221
+ border-bottom: 0;
222
+ }
223
+
224
+ .zenfg-inspector-workbench-tabs > button,
225
+ .zenfg-inspector-subtabs > button,
226
+ .zenfg-inspector-inspector-tabs > button {
227
+ min-height: 32px;
228
+ padding: 6px 10px;
229
+ border: 0;
230
+ border-bottom: 2px solid transparent;
231
+ color: var(--fgd-muted);
232
+ background: transparent;
233
+ font: 600 12px/1 var(--fgd-font-ui);
234
+ white-space: nowrap;
235
+ cursor: pointer;
236
+ transition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;
237
+ }
238
+
239
+ .zenfg-inspector-workbench-tabs > button:hover:not(:disabled),
240
+ .zenfg-inspector-subtabs > button:hover:not(:disabled),
241
+ .zenfg-inspector-inspector-tabs > button:hover:not(:disabled) {
242
+ color: var(--fgd-text-secondary);
243
+ background: rgba(180, 190, 202, 0.055);
244
+ }
245
+
246
+ .zenfg-inspector-workbench-tabs > button.active,
247
+ .zenfg-inspector-subtabs > button.active,
248
+ .zenfg-inspector-inspector-tabs > button.active {
249
+ border-bottom-color: var(--fgd-accent);
250
+ color: var(--fgd-text);
251
+ background: linear-gradient(to top, var(--fgd-accent-soft), transparent 55%);
252
+ }
253
+
254
+ .zenfg-inspector-workbench-tabs > button:disabled,
255
+ .zenfg-inspector-subtabs > button:disabled,
256
+ .zenfg-inspector-inspector-tabs > button:disabled { cursor: default; opacity: 0.42; }
257
+
258
+ .zenfg-inspector-workbench-actions {
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 6px;
262
+ padding-left: 8px;
263
+ overflow-x: auto;
264
+ scrollbar-width: thin;
265
+ }
266
+
267
+ .zenfg-inspector-export-menu {
268
+ position: absolute;
269
+ z-index: 30;
270
+ top: calc(100% + 4px);
271
+ right: 0;
272
+ display: grid;
273
+ min-width: 142px;
274
+ padding: 4px;
275
+ border: 1px solid var(--fgd-border-strong);
276
+ border-radius: 6px;
277
+ background: var(--fgd-surface-raised);
278
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.34);
279
+ }
280
+ .zenfg-inspector-export-menu[hidden] { display: none; }
281
+ .zenfg-inspector-export-menu > button {
282
+ padding: 7px 9px;
283
+ border: 0;
284
+ border-radius: 4px;
285
+ color: var(--fgd-text-secondary);
286
+ background: transparent;
287
+ font: 600 11px/1.2 var(--fgd-font-ui);
288
+ text-align: left;
289
+ cursor: pointer;
290
+ }
291
+ .zenfg-inspector-export-menu > button:hover:not(:disabled) {
292
+ color: var(--fgd-text);
293
+ background: var(--fgd-surface-hover);
294
+ }
295
+ .zenfg-inspector-export-menu > button:disabled { cursor: default; opacity: 0.46; }
296
+
297
+ .zenfg-inspector-workbench-actions > button,
298
+ .zenfg-inspector-graph-toolbar button,
299
+ .zenfg-inspector-group-toggle,
300
+ .zenfg-inspector-inspector-close {
301
+ display: inline-flex;
302
+ align-items: center;
303
+ justify-content: center;
304
+ gap: 6px;
305
+ height: 28px;
306
+ min-height: 28px;
307
+ padding: 0 9px;
308
+ border: 1px solid var(--fgd-border);
309
+ border-radius: 5px;
310
+ color: var(--fgd-text-secondary);
311
+ background: var(--fgd-surface);
312
+ font: 600 11px/1 var(--fgd-font-ui);
313
+ white-space: nowrap;
314
+ cursor: pointer;
315
+ transition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;
316
+ }
317
+
318
+ .zenfg-inspector-workbench-actions > button:hover:not(:disabled),
319
+ .zenfg-inspector-graph-toolbar button:hover:not(:disabled),
320
+ .zenfg-inspector-group-toggle:hover:not(:disabled),
321
+ .zenfg-inspector-inspector-close:hover:not(:disabled) {
322
+ border-color: var(--fgd-border-strong);
323
+ color: var(--fgd-text);
324
+ background: var(--fgd-surface-hover);
325
+ }
326
+
327
+ .zenfg-inspector-workbench-actions > button[data-tone='accent'] {
328
+ border-color: rgba(56, 189, 248, 0.5);
329
+ color: #bae6fd;
330
+ background: var(--fgd-accent-soft);
331
+ }
332
+ .zenfg-inspector-workbench-actions > button[data-tone='accent']:hover:not(:disabled) {
333
+ border-color: var(--fgd-accent);
334
+ background: var(--fgd-accent-hover);
335
+ }
336
+ .zenfg-inspector-workbench-actions > button[data-tone='pending'] {
337
+ border-color: rgba(56, 189, 248, 0.42);
338
+ color: var(--fgd-text-secondary);
339
+ background: var(--fgd-accent-soft);
340
+ }
341
+ .zenfg-inspector-workbench-actions > button[data-tone='success'] {
342
+ border-color: rgba(52, 211, 153, 0.46);
343
+ color: var(--fgd-success);
344
+ background: rgba(52, 211, 153, 0.1);
345
+ }
346
+ .zenfg-inspector-workbench-actions > button:disabled { cursor: default; opacity: 0.46; }
347
+ .zenfg-inspector-workbench-actions > button[aria-busy='true']:disabled { opacity: 0.72; }
348
+
349
+ .zenfg-inspector-command-status {
350
+ max-width: 220px;
351
+ overflow: hidden;
352
+ color: var(--fgd-muted);
353
+ font: 11px/1.35 var(--fgd-font-ui);
354
+ text-overflow: ellipsis;
355
+ white-space: nowrap;
356
+ }
357
+ .zenfg-inspector-command-status[data-tone='error'] { color: var(--fgd-danger); }
358
+
359
+ .zenfg-inspector-control-icon[data-icon='spinner'],
360
+ button[aria-busy='true'] > .zenfg-inspector-control-icon {
361
+ animation: zenfg-inspector-spin 800ms linear infinite;
362
+ }
363
+ @keyframes zenfg-inspector-spin { to { transform: rotate(360deg); } }
364
+
365
+ .zenfg-inspector-workbench-tabs > button:focus-visible,
366
+ .zenfg-inspector-subtabs > button:focus-visible,
367
+ .zenfg-inspector-inspector-tabs > button:focus-visible,
368
+ .zenfg-inspector-workbench-actions > button:focus-visible,
369
+ .zenfg-inspector-graph-toolbar button:focus-visible,
370
+ .zenfg-inspector-group-toggle:focus-visible,
371
+ .zenfg-inspector-inspector-close:focus-visible,
372
+ .zenfg-inspector-relation-button:focus-visible,
373
+ .zenfg-inspector-view-toolbar input:focus-visible,
374
+ .zenfg-inspector-view-toolbar select:focus-visible {
375
+ outline: 2px solid var(--fgd-accent);
376
+ outline-offset: 1px;
377
+ }
378
+
379
+ /* Workspace and empty states */
380
+ .zenfg-inspector-overview-view {
381
+ padding: 12px;
382
+ overflow: auto;
383
+ background: var(--fgd-canvas);
384
+ }
385
+
386
+ .zenfg-inspector-workspace {
387
+ position: relative;
388
+ display: grid;
389
+ grid-template-columns: minmax(0, 1fr);
390
+ gap: 8px;
391
+ min-width: 0;
392
+ min-height: 0;
393
+ overflow: hidden;
394
+ }
395
+ .zenfg-inspector-workspace.inspector-open {
396
+ grid-template-columns: minmax(0, 1fr) minmax(360px, 28vw);
397
+ }
398
+
399
+ .zenfg-inspector-main {
400
+ display: grid;
401
+ grid-template: minmax(0, 1fr) / minmax(0, 1fr);
402
+ min-width: 0;
403
+ min-height: 0;
404
+ overflow: hidden;
405
+ }
406
+
407
+ .zenfg-inspector-workbench-empty {
408
+ grid-area: 1 / 1;
409
+ display: flex;
410
+ flex-direction: column;
411
+ align-items: center;
412
+ justify-content: center;
413
+ gap: 8px;
414
+ min-width: 0;
415
+ min-height: 0;
416
+ padding: 24px;
417
+ color: var(--fgd-muted);
418
+ font: 12px/1.5 var(--fgd-font-ui);
419
+ text-align: center;
420
+ }
421
+ .zenfg-inspector-workbench-empty > .zenfg-inspector-control-icon {
422
+ width: 22px;
423
+ height: 22px;
424
+ color: var(--fgd-text-secondary);
425
+ }
426
+ .zenfg-inspector-workbench-empty[data-state='error'] > .zenfg-inspector-control-icon { color: var(--fgd-danger); }
427
+ .zenfg-inspector-workbench-empty[data-state='capturing'] > .zenfg-inspector-control-icon { color: var(--fgd-accent); }
428
+ .zenfg-inspector-empty-message { max-width: 520px; }
429
+ .zenfg-inspector-empty-detail { color: color-mix(in srgb, var(--fgd-muted) 78%, transparent); font-size: 11px; }
430
+
431
+ .zenfg-inspector-view {
432
+ grid-area: 1 / 1;
433
+ min-width: 0;
434
+ min-height: 0;
435
+ overflow: hidden;
436
+ border: 1px solid var(--fgd-border-subtle);
437
+ border-radius: 6px;
438
+ background: var(--fgd-canvas);
439
+ }
440
+
441
+ .zenfg-inspector-view-toolbar {
442
+ display: flex;
443
+ flex: 0 0 auto;
444
+ flex-wrap: wrap;
445
+ align-items: center;
446
+ gap: 6px;
447
+ padding: 6px 8px;
448
+ border-bottom: 1px solid var(--fgd-border-subtle);
449
+ background: var(--fgd-surface);
450
+ }
451
+
452
+ .zenfg-inspector-view-toolbar input,
453
+ .zenfg-inspector-view-toolbar select {
454
+ min-width: 0;
455
+ height: 28px;
456
+ padding: 4px 8px;
457
+ border: 1px solid var(--fgd-border);
458
+ border-radius: 5px;
459
+ color: var(--fgd-text);
460
+ background: var(--fgd-panel);
461
+ font: 11px/1 var(--fgd-font-ui);
462
+ }
463
+ .zenfg-inspector-view-toolbar input { flex: 1 1 210px; }
464
+ .zenfg-inspector-view-toolbar input::placeholder { color: var(--fgd-muted); opacity: 0.86; }
465
+ .zenfg-inspector-view-toolbar select { flex: 0 1 auto; color-scheme: dark; }
466
+
467
+ .zenfg-inspector-passes-view,
468
+ .zenfg-inspector-resources-view { display: flex; flex-direction: column; }
469
+ .zenfg-inspector-subtabs,
470
+ .zenfg-inspector-inspector-tabs {
471
+ flex: 0 0 auto;
472
+ padding: 0 4px;
473
+ background: var(--fgd-panel);
474
+ }
475
+ .zenfg-inspector-subview { flex: 1 1 auto; min-height: 0; overflow: hidden; }
476
+
477
+ /* Tables and relations */
478
+ .zenfg-inspector-table-scroller {
479
+ width: 100%;
480
+ height: 100%;
481
+ min-height: 0;
482
+ overflow: auto;
483
+ }
484
+ .zenfg-inspector-workbench-table {
485
+ width: 100%;
486
+ min-width: 720px;
487
+ border-collapse: collapse;
488
+ font: 11px/1.45 var(--fgd-font-mono);
489
+ }
490
+ .zenfg-inspector-workbench-table th,
491
+ .zenfg-inspector-workbench-table td {
492
+ height: 30px;
493
+ max-width: 360px;
494
+ padding: 6px 10px;
495
+ border-bottom: 1px solid var(--fgd-border-subtle);
496
+ overflow: hidden;
497
+ text-align: left;
498
+ text-overflow: ellipsis;
499
+ white-space: nowrap;
500
+ }
501
+ .zenfg-inspector-workbench-table th {
502
+ position: sticky;
503
+ z-index: 2;
504
+ top: 0;
505
+ color: var(--fgd-muted);
506
+ background: var(--fgd-panel);
507
+ font: 650 10px/1.3 var(--fgd-font-ui);
508
+ letter-spacing: 0.025em;
509
+ }
510
+ .zenfg-inspector-workbench-table [data-column='numeric'] {
511
+ font-variant-numeric: tabular-nums;
512
+ text-align: right;
513
+ }
514
+ .zenfg-inspector-workbench-table [data-column='code'] { font-family: var(--fgd-font-mono); }
515
+ .zenfg-inspector-workbench-table tbody tr:hover td { background: rgba(180, 190, 202, 0.045); }
516
+
517
+ .zenfg-inspector-workbench-table tr.selected td,
518
+ .zenfg-inspector-diagnostic-list .selected,
519
+ .zenfg-inspector-memory-allocation.selected,
520
+ .zenfg-inspector-memory-resource.selected { background: var(--fgd-accent-soft); }
521
+ .zenfg-inspector-workbench-table tr.selected td:first-child { box-shadow: inset 2px 0 var(--fgd-accent); }
522
+
523
+ .zenfg-inspector-workbench-table td small {
524
+ display: block;
525
+ margin-top: 2px;
526
+ overflow: hidden;
527
+ color: var(--fgd-muted);
528
+ font: 10px/1.4 var(--fgd-font-ui);
529
+ text-overflow: ellipsis;
530
+ }
531
+
532
+ .zenfg-inspector-kind-label {
533
+ --fgd-kind-color: var(--fgd-muted);
534
+ display: inline-flex;
535
+ align-items: center;
536
+ gap: 6px;
537
+ max-width: 100%;
538
+ overflow: hidden;
539
+ color: var(--fgd-text-secondary);
540
+ text-overflow: ellipsis;
541
+ white-space: nowrap;
542
+ }
543
+ .zenfg-inspector-kind-label::before {
544
+ width: 6px;
545
+ height: 6px;
546
+ flex: 0 0 auto;
547
+ border: 1px solid color-mix(in srgb, var(--fgd-kind-color) 78%, white);
548
+ border-radius: 50%;
549
+ background: color-mix(in srgb, var(--fgd-kind-color) 72%, transparent);
550
+ content: '';
551
+ }
552
+ .zenfg-inspector-kind-label[data-kind='render'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.render.stroke}; }
553
+ .zenfg-inspector-kind-label[data-kind='compute'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.compute.stroke}; }
554
+ .zenfg-inspector-kind-label[data-kind='copy'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.copy.stroke}; }
555
+ .zenfg-inspector-kind-label[data-kind='clear-buffer'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.clear.stroke}; }
556
+ .zenfg-inspector-kind-label[data-kind='command'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.command.stroke}; }
557
+ .zenfg-inspector-kind-label[data-kind='external-submission'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.external.stroke}; }
558
+ .zenfg-inspector-kind-label[data-kind='opaque'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.external.stroke}; }
559
+ .zenfg-inspector-kind-label[data-kind='texture'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.texture.stroke}; }
560
+ .zenfg-inspector-kind-label[data-kind='buffer'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.buffer.stroke}; }
561
+ .zenfg-inspector-kind-label[data-kind='frame-graph'] { --fgd-kind-color: var(--fgd-accent); }
562
+ .zenfg-inspector-kind-label[data-kind='timed'] { --fgd-kind-color: var(--fgd-success); }
563
+ .zenfg-inspector-kind-label[data-kind='not-timed'] { --fgd-kind-color: var(--fgd-muted); }
564
+
565
+ .zenfg-inspector-relation-button {
566
+ max-width: 100%;
567
+ padding: 0;
568
+ border: 0;
569
+ color: #a5def6;
570
+ background: transparent;
571
+ font: inherit;
572
+ text-align: left;
573
+ text-overflow: ellipsis;
574
+ white-space: nowrap;
575
+ cursor: pointer;
576
+ }
577
+ .zenfg-inspector-relation-button:hover {
578
+ color: #d5f3ff;
579
+ text-decoration: underline;
580
+ text-underline-offset: 2px;
581
+ }
582
+ .zenfg-inspector-group-toggle { width: 28px; padding: 0; color: var(--fgd-text-secondary); }
583
+ .zenfg-inspector-empty-row {
584
+ height: 60px !important;
585
+ color: var(--fgd-muted);
586
+ font-family: var(--fgd-font-ui);
587
+ text-align: center !important;
588
+ }
589
+
590
+ /* Graph */
591
+ .zenfg-inspector-graph-view { display: flex; flex-direction: column; }
592
+ .zenfg-inspector-graph-toolbar {
593
+ display: grid;
594
+ grid-template-columns: auto minmax(0, 1fr) auto;
595
+ align-items: center;
596
+ gap: 10px;
597
+ min-width: 0;
598
+ min-height: 38px;
599
+ padding: 5px 6px;
600
+ border-bottom: 1px solid var(--fgd-border-subtle);
601
+ background: var(--fgd-surface);
602
+ }
603
+ .zenfg-inspector-graph-mode-controls,
604
+ .zenfg-inspector-graph-action-controls { display: flex; align-items: center; min-width: 0; }
605
+ .zenfg-inspector-graph-action-controls { gap: 4px; }
606
+ .zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button {
607
+ margin-right: -1px;
608
+ border-radius: 0;
609
+ }
610
+ .zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button:first-child { border-radius: 5px 0 0 5px; }
611
+ .zenfg-inspector-graph-toolbar .zenfg-inspector-mode-button:last-child {
612
+ margin-right: 0;
613
+ border-radius: 0 5px 5px 0;
614
+ }
615
+ .zenfg-inspector-graph-toolbar button.active,
616
+ .zenfg-inspector-graph-toolbar button[aria-pressed='true'] {
617
+ z-index: 1;
618
+ border-color: rgba(56, 189, 248, 0.6);
619
+ color: var(--fgd-accent);
620
+ background: var(--fgd-accent-soft);
621
+ }
622
+ .zenfg-inspector-graph-toolbar button:disabled { cursor: default; opacity: 0.42; }
623
+ .zenfg-inspector-graph-toolbar .zenfg-inspector-icon-button { width: 28px; padding: 0; }
624
+
625
+ .zenfg-inspector-graph-legend {
626
+ display: flex;
627
+ align-items: center;
628
+ gap: 10px;
629
+ min-width: 0;
630
+ padding: 2px 0;
631
+ overflow-x: auto;
632
+ color: var(--fgd-muted);
633
+ font: 10px/1 var(--fgd-font-ui);
634
+ white-space: nowrap;
635
+ }
636
+ .zenfg-inspector-legend-item { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; }
637
+ .zenfg-inspector-legend-swatch {
638
+ position: relative;
639
+ display: inline-block;
640
+ width: 10px;
641
+ height: 8px;
642
+ border: 1px solid var(--zenfg-inspector-legend-color);
643
+ border-radius: 2px;
644
+ background: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));
645
+ }
646
+ .zenfg-inspector-legend-swatch[data-shape='ellipse'] { border-radius: 50%; }
647
+ .zenfg-inspector-legend-swatch[data-shape='group'] { border-style: double; background: transparent; }
648
+ .zenfg-inspector-legend-swatch[data-shape='line'] {
649
+ width: 16px;
650
+ height: 0;
651
+ border: 0;
652
+ border-top: 1px solid var(--zenfg-inspector-legend-color);
653
+ border-radius: 0;
654
+ background: transparent;
655
+ }
656
+ .zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dotted'] { border-top-style: dotted; }
657
+ .zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dashed'] { border-top-style: dashed; }
658
+ .zenfg-inspector-legend-swatch:not([data-shape='line'])[data-line-style='dashed'] { border-style: dashed; }
659
+ .zenfg-inspector-legend-swatch[data-shape='line']::after {
660
+ position: absolute;
661
+ top: -2px;
662
+ right: -1px;
663
+ width: 5px;
664
+ height: 4px;
665
+ background: var(--zenfg-inspector-legend-color);
666
+ clip-path: polygon(0 0, 100% 50%, 0 100%);
667
+ content: '';
668
+ }
669
+ .zenfg-inspector-legend-swatch[data-shape='line'][data-hollow-arrow='true']::after {
670
+ top: -3px;
671
+ width: 4px;
672
+ height: 4px;
673
+ border-top: 1px solid var(--zenfg-inspector-legend-color);
674
+ border-right: 1px solid var(--zenfg-inspector-legend-color);
675
+ background: transparent;
676
+ clip-path: none;
677
+ transform: rotate(45deg);
678
+ }
679
+
680
+ .zenfg-inspector-graph-view .zenfg-inspector-graph {
681
+ flex: 1 1 auto;
682
+ width: 100%;
683
+ height: auto;
684
+ min-height: 0;
685
+ border: 0;
686
+ }
687
+ .zenfg-inspector-graph {
688
+ position: relative;
689
+ width: 100%;
690
+ height: 260px;
691
+ min-height: 220px;
692
+ overflow: hidden;
693
+ border: 1px solid var(--fgd-border-subtle);
694
+ background: var(--fgd-canvas);
695
+ color: var(--fgd-muted);
696
+ font-size: 11px;
697
+ }
698
+ .zenfg-inspector-graph-canvas {
699
+ width: 100%;
700
+ height: 100%;
701
+ min-width: 0;
702
+ min-height: 0;
703
+ outline: none;
704
+ }
705
+ .zenfg-inspector-graph-status {
706
+ position: absolute;
707
+ inset: 0;
708
+ z-index: 2;
709
+ display: flex;
710
+ align-items: center;
711
+ justify-content: center;
712
+ gap: 8px;
713
+ padding: 16px;
714
+ color: var(--fgd-muted);
715
+ background: rgba(11, 15, 20, 0.82);
716
+ font: 12px/1.45 var(--fgd-font-ui);
717
+ text-align: center;
718
+ pointer-events: none;
719
+ }
720
+ .zenfg-inspector-graph-status[data-state='layout'] { background: rgba(11, 15, 20, 0.5); }
721
+ .zenfg-inspector-graph-status[data-state='error'] {
722
+ color: var(--fgd-text);
723
+ background: rgba(11, 15, 20, 0.94);
724
+ }
725
+ .zenfg-inspector-graph-status > span { max-width: min(560px, 80%); }
726
+ .zenfg-inspector-graph-status button {
727
+ height: 28px;
728
+ padding: 0 9px;
729
+ border: 1px solid rgba(56, 189, 248, 0.55);
730
+ border-radius: 5px;
731
+ color: var(--fgd-accent);
732
+ background: var(--fgd-accent-soft);
733
+ font: 600 11px/1 var(--fgd-font-ui);
734
+ cursor: pointer;
735
+ pointer-events: auto;
736
+ }
737
+ .zenfg-inspector-graph-tooltip {
738
+ position: absolute;
739
+ z-index: 3;
740
+ max-width: min(380px, calc(100% - 16px));
741
+ padding: 8px 10px;
742
+ border: 1px solid var(--fgd-border-strong);
743
+ border-radius: 6px;
744
+ color: var(--fgd-text);
745
+ background: var(--fgd-surface-raised);
746
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.42);
747
+ font: 11px/1.5 var(--fgd-font-mono);
748
+ white-space: pre-wrap;
749
+ pointer-events: none;
750
+ }
751
+
752
+ /* Inspector */
753
+ .zenfg-inspector-inspector {
754
+ display: flex;
755
+ flex-direction: column;
756
+ min-width: 0;
757
+ min-height: 0;
758
+ overflow: hidden;
759
+ border: 1px solid var(--fgd-border);
760
+ border-radius: 6px;
761
+ background: var(--fgd-surface-raised);
762
+ box-shadow: -8px 0 28px rgba(0, 0, 0, 0.2);
763
+ }
764
+ .zenfg-inspector-inspector[hidden] { display: none; }
765
+ .zenfg-inspector-inspector > header {
766
+ display: flex;
767
+ flex: 0 0 auto;
768
+ align-items: center;
769
+ justify-content: space-between;
770
+ min-height: 36px;
771
+ padding: 0 8px 0 10px;
772
+ border-bottom: 1px solid var(--fgd-border-subtle);
773
+ background: var(--fgd-surface);
774
+ }
775
+ .zenfg-inspector-inspector > header strong {
776
+ min-width: 0;
777
+ overflow: hidden;
778
+ font: 600 11px/1.3 var(--fgd-font-mono);
779
+ text-overflow: ellipsis;
780
+ white-space: nowrap;
781
+ }
782
+ .zenfg-inspector-inspector-close {
783
+ width: 28px;
784
+ padding: 0;
785
+ border-color: transparent;
786
+ background: transparent;
787
+ }
788
+ .zenfg-inspector-inspector-content {
789
+ flex: 1 1 auto;
790
+ min-height: 0;
791
+ padding: 10px;
792
+ overflow: auto;
793
+ }
794
+ .zenfg-inspector-inspector-summary {
795
+ display: grid;
796
+ grid-template-columns: minmax(96px, auto) minmax(0, 1fr);
797
+ gap: 3px 12px;
798
+ margin: 0;
799
+ font-size: 11px;
800
+ line-height: 1.6;
801
+ }
802
+ .zenfg-inspector-inspector-summary dt { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }
803
+ .zenfg-inspector-inspector-summary dd {
804
+ min-width: 0;
805
+ margin: 0;
806
+ color: var(--fgd-text);
807
+ font-family: var(--fgd-font-mono);
808
+ overflow-wrap: anywhere;
809
+ }
810
+ .zenfg-inspector-inspector-relations { display: grid; gap: 8px; }
811
+ .zenfg-inspector-inspector-relations section {
812
+ display: grid;
813
+ gap: 6px;
814
+ padding: 8px;
815
+ border: 1px solid var(--fgd-border-subtle);
816
+ border-radius: 5px;
817
+ background: var(--fgd-surface);
818
+ }
819
+ .zenfg-inspector-inspector-relations h3 {
820
+ margin: 0 0 2px;
821
+ color: var(--fgd-muted);
822
+ font: 700 10px/1.3 var(--fgd-font-ui);
823
+ letter-spacing: 0.055em;
824
+ text-transform: uppercase;
825
+ }
826
+ .zenfg-inspector-inspector-relations .zenfg-inspector-relation-button {
827
+ font: 11px/1.5 var(--fgd-font-mono);
828
+ overflow-wrap: anywhere;
829
+ white-space: normal;
830
+ }
831
+ .zenfg-inspector-inspector .zenfg-inspector-raw-detail {
832
+ min-width: 100%;
833
+ margin: 0;
834
+ overflow: auto;
835
+ color: var(--fgd-text-secondary);
836
+ font: 11px/1.55 var(--fgd-font-mono);
837
+ white-space: pre;
838
+ }
839
+
840
+ /* Memory */
841
+ .zenfg-inspector-memory-view {
842
+ display: grid;
843
+ grid-template-rows: auto minmax(0, 1fr);
844
+ }
845
+ .zenfg-inspector-memory-summary {
846
+ display: grid;
847
+ grid-template-columns: repeat(4, minmax(0, 1fr));
848
+ gap: 6px;
849
+ padding: 6px;
850
+ border-bottom: 1px solid var(--fgd-border-subtle);
851
+ background: var(--fgd-panel);
852
+ }
853
+ .zenfg-inspector-memory-summary > div {
854
+ display: grid;
855
+ gap: 3px;
856
+ min-width: 0;
857
+ padding: 6px 8px;
858
+ border: 1px solid var(--fgd-border-subtle);
859
+ border-radius: 5px;
860
+ background: var(--fgd-surface);
861
+ }
862
+ .zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: 10px/1.3 var(--fgd-font-ui); }
863
+ .zenfg-inspector-memory-summary strong {
864
+ overflow: hidden;
865
+ font: 600 11px/1.35 var(--fgd-font-mono);
866
+ text-overflow: ellipsis;
867
+ white-space: nowrap;
868
+ }
869
+ .zenfg-inspector-memory-scroller { min-height: 0; overflow: auto; }
870
+ .zenfg-inspector-memory-timeline {
871
+ display: grid;
872
+ min-width: 760px;
873
+ padding: 8px;
874
+ font: 11px/1.4 var(--fgd-font-mono);
875
+ }
876
+ .zenfg-inspector-memory-axis,
877
+ .zenfg-inspector-memory-resource {
878
+ display: grid;
879
+ grid-template-columns: minmax(150px, 0.9fr) 72px minmax(320px, 2.4fr) 82px;
880
+ gap: 10px;
881
+ align-items: center;
882
+ min-height: 30px;
883
+ }
884
+ .zenfg-inspector-memory-axis {
885
+ position: sticky;
886
+ z-index: 2;
887
+ top: 0;
888
+ padding: 0 8px 6px;
889
+ color: var(--fgd-muted);
890
+ background: var(--fgd-canvas);
891
+ font: 10px/1.3 var(--fgd-font-ui);
892
+ }
893
+ .zenfg-inspector-memory-axis-track,
894
+ .zenfg-inspector-memory-track { position: relative; height: 16px; }
895
+ .zenfg-inspector-memory-axis-track { border-bottom: 1px solid var(--fgd-border-strong); }
896
+ .zenfg-inspector-memory-axis-track > span {
897
+ position: absolute;
898
+ bottom: -1px;
899
+ padding-bottom: 5px;
900
+ border-left: 1px solid var(--fgd-border-strong);
901
+ font: 10px/1 var(--fgd-font-mono);
902
+ transform: translateX(-1px);
903
+ }
904
+ .zenfg-inspector-memory-allocation {
905
+ display: flex;
906
+ align-items: center;
907
+ justify-content: space-between;
908
+ gap: 12px;
909
+ margin-top: 6px;
910
+ padding: 7px 8px;
911
+ border-top: 1px solid var(--fgd-border-subtle);
912
+ border-bottom: 1px solid var(--fgd-border-subtle);
913
+ background: var(--fgd-surface);
914
+ }
915
+ .zenfg-inspector-memory-allocation > span { color: var(--fgd-muted); font: 10px/1.35 var(--fgd-font-mono); }
916
+ .zenfg-inspector-memory-allocation.muted { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }
917
+ .zenfg-inspector-memory-resource { padding: 0 8px; border-bottom: 1px solid var(--fgd-border-subtle); }
918
+ .zenfg-inspector-memory-resource.selected,
919
+ .zenfg-inspector-memory-allocation.selected { box-shadow: inset 2px 0 var(--fgd-accent); }
920
+ .zenfg-inspector-memory-bar {
921
+ position: absolute;
922
+ top: 4px;
923
+ height: 8px;
924
+ min-width: 2px;
925
+ border-radius: 4px;
926
+ background: color-mix(in srgb, ${GRAPH_VISUAL_THEME.texture.stroke} 76%, transparent);
927
+ box-shadow: 0 0 0 1px color-mix(in srgb, ${GRAPH_VISUAL_THEME.texture.stroke} 36%, transparent);
928
+ }
929
+ .zenfg-inspector-memory-bar.buffer {
930
+ background: color-mix(in srgb, ${GRAPH_VISUAL_THEME.buffer.stroke} 72%, transparent);
931
+ box-shadow: 0 0 0 1px color-mix(in srgb, ${GRAPH_VISUAL_THEME.buffer.stroke} 34%, transparent);
932
+ }
933
+ .zenfg-inspector-memory-bar.empty { display: none; }
934
+
935
+ /* Diagnostics */
936
+ .zenfg-inspector-diagnostics-scroller { width: 100%; height: 100%; overflow: auto; }
937
+ .zenfg-inspector-diagnostics-grid {
938
+ display: grid;
939
+ grid-template-columns: repeat(2, minmax(0, 1fr));
940
+ gap: 8px;
941
+ padding: 8px;
942
+ }
943
+ .zenfg-inspector-diagnostic-card {
944
+ display: flex;
945
+ flex-direction: column;
946
+ min-width: 0;
947
+ min-height: 164px;
948
+ overflow: hidden;
949
+ border: 1px solid var(--fgd-border-subtle);
950
+ border-radius: 6px;
951
+ background: var(--fgd-surface);
952
+ }
953
+ .zenfg-inspector-diagnostic-card > h2 {
954
+ margin: 0;
955
+ padding: 9px 10px 3px;
956
+ color: var(--fgd-text-secondary);
957
+ font: 650 12px/1.35 var(--fgd-font-ui);
958
+ }
959
+ .zenfg-inspector-diagnostic-card > p {
960
+ margin: 0;
961
+ padding: 0 10px 8px;
962
+ color: var(--fgd-muted);
963
+ font: 11px/1.5 var(--fgd-font-ui);
964
+ }
965
+ .zenfg-inspector-diagnostic-card .zenfg-inspector-table-scroller { flex: 1 1 auto; max-height: 280px; }
966
+ .zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table { min-width: 100%; table-layout: fixed; }
967
+ .zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table td {
968
+ overflow-wrap: anywhere;
969
+ white-space: normal;
970
+ }
971
+ .zenfg-inspector-diagnostic-list { display: grid; gap: 2px; padding: 6px; overflow: auto; }
972
+ .zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button {
973
+ padding: 6px 8px;
974
+ border-radius: 4px;
975
+ color: var(--fgd-text-secondary);
976
+ font: 11px/1.45 var(--fgd-font-mono);
977
+ }
978
+ .zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button:hover {
979
+ background: rgba(180, 190, 202, 0.05);
980
+ text-decoration: none;
981
+ }
982
+ .zenfg-inspector-diagnostic-list .selected { box-shadow: inset 2px 0 var(--fgd-accent); }
983
+
984
+ /* Responsive */
985
+ @container zenfg-inspector (max-width: 960px) {
986
+ .zenfg-inspector-workspace.inspector-open { grid-template-columns: minmax(0, 1fr); }
987
+ .zenfg-inspector-workspace.inspector-open::after {
988
+ position: absolute;
989
+ z-index: 10;
990
+ inset: 0;
991
+ background: rgba(3, 7, 12, 0.38);
992
+ content: '';
993
+ pointer-events: none;
994
+ }
995
+ .zenfg-inspector-inspector {
996
+ position: absolute;
997
+ z-index: 20;
998
+ top: 0;
999
+ right: 0;
1000
+ bottom: 0;
1001
+ width: min(380px, calc(100% - 24px));
1002
+ box-shadow: -18px 0 42px rgba(0, 0, 0, 0.42);
1003
+ }
1004
+ .zenfg-inspector-graph-toolbar {
1005
+ grid-template-columns: minmax(0, 1fr) auto;
1006
+ gap: 6px 8px;
1007
+ }
1008
+ .zenfg-inspector-graph-legend {
1009
+ grid-column: 1 / -1;
1010
+ grid-row: 2;
1011
+ padding-top: 6px;
1012
+ border-top: 1px solid var(--fgd-border-subtle);
1013
+ }
1014
+ .zenfg-inspector-graph-action-controls { justify-self: end; }
1015
+ }
1016
+
1017
+ @container zenfg-inspector (max-width: 840px) {
1018
+ .zenfg-inspector-workbench-command-bar {
1019
+ grid-template-columns: minmax(0, 1fr) auto;
1020
+ }
1021
+ .zenfg-inspector-brand { grid-column: 1; grid-row: 1; min-height: 36px; display: flex; align-items: center; }
1022
+ .zenfg-inspector-brand::after { display: none; }
1023
+ .zenfg-inspector-workbench-actions { grid-column: 2; grid-row: 1; }
1024
+ .zenfg-inspector-workbench-tabs { grid-column: 1 / -1; grid-row: 2; }
1025
+ .zenfg-inspector-workbench-command-bar.branding-hidden .zenfg-inspector-workbench-tabs {
1026
+ grid-column: 1;
1027
+ grid-row: 1;
1028
+ }
1029
+ .zenfg-inspector-diagnostics-grid { grid-template-columns: minmax(0, 1fr); }
1030
+ }
1031
+
1032
+ @container zenfg-inspector (max-width: 720px) {
1033
+ .zenfg-inspector-body { padding: 8px; }
1034
+ .zenfg-inspector-overview-view { padding: 8px; }
1035
+ .zenfg-inspector-capture-summary > section { padding: 10px; }
1036
+ .zenfg-inspector-workbench-actions { padding-left: 6px; }
1037
+ .zenfg-inspector-command-status { max-width: 104px; }
1038
+ .zenfg-inspector-workbench-tabs > button { flex: 0 0 auto; padding-inline: 8px; }
1039
+ .zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1040
+ .zenfg-inspector-view-toolbar input { flex-basis: 100%; }
1041
+ .zenfg-inspector-graph-toolbar { display: flex; flex-wrap: wrap; }
1042
+ .zenfg-inspector-graph-legend { order: 3; flex-basis: 100%; }
1043
+ .zenfg-inspector-graph-action-controls { margin-left: auto; }
1044
+ .zenfg-inspector-graph-view .zenfg-inspector-graph { height: auto; }
1045
+ }
1046
+
1047
+ @media (prefers-reduced-motion: reduce) {
1048
+ .zenfg-inspector *,
1049
+ .zenfg-inspector *::before,
1050
+ .zenfg-inspector *::after {
1051
+ scroll-behavior: auto !important;
1052
+ transition-duration: 0.01ms !important;
1053
+ animation-duration: 0.01ms !important;
1054
+ animation-iteration-count: 1 !important;
1055
+ }
1056
+ }
1057
+ `;
1058
+ /**
1059
+ * Installs the inspector's shared stylesheet in the current document once.
1060
+ *
1061
+ * @remarks This is safe to call repeatedly and is a no-op during server-side
1062
+ * rendering. `FrameGraphInspector` calls it automatically.
1063
+ */
1064
+ export function ensureFrameGraphInspectorStyles() {
1065
+ if (typeof document === 'undefined' || document.getElementById(STYLE_ELEMENT_ID)) {
1066
+ return;
1067
+ }
1068
+ const style = document.createElement('style');
1069
+ style.id = STYLE_ELEMENT_ID;
1070
+ style.textContent = FRAME_GRAPH_DEBUG_PANEL_CSS;
1071
+ document.head.appendChild(style);
1072
+ }
1073
+ //# sourceMappingURL=styles.js.map