@webda/debug 4.0.0-beta.5 → 4.0.0-beta.7
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/README.md +5 -6
- package/lib/debugservice.service.d.ts +134 -23
- package/lib/debugservice.service.js +417 -73
- package/lib/debugservice.service.js.map +1 -1
- package/lib/introspection.d.ts +17 -0
- package/lib/introspection.js +52 -6
- package/lib/introspection.js.map +1 -1
- package/lib/security.d.ts +155 -0
- package/lib/security.js +217 -0
- package/lib/security.js.map +1 -0
- package/lib/tui/client.d.ts +4 -1
- package/lib/tui/client.js +10 -3
- package/lib/tui/client.js.map +1 -1
- package/lib/tui/tui.d.ts +2 -1
- package/lib/tui/tui.js +6 -3
- package/lib/tui/tui.js.map +1 -1
- package/package.json +13 -8
- package/webda.module.json +129 -0
- package/webui/assets/favicon-CVPPk1M-.svg +1 -0
- package/webui/assets/index-BHmmE2oC.css +1 -0
- package/webui/assets/index-RYFIlyiZ.js +51 -0
- package/webui/index.html +13 -20
- package/webui/app.js +0 -177
- package/webui/components/logs.js +0 -128
- package/webui/components/model-graph.js +0 -292
- package/webui/components/models.js +0 -213
- package/webui/components/operations.js +0 -315
- package/webui/components/requests.js +0 -264
- package/webui/components/schema-form.js +0 -268
- package/webui/components/services.js +0 -248
- package/webui/logo.svg +0 -1
- package/webui/styles.css +0 -685
- package/webui/vendor/htm.js +0 -1
- package/webui/vendor/preact-hooks.js +0 -2
- package/webui/vendor/preact.js +0 -2
- package/webui/webda.png +0 -0
package/lib/tui/client.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export type WsEventCallback = (event: WsEvent) => void;
|
|
|
39
39
|
export declare class DebugClient {
|
|
40
40
|
/** Base URL for HTTP requests (no trailing slash) */
|
|
41
41
|
private baseUrl;
|
|
42
|
+
/** Session token sent on every request */
|
|
43
|
+
private token?;
|
|
42
44
|
/** Active WebSocket connection */
|
|
43
45
|
private ws?;
|
|
44
46
|
/** Whether the client should try to reconnect */
|
|
@@ -57,8 +59,9 @@ export declare class DebugClient {
|
|
|
57
59
|
* Creates a new DebugClient.
|
|
58
60
|
*
|
|
59
61
|
* @param baseUrl - Base URL of the debug server, e.g. "http://localhost:18181"
|
|
62
|
+
* @param token - Session token printed by `webda debug` (required by the server)
|
|
60
63
|
*/
|
|
61
|
-
constructor(baseUrl?: string);
|
|
64
|
+
constructor(baseUrl?: string, token?: string);
|
|
62
65
|
/**
|
|
63
66
|
* Whether the WebSocket is currently connected.
|
|
64
67
|
* @returns true if the WebSocket connection is open
|
package/lib/tui/client.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WebSocket } from "ws";
|
|
2
|
+
import { WS_PROTOCOL, WS_TOKEN_PREFIX } from "../security.js";
|
|
2
3
|
/**
|
|
3
4
|
* HTTP + WebSocket client for the debug server API.
|
|
4
5
|
*
|
|
@@ -11,8 +12,9 @@ export class DebugClient {
|
|
|
11
12
|
* Creates a new DebugClient.
|
|
12
13
|
*
|
|
13
14
|
* @param baseUrl - Base URL of the debug server, e.g. "http://localhost:18181"
|
|
15
|
+
* @param token - Session token printed by `webda debug` (required by the server)
|
|
14
16
|
*/
|
|
15
|
-
constructor(baseUrl = "http://localhost:18181") {
|
|
17
|
+
constructor(baseUrl = "http://localhost:18181", token) {
|
|
16
18
|
/** Whether the client should try to reconnect */
|
|
17
19
|
this.shouldReconnect = false;
|
|
18
20
|
/** Current reconnect delay in ms */
|
|
@@ -24,6 +26,7 @@ export class DebugClient {
|
|
|
24
26
|
/** Connection status */
|
|
25
27
|
this._connected = false;
|
|
26
28
|
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
29
|
+
this.token = token;
|
|
27
30
|
}
|
|
28
31
|
/**
|
|
29
32
|
* Whether the WebSocket is currently connected.
|
|
@@ -39,7 +42,10 @@ export class DebugClient {
|
|
|
39
42
|
* @returns Parsed JSON response
|
|
40
43
|
*/
|
|
41
44
|
async fetchJson(path) {
|
|
42
|
-
const
|
|
45
|
+
const headers = {};
|
|
46
|
+
if (this.token)
|
|
47
|
+
headers.Authorization = `Bearer ${this.token}`;
|
|
48
|
+
const res = await fetch(`${this.baseUrl}${path}`, { headers });
|
|
43
49
|
if (!res.ok) {
|
|
44
50
|
throw new Error(`HTTP ${res.status}: ${res.statusText}`);
|
|
45
51
|
}
|
|
@@ -159,8 +165,9 @@ export class DebugClient {
|
|
|
159
165
|
*/
|
|
160
166
|
doConnect() {
|
|
161
167
|
const wsUrl = this.baseUrl.replace(/^http/, "ws") + "/ws";
|
|
168
|
+
const protocols = this.token ? [WS_PROTOCOL, `${WS_TOKEN_PREFIX}${this.token}`] : [WS_PROTOCOL];
|
|
162
169
|
try {
|
|
163
|
-
this.ws = new WebSocket(wsUrl);
|
|
170
|
+
this.ws = new WebSocket(wsUrl, protocols);
|
|
164
171
|
}
|
|
165
172
|
catch {
|
|
166
173
|
this.scheduleReconnect();
|
package/lib/tui/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tui/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tui/client.ts"],"names":[],"mappings":"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"}
|
package/lib/tui/tui.d.ts
CHANGED
|
@@ -21,8 +21,9 @@ export declare class DebugTui {
|
|
|
21
21
|
* Create a new TUI instance.
|
|
22
22
|
*
|
|
23
23
|
* @param port - Port of the debug server to connect to
|
|
24
|
+
* @param token - Session token of the debug server
|
|
24
25
|
*/
|
|
25
|
-
constructor(port?: number);
|
|
26
|
+
constructor(port?: number, token?: string);
|
|
26
27
|
/**
|
|
27
28
|
* Start the TUI: initialize terminal, load data, and begin rendering.
|
|
28
29
|
*/
|
package/lib/tui/tui.js
CHANGED
|
@@ -18,14 +18,15 @@ export class DebugTui {
|
|
|
18
18
|
* Create a new TUI instance.
|
|
19
19
|
*
|
|
20
20
|
* @param port - Port of the debug server to connect to
|
|
21
|
+
* @param token - Session token of the debug server
|
|
21
22
|
*/
|
|
22
|
-
constructor(port = 18181) {
|
|
23
|
+
constructor(port = 18181, token) {
|
|
23
24
|
this.panels = [];
|
|
24
25
|
this.activeTab = 0;
|
|
25
26
|
this.running = false;
|
|
26
27
|
this.lastRefresh = "";
|
|
27
28
|
this.appInfo = null;
|
|
28
|
-
this.client = new DebugClient(`http://
|
|
29
|
+
this.client = new DebugClient(`http://127.0.0.1:${port}`, token);
|
|
29
30
|
this.logsPanel = new LogsPanel(this.client);
|
|
30
31
|
this.panels = [
|
|
31
32
|
this.logsPanel,
|
|
@@ -79,7 +80,9 @@ export class DebugTui {
|
|
|
79
80
|
":" +
|
|
80
81
|
String(now.getSeconds()).padStart(2, "0");
|
|
81
82
|
const refreshPromises = this.panels.map(p => (p.refresh ? p.refresh() : Promise.resolve()));
|
|
82
|
-
refreshPromises.push(this.client.getAppInfo().then(info => {
|
|
83
|
+
refreshPromises.push(this.client.getAppInfo().then(info => {
|
|
84
|
+
this.appInfo = info;
|
|
85
|
+
}));
|
|
83
86
|
await Promise.allSettled(refreshPromises);
|
|
84
87
|
if (this.running)
|
|
85
88
|
this.render();
|
package/lib/tui/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/tui/tui.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,OAAO,QAAQ;IAanB
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/tui/tui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/debug",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.7",
|
|
4
4
|
"description": "Development debug server for Webda applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"webda",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"terminal-kit": "^3.1.2",
|
|
19
19
|
"ws": "^8.18.0",
|
|
20
|
-
"@webda/utils": "4.0.0-beta.
|
|
20
|
+
"@webda/utils": "4.0.0-beta.7",
|
|
21
21
|
"@webda/workout": "4.0.0-beta.5"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
@@ -28,16 +28,20 @@
|
|
|
28
28
|
"@types/ws": "^8.5.13",
|
|
29
29
|
"@vitest/coverage-v8": "^4.1.2",
|
|
30
30
|
"jscodeshift": "^17.3.0",
|
|
31
|
+
"react": "^19.2.4",
|
|
32
|
+
"react-dom": "^19.2.4",
|
|
31
33
|
"typescript": "7.1.0-dev.20260929.1",
|
|
32
34
|
"vite": "^6.0.0",
|
|
33
35
|
"vitest": "^4.1.2",
|
|
34
|
-
"@webda/
|
|
35
|
-
"@webda/
|
|
36
|
-
"@webda/
|
|
36
|
+
"@webda/core": "^4.0.0-beta.7",
|
|
37
|
+
"@webda/debug-ui": "0.0.0",
|
|
38
|
+
"@webda/compiler": "^4.0.0-beta.7",
|
|
39
|
+
"@webda/test": "4.0.0-beta.6"
|
|
37
40
|
},
|
|
38
41
|
"files": [
|
|
39
42
|
"lib",
|
|
40
|
-
"webui"
|
|
43
|
+
"webui",
|
|
44
|
+
"webda.module.json"
|
|
41
45
|
],
|
|
42
46
|
"homepage": "https://webda.io",
|
|
43
47
|
"publishConfig": {
|
|
@@ -49,7 +53,7 @@
|
|
|
49
53
|
},
|
|
50
54
|
"license": "LGPL-3.0-only",
|
|
51
55
|
"scripts": {
|
|
52
|
-
"build": "webdac build",
|
|
56
|
+
"build": "webdac build && vite build --config vite.webui.config.ts",
|
|
53
57
|
"build:watch": "webdac build --watch",
|
|
54
58
|
"pretest": "npm run build",
|
|
55
59
|
"format": "prettier --check src/**/*",
|
|
@@ -59,6 +63,7 @@
|
|
|
59
63
|
"test": "vitest run",
|
|
60
64
|
"test:watch": "vitest",
|
|
61
65
|
"test:debug": "vitest debug",
|
|
62
|
-
"test:coverage": "vitest run --coverage"
|
|
66
|
+
"test:coverage": "vitest run --coverage",
|
|
67
|
+
"build:webui": "vite build --config vite.webui.config.ts"
|
|
63
68
|
}
|
|
64
69
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://webda.io/schemas/webda.module.v4.json",
|
|
3
|
+
"beans": {},
|
|
4
|
+
"deployers": {},
|
|
5
|
+
"moddas": {
|
|
6
|
+
"Webda/DebugService": {
|
|
7
|
+
"Import": "lib/debugservice.service:DebugService",
|
|
8
|
+
"Schema": {
|
|
9
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
10
|
+
"additionalProperties": false,
|
|
11
|
+
"description": "Configuration parameters for the {@link DebugService}.\n\nAll capture knobs default to safe values — capture is enabled with a\n64 KB inline body limit and a 4-byte hex preview for binary payloads.",
|
|
12
|
+
"properties": {
|
|
13
|
+
"captureBinaryPreview": {
|
|
14
|
+
"description": "Number of leading bytes to include in the hex preview for binary bodies.",
|
|
15
|
+
"type": "number"
|
|
16
|
+
},
|
|
17
|
+
"captureBodyLimit": {
|
|
18
|
+
"description": "Maximum number of bytes to keep inline for text bodies. Larger payloads\nare truncated to this size and reported as `text-truncated`.",
|
|
19
|
+
"type": "number"
|
|
20
|
+
},
|
|
21
|
+
"captureRequests": {
|
|
22
|
+
"default": true,
|
|
23
|
+
"description": "Whether to capture request/response headers and bodies for the debug UI.\nIf `false`, only status code and duration are recorded.",
|
|
24
|
+
"type": "boolean"
|
|
25
|
+
},
|
|
26
|
+
"type": {
|
|
27
|
+
"description": "Type of the service",
|
|
28
|
+
"type": "string"
|
|
29
|
+
},
|
|
30
|
+
"openapi": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"additionalProperties": true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"required": [
|
|
36
|
+
"type"
|
|
37
|
+
],
|
|
38
|
+
"type": "object",
|
|
39
|
+
"title": "DebugService"
|
|
40
|
+
},
|
|
41
|
+
"Configuration": "lib/debugservice.service:DebugServiceParameters",
|
|
42
|
+
"commands": {
|
|
43
|
+
"debug": {
|
|
44
|
+
"description": "Start dev server with debug dashboard",
|
|
45
|
+
"method": "debug",
|
|
46
|
+
"args": {
|
|
47
|
+
"port": {
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 18181,
|
|
50
|
+
"alias": "p",
|
|
51
|
+
"description": "Debug dashboard port"
|
|
52
|
+
},
|
|
53
|
+
"servePort": {
|
|
54
|
+
"type": "number",
|
|
55
|
+
"default": 18080,
|
|
56
|
+
"alias": "s",
|
|
57
|
+
"description": "Application server port"
|
|
58
|
+
},
|
|
59
|
+
"web": {
|
|
60
|
+
"type": "boolean",
|
|
61
|
+
"description": "Disable TUI and open the web dashboard (hosted on webda.io)"
|
|
62
|
+
},
|
|
63
|
+
"local": {
|
|
64
|
+
"type": "boolean",
|
|
65
|
+
"description": "With --web: serve the bundled dashboard from the debug port instead of webda.io"
|
|
66
|
+
},
|
|
67
|
+
"open": {
|
|
68
|
+
"type": "boolean",
|
|
69
|
+
"default": true,
|
|
70
|
+
"description": "With --web: open the dashboard in the browser (--no-open to only print the URL)"
|
|
71
|
+
},
|
|
72
|
+
"telemetry": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"default": true,
|
|
75
|
+
"description": "With --web: allow usage analytics on the hosted dashboard (--no-telemetry or WEBDA_TELEMETRY=0 to disable)"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"requires": [
|
|
79
|
+
"router",
|
|
80
|
+
"rest-domain",
|
|
81
|
+
"http-server"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"models": {},
|
|
88
|
+
"schemas": {
|
|
89
|
+
"Webda/BinaryFile": {
|
|
90
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
91
|
+
"WebdaSchema": true,
|
|
92
|
+
"additionalProperties": false,
|
|
93
|
+
"description": "Represent a file to store",
|
|
94
|
+
"properties": {
|
|
95
|
+
"hash": {
|
|
96
|
+
"description": "Will be computed by the service\n\nhash of the content",
|
|
97
|
+
"type": "string"
|
|
98
|
+
},
|
|
99
|
+
"metadata": {
|
|
100
|
+
"description": "Metadatas stored along with the binary"
|
|
101
|
+
},
|
|
102
|
+
"mimetype": {
|
|
103
|
+
"description": "Mimetype of the binary",
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
"name": {
|
|
107
|
+
"description": "Current name",
|
|
108
|
+
"type": "string"
|
|
109
|
+
},
|
|
110
|
+
"originalname": {
|
|
111
|
+
"description": "Original name",
|
|
112
|
+
"type": "string"
|
|
113
|
+
},
|
|
114
|
+
"size": {
|
|
115
|
+
"description": "Size of the binary",
|
|
116
|
+
"type": "number"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"required": [
|
|
120
|
+
"mimetype",
|
|
121
|
+
"name",
|
|
122
|
+
"size"
|
|
123
|
+
],
|
|
124
|
+
"type": "object",
|
|
125
|
+
"title": "BinaryFile"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"behaviors": {}
|
|
129
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path fill="#3f51b5" d="M191.08,189.7c1.53-11.46,11.31-14.06,19.26-5.96,4.28,4.28,7.8,9.94,18.34,9.94,11.77,0,26.75-11.92,26.75-32.25s-14.98-32.25-26.75-32.25c-10.55,0-14.06,5.66-18.34,9.94-8.1,8.1-17.88,5.5-19.26-5.96h0c-.15-.92-.15-1.99-.15-3.21v-65.43h-65.58c-3.52,0-6.27-.61-8.41-1.68-6.73-3.36-7.34-11.16-.61-17.73,4.28-4.28,9.94-7.8,9.94-18.34C126.26,15.13,114.34.15,94.16,0c-20.18.15-32.1,14.98-32.1,26.75,0,10.55,5.66,14.06,9.94,18.34,8.87,8.71,5.04,19.57-9.17,19.57H0v173.81c0,8.44,6.84,15.29,15.29,15.29h175.64v-60.84c0-1.07,0-2.14.15-3.21Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--ifm-color-primary: #3578e5;--ifm-color-primary-dark: #1d68e1;--ifm-color-secondary: #ebedf0;--ifm-color-success: #00a400;--ifm-color-info: #54c7ec;--ifm-color-warning: #ffba00;--ifm-color-danger: #fa383e;--ifm-color-gray-0: #fff;--ifm-color-gray-100: #f5f6f7;--ifm-color-gray-200: #ebedf0;--ifm-color-gray-300: #dadde1;--ifm-color-gray-400: #ccd0d5;--ifm-color-gray-500: #bec3c9;--ifm-color-gray-600: #8d949e;--ifm-color-gray-700: #606770;--ifm-color-gray-800: #444950;--ifm-color-gray-900: #1c1e21;--ifm-color-gray-1000: #000;--ifm-color-emphasis-0: var(--ifm-color-gray-0);--ifm-color-emphasis-100: var(--ifm-color-gray-100);--ifm-color-emphasis-200: var(--ifm-color-gray-200);--ifm-color-emphasis-300: var(--ifm-color-gray-300);--ifm-color-emphasis-400: var(--ifm-color-gray-400);--ifm-color-emphasis-500: var(--ifm-color-gray-500);--ifm-color-emphasis-600: var(--ifm-color-gray-600);--ifm-color-emphasis-700: var(--ifm-color-gray-700);--ifm-color-emphasis-800: var(--ifm-color-gray-800);--ifm-color-emphasis-900: var(--ifm-color-gray-900);--ifm-color-emphasis-1000: var(--ifm-color-gray-1000);--ifm-color-content: var(--ifm-color-emphasis-900);--ifm-color-content-inverse: var(--ifm-color-emphasis-0);--ifm-color-content-secondary: #525860;--ifm-background-color: #fff;--ifm-background-surface-color: var(--ifm-color-content-inverse);--ifm-hover-overlay: rgba(0, 0, 0, .05);--ifm-font-color-base: var(--ifm-color-content);--ifm-font-color-secondary: var(--ifm-color-content-secondary);--ifm-font-family-base: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, BlinkMacSystemFont, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--ifm-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ifm-font-size-base: 100%;--ifm-line-height-base: 1.65;--ifm-code-font-size: 90%;--ifm-global-radius: .4rem;--ifm-global-spacing: 1rem;--ifm-link-color: var(--ifm-color-primary);--ifm-navbar-height: 0px}html[data-theme=dark]{--ifm-color-emphasis-0: var(--ifm-color-gray-1000);--ifm-color-emphasis-100: var(--ifm-color-gray-900);--ifm-color-emphasis-200: var(--ifm-color-gray-800);--ifm-color-emphasis-300: var(--ifm-color-gray-700);--ifm-color-emphasis-400: var(--ifm-color-gray-600);--ifm-color-emphasis-500: var(--ifm-color-gray-500);--ifm-color-emphasis-600: var(--ifm-color-gray-400);--ifm-color-emphasis-700: var(--ifm-color-gray-300);--ifm-color-emphasis-800: var(--ifm-color-gray-200);--ifm-color-emphasis-900: var(--ifm-color-gray-100);--ifm-color-emphasis-1000: var(--ifm-color-gray-0);--ifm-background-color: #1b1b1d;--ifm-background-surface-color: #242526;--ifm-hover-overlay: rgba(255, 255, 255, .05);--ifm-color-content: #e3e3e3;--ifm-color-content-secondary: rgba(255, 255, 255, 1)}html,body{margin:0;padding:0;height:100%;background:var(--ifm-background-color);color:var(--ifm-font-color-base);font:var(--ifm-font-size-base) / var(--ifm-line-height-base) var(--ifm-font-family-base);color-scheme:light}html[data-theme=dark]{color-scheme:dark}#app{min-height:100%;display:flex;flex-direction:column}#app>.webda-debug-ui{flex:1}.webda-debug-ui{--wdbg-orange: #ff9901;--wdbg-green: #7ebf6a;--wdbg-blue: #3f51b5;--wdbg-purple: #a855f7;--wdbg-neutral: var(--ifm-color-emphasis-700);--wdbg-red: var(--ifm-color-danger);--wdbg-yellow: var(--ifm-color-warning);--wdbg-border: var(--ifm-color-emphasis-300);--wdbg-surface: var(--ifm-background-surface-color);--wdbg-surface-2: var(--ifm-color-emphasis-100);--wdbg-muted: var(--ifm-color-emphasis-600);--wdbg-radius: var(--ifm-global-radius);--wdbg-mono: var(--ifm-font-family-monospace);--wdbg-graph-inheritance: var(--ifm-color-emphasis-500);--wdbg-graph-link: var(--wdbg-blue);--wdbg-graph-query: var(--wdbg-green);--wdbg-graph-parent: var(--wdbg-purple);--wdbg-graph-binary: var(--wdbg-orange);--wdbg-graph-map: var(--ifm-color-info);--focus-color: var(--wdbg-orange);display:flex;flex-direction:column;min-height:100%;font-family:var(--ifm-font-family-base);font-size:.9375rem;line-height:1.5;color:var(--ifm-font-color-base);background:var(--ifm-background-color);box-sizing:border-box}.webda-debug-ui *,.webda-debug-ui *:before,.webda-debug-ui *:after{box-sizing:border-box}[data-theme=dark] .webda-debug-ui{--wdbg-blue: #8c9eff;--wdbg-neutral: var(--ifm-color-emphasis-800)}.wdbg-header{display:flex;align-items:center;gap:.75rem;height:48px;padding:0 var(--ifm-global-spacing);background:var(--wdbg-surface);border-bottom:2px solid var(--wdbg-border);flex-shrink:0;transition:border-color .3s,filter .3s;animation:wdbg-focus-rotate 9s ease-in-out infinite}.wdbg-disconnected .wdbg-header{border-bottom-color:var(--wdbg-red)}.wdbg-disconnected .wdbg-brand,.wdbg-disconnected .wdbg-tabs{filter:grayscale(1);opacity:.5}.wdbg-disconnected .wdbg-tab-active{color:var(--wdbg-muted)!important;border-bottom-color:var(--wdbg-muted)!important}.wdbg-brand{display:flex;align-items:center;gap:.5rem;white-space:nowrap}.wdbg-logo{width:28px;height:28px;color:var(--wdbg-blue)}.wdbg-brand-title{font-size:1rem;font-weight:600}.wdbg-brand-title span{color:var(--focus-color)}@property --focus-color{syntax: "<color>"; inherits: true; initial-value: #ff9901;}@keyframes wdbg-focus-rotate{0%,to{--focus-color: #ff9901}25%{--focus-color: #7ebf6a}50%{--focus-color: #3f51b5}75%{--focus-color: #a855f7}}@media(prefers-reduced-motion:reduce){.wdbg-header{animation:none}}.wdbg-app-info{padding-left:.75rem;border-left:1px solid var(--wdbg-border);line-height:1.2;min-width:0;flex:0 1 auto}.wdbg-app-name{font-size:.8rem}.wdbg-app-cwd{font-size:.65rem;color:var(--wdbg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}.wdbg-tabs{display:flex;height:100%;overflow-x:auto;flex:1 0 auto;min-width:0;margin-left:.75rem}.wdbg-tab{padding:0 1rem;height:100%;display:flex;align-items:center;cursor:pointer;color:var(--wdbg-muted);background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;font:inherit;font-size:.875rem;white-space:nowrap;transition:color .15s,border-color .15s}.wdbg-tab:hover{color:var(--ifm-font-color-base)}.wdbg-header-status{margin-left:auto;font-size:.75rem;white-space:nowrap;flex:0 1 auto;min-width:0}.wdbg-header-status .wdbg-conn-label{overflow:hidden;text-overflow:ellipsis}.wdbg-conn{display:inline-flex;align-items:center;gap:.4rem}.wdbg-conn-dot{width:8px;height:8px;border-radius:50%;background:var(--ifm-color-emphasis-400);flex-shrink:0}.wdbg-conn-ok .wdbg-conn-dot{background:var(--ifm-color-success)}.wdbg-conn-warn .wdbg-conn-dot{background:var(--ifm-color-warning);animation:wdbg-pulse 1.5s infinite}.wdbg-conn-off .wdbg-conn-dot{background:var(--ifm-color-danger);animation:wdbg-pulse 1.5s infinite}@keyframes wdbg-pulse{0%,to{opacity:1}50%{opacity:.3}}.wdbg-content{flex:1;padding:var(--ifm-global-spacing);overflow:auto;min-height:0}.wdbg-footer{display:flex;gap:1rem;align-items:center;padding:.4rem var(--ifm-global-spacing);border-top:1px solid var(--wdbg-border);font-size:.75rem;color:var(--wdbg-muted);flex-shrink:0}.wdbg-footer a{color:var(--ifm-link-color)}.wdbg-footer-close{margin-left:auto;padding:0 .35rem;border:0;border-radius:var(--ifm-global-radius);background:none;color:var(--wdbg-muted);font-size:1rem;line-height:1.2;cursor:pointer}.wdbg-footer-close:hover{background:var(--ifm-hover-overlay);color:var(--ifm-font-color-base)}.wdbg-footer-close:focus-visible{outline:2px solid var(--ifm-color-primary)}.wdbg-mono,.webda-debug-ui code,.webda-debug-ui pre{font-family:var(--wdbg-mono)}.webda-debug-ui code{font-size:.85em;background:var(--wdbg-surface-2);padding:.05rem .3rem;border-radius:3px;border:none}.wdbg-muted{color:var(--wdbg-muted)}.wdbg-strong{font-weight:600}.wdbg-accent{color:var(--ifm-color-primary)}.wdbg-small{font-size:.75rem}.wdbg-italic{font-style:italic}.wdbg-break{word-break:break-all}.wdbg-nowrap{white-space:nowrap}.wdbg-pre-wrap{white-space:pre-wrap}.wdbg-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wdbg-right{text-align:right}.wdbg-pad{padding:.5rem}.wdbg-grow{flex:1}.wdbg-link{color:var(--ifm-link-color);text-decoration:none}.wdbg-link:hover{text-decoration:underline}.wdbg-title{font-size:1.25rem;font-weight:600;color:var(--ifm-color-primary);margin:0 0 .5rem}.wdbg-subtitle{font-size:.8125rem;margin-bottom:1rem}.wdbg-count{font-size:.8125rem;margin-bottom:.75rem}.wdbg-empty{color:var(--wdbg-muted);padding:2rem;text-align:center}.wdbg-facts{display:flex;gap:.5rem;margin-bottom:1rem;flex-wrap:wrap;align-items:center}.wdbg-fact{background:var(--wdbg-surface-2);padding:.375rem .625rem;border-radius:var(--wdbg-radius);font-size:.8125rem}.wdbg-badges{display:flex;gap:.375rem;flex-wrap:wrap;margin-bottom:1rem}.wdbg-row-between{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem;gap:.5rem}.wdbg-actions{margin-top:1rem;display:flex;gap:.5rem}.wdbg-preview{margin-top:.75rem}.wdbg-preview-label{color:var(--wdbg-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.wdbg-inheritance{display:flex;align-items:center;gap:.375rem;flex-wrap:wrap;font-size:.8125rem}.wdbg-pre{background:var(--wdbg-surface-2);padding:.75rem 1rem;border-radius:var(--wdbg-radius);overflow:auto;font-size:.8125rem;line-height:1.5;margin:.25rem 0 0}.wdbg-pre-inline{margin:0;white-space:pre-wrap;font-size:.8125rem;background:none;padding:0}.wdbg-code{margin:0;background:var(--wdbg-surface-2);padding:1rem;border-radius:var(--wdbg-radius);overflow:auto;max-height:500px;font-size:.8125rem;line-height:1.6;-moz-tab-size:2;tab-size:2}.wdbg-hl-keyword{color:#d73a49}.wdbg-hl-string{color:#032f62}.wdbg-hl-number{color:#005cc5}.wdbg-hl-comment{color:var(--wdbg-muted);font-style:italic}[data-theme=dark] .wdbg-hl-keyword{color:#ff7b72}[data-theme=dark] .wdbg-hl-string{color:#a5d6ff}[data-theme=dark] .wdbg-hl-number{color:#79c0ff}.wdbg-table-container{overflow-x:auto}.wdbg-table{width:100%;border-collapse:collapse;font-size:.875rem;display:table;margin:0}.wdbg-table th{text-align:left;padding:.5rem .75rem;border:none;border-bottom:1px solid var(--wdbg-border);color:var(--wdbg-muted);font-weight:500;white-space:nowrap;background:none}.wdbg-table td{padding:.5rem .75rem;border:none;border-bottom:1px solid var(--wdbg-border);vertical-align:top}.wdbg-table tr{background:none;border:none}.wdbg-table tr:hover td{background:var(--ifm-hover-overlay)}.wdbg-row-clickable{cursor:pointer}.wdbg-row-selected td{background:var(--wdbg-surface-2)}.wdbg-url-cell{max-width:400px}.wdbg-headers{width:100%;font-size:.75rem;border-collapse:collapse;display:table}.wdbg-headers td{padding:2px 8px 2px 0;vertical-align:top;border:none;background:none}.wdbg-headers td:first-child{white-space:nowrap}.wdbg-badge{display:inline-block;padding:.125rem .5rem;border-radius:3px;font-size:.75rem;font-weight:500;font-family:var(--wdbg-mono);line-height:1.4;background:var(--wdbg-surface-2);color:var(--wdbg-muted)}.wdbg-badge-small{font-size:.5625rem;padding:.0625rem .25rem}.wdbg-badge-green,.wdbg-method-get{background:#7ebf6a2e;color:#3d7a2c}.wdbg-badge-yellow,.wdbg-method-put{background:#ffba0033;color:#8a5a00}.wdbg-badge-red,.wdbg-method-delete{background:#fa383e26;color:#c21f25}.wdbg-badge-blue,.wdbg-method-post{background:#3f51b526;color:#3f51b5}.wdbg-badge-purple{background:#a855f726;color:#7e22ce}.wdbg-badge-orange,.wdbg-method-patch{background:#ff99012e;color:#b35f00}.wdbg-badge-muted{background:var(--wdbg-surface-2);color:var(--wdbg-muted)}[data-theme=dark] .wdbg-badge-green,[data-theme=dark] .wdbg-method-get{color:#7ebf6a}[data-theme=dark] .wdbg-badge-yellow,[data-theme=dark] .wdbg-method-put{color:#ffba00}[data-theme=dark] .wdbg-badge-red,[data-theme=dark] .wdbg-method-delete{color:#ff6b6f}[data-theme=dark] .wdbg-badge-blue,[data-theme=dark] .wdbg-method-post{color:#8c9eff}[data-theme=dark] .wdbg-badge-purple{color:#c084fc}[data-theme=dark] .wdbg-badge-orange,[data-theme=dark] .wdbg-method-patch{color:#ff9901}.wdbg-level{color:#fff}.wdbg-level-error{background:#ef4444}.wdbg-level-warn{background:#d99a00}.wdbg-level-info{background:#22a35b}.wdbg-level-debug{background:#6b7280}.wdbg-level-trace{background:#4b5563}.wdbg-status-2xx{color:var(--ifm-color-success)}.wdbg-status-3xx{color:var(--ifm-color-warning)}.wdbg-status-4xx{color:var(--wdbg-orange)}.wdbg-status-5xx{color:var(--ifm-color-danger)}.wdbg-status-pending{color:var(--wdbg-muted)}.wdbg-split{display:flex;gap:var(--ifm-global-spacing);min-height:0;height:calc(100vh - var(--ifm-navbar-height, 0px) - 48px - 3rem - 2rem)}.wdbg-split-left{width:280px;flex-shrink:0;overflow-y:auto;border-right:1px solid var(--wdbg-border);padding-right:1rem}.wdbg-split-right{flex:1;overflow-y:auto;min-width:0}.wdbg-list-item{display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;border-radius:var(--wdbg-radius);font-size:.875rem;color:var(--wdbg-muted);transition:background .1s,color .1s;word-break:break-all}.wdbg-list-item:hover{background:var(--ifm-hover-overlay);color:var(--ifm-font-color-base)}.wdbg-list-item:focus-visible{outline:2px solid var(--ifm-color-primary);outline-offset:-2px}.wdbg-list-item-active{background:var(--wdbg-surface-2);color:var(--ifm-color-primary)}.wdbg-list-item-pinned{border-bottom:1px solid var(--wdbg-border);border-radius:0;margin-bottom:.5rem;padding-bottom:.625rem;color:var(--ifm-font-color-base)}.wdbg-op-item{min-width:0;flex:1}.wdbg-op-io{font-size:.6875rem;color:var(--wdbg-muted)}.wdbg-op-rest{font-size:.625rem;margin-top:.125rem;display:flex;align-items:center;gap:.25rem;min-width:0}.wdbg-search,.wdbg-select{width:100%;padding:.5rem .75rem;background:var(--ifm-background-color);border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);color:var(--ifm-font-color-base);font:inherit;font-size:.875rem;margin-bottom:.75rem;outline:none}.wdbg-search:focus,.wdbg-select:focus{border-color:var(--ifm-color-primary)}.wdbg-select{width:auto}.wdbg-toolbar{display:flex;gap:.5rem;align-items:center;margin-bottom:.25rem}.wdbg-toolbar .wdbg-search,.wdbg-toolbar .wdbg-select{margin-bottom:0}.wdbg-checkbox{display:flex;align-items:center;gap:.25rem;color:var(--wdbg-muted);font-size:.75rem;white-space:nowrap}.wdbg-logs{overflow-y:auto;max-height:calc(100vh - var(--ifm-navbar-height, 0px) - 220px)}.wdbg-btn{font:inherit;font-size:.8125rem;padding:.375rem .875rem;border-radius:var(--wdbg-radius);border:1px solid var(--wdbg-border);background:var(--wdbg-surface);color:var(--ifm-font-color-base);cursor:pointer;transition:background .1s,color .1s}.wdbg-btn:hover:not(:disabled){background:var(--ifm-hover-overlay)}.wdbg-btn:disabled{opacity:.5;cursor:not-allowed}.wdbg-btn-primary{background:var(--ifm-color-primary);border-color:var(--ifm-color-primary);color:#fff}.wdbg-btn-primary:hover:not(:disabled){background:var(--ifm-color-primary-dark, var(--ifm-color-primary))}.wdbg-btn-ghost{background:transparent}.wdbg-btn-active{border-color:var(--ifm-color-primary);color:var(--ifm-color-primary)}.wdbg-theme-toggle{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border-color:transparent;border-radius:50%;color:var(--ifm-font-color-base)}.wdbg-theme-toggle:hover{background:var(--ifm-color-emphasis-200)}.wdbg-subtabs{display:flex;margin-bottom:.75rem;border-bottom:1px solid var(--wdbg-border);overflow-x:auto}.wdbg-subtab{padding:6px 16px;background:transparent;color:var(--wdbg-muted);border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;font:inherit;font-size:.875rem;white-space:nowrap}.wdbg-subtab-active{background:var(--wdbg-surface-2);color:var(--ifm-color-primary);border-bottom-color:var(--ifm-color-primary);font-weight:600}.wdbg-card{padding:1rem;border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);margin-top:1rem;background:var(--wdbg-surface)}.wdbg-card-error{border-color:var(--ifm-color-danger)}.wdbg-alert{padding:.5rem .75rem;border-radius:var(--wdbg-radius);margin-bottom:1rem;font-size:.875rem}.wdbg-alert-danger{background:#fa383e1a;border:1px solid rgba(250,56,62,.3)}.wdbg-alert-warning{background:#ffba001f;border-bottom:1px solid rgba(255,186,0,.4);margin:0;border-radius:0}.wdbg-request-url{margin-left:.5rem}.wdbg-request-meta{display:flex;gap:1.5rem;font-size:.75rem;color:var(--wdbg-muted);margin-bottom:1rem}.wdbg-request-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.wdbg-request-grid h4{margin:1rem 0 .5rem;font-size:.8125rem}.wdbg-request-grid h4:first-child{margin-top:0}.wdbg-connection-error{max-width:640px;margin:2rem auto;padding:1.5rem;border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);background:var(--wdbg-surface)}.wdbg-connection-error h2{margin:0 0 .75rem;font-size:1.125rem}.wdbg-connection-error p{margin:0 0 .5rem}.wdbg-port-picker{display:flex;gap:.5rem;align-items:center;margin-top:1rem;padding-top:1rem;border-top:1px solid var(--wdbg-border)}.wdbg-port-picker label{font-size:.8125rem;color:var(--wdbg-muted)}.wdbg-port-picker .wdbg-search{width:120px;margin-bottom:0}.wdbg-detail-section{margin-bottom:1.5rem}.wdbg-detail-section h3{font-size:.8125rem;color:var(--wdbg-muted);margin:0 0 .5rem;text-transform:uppercase;letter-spacing:.05em}.wdbg-json-tree{font-family:var(--wdbg-mono);font-size:.8125rem;line-height:1.6}.wdbg-json-key{color:var(--ifm-color-primary)}.wdbg-json-string{color:#22863a}.wdbg-json-number{color:#b35f00}.wdbg-json-boolean{color:#7e22ce}.wdbg-json-null{color:var(--wdbg-muted)}[data-theme=dark] .wdbg-json-string{color:#7ebf6a}[data-theme=dark] .wdbg-json-number{color:#ff9901}[data-theme=dark] .wdbg-json-boolean{color:#c084fc}.wdbg-json-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--wdbg-muted);font-size:.6rem}.wdbg-json-indent{padding-left:1.25rem}.wdbg-graph{display:flex;flex-direction:column;height:100%}.wdbg-graph-legend{display:flex;gap:1rem;margin-bottom:.5rem;flex-wrap:wrap;align-items:center;flex-shrink:0}.wdbg-graph-legend-item{display:flex;align-items:center;gap:.3rem;font-size:.7rem;color:var(--wdbg-muted)}.wdbg-graph-legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.wdbg-graph-legend-line{width:16px;height:0;border-top-width:2px;display:inline-block}.wdbg-graph-canvas{flex:1;overflow:auto;border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);background:var(--ifm-background-color);min-height:200px}.wdbg-graph-node{cursor:pointer}.wdbg-graph-node rect{fill:var(--wdbg-surface-2);stroke:var(--wdbg-blue)}.wdbg-graph-node text{fill:var(--ifm-font-color-base);font-family:var(--ifm-font-family-base)}.wdbg-graph-node:hover rect{stroke:var(--ifm-color-primary)}.wdbg-graph-node-selected rect{stroke:var(--wdbg-orange)}.wdbg-graph-node-selected text{fill:var(--wdbg-orange)}.wdbg-graph-label{font-family:var(--wdbg-mono)}.wdbg-sf-root{font-size:.875rem}.wdbg-sf-title{font-size:1rem;font-weight:600;color:var(--ifm-color-primary);margin-bottom:.25rem}.wdbg-sf-schema-desc{color:var(--wdbg-muted);font-size:.8125rem;margin-bottom:1rem;line-height:1.4}.wdbg-sf-empty{color:var(--wdbg-muted);padding:1rem 0}.wdbg-sf-fields{display:flex;flex-direction:column;gap:.75rem}.wdbg-sf-field{padding:.5rem .625rem;border-radius:var(--wdbg-radius);border:1px solid transparent;transition:border-color .15s}.wdbg-sf-field:hover{border-color:var(--wdbg-border)}.wdbg-sf-has-value{border-left:2px solid var(--ifm-color-primary)}.wdbg-sf-label-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.125rem}.wdbg-sf-label{font-weight:500;font-size:.8125rem}.wdbg-sf-required{color:var(--ifm-color-danger);margin-left:.125rem}.wdbg-sf-type{font-family:var(--wdbg-mono);font-size:.6875rem;color:var(--wdbg-muted);background:var(--wdbg-surface-2);padding:.0625rem .375rem;border-radius:3px}.wdbg-sf-description{color:var(--wdbg-muted);font-size:.75rem;margin-bottom:.375rem;line-height:1.4}.wdbg-sf-default{font-size:.6875rem;color:var(--wdbg-muted);margin-top:.25rem}.wdbg-sf-input{width:100%;padding:.375rem .5rem;background:var(--ifm-background-color);border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);color:var(--ifm-font-color-base);font:inherit;font-size:.8125rem;outline:none;transition:border-color .15s}.wdbg-sf-input:focus{border-color:var(--ifm-color-primary)}.wdbg-sf-input:read-only,.wdbg-sf-input:disabled{opacity:.6;cursor:not-allowed}.wdbg-sf-textarea{font-family:var(--wdbg-mono);font-size:.75rem;resize:vertical;min-height:2.5rem}.wdbg-sf-collapsible{border:1px solid var(--wdbg-border);border-radius:var(--wdbg-radius);overflow:hidden}.wdbg-sf-collapsible-header{display:flex;align-items:center;gap:.375rem;padding:.375rem .5rem;background:var(--wdbg-surface-2);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:.8125rem}.wdbg-sf-collapsible-header:hover{background:var(--ifm-hover-overlay)}.wdbg-sf-chevron{font-size:.5rem;color:var(--wdbg-muted);transition:transform .15s}.wdbg-sf-open{transform:rotate(90deg)}.wdbg-sf-collapsible-title{font-weight:500}.wdbg-sf-badge{font-family:var(--wdbg-mono);font-size:.625rem;color:var(--wdbg-muted);background:var(--ifm-background-color);padding:.0625rem .3rem;border-radius:3px;margin-left:auto}.wdbg-sf-collapsible-body{padding:.5rem;border-top:1px solid var(--wdbg-border)}.wdbg-sf-array{display:flex;flex-direction:column;gap:.375rem}.wdbg-sf-array-item{display:flex;gap:.375rem;align-items:flex-start}.wdbg-sf-array-item-content{flex:1;min-width:0}.wdbg-sf-btn{font:inherit;font-size:.75rem;padding:.25rem .5rem;border:1px solid var(--wdbg-border);border-radius:3px;background:var(--wdbg-surface-2);color:var(--wdbg-muted);cursor:pointer}.wdbg-sf-btn:hover{background:var(--ifm-hover-overlay);color:var(--ifm-font-color-base)}.wdbg-sf-btn-remove{color:var(--ifm-color-danger);font-size:.875rem;line-height:1;flex-shrink:0}.wdbg-sf-btn-add{align-self:flex-start;margin-top:.125rem}.webda-debug-ui ::-webkit-scrollbar{width:6px;height:6px}.webda-debug-ui ::-webkit-scrollbar-thumb{background:var(--wdbg-border);border-radius:3px}.wdbg-navbar{position:sticky;top:0;z-index:10;display:flex;box-sizing:border-box;align-items:center;height:3.75rem;padding:.5rem var(--ifm-global-spacing);box-shadow:0 1px 2px #0000001a;font-family:var(--ifm-font-family-base);font-size:1rem;flex-shrink:0}.wdbg-navbar:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-color:#ffffffb8;-webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4)}html[data-theme=dark] .wdbg-navbar:before{background-color:#1b1b1d99}.wdbg-navbar-brand{display:flex;align-items:center;gap:.5rem;margin-right:1rem;color:var(--ifm-font-color-base);text-decoration:none}.wdbg-navbar-brand:hover{color:var(--ifm-color-primary)}.wdbg-navbar-brand img{width:2rem;height:2rem}.wdbg-navbar-items{display:flex;align-items:center;min-width:0}.wdbg-navbar-items-right{margin-left:auto}.wdbg-navbar-link,.wdbg-navbar-github{display:flex;align-items:center;padding:.25rem .75rem;color:var(--ifm-font-color-base);font-weight:500;text-decoration:none}.wdbg-navbar-link:hover,.wdbg-navbar-github:hover,.wdbg-navbar-link-active{color:var(--ifm-color-primary)}.wdbg-navbar .wdbg-theme-toggle{margin-left:.5rem}@media(max-width:996px){.wdbg-navbar-link{display:none}}.wdbg-boot{padding:3rem var(--ifm-global-spacing);text-align:center;color:var(--ifm-color-emphasis-700)}.wdbg-graph-toggle{margin-left:auto}@media(max-width:1440px){.wdbg-app-cwd{max-width:180px}}@media(max-width:1280px){.wdbg-header-status .wdbg-conn-label,.wdbg-app-cwd{display:none}.wdbg-tab{padding:0 .75rem}}@media(max-width:1024px){.wdbg-app-info,.wdbg-brand-title{display:none}}@media(max-width:768px){.wdbg-split{flex-direction:column;height:auto}.wdbg-split-left{width:100%;border-right:none;border-bottom:1px solid var(--wdbg-border);padding-right:0;padding-bottom:1rem;max-height:200px}.wdbg-request-grid{grid-template-columns:1fr}.wdbg-app-info,.wdbg-conn-label{display:none}}
|