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