@zenfg/inspector 0.1.0-beta.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/GUIDE.md +182 -0
  2. package/README.md +61 -89
  3. package/THEMING.md +124 -0
  4. package/dist/FrameGraphInspector.d.ts +23 -4
  5. package/dist/FrameGraphInspector.d.ts.map +1 -1
  6. package/dist/FrameGraphInspector.js +137 -29
  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 +19 -0
  13. package/dist/debugCaptureModel.d.ts.map +1 -1
  14. package/dist/debugCaptureModel.js +36 -2
  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 +15 -2
  24. package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
  25. package/dist/panelCytoscapeGraphRenderer.js +145 -23
  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 +166 -57
  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 +6 -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 +1 -0
  50. package/dist/panelGraphScene.d.ts.map +1 -1
  51. package/dist/panelGraphScene.js +69 -32
  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 +15 -4
  60. package/dist/panelGraphView.js.map +1 -1
  61. package/dist/panelGraphVisuals.d.ts +14 -6
  62. package/dist/panelGraphVisuals.d.ts.map +1 -1
  63. package/dist/panelGraphVisuals.js +126 -51
  64. package/dist/panelGraphVisuals.js.map +1 -1
  65. package/dist/panelInspectorView.d.ts +8 -0
  66. package/dist/panelInspectorView.d.ts.map +1 -1
  67. package/dist/panelInspectorView.js +242 -48
  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 +34 -4
  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 +10 -1
  102. package/dist/panelTypes.d.ts.map +1 -1
  103. package/dist/panelTypes.js.map +1 -1
  104. package/dist/panelVisualTheme.d.ts +147 -50
  105. package/dist/panelVisualTheme.d.ts.map +1 -1
  106. package/dist/panelVisualTheme.js +34 -44
  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 +62 -1
  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 +147 -195
  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 +130 -31
  139. package/src/capture.ts +4 -0
  140. package/src/debugCaptureModel.ts +53 -2
  141. package/src/index.ts +6 -2
  142. package/src/panelAliasAnalysis.ts +24 -70
  143. package/src/panelCytoscapeGraphRenderer.ts +140 -23
  144. package/src/panelDetailLayout.ts +155 -0
  145. package/src/panelDetailStyles.ts +56 -0
  146. package/src/panelDiagnosticsView.ts +166 -85
  147. package/src/panelDomHelpers.ts +4 -5
  148. package/src/panelGraphLayout.ts +6 -5
  149. package/src/panelGraphRenderer.ts +7 -0
  150. package/src/panelGraphScene.ts +68 -30
  151. package/src/panelGraphSearch.ts +96 -0
  152. package/src/panelGraphView.ts +14 -4
  153. package/src/panelGraphVisuals.ts +122 -52
  154. package/src/panelInspectorView.ts +227 -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 +37 -5
  162. package/src/panelTheme.ts +85 -0
  163. package/src/panelTypes.ts +7 -1
  164. package/src/panelVisualTheme.ts +38 -49
  165. package/src/panelWorkbenchHelpers.ts +60 -2
  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 +148 -195
  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,27 +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: 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
579
  .zenfg-inspector-graph-action-controls { display: flex; align-items: center; min-width: 0; }
608
- .zenfg-inspector-graph-action-controls { gap: 4px; }
580
+ .zenfg-inspector-graph-action-controls { gap: var(--fgd-space-1); }
609
581
  .zenfg-inspector-graph-toolbar button.active,
610
582
  .zenfg-inspector-graph-toolbar button[aria-pressed='true'] {
611
583
  z-index: 1;
612
- border-color: rgba(56, 189, 248, 0.6);
584
+ border-color: var(--fgd-accent);
613
585
  color: var(--fgd-accent);
614
586
  background: var(--fgd-accent-soft);
615
587
  }
616
588
  .zenfg-inspector-graph-toolbar button:disabled { cursor: default; opacity: 0.42; }
617
- .zenfg-inspector-graph-toolbar .zenfg-inspector-icon-button { width: 28px; padding: 0; }
618
589
 
619
590
  .zenfg-inspector-graph-legend {
620
591
  display: flex;
@@ -624,10 +595,10 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
624
595
  padding: 2px 0;
625
596
  overflow-x: auto;
626
597
  color: var(--fgd-muted);
627
- font: 10px/1 var(--fgd-font-ui);
598
+ font: var(--fgd-font-size-small)/1 var(--fgd-font-ui);
628
599
  white-space: nowrap;
629
600
  }
630
- .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; }
631
602
  .zenfg-inspector-legend-group { display: inline-flex; align-items: center; gap: 10px; flex: 0 0 auto; }
632
603
  .zenfg-inspector-legend-group + .zenfg-inspector-legend-group { border-left: 1px solid var(--fgd-border-subtle); padding-left: 10px; }
633
604
  .zenfg-inspector-legend-heading { color: var(--fgd-text-secondary); font-weight: 600; }
@@ -698,7 +669,7 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
698
669
  border: 1px solid var(--fgd-border-subtle);
699
670
  background: var(--fgd-canvas);
700
671
  color: var(--fgd-muted);
701
- font-size: 11px;
672
+ font-size: var(--fgd-font-size-small);
702
673
  }
703
674
  .zenfg-inspector-graph-canvas {
704
675
  width: 100%;
@@ -714,28 +685,28 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
714
685
  display: flex;
715
686
  align-items: center;
716
687
  justify-content: center;
717
- gap: 8px;
718
- padding: 16px;
688
+ gap: var(--fgd-space-2);
689
+ padding: var(--fgd-space-4);
719
690
  color: var(--fgd-muted);
720
- background: rgba(11, 15, 20, 0.82);
721
- 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);
722
693
  text-align: center;
723
694
  pointer-events: none;
724
695
  }
725
- .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); }
726
697
  .zenfg-inspector-graph-status[data-state='error'] {
727
698
  color: var(--fgd-text);
728
- background: rgba(11, 15, 20, 0.94);
699
+ background: color-mix(in srgb, var(--fgd-canvas) 94%, transparent);
729
700
  }
730
701
  .zenfg-inspector-graph-status > span { max-width: min(560px, 80%); }
731
702
  .zenfg-inspector-graph-status button {
732
- height: 28px;
703
+ height: var(--fgd-control-height);
733
704
  padding: 0 9px;
734
- border: 1px solid rgba(56, 189, 248, 0.55);
735
- border-radius: 5px;
705
+ border: 1px solid var(--fgd-accent);
706
+ border-radius: var(--fgd-radius-sm);
736
707
  color: var(--fgd-accent);
737
708
  background: var(--fgd-accent-soft);
738
- font: 600 11px/1 var(--fgd-font-ui);
709
+ font: 600 var(--fgd-font-size)/1 var(--fgd-font-ui);
739
710
  cursor: pointer;
740
711
  pointer-events: auto;
741
712
  }
@@ -744,13 +715,13 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
744
715
  z-index: 3;
745
716
  width: max-content;
746
717
  max-width: min(380px, calc(100% - 16px));
747
- padding: 8px 10px;
718
+ padding: var(--fgd-space-2) 10px;
748
719
  border: 1px solid var(--fgd-border-strong);
749
- border-radius: 6px;
720
+ border-radius: var(--fgd-radius-sm);
750
721
  color: var(--fgd-text);
751
722
  background: var(--fgd-surface-raised);
752
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.42);
753
- 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);
754
725
  white-space: pre-wrap;
755
726
  pointer-events: none;
756
727
  }
@@ -763,9 +734,9 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
763
734
  min-height: 0;
764
735
  overflow: hidden;
765
736
  border: 1px solid var(--fgd-border);
766
- border-radius: 6px;
737
+ border-radius: var(--fgd-radius-sm);
767
738
  background: var(--fgd-surface-raised);
768
- box-shadow: -8px 0 28px rgba(0, 0, 0, 0.2);
739
+ box-shadow: var(--fgd-shadow);
769
740
  }
770
741
  .zenfg-inspector-inspector[hidden] { display: none; }
771
742
  .zenfg-inspector-inspector > header {
@@ -773,15 +744,15 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
773
744
  flex: 0 0 auto;
774
745
  align-items: center;
775
746
  justify-content: space-between;
776
- min-height: 36px;
777
- padding: 0 8px 0 10px;
747
+ min-height: var(--fgd-row-height);
748
+ padding: 0 var(--fgd-space-2) 0 10px;
778
749
  border-bottom: 1px solid var(--fgd-border-subtle);
779
750
  background: var(--fgd-surface);
780
751
  }
781
752
  .zenfg-inspector-inspector > header strong {
782
753
  min-width: 0;
783
754
  overflow: hidden;
784
- font: 600 11px/1.3 var(--fgd-font-mono);
755
+ font: 600 var(--fgd-font-size-small)/1.3 var(--fgd-font-mono);
785
756
  text-overflow: ellipsis;
786
757
  white-space: nowrap;
787
758
  }
@@ -799,10 +770,8 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
799
770
  }
800
771
  .zenfg-inspector-inspector-summary {
801
772
  display: grid;
802
- grid-template-columns: minmax(96px, auto) minmax(0, 1fr);
803
- gap: 3px 12px;
773
+ gap: 3px var(--fgd-space-3);
804
774
  margin: 0;
805
- font-size: 11px;
806
775
  line-height: 1.6;
807
776
  }
808
777
  .zenfg-inspector-inspector-summary dt { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }
@@ -810,49 +779,43 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
810
779
  min-width: 0;
811
780
  margin: 0;
812
781
  color: var(--fgd-text);
813
- font-family: var(--fgd-font-mono);
814
782
  overflow-wrap: anywhere;
815
783
  }
816
- .zenfg-inspector-inspector-relations { display: grid; gap: 8px; }
784
+ .zenfg-inspector-inspector-relations { display: grid; gap: var(--fgd-space-2); }
817
785
  .zenfg-inspector-inspector-relations section {
818
786
  display: grid;
819
787
  gap: 6px;
820
- padding: 8px;
788
+ padding: var(--fgd-space-2);
821
789
  border: 1px solid var(--fgd-border-subtle);
822
- border-radius: 5px;
790
+ border-radius: var(--fgd-radius-sm);
823
791
  background: var(--fgd-surface);
824
792
  }
825
793
  .zenfg-inspector-inspector-relations h3 {
826
794
  margin: 0 0 2px;
827
795
  color: var(--fgd-muted);
828
- font: 700 10px/1.3 var(--fgd-font-ui);
796
+ font: 700 var(--fgd-font-size-small)/1.3 var(--fgd-font-ui);
829
797
  letter-spacing: 0.055em;
830
798
  text-transform: uppercase;
831
799
  }
832
800
  .zenfg-inspector-inspector-relations .zenfg-inspector-relation-button {
833
- font: 11px/1.5 var(--fgd-font-mono);
801
+ font: var(--fgd-font-size)/1.5 var(--fgd-font-mono);
834
802
  overflow-wrap: anywhere;
835
803
  white-space: normal;
836
804
  }
837
805
  .zenfg-inspector-relation-entry { display: grid; justify-items: start; gap: 2px; }
838
- .zenfg-inspector-relation-entry > span { font: 11px/1.5 var(--fgd-font-mono); overflow-wrap: anywhere; }
806
+ .zenfg-inspector-relation-entry > span { font: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono); overflow-wrap: anywhere; }
839
807
  .zenfg-inspector-inspector .zenfg-inspector-raw-detail {
840
808
  min-width: 100%;
841
809
  margin: 0;
842
- overflow: auto;
843
810
  color: var(--fgd-text-secondary);
844
- font: 11px/1.55 var(--fgd-font-mono);
845
- white-space: pre;
846
811
  }
847
812
 
848
813
  /* Memory */
849
814
  .zenfg-inspector-memory-view {
850
815
  display: grid;
851
- grid-template-rows: auto minmax(0, 1fr);
852
816
  }
853
817
  .zenfg-inspector-memory-summary {
854
818
  display: grid;
855
- grid-template-columns: repeat(4, minmax(0, 1fr));
856
819
  gap: 6px;
857
820
  padding: 6px;
858
821
  border-bottom: 1px solid var(--fgd-border-subtle);
@@ -862,41 +825,34 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
862
825
  display: grid;
863
826
  gap: 3px;
864
827
  min-width: 0;
865
- padding: 6px 8px;
866
- border: 1px solid var(--fgd-border-subtle);
867
- border-radius: 5px;
868
- background: var(--fgd-surface);
828
+ padding: 6px var(--fgd-space-2);
829
+ border-radius: var(--fgd-radius-sm);
869
830
  }
870
- .zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: 10px/1.3 var(--fgd-font-ui); }
871
831
  .zenfg-inspector-memory-summary strong {
872
832
  overflow: hidden;
873
- font: 600 11px/1.35 var(--fgd-font-mono);
833
+ font: 600 var(--fgd-font-size-small)/1.35 var(--fgd-font-mono);
874
834
  text-overflow: ellipsis;
875
- white-space: nowrap;
876
835
  }
877
836
  .zenfg-inspector-memory-scroller { min-height: 0; overflow: auto; }
878
837
  .zenfg-inspector-memory-timeline {
879
838
  display: grid;
880
- min-width: 760px;
881
- padding: 8px;
882
- 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);
883
841
  }
884
842
  .zenfg-inspector-memory-axis,
885
843
  .zenfg-inspector-memory-resource {
886
844
  display: grid;
887
- grid-template-columns: minmax(150px, 0.9fr) 72px minmax(320px, 2.4fr) 82px;
888
845
  gap: 10px;
889
846
  align-items: center;
890
- min-height: 30px;
847
+ min-height: var(--fgd-control-height);
891
848
  }
892
849
  .zenfg-inspector-memory-axis {
893
850
  position: sticky;
894
- z-index: 2;
895
851
  top: 0;
896
- padding: 0 8px 6px;
852
+ padding: 0 var(--fgd-space-2) 6px;
897
853
  color: var(--fgd-muted);
898
854
  background: var(--fgd-canvas);
899
- font: 10px/1.3 var(--fgd-font-ui);
855
+ font: var(--fgd-font-size-small)/1.3 var(--fgd-font-ui);
900
856
  }
901
857
  .zenfg-inspector-memory-axis-track,
902
858
  .zenfg-inspector-memory-track { position: relative; height: 16px; }
@@ -905,38 +861,34 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
905
861
  position: absolute;
906
862
  bottom: -1px;
907
863
  padding-bottom: 5px;
908
- border-left: 1px solid var(--fgd-border-strong);
909
- font: 10px/1 var(--fgd-font-mono);
910
- transform: translateX(-1px);
864
+ font: var(--fgd-font-size-small)/1 var(--fgd-font-mono);
911
865
  }
912
866
  .zenfg-inspector-memory-allocation {
913
867
  display: flex;
914
- align-items: center;
915
868
  justify-content: space-between;
916
- gap: 12px;
869
+ gap: var(--fgd-space-3);
917
870
  margin-top: 6px;
918
- padding: 7px 8px;
871
+ padding: 7px var(--fgd-space-2);
919
872
  border-top: 1px solid var(--fgd-border-subtle);
920
873
  border-bottom: 1px solid var(--fgd-border-subtle);
921
874
  background: var(--fgd-surface);
922
875
  }
923
- .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); }
924
877
  .zenfg-inspector-memory-allocation.muted { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }
925
- .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); }
926
879
  .zenfg-inspector-memory-resource.selected,
927
880
  .zenfg-inspector-memory-allocation.selected { box-shadow: inset 2px 0 var(--fgd-accent); }
928
881
  .zenfg-inspector-memory-bar {
929
882
  position: absolute;
930
883
  top: 4px;
931
884
  height: 8px;
932
- min-width: 2px;
933
- border-radius: 4px;
934
- background: color-mix(in srgb, ${GRAPH_VISUAL_THEME.texture.stroke} 76%, transparent);
935
- 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);
936
888
  }
937
889
  .zenfg-inspector-memory-bar.buffer {
938
- background: color-mix(in srgb, ${GRAPH_VISUAL_THEME.buffer.stroke} 72%, transparent);
939
- 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);
940
892
  }
941
893
  .zenfg-inspector-memory-bar.empty { display: none; }
942
894
 
@@ -945,8 +897,8 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
945
897
  .zenfg-inspector-diagnostics-grid {
946
898
  display: grid;
947
899
  grid-template-columns: repeat(2, minmax(0, 1fr));
948
- gap: 8px;
949
- padding: 8px;
900
+ gap: var(--fgd-space-2);
901
+ padding: var(--fgd-space-2);
950
902
  }
951
903
  .zenfg-inspector-diagnostic-card {
952
904
  display: flex;
@@ -955,20 +907,20 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
955
907
  min-height: 164px;
956
908
  overflow: hidden;
957
909
  border: 1px solid var(--fgd-border-subtle);
958
- border-radius: 6px;
910
+ border-radius: var(--fgd-radius-sm);
959
911
  background: var(--fgd-surface);
960
912
  }
961
913
  .zenfg-inspector-diagnostic-card > h2 {
962
914
  margin: 0;
963
915
  padding: 9px 10px 3px;
964
916
  color: var(--fgd-text-secondary);
965
- font: 650 12px/1.35 var(--fgd-font-ui);
917
+ font: 650 var(--fgd-font-size-small)/1.35 var(--fgd-font-ui);
966
918
  }
967
919
  .zenfg-inspector-diagnostic-card > p {
968
920
  margin: 0;
969
- padding: 0 10px 8px;
921
+ padding: 0 10px var(--fgd-space-2);
970
922
  color: var(--fgd-muted);
971
- font: 11px/1.5 var(--fgd-font-ui);
923
+ font: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);
972
924
  }
973
925
  .zenfg-inspector-diagnostic-card .zenfg-inspector-table-scroller { flex: 1 1 auto; max-height: 280px; }
974
926
  .zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table { min-width: 100%; table-layout: fixed; }
@@ -978,13 +930,13 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
978
930
  }
979
931
  .zenfg-inspector-diagnostic-list { display: grid; gap: 2px; padding: 6px; overflow: auto; }
980
932
  .zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button {
981
- padding: 6px 8px;
982
- border-radius: 4px;
933
+ padding: 6px var(--fgd-space-2);
934
+ border-radius: var(--fgd-radius-sm);
983
935
  color: var(--fgd-text-secondary);
984
- font: 11px/1.45 var(--fgd-font-mono);
936
+ font: var(--fgd-font-size)/1.45 var(--fgd-font-mono);
985
937
  }
986
938
  .zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button:hover {
987
- background: rgba(180, 190, 202, 0.05);
939
+ background: var(--fgd-surface-hover);
988
940
  text-decoration: none;
989
941
  }
990
942
  .zenfg-inspector-diagnostic-list .selected { box-shadow: inset 2px 0 var(--fgd-accent); }
@@ -996,7 +948,7 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
996
948
  position: absolute;
997
949
  z-index: 10;
998
950
  inset: 0;
999
- background: rgba(3, 7, 12, 0.38);
951
+ background: var(--fgd-backdrop);
1000
952
  content: '';
1001
953
  pointer-events: none;
1002
954
  }
@@ -1007,11 +959,11 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
1007
959
  right: 0;
1008
960
  bottom: 0;
1009
961
  width: min(380px, calc(100% - 24px));
1010
- box-shadow: -18px 0 42px rgba(0, 0, 0, 0.42);
962
+ box-shadow: var(--fgd-shadow);
1011
963
  }
1012
964
  .zenfg-inspector-graph-toolbar {
1013
965
  grid-template-columns: minmax(0, 1fr) auto;
1014
- gap: 6px 8px;
966
+ gap: 6px var(--fgd-space-2);
1015
967
  }
1016
968
  .zenfg-inspector-graph-legend {
1017
969
  grid-column: 1 / -1;
@@ -1026,7 +978,7 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
1026
978
  .zenfg-inspector-workbench-command-bar {
1027
979
  grid-template-columns: minmax(0, 1fr) auto;
1028
980
  }
1029
- .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; }
1030
982
  .zenfg-inspector-brand::after { display: none; }
1031
983
  .zenfg-inspector-workbench-actions { grid-column: 2; grid-row: 1; }
1032
984
  .zenfg-inspector-workbench-tabs { grid-column: 1 / -1; grid-row: 2; }
@@ -1038,12 +990,12 @@ button[aria-busy='true'] > .zenfg-inspector-control-icon {
1038
990
  }
1039
991
 
1040
992
  @container zenfg-inspector (max-width: 720px) {
1041
- .zenfg-inspector-body { padding: 8px; }
1042
- .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); }
1043
995
  .zenfg-inspector-capture-summary > section { padding: 10px; }
1044
996
  .zenfg-inspector-workbench-actions { padding-left: 6px; }
1045
997
  .zenfg-inspector-command-status { max-width: 104px; }
1046
- .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); }
1047
999
  .zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1048
1000
  .zenfg-inspector-view-toolbar input { flex-basis: 100%; }
1049
1001
  .zenfg-inspector-graph-toolbar { display: flex; flex-wrap: wrap; }
@@ -1075,7 +1027,7 @@ export function ensureFrameGraphInspectorStyles() {
1075
1027
  }
1076
1028
  const style = document.createElement('style');
1077
1029
  style.id = STYLE_ELEMENT_ID;
1078
- 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;
1079
1031
  document.head.appendChild(style);
1080
1032
  }
1081
1033
  //# sourceMappingURL=styles.js.map