@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.
- package/GUIDE.md +182 -0
- package/README.md +61 -89
- package/THEMING.md +124 -0
- package/dist/FrameGraphInspector.d.ts +23 -4
- package/dist/FrameGraphInspector.d.ts.map +1 -1
- package/dist/FrameGraphInspector.js +137 -29
- package/dist/FrameGraphInspector.js.map +1 -1
- package/dist/capture.d.ts +5 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +2 -0
- package/dist/capture.js.map +1 -0
- package/dist/debugCaptureModel.d.ts +19 -0
- package/dist/debugCaptureModel.d.ts.map +1 -1
- package/dist/debugCaptureModel.js +36 -2
- package/dist/debugCaptureModel.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/panelAliasAnalysis.d.ts +1 -0
- package/dist/panelAliasAnalysis.d.ts.map +1 -1
- package/dist/panelAliasAnalysis.js +23 -54
- package/dist/panelAliasAnalysis.js.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.d.ts +15 -2
- package/dist/panelCytoscapeGraphRenderer.d.ts.map +1 -1
- package/dist/panelCytoscapeGraphRenderer.js +145 -23
- package/dist/panelCytoscapeGraphRenderer.js.map +1 -1
- package/dist/panelDetailLayout.d.ts +27 -0
- package/dist/panelDetailLayout.d.ts.map +1 -0
- package/dist/panelDetailLayout.js +174 -0
- package/dist/panelDetailLayout.js.map +1 -0
- package/dist/panelDetailStyles.d.ts +2 -0
- package/dist/panelDetailStyles.d.ts.map +1 -0
- package/dist/panelDetailStyles.js +57 -0
- package/dist/panelDetailStyles.js.map +1 -0
- package/dist/panelDiagnosticsView.d.ts +10 -1
- package/dist/panelDiagnosticsView.d.ts.map +1 -1
- package/dist/panelDiagnosticsView.js +166 -57
- package/dist/panelDiagnosticsView.js.map +1 -1
- package/dist/panelDomHelpers.d.ts.map +1 -1
- package/dist/panelDomHelpers.js +6 -5
- package/dist/panelDomHelpers.js.map +1 -1
- package/dist/panelGraphLayout.d.ts +3 -2
- package/dist/panelGraphLayout.d.ts.map +1 -1
- package/dist/panelGraphLayout.js +6 -5
- package/dist/panelGraphLayout.js.map +1 -1
- package/dist/panelGraphRenderer.d.ts +10 -0
- package/dist/panelGraphRenderer.d.ts.map +1 -1
- package/dist/panelGraphRenderer.js.map +1 -1
- package/dist/panelGraphScene.d.ts +1 -0
- package/dist/panelGraphScene.d.ts.map +1 -1
- package/dist/panelGraphScene.js +69 -32
- package/dist/panelGraphScene.js.map +1 -1
- package/dist/panelGraphSearch.d.ts +16 -0
- package/dist/panelGraphSearch.d.ts.map +1 -0
- package/dist/panelGraphSearch.js +93 -0
- package/dist/panelGraphSearch.js.map +1 -0
- package/dist/panelGraphView.d.ts +82 -0
- package/dist/panelGraphView.d.ts.map +1 -1
- package/dist/panelGraphView.js +15 -4
- package/dist/panelGraphView.js.map +1 -1
- package/dist/panelGraphVisuals.d.ts +14 -6
- package/dist/panelGraphVisuals.d.ts.map +1 -1
- package/dist/panelGraphVisuals.js +126 -51
- package/dist/panelGraphVisuals.js.map +1 -1
- package/dist/panelInspectorView.d.ts +8 -0
- package/dist/panelInspectorView.d.ts.map +1 -1
- package/dist/panelInspectorView.js +242 -48
- package/dist/panelInspectorView.js.map +1 -1
- package/dist/panelListStyles.d.ts +3 -0
- package/dist/panelListStyles.d.ts.map +1 -0
- package/dist/panelListStyles.js +155 -0
- package/dist/panelListStyles.js.map +1 -0
- package/dist/panelMemoryStyles.d.ts +3 -0
- package/dist/panelMemoryStyles.d.ts.map +1 -0
- package/dist/panelMemoryStyles.js +42 -0
- package/dist/panelMemoryStyles.js.map +1 -0
- package/dist/panelMemoryView.d.ts +13 -1
- package/dist/panelMemoryView.d.ts.map +1 -1
- package/dist/panelMemoryView.js +161 -41
- package/dist/panelMemoryView.js.map +1 -1
- package/dist/panelPassesView.d.ts +15 -0
- package/dist/panelPassesView.d.ts.map +1 -1
- package/dist/panelPassesView.js +202 -72
- package/dist/panelPassesView.js.map +1 -1
- package/dist/panelRawView.d.ts +15 -0
- package/dist/panelRawView.d.ts.map +1 -0
- package/dist/panelRawView.js +105 -0
- package/dist/panelRawView.js.map +1 -0
- package/dist/panelResourcesView.d.ts +8 -0
- package/dist/panelResourcesView.d.ts.map +1 -1
- package/dist/panelResourcesView.js +62 -31
- package/dist/panelResourcesView.js.map +1 -1
- package/dist/panelSelection.d.ts +9 -1
- package/dist/panelSelection.d.ts.map +1 -1
- package/dist/panelSelection.js +34 -4
- package/dist/panelSelection.js.map +1 -1
- package/dist/panelTheme.d.ts +13 -0
- package/dist/panelTheme.d.ts.map +1 -0
- package/dist/panelTheme.js +104 -0
- package/dist/panelTheme.js.map +1 -0
- package/dist/panelTypes.d.ts +10 -1
- package/dist/panelTypes.d.ts.map +1 -1
- package/dist/panelTypes.js.map +1 -1
- package/dist/panelVisualTheme.d.ts +147 -50
- package/dist/panelVisualTheme.d.ts.map +1 -1
- package/dist/panelVisualTheme.js +34 -44
- package/dist/panelVisualTheme.js.map +1 -1
- package/dist/panelWorkbenchHelpers.d.ts +12 -1
- package/dist/panelWorkbenchHelpers.d.ts.map +1 -1
- package/dist/panelWorkbenchHelpers.js +62 -1
- package/dist/panelWorkbenchHelpers.js.map +1 -1
- package/dist/panelWorkbenchStyles.d.ts +2 -0
- package/dist/panelWorkbenchStyles.d.ts.map +1 -0
- package/dist/panelWorkbenchStyles.js +101 -0
- package/dist/panelWorkbenchStyles.js.map +1 -0
- package/dist/panelWorkbenchView.d.ts +16 -0
- package/dist/panelWorkbenchView.d.ts.map +1 -1
- package/dist/panelWorkbenchView.js +228 -50
- package/dist/panelWorkbenchView.js.map +1 -1
- package/dist/query.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +147 -195
- package/dist/styles.js.map +1 -1
- package/dist/theme.d.ts +22 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +10 -0
- package/dist/theme.js.map +1 -0
- package/dist/themeDefinitions.d.ts +251 -0
- package/dist/themeDefinitions.d.ts.map +1 -0
- package/dist/themeDefinitions.js +96 -0
- package/dist/themeDefinitions.js.map +1 -0
- package/dist/themePalette.d.ts +66 -0
- package/dist/themePalette.d.ts.map +1 -0
- package/dist/themePalette.js +37 -0
- package/dist/themePalette.js.map +1 -0
- package/dist/themes.css +165 -0
- package/package.json +44 -10
- package/src/FrameGraphInspector.ts +130 -31
- package/src/capture.ts +4 -0
- package/src/debugCaptureModel.ts +53 -2
- package/src/index.ts +6 -2
- package/src/panelAliasAnalysis.ts +24 -70
- package/src/panelCytoscapeGraphRenderer.ts +140 -23
- package/src/panelDetailLayout.ts +155 -0
- package/src/panelDetailStyles.ts +56 -0
- package/src/panelDiagnosticsView.ts +166 -85
- package/src/panelDomHelpers.ts +4 -5
- package/src/panelGraphLayout.ts +6 -5
- package/src/panelGraphRenderer.ts +7 -0
- package/src/panelGraphScene.ts +68 -30
- package/src/panelGraphSearch.ts +96 -0
- package/src/panelGraphView.ts +14 -4
- package/src/panelGraphVisuals.ts +122 -52
- package/src/panelInspectorView.ts +227 -48
- package/src/panelListStyles.ts +154 -0
- package/src/panelMemoryStyles.ts +41 -0
- package/src/panelMemoryView.ts +178 -53
- package/src/panelPassesView.ts +190 -137
- package/src/panelRawView.ts +99 -0
- package/src/panelResourcesView.ts +69 -56
- package/src/panelSelection.ts +37 -5
- package/src/panelTheme.ts +85 -0
- package/src/panelTypes.ts +7 -1
- package/src/panelVisualTheme.ts +38 -49
- package/src/panelWorkbenchHelpers.ts +60 -2
- package/src/panelWorkbenchStyles.ts +100 -0
- package/src/panelWorkbenchView.ts +201 -52
- package/src/query.ts +11 -11
- package/src/styles.ts +148 -195
- package/src/theme.ts +24 -0
- package/src/themeDefinitions.ts +103 -0
- package/src/themePalette.ts +44 -0
package/dist/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AACxD,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAE7C,MAAM,2BAA2B,GAAG;;;iBAGnB,KAAK,CAAC,MAAM;kDACqB,KAAK,CAAC,KAAK;iDACZ,KAAK,CAAC,OAAO;+DACC,KAAK,CAAC,aAAa;6DACrB,KAAK,CAAC,YAAY;+CAChC,KAAK,CAAC,MAAM;;;2CAGhB,KAAK,CAAC,IAAI;+DACU,KAAK,CAAC,aAAa;6CACrC,KAAK,CAAC,KAAK;+CACT,KAAK,CAAC,MAAM;;;iDAGV,KAAK,CAAC,OAAO;iDACb,KAAK,CAAC,OAAO;+CACf,KAAK,CAAC,MAAM;iDACV,KAAK,CAAC,MAAM;qDACR,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAmhBG,kBAAkB,CAAC,MAAM,CAAC,MAAM;uEAC/B,kBAAkB,CAAC,OAAO,CAAC,MAAM;oEACpC,kBAAkB,CAAC,IAAI,CAAC,MAAM;4EACtB,kBAAkB,CAAC,KAAK,CAAC,MAAM;uEACpC,kBAAkB,CAAC,OAAO,CAAC,MAAM;mFACrB,kBAAkB,CAAC,QAAQ,CAAC,MAAM;sEAC/C,kBAAkB,CAAC,QAAQ,CAAC,MAAM;uEACjC,kBAAkB,CAAC,OAAO,CAAC,MAAM;sEAClC,kBAAkB,CAAC,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAkXpE,kBAAkB,CAAC,OAAO,CAAC,MAAM;4CACvB,kBAAkB,CAAC,OAAO,CAAC,MAAM;;;kCAG3C,kBAAkB,CAAC,MAAM,CAAC,MAAM;4CACtB,kBAAkB,CAAC,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8H3E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B;IAC9C,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO;IACR,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,gBAAgB,CAAC;IAC5B,KAAK,CAAC,WAAW,GAAG,2BAA2B,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import { FRAME_GRAPH_DEBUG_VISUAL_THEME, GRAPH_VISUAL_THEME } from './panelVisualTheme.ts';\n\nconst STYLE_ELEMENT_ID = 'zenfg-inspector-panel-styles';\nconst theme = FRAME_GRAPH_DEBUG_VISUAL_THEME;\n\nconst FRAME_GRAPH_DEBUG_PANEL_CSS = `\n/* Tokens and workbench root */\n.zenfg-inspector {\n\t--fgd-canvas: ${theme.canvas};\n\t--fgd-panel: var(--zenfg-inspector-background, ${theme.panel});\n\t--fgd-surface: var(--zenfg-inspector-surface, ${theme.surface});\n\t--fgd-surface-raised: var(--zenfg-inspector-surface-raised, ${theme.surfaceRaised});\n\t--fgd-surface-hover: var(--zenfg-inspector-surface-hover, ${theme.surfaceHover});\n\t--fgd-border: var(--zenfg-inspector-border, ${theme.border});\n\t--fgd-border-subtle: var(--zenfg-inspector-border-subtle, rgba(180, 190, 202, 0.11));\n\t--fgd-border-strong: var(--zenfg-inspector-border-strong, rgba(180, 190, 202, 0.28));\n\t--fgd-text: var(--zenfg-inspector-text, ${theme.text});\n\t--fgd-text-secondary: var(--zenfg-inspector-text-secondary, ${theme.textSecondary});\n\t--fgd-muted: var(--zenfg-inspector-muted, ${theme.muted});\n\t--fgd-accent: var(--zenfg-inspector-accent, ${theme.accent});\n\t--fgd-accent-soft: var(--zenfg-inspector-accent-soft, rgba(56, 189, 248, 0.12));\n\t--fgd-accent-hover: var(--zenfg-inspector-accent-hover, rgba(56, 189, 248, 0.18));\n\t--fgd-success: var(--zenfg-inspector-success, ${theme.success});\n\t--fgd-warning: var(--zenfg-inspector-warning, ${theme.warning});\n\t--fgd-danger: var(--zenfg-inspector-danger, ${theme.danger});\n\t--fgd-font-ui: var(--zenfg-inspector-font-ui, ${theme.fontUi});\n\t--fgd-font-mono: var(--zenfg-inspector-font-mono, ${theme.fontMono});\n\tposition: relative;\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-canvas);\n\tfont-family: var(--fgd-font-ui);\n\tfont-size: 12px;\n\tline-height: 1.45;\n\tcolor-scheme: dark;\n\tcontainer-name: zenfg-inspector;\n\tcontainer-type: inline-size;\n}\n\n.zenfg-inspector,\n.zenfg-inspector * { box-sizing: border-box; }\n\n.zenfg-inspector-body {\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\tpadding: 10px;\n\toverflow: hidden;\n\tborder: 0;\n\tborder-radius: 0;\n\tbackground: var(--zenfg-inspector-background, var(--fgd-panel));\n}\n\n.zenfg-inspector-content {\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.zenfg-inspector-drop-overlay {\n\tposition: absolute;\n\tz-index: 40;\n\tinset: 10px;\n\tdisplay: grid;\n\tplace-content: center;\n\tgap: 6px;\n\tborder: 2px dashed var(--fgd-accent);\n\tborder-radius: var(--zenfg-inspector-radius-md, 6px);\n\tcolor: #bae6fd;\n\tbackground: color-mix(in srgb, var(--fgd-canvas) 90%, transparent);\n\tfont: 600 13px/1.4 var(--fgd-font-ui);\n\ttext-align: center;\n\tpointer-events: none;\n}\n.zenfg-inspector-drop-overlay[hidden] { display: none; }\n.zenfg-inspector-drop-overlay > span { color: var(--fgd-muted); font-size: 11px; }\n\n.zenfg-inspector-capture-summary[hidden],\n.zenfg-inspector-command-status[hidden],\n.zenfg-inspector-capture-action[hidden],\n.zenfg-inspector-workbench-empty[hidden],\n.zenfg-inspector-open-inspector[hidden],\n.zenfg-inspector-inspector.unavailable,\n.zenfg-inspector-view[hidden],\n.zenfg-inspector-graph-status[hidden] { display: none !important; }\n\n.zenfg-inspector-muted {\n\tmargin: 0;\n\tcolor: var(--fgd-muted);\n\tfont: 11px/1.5 var(--fgd-font-ui);\n}\n\n.zenfg-inspector-control-icon {\n\tdisplay: block;\n\tflex: 0 0 auto;\n\twidth: 14px;\n\theight: 14px;\n}\n\n.zenfg-inspector-table-scroller,\n.zenfg-inspector-memory-scroller,\n.zenfg-inspector-diagnostics-scroller,\n.zenfg-inspector-inspector-content,\n.zenfg-inspector-workbench-tabs,\n.zenfg-inspector-graph-legend {\n\tscrollbar-width: thin;\n\tscrollbar-color: rgba(180, 190, 202, 0.25) transparent;\n}\n\n/* Workbench and summary */\n.zenfg-inspector-workbench {\n\tdisplay: grid;\n\tgrid-template-rows: auto minmax(0, 1fr);\n\tgap: 8px;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\tfont-family: var(--fgd-font-ui);\n}\n\n.zenfg-inspector-capture-summary {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr));\n\talign-content: start;\n\tgap: 8px;\n\tmin-width: 0;\n\tbackground: transparent;\n}\n\n.zenfg-inspector-capture-summary > section {\n\tmin-width: 0;\n\tpadding: 12px;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: 6px;\n\tbackground: var(--fgd-surface);\n}\n\n.zenfg-inspector-capture-summary h2 {\n\tmargin: 0 0 5px;\n\tcolor: var(--fgd-text-secondary);\n\tfont-size: 10px;\n\tfont-weight: 700;\n\tletter-spacing: 0.075em;\n\tline-height: 1.2;\n\ttext-transform: uppercase;\n}\n\n.zenfg-inspector-capture-summary section > div {\n\tdisplay: grid;\n\tgrid-template-columns: auto minmax(0, 1fr);\n\tgap: 8px;\n\tmin-width: 0;\n\tfont-size: 11px;\n\tline-height: 1.5;\n}\n\n.zenfg-inspector-capture-summary span { color: var(--fgd-muted); white-space: nowrap; }\n.zenfg-inspector-capture-summary strong {\n\tmin-width: 0;\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tfont: 600 11px/1.5 var(--fgd-font-mono);\n\ttext-align: right;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n/* Command bar, tabs, and controls */\n.zenfg-inspector-workbench-command-bar {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: auto minmax(0, 1fr) auto;\n\talign-items: center;\n\tmin-width: 0;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n}\n.zenfg-inspector-workbench-command-bar.branding-hidden {\n\tgrid-template-columns: minmax(0, 1fr) auto;\n}\n\n.zenfg-inspector-brand {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tmin-width: 0;\n\tmin-height: 32px;\n\tpadding: 0 12px 0 4px;\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tfont: 700 12px/1 var(--fgd-font-ui);\n\tletter-spacing: 0.015em;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-brand::after {\n\tposition: absolute;\n\ttop: 50%;\n\tright: 0;\n\twidth: 1px;\n\theight: 16px;\n\tbackground: var(--fgd-border);\n\tcontent: '';\n\ttransform: translateY(-50%);\n}\n\n.zenfg-inspector-workbench-tabs,\n.zenfg-inspector-subtabs,\n.zenfg-inspector-inspector-tabs {\n\tdisplay: flex;\n\talign-items: end;\n\tmin-width: 0;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n}\n\n.zenfg-inspector-workbench-tabs {\n\toverflow-x: auto;\n\tborder-bottom: 0;\n}\n\n.zenfg-inspector-workbench-tabs > button,\n.zenfg-inspector-subtabs > button,\n.zenfg-inspector-inspector-tabs > button {\n\tmin-height: 32px;\n\tpadding: 6px 10px;\n\tborder: 0;\n\tborder-bottom: 2px solid transparent;\n\tcolor: var(--fgd-muted);\n\tbackground: transparent;\n\tfont: 600 12px/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n\tcursor: pointer;\n\ttransition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;\n}\n\n.zenfg-inspector-workbench-tabs > button:hover:not(:disabled),\n.zenfg-inspector-subtabs > button:hover:not(:disabled),\n.zenfg-inspector-inspector-tabs > button:hover:not(:disabled) {\n\tcolor: var(--fgd-text-secondary);\n\tbackground: rgba(180, 190, 202, 0.055);\n}\n\n.zenfg-inspector-workbench-tabs > button.active,\n.zenfg-inspector-subtabs > button.active,\n.zenfg-inspector-inspector-tabs > button.active {\n\tborder-bottom-color: var(--fgd-accent);\n\tcolor: var(--fgd-text);\n\tbackground: linear-gradient(to top, var(--fgd-accent-soft), transparent 55%);\n}\n\n.zenfg-inspector-workbench-tabs > button:disabled,\n.zenfg-inspector-subtabs > button:disabled,\n.zenfg-inspector-inspector-tabs > button:disabled { cursor: default; opacity: 0.42; }\n\n.zenfg-inspector-workbench-actions {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n\tpadding-left: 8px;\n\toverflow-x: auto;\n\tscrollbar-width: thin;\n}\n\n.zenfg-inspector-export-menu {\n\tposition: absolute;\n\tz-index: 30;\n\ttop: calc(100% + 4px);\n\tright: 0;\n\tdisplay: grid;\n\tmin-width: 142px;\n\tpadding: 4px;\n\tborder: 1px solid var(--fgd-border-strong);\n\tborder-radius: 6px;\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: 0 10px 24px rgba(0, 0, 0, 0.34);\n}\n.zenfg-inspector-export-menu[hidden] { display: none; }\n.zenfg-inspector-export-menu > button {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 7px;\n\tpadding: 7px 9px;\n\tborder: 0;\n\tborder-radius: 4px;\n\tcolor: var(--fgd-text-secondary);\n\tbackground: transparent;\n\tfont: 600 11px/1.2 var(--fgd-font-ui);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.zenfg-inspector-export-menu > button:hover:not(:disabled) {\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-hover);\n}\n.zenfg-inspector-export-menu > button:disabled { cursor: default; opacity: 0.46; }\n\n.zenfg-inspector-workbench-actions > button,\n.zenfg-inspector-graph-toolbar button,\n.zenfg-inspector-group-toggle,\n.zenfg-inspector-inspector-close {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 6px;\n\theight: 28px;\n\tmin-height: 28px;\n\tpadding: 0 9px;\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: 5px;\n\tcolor: var(--fgd-text-secondary);\n\tbackground: var(--fgd-surface);\n\tfont: 600 11px/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n\tcursor: pointer;\n\ttransition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;\n}\n\n.zenfg-inspector-workbench-actions > button:hover:not(:disabled),\n.zenfg-inspector-graph-toolbar button:hover:not(:disabled),\n.zenfg-inspector-group-toggle:hover:not(:disabled),\n.zenfg-inspector-inspector-close:hover:not(:disabled) {\n\tborder-color: var(--fgd-border-strong);\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-hover);\n}\n\n.zenfg-inspector-workbench-actions > button[data-tone='accent'] {\n\tborder-color: rgba(56, 189, 248, 0.5);\n\tcolor: #bae6fd;\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='accent']:hover:not(:disabled) {\n\tborder-color: var(--fgd-accent);\n\tbackground: var(--fgd-accent-hover);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='pending'] {\n\tborder-color: rgba(56, 189, 248, 0.42);\n\tcolor: var(--fgd-text-secondary);\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='success'] {\n\tborder-color: rgba(52, 211, 153, 0.46);\n\tcolor: var(--fgd-success);\n\tbackground: rgba(52, 211, 153, 0.1);\n}\n.zenfg-inspector-workbench-actions > button:disabled { cursor: default; opacity: 0.46; }\n.zenfg-inspector-workbench-actions > button[aria-busy='true']:disabled { opacity: 0.72; }\n\n.zenfg-inspector-command-status {\n\tmax-width: 220px;\n\toverflow: hidden;\n\tcolor: var(--fgd-muted);\n\tfont: 11px/1.35 var(--fgd-font-ui);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-command-status[data-tone='error'] { color: var(--fgd-danger); }\n\n.zenfg-inspector-control-icon[data-icon='spinner'],\nbutton[aria-busy='true'] > .zenfg-inspector-control-icon {\n\tanimation: zenfg-inspector-spin 800ms linear infinite;\n}\n@keyframes zenfg-inspector-spin { to { transform: rotate(360deg); } }\n\n.zenfg-inspector-workbench-tabs > button:focus-visible,\n.zenfg-inspector-subtabs > button:focus-visible,\n.zenfg-inspector-inspector-tabs > button:focus-visible,\n.zenfg-inspector-workbench-actions > button:focus-visible,\n.zenfg-inspector-graph-toolbar button:focus-visible,\n.zenfg-inspector-group-toggle:focus-visible,\n.zenfg-inspector-inspector-close:focus-visible,\n.zenfg-inspector-relation-button:focus-visible,\n.zenfg-inspector-view-toolbar input:focus-visible,\n.zenfg-inspector-view-toolbar select:focus-visible {\n\toutline: 2px solid var(--fgd-accent);\n\toutline-offset: 1px;\n}\n\n/* Workspace and empty states */\n.zenfg-inspector-overview-view {\n\tpadding: 12px;\n\toverflow: auto;\n\tbackground: var(--fgd-canvas);\n}\n\n.zenfg-inspector-workspace {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: minmax(0, 1fr);\n\tgap: 8px;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n}\n.zenfg-inspector-workspace.inspector-open {\n\tgrid-template-columns: minmax(0, 1fr) minmax(360px, 28vw);\n}\n\n.zenfg-inspector-main {\n\tdisplay: grid;\n\tgrid-template: minmax(0, 1fr) / minmax(0, 1fr);\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n}\n\n.zenfg-inspector-workbench-empty {\n\tgrid-area: 1 / 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 8px;\n\tmin-width: 0;\n\tmin-height: 0;\n\tpadding: 24px;\n\tcolor: var(--fgd-muted);\n\tfont: 12px/1.5 var(--fgd-font-ui);\n\ttext-align: center;\n}\n.zenfg-inspector-workbench-empty > .zenfg-inspector-control-icon {\n\twidth: 22px;\n\theight: 22px;\n\tcolor: var(--fgd-text-secondary);\n}\n.zenfg-inspector-workbench-empty[data-state='error'] > .zenfg-inspector-control-icon { color: var(--fgd-danger); }\n.zenfg-inspector-workbench-empty[data-state='capturing'] > .zenfg-inspector-control-icon { color: var(--fgd-accent); }\n.zenfg-inspector-empty-message { max-width: 520px; }\n.zenfg-inspector-empty-detail { color: color-mix(in srgb, var(--fgd-muted) 78%, transparent); font-size: 11px; }\n\n.zenfg-inspector-view {\n\tgrid-area: 1 / 1;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: 6px;\n\tbackground: var(--fgd-canvas);\n}\n\n.zenfg-inspector-view-toolbar {\n\tdisplay: flex;\n\tflex: 0 0 auto;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 6px;\n\tpadding: 6px 8px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n\n.zenfg-inspector-view-toolbar input,\n.zenfg-inspector-view-toolbar select {\n\tmin-width: 0;\n\theight: 28px;\n\tpadding: 4px 8px;\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: 5px;\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-panel);\n\tfont: 11px/1 var(--fgd-font-ui);\n}\n.zenfg-inspector-view-toolbar input { flex: 1 1 210px; }\n.zenfg-inspector-view-toolbar input::placeholder { color: var(--fgd-muted); opacity: 0.86; }\n.zenfg-inspector-view-toolbar select { flex: 0 1 auto; color-scheme: dark; }\n\n.zenfg-inspector-passes-view,\n.zenfg-inspector-resources-view { display: flex; flex-direction: column; }\n.zenfg-inspector-subtabs,\n.zenfg-inspector-inspector-tabs {\n\tflex: 0 0 auto;\n\tpadding: 0 4px;\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-subview { flex: 1 1 auto; min-height: 0; overflow: hidden; }\n\n/* Tables and relations */\n.zenfg-inspector-table-scroller {\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\toverflow: auto;\n}\n.zenfg-inspector-workbench-table {\n\twidth: 100%;\n\tmin-width: 720px;\n\tborder-collapse: collapse;\n\tfont: 11px/1.45 var(--fgd-font-mono);\n}\n.zenfg-inspector-workbench-table th,\n.zenfg-inspector-workbench-table td {\n\theight: 30px;\n\tmax-width: 360px;\n\tpadding: 6px 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\toverflow: hidden;\n\ttext-align: left;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-workbench-table th {\n\tposition: sticky;\n\tz-index: 2;\n\ttop: 0;\n\tcolor: var(--fgd-muted);\n\tbackground: var(--fgd-panel);\n\tfont: 650 10px/1.3 var(--fgd-font-ui);\n\tletter-spacing: 0.025em;\n}\n.zenfg-inspector-workbench-table [data-column='numeric'] {\n\tfont-variant-numeric: tabular-nums;\n\ttext-align: right;\n}\n.zenfg-inspector-workbench-table [data-column='code'] { font-family: var(--fgd-font-mono); }\n.zenfg-inspector-workbench-table tbody tr:hover td { background: rgba(180, 190, 202, 0.045); }\n\n.zenfg-inspector-workbench-table tr.selected td,\n.zenfg-inspector-diagnostic-list .selected,\n.zenfg-inspector-memory-allocation.selected,\n.zenfg-inspector-memory-resource.selected { background: var(--fgd-accent-soft); }\n.zenfg-inspector-workbench-table tr.selected td:first-child { box-shadow: inset 2px 0 var(--fgd-accent); }\n\n.zenfg-inspector-workbench-table td small {\n\tdisplay: block;\n\tmargin-top: 2px;\n\toverflow: hidden;\n\tcolor: var(--fgd-muted);\n\tfont: 10px/1.4 var(--fgd-font-ui);\n\ttext-overflow: ellipsis;\n}\n\n.zenfg-inspector-kind-label {\n\t--fgd-kind-color: var(--fgd-muted);\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 6px;\n\tmax-width: 100%;\n\toverflow: hidden;\n\tcolor: var(--fgd-text-secondary);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-kind-label::before {\n\twidth: 6px;\n\theight: 6px;\n\tflex: 0 0 auto;\n\tborder: 1px solid color-mix(in srgb, var(--fgd-kind-color) 78%, white);\n\tborder-radius: 50%;\n\tbackground: color-mix(in srgb, var(--fgd-kind-color) 72%, transparent);\n\tcontent: '';\n}\n.zenfg-inspector-kind-label[data-kind='render'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.render.stroke}; }\n.zenfg-inspector-kind-label[data-kind='compute'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.compute.stroke}; }\n.zenfg-inspector-kind-label[data-kind='copy'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.copy.stroke}; }\n.zenfg-inspector-kind-label[data-kind='clear-buffer'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.clear.stroke}; }\n.zenfg-inspector-kind-label[data-kind='command'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.command.stroke}; }\n.zenfg-inspector-kind-label[data-kind='external-submission'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.external.stroke}; }\n.zenfg-inspector-kind-label[data-kind='opaque'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.external.stroke}; }\n.zenfg-inspector-kind-label[data-kind='texture'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.texture.stroke}; }\n.zenfg-inspector-kind-label[data-kind='buffer'] { --fgd-kind-color: ${GRAPH_VISUAL_THEME.buffer.stroke}; }\n.zenfg-inspector-kind-label[data-kind='frame-graph'] { --fgd-kind-color: var(--fgd-accent); }\n.zenfg-inspector-kind-label[data-kind='timed'] { --fgd-kind-color: var(--fgd-success); }\n.zenfg-inspector-kind-label[data-kind='not-timed'] { --fgd-kind-color: var(--fgd-muted); }\n\n.zenfg-inspector-relation-button {\n\tmax-width: 100%;\n\tpadding: 0;\n\tborder: 0;\n\tcolor: #a5def6;\n\tbackground: transparent;\n\tfont: inherit;\n\ttext-align: left;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.zenfg-inspector-relation-button:hover {\n\tcolor: #d5f3ff;\n\ttext-decoration: underline;\n\ttext-underline-offset: 2px;\n}\n.zenfg-inspector-group-toggle { width: 28px; padding: 0; color: var(--fgd-text-secondary); }\n.zenfg-inspector-empty-row {\n\theight: 60px !important;\n\tcolor: var(--fgd-muted);\n\tfont-family: var(--fgd-font-ui);\n\ttext-align: center !important;\n}\n\n/* Graph */\n.zenfg-inspector-graph-view { display: flex; flex-direction: column; }\n.zenfg-inspector-graph-toolbar {\n\tdisplay: grid;\n\tgrid-template-columns: minmax(0, 1fr) auto;\n\talign-items: center;\n\tgap: 10px;\n\tmin-width: 0;\n\tmin-height: 38px;\n\tpadding: 5px 6px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-graph-action-controls { display: flex; align-items: center; min-width: 0; }\n.zenfg-inspector-graph-action-controls { gap: 4px; }\n.zenfg-inspector-graph-toolbar button.active,\n.zenfg-inspector-graph-toolbar button[aria-pressed='true'] {\n\tz-index: 1;\n\tborder-color: rgba(56, 189, 248, 0.6);\n\tcolor: var(--fgd-accent);\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-graph-toolbar button:disabled { cursor: default; opacity: 0.42; }\n.zenfg-inspector-graph-toolbar .zenfg-inspector-icon-button { width: 28px; padding: 0; }\n\n.zenfg-inspector-graph-legend {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 10px;\n\tmin-width: 0;\n\tpadding: 2px 0;\n\toverflow-x: auto;\n\tcolor: var(--fgd-muted);\n\tfont: 10px/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n}\n.zenfg-inspector-legend-item { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; }\n.zenfg-inspector-legend-group { display: inline-flex; align-items: center; gap: 10px; flex: 0 0 auto; }\n.zenfg-inspector-legend-group + .zenfg-inspector-legend-group { border-left: 1px solid var(--fgd-border-subtle); padding-left: 10px; }\n.zenfg-inspector-legend-heading { color: var(--fgd-text-secondary); font-weight: 600; }\n.zenfg-inspector-legend-swatch {\n\tposition: relative;\n\tdisplay: inline-block;\n\twidth: 10px;\n\theight: 8px;\n\tborder: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-radius: 2px;\n\tbackground: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));\n}\n.zenfg-inspector-legend-swatch[data-shape='ellipse'] { border-radius: 50%; }\n.zenfg-inspector-legend-swatch[data-shape='group'] { background: transparent; }\n.zenfg-inspector-legend-swatch[data-shape='cut-rectangle'],\n.zenfg-inspector-legend-swatch[data-shape='tag'] { width: 14px; height: 10px; border: 0; background: transparent; }\n.zenfg-inspector-legend-swatch > svg { display: block; width: 100%; height: 100%; overflow: visible; }\n.zenfg-inspector-legend-swatch > svg polygon {\n\tfill: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));\n\tstroke: var(--zenfg-inspector-legend-color);\n\tstroke-width: 1.4;\n}\n.zenfg-inspector-legend-swatch[data-shape='line'] {\n\twidth: 16px;\n\theight: 0;\n\tborder: 0;\n\tborder-top: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-radius: 0;\n\tbackground: transparent;\n}\n.zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dotted'] { border-top-style: dotted; }\n.zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dashed'] { border-top-style: dashed; }\n.zenfg-inspector-legend-swatch:not([data-shape='line'])[data-line-style='dashed'] { border-style: dashed; }\n.zenfg-inspector-legend-swatch[data-shape='line']::after {\n\tposition: absolute;\n\ttop: -2px;\n\tright: -1px;\n\twidth: 5px;\n\theight: 4px;\n\tbackground: var(--zenfg-inspector-legend-color);\n\tclip-path: polygon(0 0, 100% 50%, 0 100%);\n\tcontent: '';\n}\n.zenfg-inspector-legend-swatch[data-shape='line'][data-hollow-arrow='true']::after {\n\ttop: -3px;\n\twidth: 4px;\n\theight: 4px;\n\tborder-top: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-right: 1px solid var(--zenfg-inspector-legend-color);\n\tbackground: transparent;\n\tclip-path: none;\n\ttransform: rotate(45deg);\n}\n\n.zenfg-inspector-graph-view .zenfg-inspector-graph {\n\tflex: 1 1 auto;\n\twidth: 100%;\n\theight: auto;\n\tmin-height: 0;\n\tborder: 0;\n}\n.zenfg-inspector-graph {\n\tposition: relative;\n\twidth: 100%;\n\theight: 260px;\n\tmin-height: 220px;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-canvas);\n\tcolor: var(--fgd-muted);\n\tfont-size: 11px;\n}\n.zenfg-inspector-graph-canvas {\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\toutline: none;\n}\n.zenfg-inspector-graph-status {\n\tposition: absolute;\n\tinset: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 8px;\n\tpadding: 16px;\n\tcolor: var(--fgd-muted);\n\tbackground: rgba(11, 15, 20, 0.82);\n\tfont: 12px/1.45 var(--fgd-font-ui);\n\ttext-align: center;\n\tpointer-events: none;\n}\n.zenfg-inspector-graph-status[data-state='layout'] { background: rgba(11, 15, 20, 0.5); }\n.zenfg-inspector-graph-status[data-state='error'] {\n\tcolor: var(--fgd-text);\n\tbackground: rgba(11, 15, 20, 0.94);\n}\n.zenfg-inspector-graph-status > span { max-width: min(560px, 80%); }\n.zenfg-inspector-graph-status button {\n\theight: 28px;\n\tpadding: 0 9px;\n\tborder: 1px solid rgba(56, 189, 248, 0.55);\n\tborder-radius: 5px;\n\tcolor: var(--fgd-accent);\n\tbackground: var(--fgd-accent-soft);\n\tfont: 600 11px/1 var(--fgd-font-ui);\n\tcursor: pointer;\n\tpointer-events: auto;\n}\n.zenfg-inspector-graph-tooltip {\n\tposition: absolute;\n\tz-index: 3;\n\twidth: max-content;\n\tmax-width: min(380px, calc(100% - 16px));\n\tpadding: 8px 10px;\n\tborder: 1px solid var(--fgd-border-strong);\n\tborder-radius: 6px;\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: 0 8px 24px rgba(0, 0, 0, 0.42);\n\tfont: 11px/1.5 var(--fgd-font-mono);\n\twhite-space: pre-wrap;\n\tpointer-events: none;\n}\n\n/* Inspector */\n.zenfg-inspector-inspector {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: 6px;\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: -8px 0 28px rgba(0, 0, 0, 0.2);\n}\n.zenfg-inspector-inspector[hidden] { display: none; }\n.zenfg-inspector-inspector > header {\n\tdisplay: flex;\n\tflex: 0 0 auto;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmin-height: 36px;\n\tpadding: 0 8px 0 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-inspector > header strong {\n\tmin-width: 0;\n\toverflow: hidden;\n\tfont: 600 11px/1.3 var(--fgd-font-mono);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-inspector-close {\n\twidth: 28px;\n\tpadding: 0;\n\tborder-color: transparent;\n\tbackground: transparent;\n}\n.zenfg-inspector-inspector-content {\n\tflex: 1 1 auto;\n\tmin-height: 0;\n\tpadding: 10px;\n\toverflow: auto;\n}\n.zenfg-inspector-inspector-summary {\n\tdisplay: grid;\n\tgrid-template-columns: minmax(96px, auto) minmax(0, 1fr);\n\tgap: 3px 12px;\n\tmargin: 0;\n\tfont-size: 11px;\n\tline-height: 1.6;\n}\n.zenfg-inspector-inspector-summary dt { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }\n.zenfg-inspector-inspector-summary dd {\n\tmin-width: 0;\n\tmargin: 0;\n\tcolor: var(--fgd-text);\n\tfont-family: var(--fgd-font-mono);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-inspector-relations { display: grid; gap: 8px; }\n.zenfg-inspector-inspector-relations section {\n\tdisplay: grid;\n\tgap: 6px;\n\tpadding: 8px;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: 5px;\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-inspector-relations h3 {\n\tmargin: 0 0 2px;\n\tcolor: var(--fgd-muted);\n\tfont: 700 10px/1.3 var(--fgd-font-ui);\n\tletter-spacing: 0.055em;\n\ttext-transform: uppercase;\n}\n.zenfg-inspector-inspector-relations .zenfg-inspector-relation-button {\n\tfont: 11px/1.5 var(--fgd-font-mono);\n\toverflow-wrap: anywhere;\n\twhite-space: normal;\n}\n.zenfg-inspector-relation-entry { display: grid; justify-items: start; gap: 2px; }\n.zenfg-inspector-relation-entry > span { font: 11px/1.5 var(--fgd-font-mono); overflow-wrap: anywhere; }\n.zenfg-inspector-inspector .zenfg-inspector-raw-detail {\n\tmin-width: 100%;\n\tmargin: 0;\n\toverflow: auto;\n\tcolor: var(--fgd-text-secondary);\n\tfont: 11px/1.55 var(--fgd-font-mono);\n\twhite-space: pre;\n}\n\n/* Memory */\n.zenfg-inspector-memory-view {\n\tdisplay: grid;\n\tgrid-template-rows: auto minmax(0, 1fr);\n}\n.zenfg-inspector-memory-summary {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(4, minmax(0, 1fr));\n\tgap: 6px;\n\tpadding: 6px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-memory-summary > div {\n\tdisplay: grid;\n\tgap: 3px;\n\tmin-width: 0;\n\tpadding: 6px 8px;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: 5px;\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-memory-summary span { color: var(--fgd-muted); font: 10px/1.3 var(--fgd-font-ui); }\n.zenfg-inspector-memory-summary strong {\n\toverflow: hidden;\n\tfont: 600 11px/1.35 var(--fgd-font-mono);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-memory-scroller { min-height: 0; overflow: auto; }\n.zenfg-inspector-memory-timeline {\n\tdisplay: grid;\n\tmin-width: 760px;\n\tpadding: 8px;\n\tfont: 11px/1.4 var(--fgd-font-mono);\n}\n.zenfg-inspector-memory-axis,\n.zenfg-inspector-memory-resource {\n\tdisplay: grid;\n\tgrid-template-columns: minmax(150px, 0.9fr) 72px minmax(320px, 2.4fr) 82px;\n\tgap: 10px;\n\talign-items: center;\n\tmin-height: 30px;\n}\n.zenfg-inspector-memory-axis {\n\tposition: sticky;\n\tz-index: 2;\n\ttop: 0;\n\tpadding: 0 8px 6px;\n\tcolor: var(--fgd-muted);\n\tbackground: var(--fgd-canvas);\n\tfont: 10px/1.3 var(--fgd-font-ui);\n}\n.zenfg-inspector-memory-axis-track,\n.zenfg-inspector-memory-track { position: relative; height: 16px; }\n.zenfg-inspector-memory-axis-track { border-bottom: 1px solid var(--fgd-border-strong); }\n.zenfg-inspector-memory-axis-track > span {\n\tposition: absolute;\n\tbottom: -1px;\n\tpadding-bottom: 5px;\n\tborder-left: 1px solid var(--fgd-border-strong);\n\tfont: 10px/1 var(--fgd-font-mono);\n\ttransform: translateX(-1px);\n}\n.zenfg-inspector-memory-allocation {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 12px;\n\tmargin-top: 6px;\n\tpadding: 7px 8px;\n\tborder-top: 1px solid var(--fgd-border-subtle);\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-memory-allocation > span { color: var(--fgd-muted); font: 10px/1.35 var(--fgd-font-mono); }\n.zenfg-inspector-memory-allocation.muted { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-resource { padding: 0 8px; border-bottom: 1px solid var(--fgd-border-subtle); }\n.zenfg-inspector-memory-resource.selected,\n.zenfg-inspector-memory-allocation.selected { box-shadow: inset 2px 0 var(--fgd-accent); }\n.zenfg-inspector-memory-bar {\n\tposition: absolute;\n\ttop: 4px;\n\theight: 8px;\n\tmin-width: 2px;\n\tborder-radius: 4px;\n\tbackground: color-mix(in srgb, ${GRAPH_VISUAL_THEME.texture.stroke} 76%, transparent);\n\tbox-shadow: 0 0 0 1px color-mix(in srgb, ${GRAPH_VISUAL_THEME.texture.stroke} 36%, transparent);\n}\n.zenfg-inspector-memory-bar.buffer {\n\tbackground: color-mix(in srgb, ${GRAPH_VISUAL_THEME.buffer.stroke} 72%, transparent);\n\tbox-shadow: 0 0 0 1px color-mix(in srgb, ${GRAPH_VISUAL_THEME.buffer.stroke} 34%, transparent);\n}\n.zenfg-inspector-memory-bar.empty { display: none; }\n\n/* Diagnostics */\n.zenfg-inspector-diagnostics-scroller { width: 100%; height: 100%; overflow: auto; }\n.zenfg-inspector-diagnostics-grid {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(2, minmax(0, 1fr));\n\tgap: 8px;\n\tpadding: 8px;\n}\n.zenfg-inspector-diagnostic-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 0;\n\tmin-height: 164px;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: 6px;\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-diagnostic-card > h2 {\n\tmargin: 0;\n\tpadding: 9px 10px 3px;\n\tcolor: var(--fgd-text-secondary);\n\tfont: 650 12px/1.35 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-card > p {\n\tmargin: 0;\n\tpadding: 0 10px 8px;\n\tcolor: var(--fgd-muted);\n\tfont: 11px/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-card .zenfg-inspector-table-scroller { flex: 1 1 auto; max-height: 280px; }\n.zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table { min-width: 100%; table-layout: fixed; }\n.zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table td {\n\toverflow-wrap: anywhere;\n\twhite-space: normal;\n}\n.zenfg-inspector-diagnostic-list { display: grid; gap: 2px; padding: 6px; overflow: auto; }\n.zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button {\n\tpadding: 6px 8px;\n\tborder-radius: 4px;\n\tcolor: var(--fgd-text-secondary);\n\tfont: 11px/1.45 var(--fgd-font-mono);\n}\n.zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button:hover {\n\tbackground: rgba(180, 190, 202, 0.05);\n\ttext-decoration: none;\n}\n.zenfg-inspector-diagnostic-list .selected { box-shadow: inset 2px 0 var(--fgd-accent); }\n\n/* Responsive */\n@container zenfg-inspector (max-width: 960px) {\n\t.zenfg-inspector-workspace.inspector-open { grid-template-columns: minmax(0, 1fr); }\n\t.zenfg-inspector-workspace.inspector-open::after {\n\t\tposition: absolute;\n\t\tz-index: 10;\n\t\tinset: 0;\n\t\tbackground: rgba(3, 7, 12, 0.38);\n\t\tcontent: '';\n\t\tpointer-events: none;\n\t}\n\t.zenfg-inspector-inspector {\n\t\tposition: absolute;\n\t\tz-index: 20;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\twidth: min(380px, calc(100% - 24px));\n\t\tbox-shadow: -18px 0 42px rgba(0, 0, 0, 0.42);\n\t}\n\t.zenfg-inspector-graph-toolbar {\n\t\tgrid-template-columns: minmax(0, 1fr) auto;\n\t\tgap: 6px 8px;\n\t}\n\t.zenfg-inspector-graph-legend {\n\t\tgrid-column: 1 / -1;\n\t\tgrid-row: 2;\n\t\tpadding-top: 6px;\n\t\tborder-top: 1px solid var(--fgd-border-subtle);\n\t}\n\t.zenfg-inspector-graph-action-controls { justify-self: end; }\n}\n\n@container zenfg-inspector (max-width: 840px) {\n\t.zenfg-inspector-workbench-command-bar {\n\t\tgrid-template-columns: minmax(0, 1fr) auto;\n\t}\n\t.zenfg-inspector-brand { grid-column: 1; grid-row: 1; min-height: 36px; display: flex; align-items: center; }\n\t.zenfg-inspector-brand::after { display: none; }\n\t.zenfg-inspector-workbench-actions { grid-column: 2; grid-row: 1; }\n\t.zenfg-inspector-workbench-tabs { grid-column: 1 / -1; grid-row: 2; }\n\t.zenfg-inspector-workbench-command-bar.branding-hidden .zenfg-inspector-workbench-tabs {\n\t\tgrid-column: 1;\n\t\tgrid-row: 1;\n\t}\n\t.zenfg-inspector-diagnostics-grid { grid-template-columns: minmax(0, 1fr); }\n}\n\n@container zenfg-inspector (max-width: 720px) {\n\t.zenfg-inspector-body { padding: 8px; }\n\t.zenfg-inspector-overview-view { padding: 8px; }\n\t.zenfg-inspector-capture-summary > section { padding: 10px; }\n\t.zenfg-inspector-workbench-actions { padding-left: 6px; }\n\t.zenfg-inspector-command-status { max-width: 104px; }\n\t.zenfg-inspector-workbench-tabs > button { flex: 0 0 auto; padding-inline: 8px; }\n\t.zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n\t.zenfg-inspector-view-toolbar input { flex-basis: 100%; }\n\t.zenfg-inspector-graph-toolbar { display: flex; flex-wrap: wrap; }\n\t.zenfg-inspector-graph-legend { order: 3; flex-basis: 100%; }\n\t.zenfg-inspector-graph-action-controls { margin-left: auto; }\n\t.zenfg-inspector-graph-view .zenfg-inspector-graph { height: auto; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.zenfg-inspector *,\n\t.zenfg-inspector *::before,\n\t.zenfg-inspector *::after {\n\t\tscroll-behavior: auto !important;\n\t\ttransition-duration: 0.01ms !important;\n\t\tanimation-duration: 0.01ms !important;\n\t\tanimation-iteration-count: 1 !important;\n\t}\n}\n`;\n\n/**\n * Installs the inspector's shared stylesheet in the current document once.\n *\n * @remarks This is safe to call repeatedly and is a no-op during server-side\n * rendering. `FrameGraphInspector` calls it automatically.\n */\nexport function ensureFrameGraphInspectorStyles(): void {\n\tif (typeof document === 'undefined' || document.getElementById(STYLE_ELEMENT_ID)) {\n\t\treturn;\n\t}\n\n\tconst style = document.createElement('style');\n\tstyle.id = STYLE_ELEMENT_ID;\n\tstyle.textContent = FRAME_GRAPH_DEBUG_PANEL_CSS;\n\tdocument.head.appendChild(style);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAGxD,MAAM,2BAA2B,GAAG;;;GAGjC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA++BlB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B;IAC9C,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO;IACR,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,gBAAgB,CAAC;IAC5B,KAAK,CAAC,WAAW,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IAC7H,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import { themeDefaultsCss } from './themeDefinitions.ts';\nimport { PANEL_WORKBENCH_CSS } from './panelWorkbenchStyles.ts';\nimport { PANEL_LIST_CSS } from './panelListStyles.ts';\nimport { PANEL_DETAIL_CSS } from './panelDetailStyles.ts';\nimport { PANEL_MEMORY_CSS } from './panelMemoryStyles.ts';\n\nconst STYLE_ELEMENT_ID = 'zenfg-inspector-panel-styles';\n\n\nconst FRAME_GRAPH_DEBUG_PANEL_CSS = `\n/* Tokens and workbench root */\n.zenfg-inspector {\n\t${themeDefaultsCss}\n\tposition: relative;\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-canvas);\n\tfont-family: var(--fgd-font-ui);\n\tline-height: 1.45;\n\tcolor-scheme: var(--zfgi-color-scheme, dark);\n\tcontainer-name: zenfg-inspector;\n\tcontainer-type: inline-size;\n}\n\n.zenfg-inspector,\n.zenfg-inspector * { box-sizing: border-box; }\n\n.zenfg-inspector-body {\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\tpadding: 10px;\n\toverflow: hidden;\n\tborder: 0;\n\tborder-radius: 0;\n\tbackground: var(--fgd-panel);\n}\n\n.zenfg-inspector-content {\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.zenfg-inspector-drop-overlay {\n\tposition: absolute;\n\tz-index: 40;\n\tinset: 10px;\n\tdisplay: grid;\n\tplace-content: center;\n\tgap: 6px;\n\tborder: 2px dashed var(--fgd-accent);\n\tborder-radius: var(--fgd-radius-md);\n\tcolor: var(--fgd-accent);\n\tbackground: color-mix(in srgb, var(--fgd-canvas) 90%, transparent);\n\tfont: 600 var(--fgd-font-size)/1.4 var(--fgd-font-ui);\n\ttext-align: center;\n\tpointer-events: none;\n}\n.zenfg-inspector-drop-overlay[hidden] { display: none; }\n.zenfg-inspector-drop-overlay > span { color: var(--fgd-muted); font-size: var(--fgd-font-size-small); }\n\n.zenfg-inspector-capture-summary[hidden],\n.zenfg-inspector-command-status[hidden],\n.zenfg-inspector-capture-action[hidden],\n.zenfg-inspector-workbench-empty[hidden],\n.zenfg-inspector-open-inspector[hidden],\n.zenfg-inspector-inspector.unavailable,\n.zenfg-inspector-view[hidden],\n.zenfg-inspector-graph-status[hidden] { display: none !important; }\n\n.zenfg-inspector-muted {\n\tmargin: 0;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n\n.zenfg-inspector-control-icon {\n\tdisplay: block;\n\tflex: 0 0 auto;\n\twidth: 14px;\n\theight: 14px;\n}\n\n.zenfg-inspector-table-scroller,\n.zenfg-inspector-memory-scroller,\n.zenfg-inspector-diagnostics-scroller,\n.zenfg-inspector-inspector-content,\n.zenfg-inspector-workbench-tabs,\n.zenfg-inspector-graph-legend {\n\tscrollbar-width: thin;\n\tscrollbar-color: var(--fgd-border) transparent;\n}\n\n/* Common control states apply consistently across all workbench views. */\n.zenfg-inspector :is(button, input, select, textarea) { font-family: var(--fgd-font-ui); }\n.zenfg-inspector :is(button, input, select, textarea, summary, [tabindex]):focus-visible { outline: 2px solid var(--fgd-accent); outline-offset: 2px; }\n/* The modal dismiss button must retain its translucent scrim while pressed. */\n.zenfg-inspector button:active:not(:disabled):not(.zenfg-inspector-detail-backdrop) { background: var(--fgd-accent-soft); }\n.zenfg-inspector :is(button, input, select):disabled { cursor: default; opacity: .5; }\n.zenfg-inspector ::selection { color: var(--fgd-text); background: var(--fgd-accent-soft); }\n/* Workbench and summary */\n.zenfg-inspector-workbench {\n\tgrid-template-rows: auto minmax(0, 1fr);\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\tfont-family: var(--fgd-font-ui);\n}\n\n.zenfg-inspector-capture-summary {\n\tdisplay: grid;\n\talign-content: start;\n\tmin-width: 0;\n\tbackground: transparent;\n}\n\n.zenfg-inspector-capture-summary > section {\n\tmin-width: 0;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: var(--fgd-radius-sm);\n}\n\n.zenfg-inspector-capture-summary h2 {\n\tmargin: 0 0 5px;\n\tcolor: var(--fgd-text-secondary);\n\tfont-weight: 700;\n\tline-height: 1.2;\n}\n\n.zenfg-inspector-capture-summary section > div {\n\tdisplay: grid;\n\tgap: var(--fgd-space-2);\n\tmin-width: 0;\n\tline-height: 1.5;\n}\n\n.zenfg-inspector-capture-summary span { color: var(--fgd-muted); white-space: nowrap; }\n.zenfg-inspector-capture-summary strong {\n\tmin-width: 0;\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tfont: 600 var(--fgd-font-size-small)/1.5 var(--fgd-font-mono);\n\ttext-align: right;\n\ttext-overflow: ellipsis;\n}\n\n/* Command bar, tabs, and controls */\n.zenfg-inspector-workbench-command-bar {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: auto minmax(0, 1fr) auto;\n\talign-items: center;\n\tmin-width: 0;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n}\n.zenfg-inspector-workbench-command-bar.branding-hidden {\n\tgrid-template-columns: minmax(0, 1fr) auto;\n}\n\n.zenfg-inspector-brand {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tmin-width: 0;\n\tmin-height: var(--fgd-control-height);\n\tpadding: 0 var(--fgd-space-3) 0 var(--fgd-space-1);\n\toverflow: hidden;\n\tcolor: var(--fgd-text);\n\tfont: 700 var(--fgd-font-size-small)/1 var(--fgd-font-ui);\n\tletter-spacing: 0.015em;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-brand::after {\n\tposition: absolute;\n\ttop: 50%;\n\tright: 0;\n\twidth: 1px;\n\theight: 16px;\n\tbackground: var(--fgd-border);\n\tcontent: '';\n\ttransform: translateY(-50%);\n}\n\n.zenfg-inspector-workbench-tabs,\n.zenfg-inspector-subtabs,\n.zenfg-inspector-inspector-tabs {\n\tdisplay: flex;\n\talign-items: end;\n\tmin-width: 0;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n}\n\n.zenfg-inspector-workbench-tabs {\n\talign-self: stretch;\n\talign-items: stretch;\n\toverflow-x: auto;\n\tborder-bottom: 0;\n}\n\n.zenfg-inspector-workbench-tabs > button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.zenfg-inspector-workbench-tabs > button,\n.zenfg-inspector-subtabs > button,\n.zenfg-inspector-inspector-tabs > button {\n\tmin-height: var(--fgd-control-height);\n\tpadding: 6px 10px;\n\tborder: 0;\n\tborder-bottom: 2px solid transparent;\n\tcolor: var(--fgd-muted);\n\tbackground: transparent;\n\tfont: 600 var(--fgd-font-size)/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n\tcursor: pointer;\n\ttransition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;\n}\n\n.zenfg-inspector-workbench-tabs > button:hover:not(:disabled),\n.zenfg-inspector-subtabs > button:hover:not(:disabled),\n.zenfg-inspector-inspector-tabs > button:hover:not(:disabled) {\n\tcolor: var(--fgd-text-secondary);\n\tbackground: var(--fgd-surface-hover);\n}\n\n.zenfg-inspector-workbench-tabs > button.active,\n.zenfg-inspector-subtabs > button.active,\n.zenfg-inspector-inspector-tabs > button.active {\n\tborder-bottom-color: var(--fgd-accent);\n\tcolor: var(--fgd-text);\n\tbackground: linear-gradient(to top, var(--fgd-accent-soft), transparent 55%);\n}\n\n.zenfg-inspector-workbench-tabs > button:disabled,\n.zenfg-inspector-subtabs > button:disabled,\n.zenfg-inspector-inspector-tabs > button:disabled { cursor: default; opacity: 0.42; }\n\n.zenfg-inspector-workbench-actions {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n\tpadding: var(--fgd-space-1) 0 var(--fgd-space-1) var(--fgd-space-2);\n\toverflow-x: auto;\n\tscrollbar-width: thin;\n}\n\n.zenfg-inspector-export-menu {\n\tposition: absolute;\n\tz-index: 30;\n\ttop: calc(100% + 4px);\n\tright: 0;\n\tdisplay: grid;\n\tmin-width: 142px;\n\tpadding: var(--fgd-space-1);\n\tborder: 1px solid var(--fgd-border-strong);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: var(--fgd-shadow);\n}\n.zenfg-inspector-export-menu[hidden] { display: none; }\n.zenfg-inspector-export-menu > button {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 7px;\n\tpadding: 7px 9px;\n\tborder: 0;\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-text-secondary);\n\tbackground: transparent;\n\tfont: 600 var(--fgd-font-size)/1.2 var(--fgd-font-ui);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.zenfg-inspector-export-menu > button:hover:not(:disabled) {\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-hover);\n}\n.zenfg-inspector-export-menu > button:disabled { cursor: default; opacity: 0.46; }\n\n.zenfg-inspector-workbench-actions > button,\n.zenfg-inspector-graph-toolbar button,\n.zenfg-inspector-group-toggle,\n.zenfg-inspector-inspector-close {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 6px;\n\theight: var(--fgd-control-height);\n\tmin-height: var(--fgd-control-height);\n\tpadding: 0 9px;\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-text-secondary);\n\tbackground: var(--fgd-surface);\n\tfont: 600 var(--fgd-font-size)/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n\tcursor: pointer;\n\ttransition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;\n}\n\n.zenfg-inspector-workbench-actions > button:hover:not(:disabled),\n.zenfg-inspector-graph-toolbar button:hover:not(:disabled),\n.zenfg-inspector-group-toggle:hover:not(:disabled),\n.zenfg-inspector-inspector-close:hover:not(:disabled) {\n\tborder-color: var(--fgd-border-strong);\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-hover);\n}\n\n.zenfg-inspector-workbench-actions > button[data-tone='accent'] {\n\tborder-color: var(--fgd-accent);\n\tcolor: var(--fgd-accent);\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='accent']:hover:not(:disabled) {\n\tborder-color: var(--fgd-accent);\n\tbackground: var(--fgd-accent-hover);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='pending'] {\n\tborder-color: var(--fgd-accent);\n\tcolor: var(--fgd-text-secondary);\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-workbench-actions > button[data-tone='success'] {\n\tborder-color: var(--fgd-success);\n\tcolor: var(--fgd-success);\n\tbackground: color-mix(in srgb, var(--fgd-success) 10%, var(--fgd-panel));\n}\n.zenfg-inspector-workbench-actions > button:disabled { cursor: default; opacity: 0.46; }\n.zenfg-inspector-workbench-actions > button[aria-busy='true']:disabled { opacity: 0.72; }\n\n.zenfg-inspector-command-status {\n\tmax-width: 220px;\n\toverflow: hidden;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.35 var(--fgd-font-ui);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-command-status[data-tone='error'] { color: var(--fgd-danger); }\n\n.zenfg-inspector-control-icon[data-icon='spinner'],\nbutton[aria-busy='true'] > .zenfg-inspector-control-icon {\n\tanimation: zenfg-inspector-spin 800ms linear infinite;\n}\n@keyframes zenfg-inspector-spin { to { transform: rotate(360deg); } }\n\n.zenfg-inspector-workbench-tabs > button:focus-visible,\n.zenfg-inspector-subtabs > button:focus-visible,\n.zenfg-inspector-inspector-tabs > button:focus-visible,\n.zenfg-inspector-workbench-actions > button:focus-visible,\n.zenfg-inspector-graph-toolbar button:focus-visible,\n.zenfg-inspector-group-toggle:focus-visible,\n.zenfg-inspector-inspector-close:focus-visible,\n.zenfg-inspector-relation-button:focus-visible,\n.zenfg-inspector-view-toolbar input:focus-visible,\n.zenfg-inspector-view-toolbar select:focus-visible {\n\toutline: 2px solid var(--fgd-accent);\n\toutline-offset: 1px;\n}\n\n/* Workspace and empty states */\n.zenfg-inspector-overview-view {\n\tpadding: var(--fgd-space-3);\n\tbackground: var(--fgd-canvas);\n}\n.zenfg-inspector-view.zenfg-inspector-overview-view { overflow: auto; }\n\n.zenfg-inspector-workspace {\n\tposition: relative;\n\tdisplay: grid;\n\tgrid-template-columns: minmax(0, 1fr);\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n}\n\n.zenfg-inspector-main {\n\tdisplay: grid;\n\tgrid-template: minmax(0, 1fr) / minmax(0, 1fr);\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n}\n\n.zenfg-inspector-workbench-empty {\n\tgrid-area: 1 / 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--fgd-space-2);\n\tmin-width: 0;\n\tmin-height: 0;\n\tpadding: 24px;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n\ttext-align: center;\n}\n.zenfg-inspector-workbench-empty > .zenfg-inspector-control-icon {\n\twidth: 22px;\n\theight: 22px;\n\tcolor: var(--fgd-text-secondary);\n}\n.zenfg-inspector-workbench-empty[data-state='error'] > .zenfg-inspector-control-icon { color: var(--fgd-danger); }\n.zenfg-inspector-workbench-empty[data-state='capturing'] > .zenfg-inspector-control-icon { color: var(--fgd-accent); }\n.zenfg-inspector-empty-message { max-width: 520px; }\n.zenfg-inspector-empty-detail { color: color-mix(in srgb, var(--fgd-muted) 78%, transparent); font-size: var(--fgd-font-size-small); }\n\n.zenfg-inspector-view {\n\tgrid-area: 1 / 1;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-canvas);\n}\n\n.zenfg-inspector-view-toolbar {\n\tdisplay: flex;\n\tflex: 0 0 auto;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 6px;\n\tpadding: 6px var(--fgd-space-2);\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n\n.zenfg-inspector-view-toolbar input,\n.zenfg-inspector-view-toolbar select {\n\tmin-width: 0;\n\tpadding: var(--fgd-space-1) var(--fgd-space-2);\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-panel);\n\tfont: var(--fgd-font-size)/1 var(--fgd-font-ui);\n}\n.zenfg-inspector-view-toolbar input { flex: 1 1 210px; }\n.zenfg-inspector-view-toolbar input::placeholder { color: var(--fgd-muted); opacity: 0.86; }\n.zenfg-inspector-view-toolbar select { flex: 0 1 auto; color-scheme: dark; }\n\n.zenfg-inspector-passes-view,\n.zenfg-inspector-resources-view { display: flex; flex-direction: column; }\n.zenfg-inspector-subtabs,\n.zenfg-inspector-inspector-tabs {\n\tflex: 0 0 auto;\n\tpadding: 0 var(--fgd-space-1);\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-subview { flex: 1 1 auto; min-height: 0; overflow: hidden; }\n\n/* Tables and relations */\n.zenfg-inspector-table-scroller {\n\twidth: 100%;\n\theight: 100%;\n\tmin-height: 0;\n\toverflow: auto;\n}\n.zenfg-inspector-workbench-table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n}\n.zenfg-inspector-workbench-table th,\n.zenfg-inspector-workbench-table td {\n\theight: var(--fgd-control-height);\n\tmax-width: 360px;\n\tpadding: 6px 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\toverflow: hidden;\n\ttext-align: left;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-workbench-table th {\n\tposition: sticky;\n\tz-index: 2;\n\ttop: 0;\n\tcolor: var(--fgd-muted);\n\tbackground: var(--fgd-panel);\n\tfont: 650 var(--fgd-font-size-small)/1.3 var(--fgd-font-ui);\n\tletter-spacing: 0.025em;\n}\n.zenfg-inspector-workbench-table [data-column='numeric'] {\n\tfont-variant-numeric: tabular-nums;\n\ttext-align: right;\n}\n.zenfg-inspector-workbench-table [data-column='code'] { font-family: var(--fgd-font-mono); }\n.zenfg-inspector-workbench-table tbody tr:hover td { background: var(--fgd-surface-hover); }\n\n.zenfg-inspector-workbench-table tr.selected td,\n.zenfg-inspector-diagnostic-list .selected,\n.zenfg-inspector-memory-allocation.selected,\n.zenfg-inspector-memory-resource.selected { background: var(--fgd-accent-soft); }\n.zenfg-inspector-workbench-table tr.selected td:first-child { box-shadow: inset 2px 0 var(--fgd-accent); }\n\n.zenfg-inspector-workbench-table td small {\n\tdisplay: block;\n\tmargin-top: 2px;\n\toverflow: hidden;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.4 var(--fgd-font-ui);\n\ttext-overflow: ellipsis;\n}\n\n.zenfg-inspector-kind-label {\n\t--fgd-kind-color: var(--fgd-muted);\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 6px;\n\tmax-width: 100%;\n\toverflow: hidden;\n\tcolor: var(--fgd-text-secondary);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-kind-label::before {\n\twidth: 6px;\n\theight: 6px;\n\tflex: 0 0 auto;\n\tborder: 1px solid color-mix(in srgb, var(--fgd-kind-color) 78%, white);\n\tborder-radius: 50%;\n\tbackground: color-mix(in srgb, var(--fgd-kind-color) 72%, transparent);\n\tcontent: '';\n}\n.zenfg-inspector-kind-label[data-kind='render'] { --fgd-kind-color: var(--fgd-graph-render-stroke); }\n.zenfg-inspector-kind-label[data-kind='compute'] { --fgd-kind-color: var(--fgd-graph-compute-stroke); }\n.zenfg-inspector-kind-label[data-kind='copy'] { --fgd-kind-color: var(--fgd-graph-copy-stroke); }\n.zenfg-inspector-kind-label[data-kind='clear-buffer'] { --fgd-kind-color: var(--fgd-graph-clear-stroke); }\n.zenfg-inspector-kind-label[data-kind='command'] { --fgd-kind-color: var(--fgd-graph-command-stroke); }\n.zenfg-inspector-kind-label[data-kind='external-submission'] { --fgd-kind-color: var(--fgd-graph-external-stroke); }\n.zenfg-inspector-kind-label[data-kind='opaque'] { --fgd-kind-color: var(--fgd-graph-external-stroke); }\n.zenfg-inspector-kind-label[data-kind='texture'] { --fgd-kind-color: var(--fgd-graph-texture-stroke); }\n.zenfg-inspector-kind-label[data-kind='buffer'] { --fgd-kind-color: var(--fgd-graph-buffer-stroke); }\n.zenfg-inspector-kind-label[data-kind='frame-graph'] { --fgd-kind-color: var(--fgd-accent); }\n.zenfg-inspector-kind-label[data-kind='timed'] { --fgd-kind-color: var(--fgd-success); }\n.zenfg-inspector-kind-label[data-kind='not-timed'] { --fgd-kind-color: var(--fgd-muted); }\n\n.zenfg-inspector-relation-button {\n\tmax-width: 100%;\n\tpadding: 0;\n\tborder: 0;\n\tcolor: var(--fgd-accent);\n\tbackground: transparent;\n\tfont: inherit;\n\ttext-align: left;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tcursor: pointer;\n}\n.zenfg-inspector-relation-button:hover {\n\tcolor: var(--fgd-accent);\n\ttext-decoration: underline;\n\ttext-underline-offset: 2px;\n}\n.zenfg-inspector-group-toggle { width: 28px; padding: 0; color: var(--fgd-text-secondary); }\n.zenfg-inspector-empty-row {\n\theight: 60px !important;\n\tcolor: var(--fgd-muted);\n\tfont-family: var(--fgd-font-ui);\n\ttext-align: center !important;\n}\n\n/* Graph */\n.zenfg-inspector-graph-view { display: flex; flex-direction: column; }\n.zenfg-inspector-graph-toolbar {\n\tmin-width: 0;\n}\n.zenfg-inspector-graph-action-controls { display: flex; align-items: center; min-width: 0; }\n.zenfg-inspector-graph-action-controls { gap: var(--fgd-space-1); }\n.zenfg-inspector-graph-toolbar button.active,\n.zenfg-inspector-graph-toolbar button[aria-pressed='true'] {\n\tz-index: 1;\n\tborder-color: var(--fgd-accent);\n\tcolor: var(--fgd-accent);\n\tbackground: var(--fgd-accent-soft);\n}\n.zenfg-inspector-graph-toolbar button:disabled { cursor: default; opacity: 0.42; }\n\n.zenfg-inspector-graph-legend {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 10px;\n\tmin-width: 0;\n\tpadding: 2px 0;\n\toverflow-x: auto;\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1 var(--fgd-font-ui);\n\twhite-space: nowrap;\n}\n.zenfg-inspector-legend-item { display: inline-flex; align-items: center; gap: var(--fgd-space-1); flex: 0 0 auto; }\n.zenfg-inspector-legend-group { display: inline-flex; align-items: center; gap: 10px; flex: 0 0 auto; }\n.zenfg-inspector-legend-group + .zenfg-inspector-legend-group { border-left: 1px solid var(--fgd-border-subtle); padding-left: 10px; }\n.zenfg-inspector-legend-heading { color: var(--fgd-text-secondary); font-weight: 600; }\n.zenfg-inspector-legend-swatch {\n\tposition: relative;\n\tdisplay: inline-block;\n\twidth: 10px;\n\theight: 8px;\n\tborder: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-radius: 2px;\n\tbackground: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));\n}\n.zenfg-inspector-legend-swatch[data-shape='ellipse'] { border-radius: 50%; }\n.zenfg-inspector-legend-swatch[data-shape='group'] { background: transparent; }\n.zenfg-inspector-legend-swatch[data-shape='cut-rectangle'],\n.zenfg-inspector-legend-swatch[data-shape='tag'] { width: 14px; height: 10px; border: 0; background: transparent; }\n.zenfg-inspector-legend-swatch > svg { display: block; width: 100%; height: 100%; overflow: visible; }\n.zenfg-inspector-legend-swatch > svg polygon {\n\tfill: color-mix(in srgb, var(--zenfg-inspector-legend-color) 20%, var(--fgd-canvas));\n\tstroke: var(--zenfg-inspector-legend-color);\n\tstroke-width: 1.4;\n}\n.zenfg-inspector-legend-swatch[data-shape='line'] {\n\twidth: 16px;\n\theight: 0;\n\tborder: 0;\n\tborder-top: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-radius: 0;\n\tbackground: transparent;\n}\n.zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dotted'] { border-top-style: dotted; }\n.zenfg-inspector-legend-swatch[data-shape='line'][data-line-style='dashed'] { border-top-style: dashed; }\n.zenfg-inspector-legend-swatch:not([data-shape='line'])[data-line-style='dashed'] { border-style: dashed; }\n.zenfg-inspector-legend-swatch[data-shape='line']::after {\n\tposition: absolute;\n\ttop: -2px;\n\tright: -1px;\n\twidth: 5px;\n\theight: 4px;\n\tbackground: var(--zenfg-inspector-legend-color);\n\tclip-path: polygon(0 0, 100% 50%, 0 100%);\n\tcontent: '';\n}\n.zenfg-inspector-legend-swatch[data-shape='line'][data-hollow-arrow='true']::after {\n\ttop: -3px;\n\twidth: 4px;\n\theight: 4px;\n\tborder-top: 1px solid var(--zenfg-inspector-legend-color);\n\tborder-right: 1px solid var(--zenfg-inspector-legend-color);\n\tbackground: transparent;\n\tclip-path: none;\n\ttransform: rotate(45deg);\n}\n\n.zenfg-inspector-graph-view .zenfg-inspector-graph {\n\tflex: 1 1 auto;\n\twidth: 100%;\n\theight: auto;\n\tmin-height: 0;\n\tborder: 0;\n}\n.zenfg-inspector-graph {\n\tposition: relative;\n\twidth: 100%;\n\theight: 260px;\n\tmin-height: 220px;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-canvas);\n\tcolor: var(--fgd-muted);\n\tfont-size: var(--fgd-font-size-small);\n}\n.zenfg-inspector-graph-canvas {\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\toutline: none;\n}\n.zenfg-inspector-graph-status {\n\tposition: absolute;\n\tinset: 0;\n\tz-index: 2;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--fgd-space-2);\n\tpadding: var(--fgd-space-4);\n\tcolor: var(--fgd-muted);\n\tbackground: color-mix(in srgb, var(--fgd-canvas) 82%, transparent);\n\tfont: var(--fgd-font-size-small)/1.45 var(--fgd-font-ui);\n\ttext-align: center;\n\tpointer-events: none;\n}\n.zenfg-inspector-graph-status[data-state='layout'] { background: color-mix(in srgb, var(--fgd-canvas) 50%, transparent); }\n.zenfg-inspector-graph-status[data-state='error'] {\n\tcolor: var(--fgd-text);\n\tbackground: color-mix(in srgb, var(--fgd-canvas) 94%, transparent);\n}\n.zenfg-inspector-graph-status > span { max-width: min(560px, 80%); }\n.zenfg-inspector-graph-status button {\n\theight: var(--fgd-control-height);\n\tpadding: 0 9px;\n\tborder: 1px solid var(--fgd-accent);\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-accent);\n\tbackground: var(--fgd-accent-soft);\n\tfont: 600 var(--fgd-font-size)/1 var(--fgd-font-ui);\n\tcursor: pointer;\n\tpointer-events: auto;\n}\n.zenfg-inspector-graph-tooltip {\n\tposition: absolute;\n\tz-index: 3;\n\twidth: max-content;\n\tmax-width: min(380px, calc(100% - 16px));\n\tpadding: var(--fgd-space-2) 10px;\n\tborder: 1px solid var(--fgd-border-strong);\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-text);\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: var(--fgd-shadow);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono);\n\twhite-space: pre-wrap;\n\tpointer-events: none;\n}\n\n/* Inspector */\n.zenfg-inspector-inspector {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-surface-raised);\n\tbox-shadow: var(--fgd-shadow);\n}\n.zenfg-inspector-inspector[hidden] { display: none; }\n.zenfg-inspector-inspector > header {\n\tdisplay: flex;\n\tflex: 0 0 auto;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmin-height: var(--fgd-row-height);\n\tpadding: 0 var(--fgd-space-2) 0 10px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-inspector > header strong {\n\tmin-width: 0;\n\toverflow: hidden;\n\tfont: 600 var(--fgd-font-size-small)/1.3 var(--fgd-font-mono);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n.zenfg-inspector-inspector-close {\n\twidth: 28px;\n\tpadding: 0;\n\tborder-color: transparent;\n\tbackground: transparent;\n}\n.zenfg-inspector-inspector-content {\n\tflex: 1 1 auto;\n\tmin-height: 0;\n\tpadding: 10px;\n\toverflow: auto;\n}\n.zenfg-inspector-inspector-summary {\n\tdisplay: grid;\n\tgap: 3px var(--fgd-space-3);\n\tmargin: 0;\n\tline-height: 1.6;\n}\n.zenfg-inspector-inspector-summary dt { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }\n.zenfg-inspector-inspector-summary dd {\n\tmin-width: 0;\n\tmargin: 0;\n\tcolor: var(--fgd-text);\n\toverflow-wrap: anywhere;\n}\n.zenfg-inspector-inspector-relations { display: grid; gap: var(--fgd-space-2); }\n.zenfg-inspector-inspector-relations section {\n\tdisplay: grid;\n\tgap: 6px;\n\tpadding: var(--fgd-space-2);\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-inspector-relations h3 {\n\tmargin: 0 0 2px;\n\tcolor: var(--fgd-muted);\n\tfont: 700 var(--fgd-font-size-small)/1.3 var(--fgd-font-ui);\n\tletter-spacing: 0.055em;\n\ttext-transform: uppercase;\n}\n.zenfg-inspector-inspector-relations .zenfg-inspector-relation-button {\n\tfont: var(--fgd-font-size)/1.5 var(--fgd-font-mono);\n\toverflow-wrap: anywhere;\n\twhite-space: normal;\n}\n.zenfg-inspector-relation-entry { display: grid; justify-items: start; gap: 2px; }\n.zenfg-inspector-relation-entry > span { font: var(--fgd-font-size-small)/1.5 var(--fgd-font-mono); overflow-wrap: anywhere; }\n.zenfg-inspector-inspector .zenfg-inspector-raw-detail {\n\tmin-width: 100%;\n\tmargin: 0;\n\tcolor: var(--fgd-text-secondary);\n}\n\n/* Memory */\n.zenfg-inspector-memory-view {\n\tdisplay: grid;\n}\n.zenfg-inspector-memory-summary {\n\tdisplay: grid;\n\tgap: 6px;\n\tpadding: 6px;\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-panel);\n}\n.zenfg-inspector-memory-summary > div {\n\tdisplay: grid;\n\tgap: 3px;\n\tmin-width: 0;\n\tpadding: 6px var(--fgd-space-2);\n\tborder-radius: var(--fgd-radius-sm);\n}\n.zenfg-inspector-memory-summary strong {\n\toverflow: hidden;\n\tfont: 600 var(--fgd-font-size-small)/1.35 var(--fgd-font-mono);\n\ttext-overflow: ellipsis;\n}\n.zenfg-inspector-memory-scroller { min-height: 0; overflow: auto; }\n.zenfg-inspector-memory-timeline {\n\tdisplay: grid;\n\tpadding: var(--fgd-space-2);\n\tfont: var(--fgd-font-size-small)/1.4 var(--fgd-font-mono);\n}\n.zenfg-inspector-memory-axis,\n.zenfg-inspector-memory-resource {\n\tdisplay: grid;\n\tgap: 10px;\n\talign-items: center;\n\tmin-height: var(--fgd-control-height);\n}\n.zenfg-inspector-memory-axis {\n\tposition: sticky;\n\ttop: 0;\n\tpadding: 0 var(--fgd-space-2) 6px;\n\tcolor: var(--fgd-muted);\n\tbackground: var(--fgd-canvas);\n\tfont: var(--fgd-font-size-small)/1.3 var(--fgd-font-ui);\n}\n.zenfg-inspector-memory-axis-track,\n.zenfg-inspector-memory-track { position: relative; height: 16px; }\n.zenfg-inspector-memory-axis-track { border-bottom: 1px solid var(--fgd-border-strong); }\n.zenfg-inspector-memory-axis-track > span {\n\tposition: absolute;\n\tbottom: -1px;\n\tpadding-bottom: 5px;\n\tfont: var(--fgd-font-size-small)/1 var(--fgd-font-mono);\n}\n.zenfg-inspector-memory-allocation {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tgap: var(--fgd-space-3);\n\tmargin-top: 6px;\n\tpadding: 7px var(--fgd-space-2);\n\tborder-top: 1px solid var(--fgd-border-subtle);\n\tborder-bottom: 1px solid var(--fgd-border-subtle);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-memory-allocation > span { color: var(--fgd-muted); font: var(--fgd-font-size-small)/1.35 var(--fgd-font-mono); }\n.zenfg-inspector-memory-allocation.muted { color: var(--fgd-muted); font-family: var(--fgd-font-ui); }\n.zenfg-inspector-memory-resource { padding: 0 var(--fgd-space-2); border-bottom: 1px solid var(--fgd-border-subtle); }\n.zenfg-inspector-memory-resource.selected,\n.zenfg-inspector-memory-allocation.selected { box-shadow: inset 2px 0 var(--fgd-accent); }\n.zenfg-inspector-memory-bar {\n\tposition: absolute;\n\ttop: 4px;\n\theight: 8px;\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: color-mix(in srgb, var(--fgd-graph-texture-stroke) 76%, transparent);\n\tbox-shadow: 0 0 0 1px color-mix(in srgb, var(--fgd-graph-texture-stroke) 36%, transparent);\n}\n.zenfg-inspector-memory-bar.buffer {\n\tbackground: color-mix(in srgb, var(--fgd-graph-buffer-stroke) 72%, transparent);\n\tbox-shadow: 0 0 0 1px color-mix(in srgb, var(--fgd-graph-buffer-stroke) 34%, transparent);\n}\n.zenfg-inspector-memory-bar.empty { display: none; }\n\n/* Diagnostics */\n.zenfg-inspector-diagnostics-scroller { width: 100%; height: 100%; overflow: auto; }\n.zenfg-inspector-diagnostics-grid {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(2, minmax(0, 1fr));\n\tgap: var(--fgd-space-2);\n\tpadding: var(--fgd-space-2);\n}\n.zenfg-inspector-diagnostic-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 0;\n\tmin-height: 164px;\n\toverflow: hidden;\n\tborder: 1px solid var(--fgd-border-subtle);\n\tborder-radius: var(--fgd-radius-sm);\n\tbackground: var(--fgd-surface);\n}\n.zenfg-inspector-diagnostic-card > h2 {\n\tmargin: 0;\n\tpadding: 9px 10px 3px;\n\tcolor: var(--fgd-text-secondary);\n\tfont: 650 var(--fgd-font-size-small)/1.35 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-card > p {\n\tmargin: 0;\n\tpadding: 0 10px var(--fgd-space-2);\n\tcolor: var(--fgd-muted);\n\tfont: var(--fgd-font-size-small)/1.5 var(--fgd-font-ui);\n}\n.zenfg-inspector-diagnostic-card .zenfg-inspector-table-scroller { flex: 1 1 auto; max-height: 280px; }\n.zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table { min-width: 100%; table-layout: fixed; }\n.zenfg-inspector-diagnostic-card .zenfg-inspector-workbench-table td {\n\toverflow-wrap: anywhere;\n\twhite-space: normal;\n}\n.zenfg-inspector-diagnostic-list { display: grid; gap: 2px; padding: 6px; overflow: auto; }\n.zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button {\n\tpadding: 6px var(--fgd-space-2);\n\tborder-radius: var(--fgd-radius-sm);\n\tcolor: var(--fgd-text-secondary);\n\tfont: var(--fgd-font-size)/1.45 var(--fgd-font-mono);\n}\n.zenfg-inspector-diagnostic-list .zenfg-inspector-relation-button:hover {\n\tbackground: var(--fgd-surface-hover);\n\ttext-decoration: none;\n}\n.zenfg-inspector-diagnostic-list .selected { box-shadow: inset 2px 0 var(--fgd-accent); }\n\n/* Responsive */\n@container zenfg-inspector (max-width: 960px) {\n\t.zenfg-inspector-workspace.inspector-open { grid-template-columns: minmax(0, 1fr); }\n\t.zenfg-inspector-workspace.inspector-open::after {\n\t\tposition: absolute;\n\t\tz-index: 10;\n\t\tinset: 0;\n\t\tbackground: var(--fgd-backdrop);\n\t\tcontent: '';\n\t\tpointer-events: none;\n\t}\n\t.zenfg-inspector-inspector {\n\t\tposition: absolute;\n\t\tz-index: 20;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\twidth: min(380px, calc(100% - 24px));\n\t\tbox-shadow: var(--fgd-shadow);\n\t}\n\t.zenfg-inspector-graph-toolbar {\n\t\tgrid-template-columns: minmax(0, 1fr) auto;\n\t\tgap: 6px var(--fgd-space-2);\n\t}\n\t.zenfg-inspector-graph-legend {\n\t\tgrid-column: 1 / -1;\n\t\tgrid-row: 2;\n\t\tpadding-top: 6px;\n\t\tborder-top: 1px solid var(--fgd-border-subtle);\n\t}\n\t.zenfg-inspector-graph-action-controls { justify-self: end; }\n}\n\n@container zenfg-inspector (max-width: 840px) {\n\t.zenfg-inspector-workbench-command-bar {\n\t\tgrid-template-columns: minmax(0, 1fr) auto;\n\t}\n\t.zenfg-inspector-brand { grid-column: 1; grid-row: 1; min-height: var(--fgd-row-height); display: flex; align-items: center; }\n\t.zenfg-inspector-brand::after { display: none; }\n\t.zenfg-inspector-workbench-actions { grid-column: 2; grid-row: 1; }\n\t.zenfg-inspector-workbench-tabs { grid-column: 1 / -1; grid-row: 2; }\n\t.zenfg-inspector-workbench-command-bar.branding-hidden .zenfg-inspector-workbench-tabs {\n\t\tgrid-column: 1;\n\t\tgrid-row: 1;\n\t}\n\t.zenfg-inspector-diagnostics-grid { grid-template-columns: minmax(0, 1fr); }\n}\n\n@container zenfg-inspector (max-width: 720px) {\n\t.zenfg-inspector-body { padding: var(--fgd-space-2); }\n\t.zenfg-inspector-overview-view { padding: var(--fgd-space-2); }\n\t.zenfg-inspector-capture-summary > section { padding: 10px; }\n\t.zenfg-inspector-workbench-actions { padding-left: 6px; }\n\t.zenfg-inspector-command-status { max-width: 104px; }\n\t.zenfg-inspector-workbench-tabs > button { flex: 0 0 auto; padding-inline: var(--fgd-space-2); }\n\t.zenfg-inspector-memory-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n\t.zenfg-inspector-view-toolbar input { flex-basis: 100%; }\n\t.zenfg-inspector-graph-toolbar { display: flex; flex-wrap: wrap; }\n\t.zenfg-inspector-graph-legend { order: 3; flex-basis: 100%; }\n\t.zenfg-inspector-graph-action-controls { margin-left: auto; }\n\t.zenfg-inspector-graph-view .zenfg-inspector-graph { height: auto; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.zenfg-inspector *,\n\t.zenfg-inspector *::before,\n\t.zenfg-inspector *::after {\n\t\tscroll-behavior: auto !important;\n\t\ttransition-duration: 0.01ms !important;\n\t\tanimation-duration: 0.01ms !important;\n\t\tanimation-iteration-count: 1 !important;\n\t}\n}\n`;\n\n/**\n * Installs the inspector's shared stylesheet in the current document once.\n *\n * @remarks This is safe to call repeatedly and is a no-op during server-side\n * rendering. `FrameGraphInspector` calls it automatically.\n */\nexport function ensureFrameGraphInspectorStyles(): void {\n\tif (typeof document === 'undefined' || document.getElementById(STYLE_ELEMENT_ID)) {\n\t\treturn;\n\t}\n\n\tconst style = document.createElement('style');\n\tstyle.id = STYLE_ELEMENT_ID;\n\tstyle.textContent = FRAME_GRAPH_DEBUG_PANEL_CSS + PANEL_WORKBENCH_CSS + PANEL_LIST_CSS + PANEL_DETAIL_CSS + PANEL_MEMORY_CSS;\n\tdocument.head.appendChild(style);\n}\n"]}
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Pure theme data for CSS and JavaScript hosts; safe to import without a DOM.
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*/
|
|
4
|
+
import { stormVariables } from './themeDefinitions.ts';
|
|
5
|
+
export { visualThemes, visualMetrics } from './themePalette.ts';
|
|
6
|
+
export type { ThemeMode, VisualPalette } from './themePalette.ts';
|
|
7
|
+
/** Public CSS custom properties. Missing values inherit from the host or use Storm defaults. */
|
|
8
|
+
export type InspectorThemeVariables = {
|
|
9
|
+
readonly [Key in keyof typeof stormVariables]: string;
|
|
10
|
+
};
|
|
11
|
+
/** A partial or complete theme; no name, registration, or base preset is required. */
|
|
12
|
+
export interface InspectorTheme {
|
|
13
|
+
/** Browser appearance for native controls; mapped to `--zfgi-color-scheme`. Does not select a palette. */
|
|
14
|
+
readonly colorScheme?: 'dark' | 'light';
|
|
15
|
+
/** CSS values keyed by the documented `--zfgi-*` custom property names. */
|
|
16
|
+
readonly variables?: Readonly<Partial<InspectorThemeVariables>>;
|
|
17
|
+
}
|
|
18
|
+
/** Complete Tokyo Night Storm preset; also the component's CSS fallback appearance. */
|
|
19
|
+
export declare const tokyoNightStorm: InspectorTheme;
|
|
20
|
+
/** Complete Tokyo Night Light preset, including the graph and native control appearance. */
|
|
21
|
+
export declare const tokyoNightLight: InspectorTheme;
|
|
22
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAkB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE,gGAAgG;AAChG,MAAM,MAAM,uBAAuB,GAAG;IAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,OAAO,cAAc,GAAG,MAAM;CAAE,CAAC;AAEhG,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC3B,0GAA0G;IAC1G,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;CACnE;AAED,uFAAuF;AACvF,eAAO,MAAM,eAAe,EAAE,cAAiG,CAAC;AAEhI,4FAA4F;AAC5F,eAAO,MAAM,eAAe,EAAE,cAAkG,CAAC"}
|
package/dist/theme.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Pure theme data for CSS and JavaScript hosts; safe to import without a DOM.
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*/
|
|
4
|
+
import { stormVariables, lightVariables } from "./themeDefinitions.js";
|
|
5
|
+
export { visualThemes, visualMetrics } from "./themePalette.js";
|
|
6
|
+
/** Complete Tokyo Night Storm preset; also the component's CSS fallback appearance. */
|
|
7
|
+
export const tokyoNightStorm = Object.freeze({ colorScheme: 'dark', variables: Object.freeze(stormVariables) });
|
|
8
|
+
/** Complete Tokyo Night Light preset, including the graph and native control appearance. */
|
|
9
|
+
export const tokyoNightLight = Object.freeze({ colorScheme: 'light', variables: Object.freeze(lightVariables) });
|
|
10
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAchE,uFAAuF;AACvF,MAAM,CAAC,MAAM,eAAe,GAAmB,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAEhI,4FAA4F;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAmB,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC","sourcesContent":["/** Pure theme data for CSS and JavaScript hosts; safe to import without a DOM.\n * @packageDocumentation\n */\nimport { stormVariables, lightVariables } from './themeDefinitions.ts';\n\nexport { visualThemes, visualMetrics } from './themePalette.ts';\nexport type { ThemeMode, VisualPalette } from './themePalette.ts';\n\n/** Public CSS custom properties. Missing values inherit from the host or use Storm defaults. */\nexport type InspectorThemeVariables = { readonly [Key in keyof typeof stormVariables]: string };\n\n/** A partial or complete theme; no name, registration, or base preset is required. */\nexport interface InspectorTheme {\n /** Browser appearance for native controls; mapped to `--zfgi-color-scheme`. Does not select a palette. */\n readonly colorScheme?: 'dark' | 'light';\n /** CSS values keyed by the documented `--zfgi-*` custom property names. */\n readonly variables?: Readonly<Partial<InspectorThemeVariables>>;\n}\n\n/** Complete Tokyo Night Storm preset; also the component's CSS fallback appearance. */\nexport const tokyoNightStorm: InspectorTheme = Object.freeze({ colorScheme: 'dark', variables: Object.freeze(stormVariables) });\n\n/** Complete Tokyo Night Light preset, including the graph and native control appearance. */\nexport const tokyoNightLight: InspectorTheme = Object.freeze({ colorScheme: 'light', variables: Object.freeze(lightVariables) });\n"]}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { type ThemeMode } from './themePalette.ts';
|
|
2
|
+
export declare const graphCategories: readonly ["render", "compute", "copy", "clear", "command", "external", "declaration", "output", "texture", "buffer"];
|
|
3
|
+
export declare function createThemeVariables(mode: ThemeMode): {
|
|
4
|
+
"--zfgi-graph-render-stroke": string;
|
|
5
|
+
"--zfgi-graph-render-fill": string;
|
|
6
|
+
"--zfgi-graph-compute-stroke": string;
|
|
7
|
+
"--zfgi-graph-compute-fill": string;
|
|
8
|
+
"--zfgi-graph-copy-stroke": string;
|
|
9
|
+
"--zfgi-graph-copy-fill": string;
|
|
10
|
+
"--zfgi-graph-clear-stroke": string;
|
|
11
|
+
"--zfgi-graph-clear-fill": string;
|
|
12
|
+
"--zfgi-graph-command-stroke": string;
|
|
13
|
+
"--zfgi-graph-command-fill": string;
|
|
14
|
+
"--zfgi-graph-external-stroke": string;
|
|
15
|
+
"--zfgi-graph-external-fill": string;
|
|
16
|
+
"--zfgi-graph-declaration-stroke": string;
|
|
17
|
+
"--zfgi-graph-declaration-fill": string;
|
|
18
|
+
"--zfgi-graph-output-stroke": string;
|
|
19
|
+
"--zfgi-graph-output-fill": string;
|
|
20
|
+
"--zfgi-graph-texture-stroke": string;
|
|
21
|
+
"--zfgi-graph-texture-fill": string;
|
|
22
|
+
"--zfgi-graph-buffer-stroke": string;
|
|
23
|
+
"--zfgi-graph-buffer-fill": string;
|
|
24
|
+
'--zfgi-canvas': string;
|
|
25
|
+
'--zfgi-background': string;
|
|
26
|
+
'--zfgi-surface': string;
|
|
27
|
+
'--zfgi-surface-raised': string;
|
|
28
|
+
'--zfgi-surface-hover': string;
|
|
29
|
+
'--zfgi-border': string;
|
|
30
|
+
'--zfgi-border-subtle': string;
|
|
31
|
+
'--zfgi-border-strong': string;
|
|
32
|
+
'--zfgi-text': string;
|
|
33
|
+
'--zfgi-text-secondary': string;
|
|
34
|
+
'--zfgi-muted': string;
|
|
35
|
+
'--zfgi-accent': string;
|
|
36
|
+
'--zfgi-accent-soft': string;
|
|
37
|
+
'--zfgi-accent-hover': string;
|
|
38
|
+
'--zfgi-success': string;
|
|
39
|
+
'--zfgi-warning': string;
|
|
40
|
+
'--zfgi-danger': string;
|
|
41
|
+
'--zfgi-shadow': string;
|
|
42
|
+
'--zfgi-backdrop': string;
|
|
43
|
+
'--zfgi-font-ui': "system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei\", sans-serif";
|
|
44
|
+
'--zfgi-font-mono': "ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", \"Microsoft YaHei\", monospace";
|
|
45
|
+
'--zfgi-font-size': string;
|
|
46
|
+
'--zfgi-font-size-small': string;
|
|
47
|
+
'--zfgi-control-height': string;
|
|
48
|
+
'--zfgi-row-height': string;
|
|
49
|
+
'--zfgi-radius-sm': string;
|
|
50
|
+
'--zfgi-radius-md': string;
|
|
51
|
+
'--zfgi-space-1': string;
|
|
52
|
+
'--zfgi-space-2': string;
|
|
53
|
+
'--zfgi-space-3': string;
|
|
54
|
+
'--zfgi-space-4': string;
|
|
55
|
+
'--zfgi-graph-tint': string;
|
|
56
|
+
'--zfgi-graph-text': string;
|
|
57
|
+
'--zfgi-graph-muted': string;
|
|
58
|
+
'--zfgi-graph-font-family': string;
|
|
59
|
+
'--zfgi-graph-font-size': string;
|
|
60
|
+
'--zfgi-graph-node-border-width': string;
|
|
61
|
+
'--zfgi-graph-group-border-width': string;
|
|
62
|
+
'--zfgi-graph-edge-width': string;
|
|
63
|
+
'--zfgi-graph-edge-opacity': string;
|
|
64
|
+
'--zfgi-graph-ordering-opacity': string;
|
|
65
|
+
'--zfgi-graph-group-opacity': string;
|
|
66
|
+
'--zfgi-graph-arrow-scale': string;
|
|
67
|
+
'--zfgi-graph-hover-width': string;
|
|
68
|
+
'--zfgi-graph-selected-width': string;
|
|
69
|
+
'--zfgi-graph-selected': string;
|
|
70
|
+
'--zfgi-graph-hover': string;
|
|
71
|
+
'--zfgi-graph-active-bg': string;
|
|
72
|
+
'--zfgi-graph-active-bg-opacity': string;
|
|
73
|
+
'--zfgi-graph-active-bg-size': string;
|
|
74
|
+
'--zfgi-graph-group-stroke': string;
|
|
75
|
+
'--zfgi-graph-group-fill': string;
|
|
76
|
+
'--zfgi-graph-group-alternate-fill': string;
|
|
77
|
+
'--zfgi-graph-value': string;
|
|
78
|
+
'--zfgi-graph-ordering': string;
|
|
79
|
+
'--zfgi-graph-read': string;
|
|
80
|
+
'--zfgi-graph-write': string;
|
|
81
|
+
'--zfgi-graph-culled-stroke': string;
|
|
82
|
+
'--zfgi-graph-culled-fill': string;
|
|
83
|
+
};
|
|
84
|
+
export declare const stormVariables: {
|
|
85
|
+
"--zfgi-graph-render-stroke": string;
|
|
86
|
+
"--zfgi-graph-render-fill": string;
|
|
87
|
+
"--zfgi-graph-compute-stroke": string;
|
|
88
|
+
"--zfgi-graph-compute-fill": string;
|
|
89
|
+
"--zfgi-graph-copy-stroke": string;
|
|
90
|
+
"--zfgi-graph-copy-fill": string;
|
|
91
|
+
"--zfgi-graph-clear-stroke": string;
|
|
92
|
+
"--zfgi-graph-clear-fill": string;
|
|
93
|
+
"--zfgi-graph-command-stroke": string;
|
|
94
|
+
"--zfgi-graph-command-fill": string;
|
|
95
|
+
"--zfgi-graph-external-stroke": string;
|
|
96
|
+
"--zfgi-graph-external-fill": string;
|
|
97
|
+
"--zfgi-graph-declaration-stroke": string;
|
|
98
|
+
"--zfgi-graph-declaration-fill": string;
|
|
99
|
+
"--zfgi-graph-output-stroke": string;
|
|
100
|
+
"--zfgi-graph-output-fill": string;
|
|
101
|
+
"--zfgi-graph-texture-stroke": string;
|
|
102
|
+
"--zfgi-graph-texture-fill": string;
|
|
103
|
+
"--zfgi-graph-buffer-stroke": string;
|
|
104
|
+
"--zfgi-graph-buffer-fill": string;
|
|
105
|
+
'--zfgi-canvas': string;
|
|
106
|
+
'--zfgi-background': string;
|
|
107
|
+
'--zfgi-surface': string;
|
|
108
|
+
'--zfgi-surface-raised': string;
|
|
109
|
+
'--zfgi-surface-hover': string;
|
|
110
|
+
'--zfgi-border': string;
|
|
111
|
+
'--zfgi-border-subtle': string;
|
|
112
|
+
'--zfgi-border-strong': string;
|
|
113
|
+
'--zfgi-text': string;
|
|
114
|
+
'--zfgi-text-secondary': string;
|
|
115
|
+
'--zfgi-muted': string;
|
|
116
|
+
'--zfgi-accent': string;
|
|
117
|
+
'--zfgi-accent-soft': string;
|
|
118
|
+
'--zfgi-accent-hover': string;
|
|
119
|
+
'--zfgi-success': string;
|
|
120
|
+
'--zfgi-warning': string;
|
|
121
|
+
'--zfgi-danger': string;
|
|
122
|
+
'--zfgi-shadow': string;
|
|
123
|
+
'--zfgi-backdrop': string;
|
|
124
|
+
'--zfgi-font-ui': "system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei\", sans-serif";
|
|
125
|
+
'--zfgi-font-mono': "ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", \"Microsoft YaHei\", monospace";
|
|
126
|
+
'--zfgi-font-size': string;
|
|
127
|
+
'--zfgi-font-size-small': string;
|
|
128
|
+
'--zfgi-control-height': string;
|
|
129
|
+
'--zfgi-row-height': string;
|
|
130
|
+
'--zfgi-radius-sm': string;
|
|
131
|
+
'--zfgi-radius-md': string;
|
|
132
|
+
'--zfgi-space-1': string;
|
|
133
|
+
'--zfgi-space-2': string;
|
|
134
|
+
'--zfgi-space-3': string;
|
|
135
|
+
'--zfgi-space-4': string;
|
|
136
|
+
'--zfgi-graph-tint': string;
|
|
137
|
+
'--zfgi-graph-text': string;
|
|
138
|
+
'--zfgi-graph-muted': string;
|
|
139
|
+
'--zfgi-graph-font-family': string;
|
|
140
|
+
'--zfgi-graph-font-size': string;
|
|
141
|
+
'--zfgi-graph-node-border-width': string;
|
|
142
|
+
'--zfgi-graph-group-border-width': string;
|
|
143
|
+
'--zfgi-graph-edge-width': string;
|
|
144
|
+
'--zfgi-graph-edge-opacity': string;
|
|
145
|
+
'--zfgi-graph-ordering-opacity': string;
|
|
146
|
+
'--zfgi-graph-group-opacity': string;
|
|
147
|
+
'--zfgi-graph-arrow-scale': string;
|
|
148
|
+
'--zfgi-graph-hover-width': string;
|
|
149
|
+
'--zfgi-graph-selected-width': string;
|
|
150
|
+
'--zfgi-graph-selected': string;
|
|
151
|
+
'--zfgi-graph-hover': string;
|
|
152
|
+
'--zfgi-graph-active-bg': string;
|
|
153
|
+
'--zfgi-graph-active-bg-opacity': string;
|
|
154
|
+
'--zfgi-graph-active-bg-size': string;
|
|
155
|
+
'--zfgi-graph-group-stroke': string;
|
|
156
|
+
'--zfgi-graph-group-fill': string;
|
|
157
|
+
'--zfgi-graph-group-alternate-fill': string;
|
|
158
|
+
'--zfgi-graph-value': string;
|
|
159
|
+
'--zfgi-graph-ordering': string;
|
|
160
|
+
'--zfgi-graph-read': string;
|
|
161
|
+
'--zfgi-graph-write': string;
|
|
162
|
+
'--zfgi-graph-culled-stroke': string;
|
|
163
|
+
'--zfgi-graph-culled-fill': string;
|
|
164
|
+
};
|
|
165
|
+
export declare const lightVariables: {
|
|
166
|
+
"--zfgi-graph-render-stroke": string;
|
|
167
|
+
"--zfgi-graph-render-fill": string;
|
|
168
|
+
"--zfgi-graph-compute-stroke": string;
|
|
169
|
+
"--zfgi-graph-compute-fill": string;
|
|
170
|
+
"--zfgi-graph-copy-stroke": string;
|
|
171
|
+
"--zfgi-graph-copy-fill": string;
|
|
172
|
+
"--zfgi-graph-clear-stroke": string;
|
|
173
|
+
"--zfgi-graph-clear-fill": string;
|
|
174
|
+
"--zfgi-graph-command-stroke": string;
|
|
175
|
+
"--zfgi-graph-command-fill": string;
|
|
176
|
+
"--zfgi-graph-external-stroke": string;
|
|
177
|
+
"--zfgi-graph-external-fill": string;
|
|
178
|
+
"--zfgi-graph-declaration-stroke": string;
|
|
179
|
+
"--zfgi-graph-declaration-fill": string;
|
|
180
|
+
"--zfgi-graph-output-stroke": string;
|
|
181
|
+
"--zfgi-graph-output-fill": string;
|
|
182
|
+
"--zfgi-graph-texture-stroke": string;
|
|
183
|
+
"--zfgi-graph-texture-fill": string;
|
|
184
|
+
"--zfgi-graph-buffer-stroke": string;
|
|
185
|
+
"--zfgi-graph-buffer-fill": string;
|
|
186
|
+
'--zfgi-canvas': string;
|
|
187
|
+
'--zfgi-background': string;
|
|
188
|
+
'--zfgi-surface': string;
|
|
189
|
+
'--zfgi-surface-raised': string;
|
|
190
|
+
'--zfgi-surface-hover': string;
|
|
191
|
+
'--zfgi-border': string;
|
|
192
|
+
'--zfgi-border-subtle': string;
|
|
193
|
+
'--zfgi-border-strong': string;
|
|
194
|
+
'--zfgi-text': string;
|
|
195
|
+
'--zfgi-text-secondary': string;
|
|
196
|
+
'--zfgi-muted': string;
|
|
197
|
+
'--zfgi-accent': string;
|
|
198
|
+
'--zfgi-accent-soft': string;
|
|
199
|
+
'--zfgi-accent-hover': string;
|
|
200
|
+
'--zfgi-success': string;
|
|
201
|
+
'--zfgi-warning': string;
|
|
202
|
+
'--zfgi-danger': string;
|
|
203
|
+
'--zfgi-shadow': string;
|
|
204
|
+
'--zfgi-backdrop': string;
|
|
205
|
+
'--zfgi-font-ui': "system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei\", sans-serif";
|
|
206
|
+
'--zfgi-font-mono': "ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", \"Microsoft YaHei\", monospace";
|
|
207
|
+
'--zfgi-font-size': string;
|
|
208
|
+
'--zfgi-font-size-small': string;
|
|
209
|
+
'--zfgi-control-height': string;
|
|
210
|
+
'--zfgi-row-height': string;
|
|
211
|
+
'--zfgi-radius-sm': string;
|
|
212
|
+
'--zfgi-radius-md': string;
|
|
213
|
+
'--zfgi-space-1': string;
|
|
214
|
+
'--zfgi-space-2': string;
|
|
215
|
+
'--zfgi-space-3': string;
|
|
216
|
+
'--zfgi-space-4': string;
|
|
217
|
+
'--zfgi-graph-tint': string;
|
|
218
|
+
'--zfgi-graph-text': string;
|
|
219
|
+
'--zfgi-graph-muted': string;
|
|
220
|
+
'--zfgi-graph-font-family': string;
|
|
221
|
+
'--zfgi-graph-font-size': string;
|
|
222
|
+
'--zfgi-graph-node-border-width': string;
|
|
223
|
+
'--zfgi-graph-group-border-width': string;
|
|
224
|
+
'--zfgi-graph-edge-width': string;
|
|
225
|
+
'--zfgi-graph-edge-opacity': string;
|
|
226
|
+
'--zfgi-graph-ordering-opacity': string;
|
|
227
|
+
'--zfgi-graph-group-opacity': string;
|
|
228
|
+
'--zfgi-graph-arrow-scale': string;
|
|
229
|
+
'--zfgi-graph-hover-width': string;
|
|
230
|
+
'--zfgi-graph-selected-width': string;
|
|
231
|
+
'--zfgi-graph-selected': string;
|
|
232
|
+
'--zfgi-graph-hover': string;
|
|
233
|
+
'--zfgi-graph-active-bg': string;
|
|
234
|
+
'--zfgi-graph-active-bg-opacity': string;
|
|
235
|
+
'--zfgi-graph-active-bg-size': string;
|
|
236
|
+
'--zfgi-graph-group-stroke': string;
|
|
237
|
+
'--zfgi-graph-group-fill': string;
|
|
238
|
+
'--zfgi-graph-group-alternate-fill': string;
|
|
239
|
+
'--zfgi-graph-value': string;
|
|
240
|
+
'--zfgi-graph-ordering': string;
|
|
241
|
+
'--zfgi-graph-read': string;
|
|
242
|
+
'--zfgi-graph-write': string;
|
|
243
|
+
'--zfgi-graph-culled-stroke': string;
|
|
244
|
+
'--zfgi-graph-culled-fill': string;
|
|
245
|
+
};
|
|
246
|
+
export declare const legacyThemeAliases: Record<string, string>;
|
|
247
|
+
export declare function internalThemeProperty(property: string): string;
|
|
248
|
+
export declare function themeFallback(property: string, value: string): string;
|
|
249
|
+
export declare const themeDefaultsCss: string;
|
|
250
|
+
export declare function themePresetCss(): string;
|
|
251
|
+
//# sourceMappingURL=themeDefinitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeDefinitions.d.ts","sourceRoot":"","sources":["../src/themeDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEhF,eAAO,MAAM,eAAe,sHAAuH,CAAC;AAEpJ,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEnD;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAC3D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgC,CAAC;AAG5D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIS,CAAC;AAEhE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED,eAAO,MAAM,gBAAgB,QACuF,CAAC;AAErH,wBAAgB,cAAc,IAAI,MAAM,CAIvC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { visualThemes, visualMetrics } from "./themePalette.js";
|
|
2
|
+
export const graphCategories = ['render', 'compute', 'copy', 'clear', 'command', 'external', 'declaration', 'output', 'texture', 'buffer'];
|
|
3
|
+
export function createThemeVariables(mode) {
|
|
4
|
+
const p = visualThemes[mode];
|
|
5
|
+
const dark = mode === 'dark';
|
|
6
|
+
const tint = dark ? '18%' : '8%';
|
|
7
|
+
const categoryVariables = Object.fromEntries(graphCategories.flatMap(kind => [
|
|
8
|
+
[`--zfgi-graph-${kind}-stroke`, p[kind]],
|
|
9
|
+
[`--zfgi-graph-${kind}-fill`, `color-mix(in srgb, var(--zfgi-graph-${kind}-stroke, ${p[kind]}) var(--zfgi-graph-tint, ${tint}), var(--zfgi-canvas, ${p.canvas}))`],
|
|
10
|
+
]));
|
|
11
|
+
return {
|
|
12
|
+
'--zfgi-canvas': p.canvas,
|
|
13
|
+
'--zfgi-background': p.panel,
|
|
14
|
+
'--zfgi-surface': p.inset,
|
|
15
|
+
'--zfgi-surface-raised': p.panel,
|
|
16
|
+
'--zfgi-surface-hover': p.hover,
|
|
17
|
+
'--zfgi-border': p.border,
|
|
18
|
+
'--zfgi-border-subtle': p.divider,
|
|
19
|
+
'--zfgi-border-strong': p.border,
|
|
20
|
+
'--zfgi-text': p.text,
|
|
21
|
+
'--zfgi-text-secondary': p.secondary,
|
|
22
|
+
'--zfgi-muted': p.muted,
|
|
23
|
+
'--zfgi-accent': p.accent,
|
|
24
|
+
'--zfgi-accent-soft': p.accentSoft,
|
|
25
|
+
'--zfgi-accent-hover': p.hover,
|
|
26
|
+
'--zfgi-success': p.success,
|
|
27
|
+
'--zfgi-warning': p.warning,
|
|
28
|
+
'--zfgi-danger': p.danger,
|
|
29
|
+
'--zfgi-shadow': dark ? '0 8px 24px #0006' : '0 8px 24px #343b5826',
|
|
30
|
+
'--zfgi-backdrop': dark ? '#13172899' : '#343b5840',
|
|
31
|
+
'--zfgi-font-ui': visualMetrics.fontUi,
|
|
32
|
+
'--zfgi-font-mono': visualMetrics.fontMono,
|
|
33
|
+
'--zfgi-font-size': '13px',
|
|
34
|
+
'--zfgi-font-size-small': '12px',
|
|
35
|
+
'--zfgi-control-height': '32px',
|
|
36
|
+
'--zfgi-row-height': '36px',
|
|
37
|
+
'--zfgi-radius-sm': '6px',
|
|
38
|
+
'--zfgi-radius-md': '10px',
|
|
39
|
+
'--zfgi-space-1': '4px',
|
|
40
|
+
'--zfgi-space-2': '8px',
|
|
41
|
+
'--zfgi-space-3': '12px',
|
|
42
|
+
'--zfgi-space-4': '16px',
|
|
43
|
+
'--zfgi-graph-tint': tint,
|
|
44
|
+
'--zfgi-graph-text': dark ? '#d5ddff' : p.text,
|
|
45
|
+
'--zfgi-graph-muted': p.muted,
|
|
46
|
+
'--zfgi-graph-font-family': `var(--zfgi-font-mono, ${visualMetrics.fontMono})`,
|
|
47
|
+
'--zfgi-graph-font-size': '13px',
|
|
48
|
+
'--zfgi-graph-node-border-width': '1.25px',
|
|
49
|
+
'--zfgi-graph-group-border-width': '1.5px',
|
|
50
|
+
'--zfgi-graph-edge-width': '1.5px',
|
|
51
|
+
'--zfgi-graph-edge-opacity': '1',
|
|
52
|
+
'--zfgi-graph-ordering-opacity': '1',
|
|
53
|
+
'--zfgi-graph-group-opacity': '1',
|
|
54
|
+
'--zfgi-graph-arrow-scale': '0.8',
|
|
55
|
+
'--zfgi-graph-hover-width': '2.5px',
|
|
56
|
+
'--zfgi-graph-selected-width': '3px',
|
|
57
|
+
'--zfgi-graph-selected': `var(--zfgi-accent, ${p.accent})`,
|
|
58
|
+
'--zfgi-graph-hover': dark ? '#d5ddff' : '#343b58',
|
|
59
|
+
'--zfgi-graph-active-bg': `var(--zfgi-graph-text, ${dark ? '#d5ddff' : p.text})`,
|
|
60
|
+
'--zfgi-graph-active-bg-opacity': '0.08',
|
|
61
|
+
'--zfgi-graph-active-bg-size': '12px',
|
|
62
|
+
'--zfgi-graph-group-stroke': p.group,
|
|
63
|
+
'--zfgi-graph-group-fill': dark ? '#292e42' : '#eceef5',
|
|
64
|
+
'--zfgi-graph-group-alternate-fill': dark ? '#30364b' : '#e5e9f3',
|
|
65
|
+
'--zfgi-graph-value': p.edge,
|
|
66
|
+
'--zfgi-graph-ordering': p.edge,
|
|
67
|
+
'--zfgi-graph-read': p.buffer,
|
|
68
|
+
'--zfgi-graph-write': p.warning,
|
|
69
|
+
'--zfgi-graph-culled-stroke': p.muted,
|
|
70
|
+
'--zfgi-graph-culled-fill': p.inset,
|
|
71
|
+
...categoryVariables,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export const stormVariables = createThemeVariables('dark');
|
|
75
|
+
export const lightVariables = createThemeVariables('light');
|
|
76
|
+
// Existing public aliases only. Internal layout variables are deliberately excluded.
|
|
77
|
+
export const legacyThemeAliases = Object.fromEntries([
|
|
78
|
+
'background', 'surface', 'surface-raised', 'surface-hover', 'border', 'border-subtle',
|
|
79
|
+
'border-strong', 'text', 'text-secondary', 'muted', 'accent', 'accent-soft', 'accent-hover',
|
|
80
|
+
'success', 'warning', 'danger', 'font-ui', 'font-mono', 'radius-sm', 'radius-md',
|
|
81
|
+
].map(name => [`--zfgi-${name}`, `--zenfg-inspector-${name}`]));
|
|
82
|
+
export function internalThemeProperty(property) {
|
|
83
|
+
return property === '--zfgi-background' ? '--fgd-panel' : property.replace('--zfgi-', '--fgd-');
|
|
84
|
+
}
|
|
85
|
+
export function themeFallback(property, value) {
|
|
86
|
+
const legacy = legacyThemeAliases[property];
|
|
87
|
+
return `var(${property}, ${legacy ? `var(${legacy}, ${value})` : value})`;
|
|
88
|
+
}
|
|
89
|
+
export const themeDefaultsCss = Object.entries(stormVariables)
|
|
90
|
+
.map(([property, value]) => `${internalThemeProperty(property)}: ${themeFallback(property, value)};`).join('\n');
|
|
91
|
+
export function themePresetCss() {
|
|
92
|
+
return '/* Generated from Inspector theme definitions. */\n' + [
|
|
93
|
+
['tokyo-night-storm', 'dark', stormVariables], ['tokyo-night-light', 'light', lightVariables],
|
|
94
|
+
].map(([name, scheme, variables]) => `[data-zfgi-theme="${name}"] {\n --zfgi-color-scheme: ${scheme};\n${Object.entries(variables).map(([key, value]) => ` ${key}: ${value};`).join('\n')}\n}`).join('\n');
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=themeDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeDefinitions.js","sourceRoot":"","sources":["../src/themeDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,MAAM,mBAAmB,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAEpJ,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAChD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC,gBAAgB,IAAI,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,gBAAgB,IAAI,OAAO,EAAE,uCAAuC,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,4BAA4B,IAAI,yBAAyB,CAAC,CAAC,MAAM,IAAI,CAAC;KACrK,CAAC,CAA0F,CAAC;IAC7F,OAAO;QACH,eAAe,EAAE,CAAC,CAAC,MAAM;QACzB,mBAAmB,EAAE,CAAC,CAAC,KAAK;QAC5B,gBAAgB,EAAE,CAAC,CAAC,KAAK;QACzB,uBAAuB,EAAE,CAAC,CAAC,KAAK;QAChC,sBAAsB,EAAE,CAAC,CAAC,KAAK;QAC/B,eAAe,EAAE,CAAC,CAAC,MAAM;QACzB,sBAAsB,EAAE,CAAC,CAAC,OAAO;QACjC,sBAAsB,EAAE,CAAC,CAAC,MAAM;QAChC,aAAa,EAAE,CAAC,CAAC,IAAI;QACrB,uBAAuB,EAAE,CAAC,CAAC,SAAS;QACpC,cAAc,EAAE,CAAC,CAAC,KAAK;QACvB,eAAe,EAAE,CAAC,CAAC,MAAM;QACzB,oBAAoB,EAAE,CAAC,CAAC,UAAU;QAClC,qBAAqB,EAAE,CAAC,CAAC,KAAK;QAC9B,gBAAgB,EAAE,CAAC,CAAC,OAAO;QAC3B,gBAAgB,EAAE,CAAC,CAAC,OAAO;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM;QACzB,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB;QACnE,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;QACnD,gBAAgB,EAAE,aAAa,CAAC,MAAM;QACtC,kBAAkB,EAAE,aAAa,CAAC,QAAQ;QAC1C,kBAAkB,EAAE,MAAM;QAC1B,wBAAwB,EAAE,MAAM;QAChC,uBAAuB,EAAE,MAAM;QAC/B,mBAAmB,EAAE,MAAM;QAC3B,kBAAkB,EAAE,KAAK;QACzB,kBAAkB,EAAE,MAAM;QAC1B,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,MAAM;QACxB,gBAAgB,EAAE,MAAM;QACxB,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C,oBAAoB,EAAE,CAAC,CAAC,KAAK;QAC7B,0BAA0B,EAAE,yBAAyB,aAAa,CAAC,QAAQ,GAAG;QAC9E,wBAAwB,EAAE,MAAM;QAChC,gCAAgC,EAAE,QAAQ;QAC1C,iCAAiC,EAAE,OAAO;QAC1C,yBAAyB,EAAE,OAAO;QAClC,2BAA2B,EAAE,GAAG;QAChC,+BAA+B,EAAE,GAAG;QACpC,4BAA4B,EAAE,GAAG;QACjC,0BAA0B,EAAE,KAAK;QACjC,0BAA0B,EAAE,OAAO;QACnC,6BAA6B,EAAE,KAAK;QACpC,uBAAuB,EAAE,sBAAsB,CAAC,CAAC,MAAM,GAAG;QAC1D,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAClD,wBAAwB,EAAE,0BAA0B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QAChF,gCAAgC,EAAE,MAAM;QACxC,6BAA6B,EAAE,MAAM;QACrC,2BAA2B,EAAE,CAAC,CAAC,KAAK;QACpC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACvD,mCAAmC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACjE,oBAAoB,EAAE,CAAC,CAAC,IAAI;QAC5B,uBAAuB,EAAE,CAAC,CAAC,IAAI;QAC/B,mBAAmB,EAAE,CAAC,CAAC,MAAM;QAC7B,oBAAoB,EAAE,CAAC,CAAC,OAAO;QAC/B,4BAA4B,EAAE,CAAC,CAAC,KAAK;QACrC,0BAA0B,EAAE,CAAC,CAAC,KAAK;QACnC,GAAG,iBAAiB;KACvB,CAAC;AACN,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE5D,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAA2B,MAAM,CAAC,WAAW,CAAC;IACzE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe;IACrF,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc;IAC3F,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;CACnF,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IAClD,OAAO,QAAQ,KAAK,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAa;IACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;KACzD,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAErH,MAAM,UAAU,cAAc;IAC1B,OAAO,qDAAqD,GAAI;QAC5D,CAAC,mBAAmB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,EAAE,cAAc,CAAC;KACtF,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,qBAAqB,IAAI,gCAAgC,MAAM,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3N,CAAC","sourcesContent":["import { visualThemes, visualMetrics, type ThemeMode } from './themePalette.ts';\n\nexport const graphCategories = ['render', 'compute', 'copy', 'clear', 'command', 'external', 'declaration', 'output', 'texture', 'buffer'] as const;\n\nexport function createThemeVariables(mode: ThemeMode) {\n const p = visualThemes[mode];\n const dark = mode === 'dark';\n const tint = dark ? '18%' : '8%';\n const categoryVariables = Object.fromEntries(graphCategories.flatMap(kind => [\n [`--zfgi-graph-${kind}-stroke`, p[kind]],\n [`--zfgi-graph-${kind}-fill`, `color-mix(in srgb, var(--zfgi-graph-${kind}-stroke, ${p[kind]}) var(--zfgi-graph-tint, ${tint}), var(--zfgi-canvas, ${p.canvas}))`],\n ])) as Record<`--zfgi-graph-${typeof graphCategories[number]}-${'stroke' | 'fill'}`, string>;\n return {\n '--zfgi-canvas': p.canvas,\n '--zfgi-background': p.panel,\n '--zfgi-surface': p.inset,\n '--zfgi-surface-raised': p.panel,\n '--zfgi-surface-hover': p.hover,\n '--zfgi-border': p.border,\n '--zfgi-border-subtle': p.divider,\n '--zfgi-border-strong': p.border,\n '--zfgi-text': p.text,\n '--zfgi-text-secondary': p.secondary,\n '--zfgi-muted': p.muted,\n '--zfgi-accent': p.accent,\n '--zfgi-accent-soft': p.accentSoft,\n '--zfgi-accent-hover': p.hover,\n '--zfgi-success': p.success,\n '--zfgi-warning': p.warning,\n '--zfgi-danger': p.danger,\n '--zfgi-shadow': dark ? '0 8px 24px #0006' : '0 8px 24px #343b5826',\n '--zfgi-backdrop': dark ? '#13172899' : '#343b5840',\n '--zfgi-font-ui': visualMetrics.fontUi,\n '--zfgi-font-mono': visualMetrics.fontMono,\n '--zfgi-font-size': '13px',\n '--zfgi-font-size-small': '12px',\n '--zfgi-control-height': '32px',\n '--zfgi-row-height': '36px',\n '--zfgi-radius-sm': '6px',\n '--zfgi-radius-md': '10px',\n '--zfgi-space-1': '4px',\n '--zfgi-space-2': '8px',\n '--zfgi-space-3': '12px',\n '--zfgi-space-4': '16px',\n '--zfgi-graph-tint': tint,\n '--zfgi-graph-text': dark ? '#d5ddff' : p.text,\n '--zfgi-graph-muted': p.muted,\n '--zfgi-graph-font-family': `var(--zfgi-font-mono, ${visualMetrics.fontMono})`,\n '--zfgi-graph-font-size': '13px',\n '--zfgi-graph-node-border-width': '1.25px',\n '--zfgi-graph-group-border-width': '1.5px',\n '--zfgi-graph-edge-width': '1.5px',\n '--zfgi-graph-edge-opacity': '1',\n '--zfgi-graph-ordering-opacity': '1',\n '--zfgi-graph-group-opacity': '1',\n '--zfgi-graph-arrow-scale': '0.8',\n '--zfgi-graph-hover-width': '2.5px',\n '--zfgi-graph-selected-width': '3px',\n '--zfgi-graph-selected': `var(--zfgi-accent, ${p.accent})`,\n '--zfgi-graph-hover': dark ? '#d5ddff' : '#343b58',\n '--zfgi-graph-active-bg': `var(--zfgi-graph-text, ${dark ? '#d5ddff' : p.text})`,\n '--zfgi-graph-active-bg-opacity': '0.08',\n '--zfgi-graph-active-bg-size': '12px',\n '--zfgi-graph-group-stroke': p.group,\n '--zfgi-graph-group-fill': dark ? '#292e42' : '#eceef5',\n '--zfgi-graph-group-alternate-fill': dark ? '#30364b' : '#e5e9f3',\n '--zfgi-graph-value': p.edge,\n '--zfgi-graph-ordering': p.edge,\n '--zfgi-graph-read': p.buffer,\n '--zfgi-graph-write': p.warning,\n '--zfgi-graph-culled-stroke': p.muted,\n '--zfgi-graph-culled-fill': p.inset,\n ...categoryVariables,\n };\n}\n\nexport const stormVariables = createThemeVariables('dark');\nexport const lightVariables = createThemeVariables('light');\n\n// Existing public aliases only. Internal layout variables are deliberately excluded.\nexport const legacyThemeAliases: Record<string, string> = Object.fromEntries([\n 'background', 'surface', 'surface-raised', 'surface-hover', 'border', 'border-subtle',\n 'border-strong', 'text', 'text-secondary', 'muted', 'accent', 'accent-soft', 'accent-hover',\n 'success', 'warning', 'danger', 'font-ui', 'font-mono', 'radius-sm', 'radius-md',\n].map(name => [`--zfgi-${name}`, `--zenfg-inspector-${name}`]));\n\nexport function internalThemeProperty(property: string): string {\n return property === '--zfgi-background' ? '--fgd-panel' : property.replace('--zfgi-', '--fgd-');\n}\n\nexport function themeFallback(property: string, value: string): string {\n const legacy = legacyThemeAliases[property];\n return `var(${property}, ${legacy ? `var(${legacy}, ${value})` : value})`;\n}\n\nexport const themeDefaultsCss = Object.entries(stormVariables)\n .map(([property, value]) => `${internalThemeProperty(property)}: ${themeFallback(property, value)};`).join('\\n');\n\nexport function themePresetCss(): string {\n return '/* Generated from Inspector theme definitions. */\\n' + ([\n ['tokyo-night-storm', 'dark', stormVariables], ['tokyo-night-light', 'light', lightVariables],\n ] as const).map(([name, scheme, variables]) => `[data-zfgi-theme=\"${name}\"] {\\n --zfgi-color-scheme: ${scheme};\\n${Object.entries(variables).map(([key, value]) => ` ${key}: ${value};`).join('\\n')}\\n}`).join('\\n');\n}\n"]}
|