@zenfg/inspector 0.1.0-beta.2 → 0.1.0-beta.4

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