convex-mcp-visual 1.3.9 → 1.4.1
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 +25 -17
- package/dist/apps/apps/kanban-board/index.html +2 -2
- package/dist/apps/apps/realtime-dashboard/index.html +1 -1
- package/dist/apps/apps/schema-browser/index.html +1 -1
- package/dist/apps/assets/{kanban-board-BglGGBUM.js → kanban-board-B3LBzk3P.js} +5 -3
- package/dist/apps/assets/{style-D3PmAzVU.css → style-CfvT5wrm.css} +1 -1
- package/dist/tools/codebase-subway-map.js +107 -61
- package/dist/tools/codebase-subway-map.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,6 +50,7 @@ convex-mcp-visual diagram # Generate ER diagram
|
|
|
50
50
|
convex-mcp-visual subway # Codebase subway map
|
|
51
51
|
convex-mcp-visual table-heatmap # Table writes heatmap
|
|
52
52
|
convex-mcp-visual schema-drift # Declared vs inferred schema
|
|
53
|
+
convex-mcp-visual kanban # Kanban board of jobs/agents
|
|
53
54
|
convex-mcp-visual write-conflicts --log-file logs.txt
|
|
54
55
|
```
|
|
55
56
|
|
|
@@ -152,6 +153,9 @@ npx convex-mcp-visual --test
|
|
|
152
153
|
| "Show table write heatmap" | `table_heatmap` |
|
|
153
154
|
| "Show schema drift" | `schema_drift` |
|
|
154
155
|
| "Show write conflicts" | `write_conflict_report` |
|
|
156
|
+
| "Show kanban board of jobs" | `kanban_board` (scheduled jobs) |
|
|
157
|
+
| "Show scheduled functions" | `kanban_board` (jobs mode) |
|
|
158
|
+
| "Show AI agent threads" | `kanban_board` (agents mode) |
|
|
155
159
|
|
|
156
160
|
All tools open an interactive browser UI and return output to the terminal. The schema browser defaults to graph view (visual diagram with table relationships).
|
|
157
161
|
|
|
@@ -198,16 +202,16 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
198
202
|
|
|
199
203
|
```json
|
|
200
204
|
{
|
|
201
|
-
"mcpServers": {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
"mcpServers": {
|
|
206
|
+
"convex-visual": {
|
|
207
|
+
"command": "npx",
|
|
208
|
+
"args": ["convex-mcp-visual", "--stdio"],
|
|
209
|
+
"env": {
|
|
210
|
+
"CONVEX_DEPLOY_KEY": "prod:your-deployment|your-key"
|
|
211
|
+
}
|
|
207
212
|
}
|
|
208
213
|
}
|
|
209
214
|
}
|
|
210
|
-
}
|
|
211
215
|
```
|
|
212
216
|
|
|
213
217
|
### Cursor / VS Code (Manual)
|
|
@@ -216,13 +220,13 @@ Add to `~/.cursor/mcp.json`:
|
|
|
216
220
|
|
|
217
221
|
```json
|
|
218
222
|
{
|
|
219
|
-
"mcpServers": {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
+
"mcpServers": {
|
|
224
|
+
"convex-visual": {
|
|
225
|
+
"command": "npx",
|
|
226
|
+
"args": ["convex-mcp-visual", "--stdio"]
|
|
227
|
+
}
|
|
223
228
|
}
|
|
224
229
|
}
|
|
225
|
-
}
|
|
226
230
|
```
|
|
227
231
|
|
|
228
232
|
### OpenCode (Manual)
|
|
@@ -231,13 +235,13 @@ Add to `~/.config/opencode/opencode.json`:
|
|
|
231
235
|
|
|
232
236
|
```json
|
|
233
237
|
{
|
|
234
|
-
"mcp": {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
+
"mcp": {
|
|
239
|
+
"convex-visual": {
|
|
240
|
+
"command": "npx",
|
|
241
|
+
"args": ["convex-mcp-visual", "--stdio"]
|
|
242
|
+
}
|
|
238
243
|
}
|
|
239
244
|
}
|
|
240
|
-
}
|
|
241
245
|
```
|
|
242
246
|
|
|
243
247
|
### Codex CLI (Manual)
|
|
@@ -294,6 +298,10 @@ convex-mcp-visual subway # Codebase subway map
|
|
|
294
298
|
convex-mcp-visual table-heatmap # Table writes heatmap
|
|
295
299
|
convex-mcp-visual schema-drift # Declared vs inferred schema
|
|
296
300
|
convex-mcp-visual write-conflicts --log-file logs.txt
|
|
301
|
+
|
|
302
|
+
convex-mcp-visual kanban # Kanban board (auto-detect)
|
|
303
|
+
convex-mcp-visual kanban --jobs # Scheduled functions and crons
|
|
304
|
+
convex-mcp-visual kanban --agents # AI agent threads
|
|
297
305
|
```
|
|
298
306
|
|
|
299
307
|
### MCP Server Options
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="theme-color" content="#0d1117" />
|
|
7
7
|
<title>Kanban Board - Convex MCP Apps</title>
|
|
8
|
-
<script type="module" crossorigin src="../../assets/kanban-board-
|
|
8
|
+
<script type="module" crossorigin src="../../assets/kanban-board-B3LBzk3P.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="../../assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
10
|
-
<link rel="stylesheet" crossorigin href="../../assets/style-
|
|
10
|
+
<link rel="stylesheet" crossorigin href="../../assets/style-CfvT5wrm.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<title>Realtime Dashboard - Convex MCP Apps</title>
|
|
8
8
|
<script type="module" crossorigin src="../../assets/realtime-dashboard-BO8AFPT_.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="../../assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
10
|
-
<link rel="stylesheet" crossorigin href="../../assets/style-
|
|
10
|
+
<link rel="stylesheet" crossorigin href="../../assets/style-CfvT5wrm.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<title>Schema Browser - Convex MCP Apps</title>
|
|
8
8
|
<script type="module" crossorigin src="../../assets/schema-browser-crjsCf5V.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="../../assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
10
|
-
<link rel="stylesheet" crossorigin href="../../assets/style-
|
|
10
|
+
<link rel="stylesheet" crossorigin href="../../assets/style-CfvT5wrm.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
|
@@ -3,12 +3,14 @@ var i=Object.defineProperty;var r=(a,e,t)=>e in a?i(a,e,{enumerable:!0,configura
|
|
|
3
3
|
<h1>Kanban Board</h1>
|
|
4
4
|
<div class="header-meta">
|
|
5
5
|
<span class="deployment">${this.config.deploymentUrl||"Not connected"}</span>
|
|
6
|
-
<button id="theme-toggle" class="theme-toggle">
|
|
7
|
-
<svg width="
|
|
6
|
+
<button id="theme-toggle" class="theme-toggle" title="Toggle dark/light mode">
|
|
7
|
+
<svg class="moon-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
8
|
+
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
|
|
9
|
+
</svg>
|
|
10
|
+
<svg class="sun-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
8
11
|
<circle cx="12" cy="12" r="5"/>
|
|
9
12
|
<path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/>
|
|
10
13
|
</svg>
|
|
11
|
-
Toggle Theme
|
|
12
14
|
</button>
|
|
13
15
|
</div>
|
|
14
16
|
</header>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
html,body{width:100%;height:100%;overflow:hidden}:root{--bg-primary: #faf8f5;--bg-secondary: #f5f3f0;--bg-tertiary: #ebe9e6;--bg-hover: #ebe9e6;--bg-canvas: #faf8f5;--text-primary: #1a1a1a;--text-secondary: #6b6b6b;--text-muted: #999999;--border: #e6e4e1;--border-strong: #d4d2cf;--accent: #8b7355;--accent-interactive: #eb5601;--accent-hover: #d14a01;--success: #4a8c5c;--warning: #c4842d;--warning-bg: #fef3e2;--warning-text: #8a5a00;--error: #dc3545;--info: #4a7c9b;--font-mono: "SF Mono", Monaco, "Cascadia Code", "Courier New", monospace;--code-bg: #1e1e1e;--code-text: #d4d4d4;--code-key: #9cdcfe;--code-string: #ce9178;--code-number: #b5cea8;--code-boolean: #569cd6;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .12);--node-bg: #ffffff;--node-header: #f8f7f5;--node-header-selected: #eb5601;--node-border: #e6e4e1;--grid-line: #e6e4e1}[data-theme=dark]{--bg-primary: #1e1e1e;--bg-secondary: #252526;--bg-tertiary: #2d2d2d;--bg-hover: #37373d;--bg-canvas: #1e1e1e;--text-primary: #cccccc;--text-secondary: #8b8b8b;--text-muted: #6b6b6b;--border: #3c3c3c;--border-strong: #4a4a4a;--accent: #c9a87c;--accent-interactive: #ff6b35;--accent-hover: #ff8555;--success: #4ec9b0;--warning: #dcdcaa;--warning-bg: #3d3520;--warning-text: #dcdcaa;--error: #f14c4c;--info: #4fc1ff;--code-bg: #1e1e1e;--code-text: #d4d4d4;--code-key: #9cdcfe;--code-string: #ce9178;--code-number: #b5cea8;--code-boolean: #569cd6;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .5);--node-bg: #2d2d2d;--node-header: #37373d;--node-header-selected: #ff6b35;--node-border: #4a4a4a;--grid-line: #2d2d2d}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;display:flex;flex-direction:column;margin:0;padding:0}.header{background:var(--bg-secondary);padding:10px 16px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.header h1{font-size:18px;font-weight:600;display:flex;align-items:center;gap:8px;color:var(--text-primary)}.header-info{flex:1;margin:0 16px}.deployment-url{font-size:12px;color:var(--text-secondary);font-family:var(--font-mono)}.header-actions{display:flex;gap:8px;align-items:center}.theme-toggle{width:36px;height:36px;background:var(--bg-hover);border:1px solid var(--border);border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .2s ease}.theme-toggle:hover{background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.theme-toggle svg{width:18px;height:18px}.theme-toggle .sun-icon{display:none}.theme-toggle .moon-icon,[data-theme=dark] .theme-toggle .sun-icon{display:block}[data-theme=dark] .theme-toggle .moon-icon{display:none}.btn{background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);padding:6px 12px;border-radius:6px;cursor:pointer;font-size:13px;transition:all .2s}.btn:hover{background:var(--bg-hover);border-color:var(--accent)}.btn-primary{background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.main{display:flex;flex:1;overflow:hidden}.sidebar{width:260px;background:var(--bg-secondary);border-right:1px solid var(--border);overflow-y:auto;flex-shrink:0;display:flex;flex-direction:column;margin:0;padding:0}.sidebar-header{padding:12px 16px;font-size:11px;text-transform:uppercase;color:var(--text-secondary);border-bottom:1px solid var(--border);display:flex;align-items:center;font-weight:600;letter-spacing:.5px;gap:8px;position:relative}.sidebar-header #tableCount{background:var(--bg-hover);padding:2px 8px;border-radius:10px;font-size:11px}.sidebar-header .sidebar-collapse-btn{margin-left:auto;width:24px;height:24px;background:var(--bg-hover);border:1px solid transparent;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .15s;flex-shrink:0}.sidebar-header .sidebar-collapse-btn:hover{background:var(--accent-interactive);color:#fff}.sidebar-header .sidebar-collapse-btn svg{transition:transform .2s}.sidebar-search{padding:8px 12px;border-bottom:1px solid var(--border)}.sidebar-search input{width:100%;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;padding:8px 10px;color:var(--text-primary);font-size:13px}.sidebar-search input:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.table-list{list-style:none;flex:1;overflow-y:auto}.table-item{padding:10px 16px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);transition:background .2s}.table-item:hover{background:var(--bg-hover)}.table-item.active{background:var(--accent-interactive);color:#fff}.table-item.active .table-count{background:#fff3;color:#fff}.table-item.active .table-icon{opacity:1}.table-name{font-size:14px;font-weight:500;display:flex;align-items:center;gap:6px}.table-icon{opacity:.5}.table-count{font-size:12px;color:var(--text-secondary);background:var(--bg-hover);padding:2px 8px;border-radius:10px}.content{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary)}.schema-panel{padding:20px;flex:1;overflow-y:auto}.schema-title{font-size:22px;margin-bottom:8px;display:flex;align-items:center;gap:12px;color:var(--text-primary)}.schema-subtitle{color:var(--text-secondary);font-size:13px;margin-bottom:20px}.schema-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}@media(max-width:900px){.schema-grid{grid-template-columns:1fr}}.schema-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;overflow:hidden}.schema-card-header{background:var(--bg-hover);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;color:var(--text-primary)}.schema-card-header .count{color:var(--text-secondary);font-weight:400;font-size:12px}.schema-card-body{padding:8px;max-height:400px;overflow-y:auto}.field-row{display:flex;justify-content:space-between;padding:8px 10px;border-radius:4px;font-size:13px;font-family:var(--font-mono)}.field-row:hover{background:var(--bg-hover)}.field-name{color:var(--accent-interactive)}.field-type{color:var(--text-secondary)}.field-optional{color:var(--warning);font-size:11px;margin-left:2px}.field-system{opacity:.6}.indexes-section{margin-top:20px}.indexes-title{font-size:14px;font-weight:600;margin-bottom:12px;color:var(--text-secondary)}.index-item{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:12px 16px;margin-bottom:8px}.index-name{font-family:var(--font-mono);font-size:13px;color:var(--accent-interactive);margin-bottom:4px}.index-fields{font-size:12px;color:var(--text-secondary)}.documents-panel{background:var(--bg-secondary);border-top:1px solid var(--border);max-height:320px;overflow:hidden;display:flex;flex-direction:column}.documents-header{padding:10px 16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);background:var(--bg-hover);flex-shrink:0}.documents-title{font-weight:600;font-size:14px;color:var(--text-primary)}.pagination{display:flex;align-items:center;gap:8px}.pagination button{background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);width:28px;height:28px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px}.pagination button:hover:not(:disabled){background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.pagination button:disabled{opacity:.5;cursor:not-allowed}.pagination span{font-size:13px;color:var(--text-secondary)}.documents-table{overflow:auto;flex:1}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}th{background:var(--bg-hover);font-weight:600;position:sticky;top:0;z-index:1;color:var(--text-primary)}td{font-family:var(--font-mono);font-size:12px}tr:hover td{background:var(--bg-hover)}td.id-cell{color:var(--accent-interactive);cursor:pointer}td.id-cell:hover{text-decoration:underline}td.null-value{color:var(--text-secondary);font-style:italic}td.truncated{max-width:200px;overflow:hidden;text-overflow:ellipsis}.empty-state h2{margin-bottom:8px;color:var(--text-primary);font-size:18px}.empty-state p{font-size:14px}.warning-badge{background:#c4842d1a;border:1px solid var(--warning);color:var(--warning);padding:10px 14px;border-radius:6px;font-size:13px;margin-top:16px;display:flex;align-items:center;gap:8px}.warning-badge:before{content:"⚠"}.loading{display:flex;align-items:center;justify-content:center;padding:40px;gap:12px;color:var(--text-secondary)}.spinner{width:24px;height:24px;border:2px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--success)}.status-dot.error{background:var(--accent-interactive)}.status-dot.warning{background:var(--warning)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#1a1a1a80;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg-primary);border:1px solid var(--border);border-radius:12px;width:90%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 40px #00000026}.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--bg-secondary)}.modal-header h2{font-size:16px;color:var(--text-primary)}.modal-close{background:none;border:none;color:var(--text-secondary);font-size:20px;cursor:pointer;padding:4px}.modal-close:hover{color:var(--text-primary)}.modal-body{padding:20px;flex:1;overflow-y:auto}.query-editor{width:100%;min-height:150px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:12px;color:var(--text-primary);font-family:var(--font-mono);font-size:13px;resize:vertical}.query-editor:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.modal-footer{padding:16px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;background:var(--bg-secondary)}kbd{background:var(--bg-secondary);border:1px solid var(--border);border-radius:3px;padding:2px 6px;font-size:11px;font-family:var(--font-mono)}.app-container{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;margin:0;padding:0;position:absolute;top:0;left:0}.view-toggle{display:flex;gap:4px;background:var(--bg-hover);padding:4px;border-radius:8px;margin-right:12px}.view-btn{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .2s}.view-btn:hover{color:var(--text-primary);background:var(--bg-secondary)}.view-btn.active{background:var(--accent-interactive);color:#fff}.graph-view{display:flex;flex-direction:column;flex:1;overflow:hidden}.graph-view .toolbar{order:-1}.code-panel{width:360px;background:#1e1e1e;border-right:1px solid #333;display:flex;flex-direction:column;flex-shrink:0}.code-header{padding:12px 16px;background:#252526;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;color:#ccc;font-size:12px}.code-filename{color:#888;font-family:var(--font-mono)}.code-content{flex:1;overflow:auto;padding:0}.code-content pre{margin:0;padding:16px;font-family:var(--font-mono);font-size:12px;line-height:1.6;color:#d4d4d4}.code-content code{font-family:inherit}.json-key{color:#9cdcfe}.json-string{color:#ce9178}.json-number{color:#b5cea8}.json-boolean,.json-null{color:#569cd6}.graph-panel{flex:1;position:relative;background:var(--bg-primary);overflow:hidden;min-width:0}#graphCanvas{width:100%;height:100%;display:block}.graph-controls{position:absolute;top:16px;right:16px;display:flex;flex-direction:column;gap:8px}.graph-btn{width:36px;height:36px;border:1px solid var(--border);background:#fff;color:var(--text-primary);border-radius:8px;cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;transition:all .2s;box-shadow:0 2px 8px #00000014}.graph-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.graph-legend{position:absolute;bottom:16px;right:16px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:12px 16px;display:flex;flex-direction:column;gap:8px;font-size:12px;box-shadow:0 2px 8px #00000014}.legend-item{display:flex;align-items:center;gap:8px;color:var(--text-secondary)}.legend-dot{width:12px;height:12px;border-radius:4px;background:var(--accent-interactive)}.legend-dot.table{background:#fff;border:2px solid var(--border)}.legend-line{width:20px;height:2px;background:var(--accent)}.list-view{display:flex;flex:1;overflow:hidden}.list-view .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.list-view .content #listViewContent{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.list-view .table-header{padding:16px 24px;border-bottom:1px solid var(--border);background:var(--bg-primary);flex-shrink:0}.list-view .table-header-title{font-size:24px;font-weight:600;color:var(--text-primary);margin-bottom:4px}.list-view .table-header-meta{font-size:13px;color:var(--text-secondary);display:flex;align-items:center;gap:12px}.list-view .table-header-meta .badge{background:var(--bg-hover);padding:2px 8px;border-radius:4px;font-size:12px}.list-view .content-split{display:flex;flex:1;min-height:0;overflow:hidden}.list-view .schema-sidebar{width:280px;min-width:240px;max-width:360px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;flex-shrink:0}.list-view .schema-sidebar-header{padding:12px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);border-bottom:1px solid var(--border);background:var(--bg-hover);display:flex;justify-content:space-between;align-items:center}.list-view .schema-sidebar-header .field-count-badge{font-size:11px;color:var(--text-secondary);background:var(--bg-primary);padding:2px 8px;border-radius:10px}.list-view .schema-fields-list{flex:1;overflow-y:auto;padding:8px 0}.list-view .schema-field-item{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-bottom:1px solid var(--border);transition:background .15s}.list-view .schema-field-item:hover{background:var(--bg-hover)}.list-view .schema-field-item:last-child{border-bottom:none}.list-view .schema-field-name{font-family:var(--font-mono);font-size:13px;color:var(--accent-interactive);display:flex;align-items:center;gap:4px}.list-view .schema-field-name.system-field{color:var(--text-secondary)}.list-view .schema-field-optional{font-size:10px;color:var(--warning);font-weight:600}.list-view .schema-field-type{font-family:var(--font-mono);font-size:12px;color:var(--text-secondary);background:var(--bg-primary);padding:2px 8px;border-radius:4px}.list-view .schema-indexes{border-top:1px solid var(--border);padding:12px 16px;background:var(--bg-hover)}.list-view .schema-indexes-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);margin-bottom:8px}.list-view .schema-index-item{font-family:var(--font-mono);font-size:12px;color:var(--accent);padding:4px 0}.list-view .documents-main{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary);min-width:0;min-height:0}.list-view .documents-toolbar{padding:12px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.list-view .documents-toolbar-title{font-size:13px;font-weight:600;color:var(--text-primary);display:flex;align-items:center;gap:8px}.list-view .documents-toolbar-title .doc-count{font-weight:400;color:var(--text-secondary)}.list-view .documents-table-wrapper{flex:1;min-height:0;overflow:auto;padding:0}.list-view .documents-table-wrapper table{width:100%;border-collapse:collapse;font-size:13px}.list-view .documents-table-wrapper th{position:sticky;top:0;background:var(--bg-hover);font-weight:600;text-align:left;padding:12px 16px;border-bottom:2px solid var(--border);white-space:nowrap;z-index:1}.list-view .documents-table-wrapper td{padding:10px 16px;border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:12px;vertical-align:top;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-view .documents-table-wrapper tr:hover td{background:var(--bg-secondary)}.list-view .documents-table-wrapper td.id-cell{color:var(--accent-interactive);cursor:pointer}.list-view .documents-table-wrapper td.id-cell:hover{text-decoration:underline}.list-view .pagination-bar{padding:12px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.list-view .pagination-info{font-size:13px;color:var(--text-secondary)}.list-view .pagination-controls{display:flex;align-items:center;gap:8px}.list-view .pagination-controls button{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text-primary);font-size:14px;transition:all .15s}.list-view .pagination-controls button:hover:not(:disabled){background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.list-view .pagination-controls button:disabled{opacity:.4;cursor:not-allowed}.list-view .pagination-controls .page-indicator{font-size:13px;color:var(--text-secondary);min-width:80px;text-align:center}.list-view .documents-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--text-secondary);text-align:center}.list-view .documents-empty-icon{font-size:48px;margin-bottom:16px;opacity:.5}.list-view .documents-empty h3{font-size:16px;color:var(--text-primary);margin-bottom:4px}.list-view .documents-empty p{font-size:13px}.list-view .schema-panel,.list-view .documents-panel{display:none!important}.sidebar-container{display:flex;flex-shrink:0;position:relative}.sidebar-container.collapsed .sidebar{width:48px!important;min-width:48px!important;overflow:hidden}.sidebar-container.collapsed .sidebar .sidebar-header{padding:12px;justify-content:center}.sidebar-container.collapsed .sidebar .sidebar-header>span{display:none}.sidebar-container.collapsed .sidebar .sidebar-header .sidebar-collapse-btn{margin-left:0}.sidebar-container.collapsed .sidebar .sidebar-search,.sidebar-container.collapsed .sidebar .table-list{display:none}.sidebar-container.collapsed .code-panel{width:0!important;min-width:0!important;padding:0;overflow:hidden;border:none}.sidebar-container.collapsed .resize-handle{display:none}.resize-handle{width:4px;cursor:col-resize;background:transparent;transition:background .2s;position:relative;z-index:10}.resize-handle:hover,.resize-handle.dragging{background:var(--accent-interactive)}.resize-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:40px;border-radius:2px;background:var(--border);opacity:0;transition:opacity .2s}.resize-handle:hover:after{opacity:1;background:#fff}.sidebar-toggle{display:none}.list-view .sidebar-header{position:relative}.list-view .sidebar-header .sidebar-collapse-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px;height:24px;background:var(--bg-hover);border:1px solid var(--border);border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .2s}.list-view .sidebar-header .sidebar-collapse-btn:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.list-view .sidebar-header .sidebar-collapse-btn svg{width:12px;height:12px;transition:transform .2s}.sidebar-container.collapsed .sidebar-collapse-btn svg{transform:rotate(180deg)}.list-view .sidebar{min-width:180px;max-width:400px}.list-view .sidebar-container{height:100%}.toolbar{display:flex;align-items:center;padding:8px 16px;background:var(--bg-secondary);border-bottom:1px solid var(--border);gap:4px;flex-shrink:0;width:100%;z-index:10}.toolbar-group{display:flex;align-items:center;gap:2px}.toolbar-separator{width:1px;height:24px;background:var(--border);margin:0 8px}.toolbar-spacer{flex:1}.toolbar-btn{display:flex;align-items:center;gap:6px;padding:6px 10px;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-secondary);font-size:13px;cursor:pointer;transition:all .15s ease}.toolbar-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary);border-color:var(--border)}.toolbar-btn.active{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.toolbar-btn.active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.toolbar-btn.icon-only{padding:6px}.toolbar-btn svg{flex-shrink:0}.toolbar-btn .dropdown-arrow{margin-left:2px;opacity:.6}.zoom-group{display:flex;align-items:center;gap:4px;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;padding:2px}.zoom-group .toolbar-btn{border-radius:4px}.zoom-display{min-width:48px;text-align:center;font-size:12px;font-weight:500;color:var(--text-secondary);font-family:var(--font-mono)}.graph-content{display:flex;flex:1;overflow:hidden;flex-direction:row}.graph-content .enhanced-sidebar{order:0}.graph-content .graph-panel{order:1;flex:1}.graph-content .sidebar-container{order:2}.sidebar-container.hidden .code-panel{width:0!important;min-width:0;padding:0;overflow:hidden;border:none}.sidebar-container.hidden .resize-handle{display:none}.sidebar-container.hidden .sidebar-toggle{left:0;border-radius:0 6px 6px 0}.zoom-panel{position:absolute;bottom:20px;left:20px;display:flex;flex-direction:column;gap:4px;background:#fff;border:1px solid var(--border);border-radius:10px;padding:8px;box-shadow:0 4px 12px #0000001a;z-index:10}.zoom-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.zoom-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.zoom-btn:active{background:var(--accent-interactive);color:#fff}.zoom-level{text-align:center;font-size:11px;font-weight:500;color:var(--text-secondary);font-family:var(--font-mono);padding:4px 0}.zoom-separator{height:1px;background:var(--border);margin:4px 0}.dropdown-menu{position:absolute;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #0000001f;z-index:100;overflow:hidden;min-width:180px}.export-menu{top:52px;left:140px}.dropdown-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;background:transparent;border:none;color:var(--text-primary);font-size:13px;cursor:pointer;transition:background .15s ease;text-align:left}.dropdown-item:hover{background:var(--bg-hover)}.dropdown-item svg{color:var(--text-secondary)}.filter-menu{position:absolute;top:52px;right:200px;width:280px}.filter-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:14px}.filter-close{background:none;border:none;font-size:18px;color:var(--text-secondary);cursor:pointer;padding:0;line-height:1}.filter-close:hover{color:var(--text-primary)}.filter-body{padding:16px}.filter-group{margin-bottom:14px}.filter-group:last-child{margin-bottom:0}.filter-group label{display:block;font-size:12px;font-weight:500;color:var(--text-secondary);margin-bottom:6px}.filter-group input[type=text],.filter-group select{width:100%;padding:8px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;font-size:13px;color:var(--text-primary)}.filter-group input[type=text]:focus,.filter-group select:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.filter-group.checkbox label{display:flex;align-items:center;gap:8px;cursor:pointer}.filter-group.checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent-interactive)}.filter-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-secondary)}.filter-footer .btn{padding:6px 14px;font-size:13px}.btn-secondary{background:var(--bg-primary);border:1px solid var(--border);color:var(--text-primary)}.btn-secondary:hover{background:var(--bg-hover)}.enhanced-sidebar{width:260px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;height:100%;margin:0;padding:0;position:relative;transition:width .2s ease,min-width .2s ease}.graph-sidebar-toggle{position:absolute;top:50%;right:-14px;transform:translateY(-50%);width:28px;height:48px;background:var(--bg-secondary);border:1px solid var(--border);border-left:none;border-radius:0 8px 8px 0;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);z-index:20;transition:all .15s ease;box-shadow:2px 0 8px #0000000d}.graph-sidebar-toggle:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.graph-sidebar-toggle svg{transition:transform .2s ease}.enhanced-sidebar.collapsed{width:0!important;min-width:0!important;border-right:none;overflow:visible}.enhanced-sidebar.collapsed .sidebar-deployment,.enhanced-sidebar.collapsed .sidebar-section{display:none}.enhanced-sidebar.collapsed .graph-sidebar-toggle{right:-28px;border-left:1px solid var(--border);border-radius:0 8px 8px 0}.sidebar-deployment{padding:14px 16px;border-bottom:1px solid var(--border);background:linear-gradient(to bottom,var(--bg-hover),var(--bg-secondary))}.deployment-status{display:flex;align-items:center;gap:8px;margin-bottom:4px}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--success)}.status-indicator.error{background:var(--accent-interactive)}.deployment-label{font-size:13px;font-weight:600;color:var(--text-primary)}.deployment-url-small{font-size:11px;font-family:var(--font-mono);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-section{border-bottom:1px solid var(--border)}.section-header{display:flex;align-items:center;gap:8px;padding:12px 14px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s ease}.section-header:hover{background:var(--bg-hover)}.section-chevron{transition:transform .2s ease;color:var(--text-secondary)}.sidebar-section:not(.collapsed) .section-chevron{transform:rotate(90deg)}.section-title{font-size:11px;font-weight:600;letter-spacing:.5px;color:var(--text-secondary);text-transform:uppercase}.section-count{margin-left:auto;font-size:11px;color:var(--text-secondary);background:var(--bg-hover);padding:2px 8px;border-radius:10px}.section-content{max-height:500px;overflow:hidden;transition:max-height .3s ease,opacity .2s ease}.sidebar-section.collapsed .section-content{max-height:0;opacity:0}.sidebar-toolbar{display:flex;gap:6px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-primary)}.sidebar-filter{flex:1;padding:6px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;font-size:12px;color:var(--text-primary)}.sidebar-filter:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.sort-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.sort-btn:hover{background:var(--bg-hover);border-color:var(--accent);color:var(--text-primary)}.sidebar-table-list{list-style:none;max-height:400px;overflow-y:auto;padding:4px 0}.sidebar-table-item{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;cursor:pointer;transition:background .15s ease}.sidebar-table-item:hover{background:var(--bg-hover)}.sidebar-table-item.active{background:var(--accent-interactive)}.sidebar-table-item.active .table-name,.sidebar-table-item.active .table-icon{color:#fff}.sidebar-table-item.active .table-item-meta span{background:#fff3;color:#fff}.sidebar-table-item.filtered-out{opacity:.4}.table-item-main{display:flex;align-items:center;gap:8px;min-width:0}.table-icon{flex-shrink:0;color:var(--text-secondary)}.sidebar-table-item .table-name{font-size:13px;font-weight:500;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-item-meta{display:flex;align-items:center;gap:6px}.field-count,.doc-count{font-size:10px;padding:2px 6px;border-radius:8px;background:var(--bg-hover);color:var(--text-secondary)}.field-count{background:#eb56011a;color:var(--accent-interactive)}.convex-info-list{padding:8px 14px}.convex-info-item{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)}.convex-info-item:last-child{border-bottom:none}.info-label{font-size:12px;color:var(--text-secondary)}.info-value{font-size:12px;font-weight:600;color:var(--text-primary)}.legend-line.dashed{background:repeating-linear-gradient(to right,var(--accent) 0px,var(--accent) 4px,transparent 4px,transparent 8px)}.graph-view .sidebar-container{display:flex;flex-direction:row;flex-shrink:0;position:relative;border-left:1px solid var(--border);height:100%}.graph-view .sidebar-container .code-panel{border-right:none;border-left:none;min-width:200px;max-width:600px}.resize-handle-left{cursor:col-resize;width:4px;background:transparent;transition:background .2s}.resize-handle-left:hover,.resize-handle-left.dragging{background:var(--accent-interactive)}.sidebar-toggle-right{position:absolute;top:12px;left:-32px;right:auto}.sidebar-toggle-right svg{transform:rotate(180deg)}.sidebar-container.collapsed .sidebar-toggle-right{left:-24px}.sidebar-container.collapsed .sidebar-toggle-right svg{transform:rotate(0)}.sidebar-container.hidden{display:none}.tooltip{position:fixed;z-index:1000;max-width:280px;padding:10px 14px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000001f;font-size:12px;line-height:1.5;animation:tooltipFadeIn .2s ease;pointer-events:none}@keyframes tooltipFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.tooltip-title{font-weight:600;color:var(--text-primary);margin-bottom:4px}.tooltip-content{color:var(--text-secondary)}.tooltip-content code{background:var(--bg-secondary);padding:1px 5px;border-radius:4px;font-family:var(--font-mono);font-size:11px;color:var(--accent-interactive)}.tooltip-content strong{color:var(--text-primary)}.tooltip-content em{color:var(--warning);font-style:normal}.tooltip-system{border-left:3px solid var(--text-secondary)}.tooltip-field{border-left:3px solid var(--accent-interactive)}.tooltip-relationship{border-left:3px solid var(--accent)}.loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:#faf8f5e6;display:flex;align-items:center;justify-content:center;z-index:50}.loading-content{text-align:center}.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 16px}.loading-text{color:var(--text-secondary);font-size:14px}.skeleton-sidebar{padding:16px}.skeleton-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.skeleton-icon{width:20px;height:20px;border-radius:4px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}.skeleton-text{flex:1;height:14px;border-radius:4px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}.skeleton-badge{width:32px;height:18px;border-radius:9px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.empty-state-enhanced{text-align:center;padding:60px 30px;color:var(--text-secondary)}.empty-icon{font-size:48px;margin-bottom:16px;opacity:.6}.empty-title{font-size:18px;font-weight:600;color:var(--text-primary);margin-bottom:8px}.empty-description{font-size:14px;margin-bottom:20px;max-width:320px;margin-left:auto;margin-right:auto}.empty-action .btn{display:inline-flex;align-items:center;gap:8px}.table-card,.sidebar-table-item{transition:transform .15s ease,box-shadow .15s ease}.graph-view,.list-view{animation:viewFadeIn .3s ease}@keyframes viewFadeIn{0%{opacity:0}to{opacity:1}}.toolbar-btn:active,.zoom-btn:active,.graph-btn:active{transform:scale(.95)}.toolbar-btn:focus-visible,.zoom-btn:focus-visible,.btn:focus-visible{outline:2px solid var(--accent-interactive);outline-offset:2px}@media(min-width:1600px){.enhanced-sidebar{width:300px}.graph-view .sidebar-container .code-panel{width:420px!important}.sidebar-table-list{max-height:600px}}@media(min-width:1920px){.enhanced-sidebar{width:320px}.graph-view .sidebar-container .code-panel{width:480px!important}}@media(max-width:1200px){.enhanced-sidebar{width:220px}.code-panel{width:300px!important}}@media(max-width:900px){.toolbar-btn span{display:none}.toolbar-btn,.toolbar-btn.icon-only{padding:6px}.zoom-display{min-width:40px;font-size:11px}.enhanced-sidebar{width:180px}.sidebar-deployment{padding:10px 12px}.deployment-label{font-size:12px}}@media print{.toolbar,.enhanced-sidebar,.sidebar-container,.zoom-panel,.graph-legend{display:none!important}.graph-panel{width:100%!important}}.shortcuts-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.shortcuts-modal-content{background:var(--bg-primary);border-radius:12px;box-shadow:var(--shadow-lg);max-width:480px;width:90%;max-height:80vh;overflow:hidden}.shortcuts-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.shortcuts-modal-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-primary)}.shortcuts-close{background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-secondary);padding:0;line-height:1}.shortcuts-close:hover{color:var(--text-primary)}.shortcuts-modal-body{padding:20px;overflow-y:auto;max-height:calc(80vh - 60px)}.shortcuts-section{margin-bottom:20px}.shortcuts-section:last-child{margin-bottom:0}.shortcuts-section h4{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:0 0 12px}.shortcut-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-size:13px;color:var(--text-primary)}.shortcut-item kbd{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 8px;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:4px;font-family:var(--font-mono);font-size:11px;color:var(--text-primary)}*{box-sizing:border-box;margin:0;padding:0}html{width:100%;height:100%}body{width:100%;min-height:100%;overflow-x:hidden;overflow-y:auto}:root{--bg-primary: #faf8f5;--bg-secondary: #f5f3f0;--bg-hover: #ebe9e6;--text-primary: #1a1a1a;--text-secondary: #6b6b6b;--border: #e6e4e1;--accent: #8b7355;--accent-interactive: #eb5601;--accent-hover: #d14a01;--success: #4a8c5c;--warning: #c4842d;--info: #4a7c9b;--font-mono: "SF Mono", Monaco, "Cascadia Code", "Courier New", monospace;--chart-gradient-start: #eb5601;--chart-gradient-end: #d14a01;--chart-area-opacity: .1}[data-theme=dark]{--bg-primary: #1e1e1e;--bg-secondary: #252526;--bg-hover: #37373d;--text-primary: #cccccc;--text-secondary: #8b8b8b;--border: #3c3c3c;--accent: #c9a87c;--accent-interactive: #ff6b35;--accent-hover: #ff8555;--success: #4ec9b0;--warning: #dcdcaa;--info: #4fc1ff;--chart-gradient-start: #ff6b35;--chart-gradient-end: #ff8555;--chart-area-opacity: .15}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;padding:16px 20px 40px;margin:0}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h1{font-size:20px;display:flex;align-items:center;gap:10px;color:var(--text-primary)}.header-right{display:flex;align-items:center;gap:16px}.deployment-url{font-size:12px;color:var(--text-secondary);font-family:var(--font-mono);margin-right:16px}.last-update{color:var(--text-secondary);font-size:12px}.theme-toggle-btn{background:var(--bg-hover);border:1px solid var(--border);color:var(--text-primary);width:32px;height:32px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s ease}.theme-toggle-btn:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.chart-subtitle{font-size:12px;color:var(--text-secondary)}.pie-legend{padding:20px}.pie-item{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--border)}.pie-item:last-child{border-bottom:none}.pie-color{width:12px;height:12px;border-radius:2px}.pie-label{flex:1;font-size:13px}.pie-value{font-family:var(--font-mono);font-size:12px;color:var(--text-secondary)}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse 2s infinite}.status-dot.disconnected{background:var(--accent-interactive);animation:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:24px}.metric-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:20px;transition:transform .2s,box-shadow .2s}.metric-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000014}.metric-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.metric-label{font-size:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;font-weight:600}.metric-icon{width:32px;height:32px;background:var(--bg-hover);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--accent)}.metric-value{font-size:36px;font-weight:700;margin-bottom:8px;font-family:var(--font-mono);color:var(--text-primary)}.metric-change{font-size:13px;display:flex;align-items:center;gap:4px}.metric-change.positive{color:var(--success)}.metric-change.negative{color:var(--accent-interactive)}.metric-change.neutral{color:var(--text-secondary)}.metric-source{font-size:11px;color:var(--text-secondary);margin-top:8px;font-family:var(--font-mono)}.charts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:16px}@media(max-width:900px){.charts-grid{grid-template-columns:1fr}}.chart-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:20px}.chart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.chart-title{font-size:14px;font-weight:600;color:var(--text-primary)}.chart-actions{display:flex;gap:8px}.chart-btn{background:var(--bg-hover);border:1px solid var(--border);color:var(--text-secondary);padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;transition:all .2s}.chart-btn:hover{color:var(--text-primary);border-color:var(--accent)}.chart-btn.active{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.chart-container{height:220px;background:var(--bg-hover);border-radius:8px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.bar-chart{display:flex;align-items:flex-end;justify-content:space-around;height:100%;width:100%;padding:20px;gap:8px}.bar{flex:1;max-width:40px;background:linear-gradient(to top,var(--accent-interactive),var(--accent-hover));border-radius:4px 4px 0 0;transition:height .3s ease;position:relative;min-height:4px}.bar:after{content:attr(data-value);position:absolute;top:-20px;left:50%;transform:translate(-50%);font-size:11px;color:var(--text-secondary);font-family:var(--font-mono)}.bar-label{position:absolute;bottom:-20px;left:50%;transform:translate(-50%);font-size:10px;color:var(--text-secondary);white-space:nowrap}.tables-overview-card{grid-column:1 / -1}.tables-overview-container{max-height:400px;overflow-y:auto;overflow-x:hidden;padding:0 4px}.horizontal-bar-chart{display:flex;flex-direction:column;gap:8px;padding:12px 0}.h-bar-row{display:grid;grid-template-columns:140px 1fr 60px;align-items:center;gap:12px;padding:6px 8px;border-radius:6px;transition:background .15s ease}.h-bar-row:hover{background:var(--bg-hover)}.h-bar-label{font-size:12px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font-mono)}.h-bar-track{height:20px;background:var(--bg-hover);border-radius:4px;overflow:hidden;position:relative}.h-bar-fill{height:100%;background:linear-gradient(to right,var(--accent-interactive),var(--accent-hover));border-radius:4px;transition:width .4s cubic-bezier(.4,0,.2,1);min-width:2px}.h-bar-value{font-size:12px;font-weight:600;color:var(--text-secondary);font-family:var(--font-mono);text-align:right}.tables-overview-container::-webkit-scrollbar{width:6px}.tables-overview-container::-webkit-scrollbar-track{background:var(--bg-hover);border-radius:3px}.tables-overview-container::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.tables-overview-container::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media(max-width:600px){.h-bar-row{grid-template-columns:100px 1fr 50px;gap:8px}.h-bar-label,.h-bar-value{font-size:11px}}.recent-activity-card{grid-column:1 / -1}.recent-activity-container{max-height:400px;overflow-y:auto;overflow-x:auto}.activity-table{width:100%;border-collapse:collapse;font-size:13px}.activity-table thead{position:sticky;top:0;z-index:1}.activity-table th{background:var(--bg-secondary);font-weight:600;text-align:left;padding:12px 16px;border-bottom:2px solid var(--border);color:var(--text-primary);font-size:11px;text-transform:uppercase;letter-spacing:.5px}.activity-table td{padding:12px 16px;border-bottom:1px solid var(--border);vertical-align:middle}.activity-table tbody tr{transition:background .15s ease}.activity-table tbody tr:hover{background:var(--bg-hover)}.table-badge{display:inline-block;padding:4px 10px;background:var(--bg-hover);border-radius:4px;font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--text-primary)}.id-cell{font-family:var(--font-mono);color:var(--accent);font-size:12px}.time-cell{color:var(--text-secondary);font-size:12px;white-space:nowrap}.recent-activity-container::-webkit-scrollbar{width:6px;height:6px}.recent-activity-container::-webkit-scrollbar-track{background:var(--bg-hover);border-radius:3px}.recent-activity-container::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.recent-activity-container::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media(max-width:600px){.activity-table th,.activity-table td{padding:10px 12px}.table-badge{font-size:11px;padding:3px 8px}.id-cell,.time-cell{font-size:11px}}.line-chart{width:100%;height:100%;padding:20px}.line-chart svg{width:100%;height:100%}.line-chart path{fill:none;stroke:var(--accent-interactive);stroke-width:2}.line-chart .area{fill:var(--accent-interactive);opacity:.1}.table-chart{width:100%;height:100%;overflow:auto;padding:0}.table-chart table{width:100%;border-collapse:collapse;font-size:12px}.table-chart th,.table-chart td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}.table-chart th{background:var(--bg-secondary);font-weight:600;position:sticky;top:0;color:var(--text-primary)}.table-chart tr:hover td{background:#eb56010d}.empty-state{text-align:center;color:var(--text-secondary);padding:40px}.empty-state h3{color:var(--text-primary);margin-bottom:8px;font-size:16px}.empty-state p{font-size:13px}.loading{display:flex;align-items:center;justify-content:center;gap:12px;color:var(--text-secondary)}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite}@media(max-width:600px){body{padding:12px}.header{flex-direction:column;align-items:flex-start;gap:12px}.metrics-grid{grid-template-columns:1fr}.metric-value{font-size:28px}}:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--text-primary: #f0f6fc;--text-secondary: #8b949e;--text-muted: #484f58;--border-color: #30363d;--accent-color: #58a6ff;--success-color: #3fb950;--warning-color: #d29922;--error-color: #f85149;--processing-color: #58a6ff}[data-theme=github-light]{--bg-primary: #ffffff;--bg-secondary: #f6f8fa;--bg-tertiary: #eaeef2;--text-primary: #1f2328;--text-secondary: #656d76;--text-muted: #8c959f;--border-color: #d0d7de;--accent-color: #0969da;--success-color: #1a7f37;--warning-color: #9a6700;--error-color: #cf222e;--processing-color: #0969da}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;background:var(--bg-primary);color:var(--text-primary);line-height:1.5;min-height:100vh}#app{padding:24px;max-width:1600px;margin:0 auto}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border-color)}.header h1{font-size:24px;font-weight:600}.header-meta{display:flex;align-items:center;gap:16px}.deployment{font-size:13px;color:var(--text-secondary);padding:4px 8px;background:var(--bg-secondary);border-radius:4px}.theme-toggle{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;padding:6px 10px;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;gap:6px;font-size:12px;transition:background .15s}.theme-toggle:hover{background:var(--bg-tertiary);color:var(--text-primary)}.mode-tabs{display:flex;gap:8px;margin-bottom:24px}.mode-tab{padding:10px 20px;border-radius:6px;border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:500;transition:all .15s}.mode-tab:hover{background:var(--bg-tertiary);color:var(--text-primary)}.mode-tab.active{background:var(--accent-color);color:#fff;border-color:var(--accent-color)}.section{margin-bottom:32px}.section-header{margin-bottom:16px}.section-title{font-size:18px;font-weight:600;margin-bottom:4px}.section-subtitle{font-size:13px;color:var(--text-secondary)}.kanban-container{display:flex;gap:16px;overflow-x:auto;padding:4px 0 16px;min-height:400px}.kanban-column{flex:0 0 300px;background:var(--bg-secondary);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;max-height:calc(100vh - 240px)}.column-header{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border-color)}.column-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.column-title{font-weight:600;font-size:14px;flex:1}.column-count{background:var(--bg-tertiary);padding:2px 10px;border-radius:12px;font-size:12px;color:var(--text-secondary);font-weight:500}.column-items{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px}.kanban-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;padding:14px;cursor:pointer;transition:transform .1s,box-shadow .1s,border-color .15s}.kanban-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026;border-color:var(--accent-color)}.card-title{font-weight:500;font-size:14px;margin-bottom:6px;word-break:break-word;color:var(--text-primary)}.card-meta{font-size:12px;color:var(--text-secondary);margin-bottom:8px}.card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.card-badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.badge-cron{background:#8b5cf633;color:#a78bfa}.badge-scheduled{background:#3b82f633;color:#60a5fa}.badge-agent{background:#22c55e33;color:#4ade80}.badge-error{background:#f8514933;color:#f87171}.status-pending{color:var(--warning-color)}.status-running{color:var(--processing-color)}.status-completed{color:var(--success-color)}.status-failed{color:var(--error-color)}.status-idle{color:var(--text-secondary)}.status-processing{color:var(--processing-color)}.status-waiting{color:var(--warning-color)}.empty-state{text-align:center;padding:60px 20px;color:var(--text-secondary)}.empty-state p{margin-bottom:12px}.empty-state a{color:var(--accent-color);text-decoration:none}.empty-state a:hover{text-decoration:underline}.loading{display:flex;align-items:center;justify-content:center;padding:60px;color:var(--text-secondary)}.loading-spinner{width:24px;height:24px;border:2px solid var(--border-color);border-top-color:var(--accent-color);border-radius:50%;animation:spin .8s linear infinite;margin-right:12px}@keyframes spin{to{transform:rotate(360deg)}}.column-items::-webkit-scrollbar{width:6px}.column-items::-webkit-scrollbar-track{background:transparent}.column-items::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.column-items::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media(max-width:768px){#app{padding:16px}.kanban-column{flex:0 0 280px}.header{flex-direction:column;gap:12px;align-items:flex-start}}
|
|
1
|
+
html,body{width:100%;height:100%;overflow:hidden}:root{--bg-primary: #faf8f5;--bg-secondary: #f5f3f0;--bg-tertiary: #ebe9e6;--bg-hover: #ebe9e6;--bg-canvas: #faf8f5;--text-primary: #1a1a1a;--text-secondary: #6b6b6b;--text-muted: #999999;--border: #e6e4e1;--border-strong: #d4d2cf;--accent: #8b7355;--accent-interactive: #eb5601;--accent-hover: #d14a01;--success: #4a8c5c;--warning: #c4842d;--warning-bg: #fef3e2;--warning-text: #8a5a00;--error: #dc3545;--info: #4a7c9b;--font-mono: "SF Mono", Monaco, "Cascadia Code", "Courier New", monospace;--code-bg: #1e1e1e;--code-text: #d4d4d4;--code-key: #9cdcfe;--code-string: #ce9178;--code-number: #b5cea8;--code-boolean: #569cd6;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .12);--node-bg: #ffffff;--node-header: #f8f7f5;--node-header-selected: #eb5601;--node-border: #e6e4e1;--grid-line: #e6e4e1}[data-theme=dark]{--bg-primary: #1e1e1e;--bg-secondary: #252526;--bg-tertiary: #2d2d2d;--bg-hover: #37373d;--bg-canvas: #1e1e1e;--text-primary: #cccccc;--text-secondary: #8b8b8b;--text-muted: #6b6b6b;--border: #3c3c3c;--border-strong: #4a4a4a;--accent: #c9a87c;--accent-interactive: #ff6b35;--accent-hover: #ff8555;--success: #4ec9b0;--warning: #dcdcaa;--warning-bg: #3d3520;--warning-text: #dcdcaa;--error: #f14c4c;--info: #4fc1ff;--code-bg: #1e1e1e;--code-text: #d4d4d4;--code-key: #9cdcfe;--code-string: #ce9178;--code-number: #b5cea8;--code-boolean: #569cd6;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .5);--node-bg: #2d2d2d;--node-header: #37373d;--node-header-selected: #ff6b35;--node-border: #4a4a4a;--grid-line: #2d2d2d}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;display:flex;flex-direction:column;margin:0;padding:0}.header{background:var(--bg-secondary);padding:10px 16px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.header h1{font-size:18px;font-weight:600;display:flex;align-items:center;gap:8px;color:var(--text-primary)}.header-info{flex:1;margin:0 16px}.deployment-url{font-size:12px;color:var(--text-secondary);font-family:var(--font-mono)}.header-actions{display:flex;gap:8px;align-items:center}.theme-toggle{width:36px;height:36px;background:var(--bg-hover);border:1px solid var(--border);border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .2s ease}.theme-toggle:hover{background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.theme-toggle svg{width:18px;height:18px}.theme-toggle .sun-icon{display:none}.theme-toggle .moon-icon,[data-theme=dark] .theme-toggle .sun-icon{display:block}[data-theme=dark] .theme-toggle .moon-icon{display:none}.btn{background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);padding:6px 12px;border-radius:6px;cursor:pointer;font-size:13px;transition:all .2s}.btn:hover{background:var(--bg-hover);border-color:var(--accent)}.btn-primary{background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.main{display:flex;flex:1;overflow:hidden}.sidebar{width:260px;background:var(--bg-secondary);border-right:1px solid var(--border);overflow-y:auto;flex-shrink:0;display:flex;flex-direction:column;margin:0;padding:0}.sidebar-header{padding:12px 16px;font-size:11px;text-transform:uppercase;color:var(--text-secondary);border-bottom:1px solid var(--border);display:flex;align-items:center;font-weight:600;letter-spacing:.5px;gap:8px;position:relative}.sidebar-header #tableCount{background:var(--bg-hover);padding:2px 8px;border-radius:10px;font-size:11px}.sidebar-header .sidebar-collapse-btn{margin-left:auto;width:24px;height:24px;background:var(--bg-hover);border:1px solid transparent;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .15s;flex-shrink:0}.sidebar-header .sidebar-collapse-btn:hover{background:var(--accent-interactive);color:#fff}.sidebar-header .sidebar-collapse-btn svg{transition:transform .2s}.sidebar-search{padding:8px 12px;border-bottom:1px solid var(--border)}.sidebar-search input{width:100%;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;padding:8px 10px;color:var(--text-primary);font-size:13px}.sidebar-search input:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.table-list{list-style:none;flex:1;overflow-y:auto}.table-item{padding:10px 16px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);transition:background .2s}.table-item:hover{background:var(--bg-hover)}.table-item.active{background:var(--accent-interactive);color:#fff}.table-item.active .table-count{background:#fff3;color:#fff}.table-item.active .table-icon{opacity:1}.table-name{font-size:14px;font-weight:500;display:flex;align-items:center;gap:6px}.table-icon{opacity:.5}.table-count{font-size:12px;color:var(--text-secondary);background:var(--bg-hover);padding:2px 8px;border-radius:10px}.content{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary)}.schema-panel{padding:20px;flex:1;overflow-y:auto}.schema-title{font-size:22px;margin-bottom:8px;display:flex;align-items:center;gap:12px;color:var(--text-primary)}.schema-subtitle{color:var(--text-secondary);font-size:13px;margin-bottom:20px}.schema-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}@media(max-width:900px){.schema-grid{grid-template-columns:1fr}}.schema-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;overflow:hidden}.schema-card-header{background:var(--bg-hover);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;color:var(--text-primary)}.schema-card-header .count{color:var(--text-secondary);font-weight:400;font-size:12px}.schema-card-body{padding:8px;max-height:400px;overflow-y:auto}.field-row{display:flex;justify-content:space-between;padding:8px 10px;border-radius:4px;font-size:13px;font-family:var(--font-mono)}.field-row:hover{background:var(--bg-hover)}.field-name{color:var(--accent-interactive)}.field-type{color:var(--text-secondary)}.field-optional{color:var(--warning);font-size:11px;margin-left:2px}.field-system{opacity:.6}.indexes-section{margin-top:20px}.indexes-title{font-size:14px;font-weight:600;margin-bottom:12px;color:var(--text-secondary)}.index-item{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:12px 16px;margin-bottom:8px}.index-name{font-family:var(--font-mono);font-size:13px;color:var(--accent-interactive);margin-bottom:4px}.index-fields{font-size:12px;color:var(--text-secondary)}.documents-panel{background:var(--bg-secondary);border-top:1px solid var(--border);max-height:320px;overflow:hidden;display:flex;flex-direction:column}.documents-header{padding:10px 16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);background:var(--bg-hover);flex-shrink:0}.documents-title{font-weight:600;font-size:14px;color:var(--text-primary)}.pagination{display:flex;align-items:center;gap:8px}.pagination button{background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);width:28px;height:28px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px}.pagination button:hover:not(:disabled){background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.pagination button:disabled{opacity:.5;cursor:not-allowed}.pagination span{font-size:13px;color:var(--text-secondary)}.documents-table{overflow:auto;flex:1}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}th{background:var(--bg-hover);font-weight:600;position:sticky;top:0;z-index:1;color:var(--text-primary)}td{font-family:var(--font-mono);font-size:12px}tr:hover td{background:var(--bg-hover)}td.id-cell{color:var(--accent-interactive);cursor:pointer}td.id-cell:hover{text-decoration:underline}td.null-value{color:var(--text-secondary);font-style:italic}td.truncated{max-width:200px;overflow:hidden;text-overflow:ellipsis}.empty-state h2{margin-bottom:8px;color:var(--text-primary);font-size:18px}.empty-state p{font-size:14px}.warning-badge{background:#c4842d1a;border:1px solid var(--warning);color:var(--warning);padding:10px 14px;border-radius:6px;font-size:13px;margin-top:16px;display:flex;align-items:center;gap:8px}.warning-badge:before{content:"⚠"}.loading{display:flex;align-items:center;justify-content:center;padding:40px;gap:12px;color:var(--text-secondary)}.spinner{width:24px;height:24px;border:2px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--success)}.status-dot.error{background:var(--accent-interactive)}.status-dot.warning{background:var(--warning)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#1a1a1a80;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg-primary);border:1px solid var(--border);border-radius:12px;width:90%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 40px #00000026}.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--bg-secondary)}.modal-header h2{font-size:16px;color:var(--text-primary)}.modal-close{background:none;border:none;color:var(--text-secondary);font-size:20px;cursor:pointer;padding:4px}.modal-close:hover{color:var(--text-primary)}.modal-body{padding:20px;flex:1;overflow-y:auto}.query-editor{width:100%;min-height:150px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:12px;color:var(--text-primary);font-family:var(--font-mono);font-size:13px;resize:vertical}.query-editor:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.modal-footer{padding:16px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;background:var(--bg-secondary)}kbd{background:var(--bg-secondary);border:1px solid var(--border);border-radius:3px;padding:2px 6px;font-size:11px;font-family:var(--font-mono)}.app-container{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;margin:0;padding:0;position:absolute;top:0;left:0}.view-toggle{display:flex;gap:4px;background:var(--bg-hover);padding:4px;border-radius:8px;margin-right:12px}.view-btn{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:all .2s}.view-btn:hover{color:var(--text-primary);background:var(--bg-secondary)}.view-btn.active{background:var(--accent-interactive);color:#fff}.graph-view{display:flex;flex-direction:column;flex:1;overflow:hidden}.graph-view .toolbar{order:-1}.code-panel{width:360px;background:#1e1e1e;border-right:1px solid #333;display:flex;flex-direction:column;flex-shrink:0}.code-header{padding:12px 16px;background:#252526;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;color:#ccc;font-size:12px}.code-filename{color:#888;font-family:var(--font-mono)}.code-content{flex:1;overflow:auto;padding:0}.code-content pre{margin:0;padding:16px;font-family:var(--font-mono);font-size:12px;line-height:1.6;color:#d4d4d4}.code-content code{font-family:inherit}.json-key{color:#9cdcfe}.json-string{color:#ce9178}.json-number{color:#b5cea8}.json-boolean,.json-null{color:#569cd6}.graph-panel{flex:1;position:relative;background:var(--bg-primary);overflow:hidden;min-width:0}#graphCanvas{width:100%;height:100%;display:block}.graph-controls{position:absolute;top:16px;right:16px;display:flex;flex-direction:column;gap:8px}.graph-btn{width:36px;height:36px;border:1px solid var(--border);background:#fff;color:var(--text-primary);border-radius:8px;cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;transition:all .2s;box-shadow:0 2px 8px #00000014}.graph-btn:hover{background:var(--bg-hover);border-color:var(--accent)}.graph-legend{position:absolute;bottom:16px;right:16px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:12px 16px;display:flex;flex-direction:column;gap:8px;font-size:12px;box-shadow:0 2px 8px #00000014}.legend-item{display:flex;align-items:center;gap:8px;color:var(--text-secondary)}.legend-dot{width:12px;height:12px;border-radius:4px;background:var(--accent-interactive)}.legend-dot.table{background:#fff;border:2px solid var(--border)}.legend-line{width:20px;height:2px;background:var(--accent)}.list-view{display:flex;flex:1;overflow:hidden}.list-view .content{display:flex;flex-direction:column;flex:1;overflow:hidden}.list-view .content #listViewContent{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.list-view .table-header{padding:16px 24px;border-bottom:1px solid var(--border);background:var(--bg-primary);flex-shrink:0}.list-view .table-header-title{font-size:24px;font-weight:600;color:var(--text-primary);margin-bottom:4px}.list-view .table-header-meta{font-size:13px;color:var(--text-secondary);display:flex;align-items:center;gap:12px}.list-view .table-header-meta .badge{background:var(--bg-hover);padding:2px 8px;border-radius:4px;font-size:12px}.list-view .content-split{display:flex;flex:1;min-height:0;overflow:hidden}.list-view .schema-sidebar{width:280px;min-width:240px;max-width:360px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;flex-shrink:0}.list-view .schema-sidebar-header{padding:12px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);border-bottom:1px solid var(--border);background:var(--bg-hover);display:flex;justify-content:space-between;align-items:center}.list-view .schema-sidebar-header .field-count-badge{font-size:11px;color:var(--text-secondary);background:var(--bg-primary);padding:2px 8px;border-radius:10px}.list-view .schema-fields-list{flex:1;overflow-y:auto;padding:8px 0}.list-view .schema-field-item{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-bottom:1px solid var(--border);transition:background .15s}.list-view .schema-field-item:hover{background:var(--bg-hover)}.list-view .schema-field-item:last-child{border-bottom:none}.list-view .schema-field-name{font-family:var(--font-mono);font-size:13px;color:var(--accent-interactive);display:flex;align-items:center;gap:4px}.list-view .schema-field-name.system-field{color:var(--text-secondary)}.list-view .schema-field-optional{font-size:10px;color:var(--warning);font-weight:600}.list-view .schema-field-type{font-family:var(--font-mono);font-size:12px;color:var(--text-secondary);background:var(--bg-primary);padding:2px 8px;border-radius:4px}.list-view .schema-indexes{border-top:1px solid var(--border);padding:12px 16px;background:var(--bg-hover)}.list-view .schema-indexes-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);margin-bottom:8px}.list-view .schema-index-item{font-family:var(--font-mono);font-size:12px;color:var(--accent);padding:4px 0}.list-view .documents-main{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary);min-width:0;min-height:0}.list-view .documents-toolbar{padding:12px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.list-view .documents-toolbar-title{font-size:13px;font-weight:600;color:var(--text-primary);display:flex;align-items:center;gap:8px}.list-view .documents-toolbar-title .doc-count{font-weight:400;color:var(--text-secondary)}.list-view .documents-table-wrapper{flex:1;min-height:0;overflow:auto;padding:0}.list-view .documents-table-wrapper table{width:100%;border-collapse:collapse;font-size:13px}.list-view .documents-table-wrapper th{position:sticky;top:0;background:var(--bg-hover);font-weight:600;text-align:left;padding:12px 16px;border-bottom:2px solid var(--border);white-space:nowrap;z-index:1}.list-view .documents-table-wrapper td{padding:10px 16px;border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:12px;vertical-align:top;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-view .documents-table-wrapper tr:hover td{background:var(--bg-secondary)}.list-view .documents-table-wrapper td.id-cell{color:var(--accent-interactive);cursor:pointer}.list-view .documents-table-wrapper td.id-cell:hover{text-decoration:underline}.list-view .pagination-bar{padding:12px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}.list-view .pagination-info{font-size:13px;color:var(--text-secondary)}.list-view .pagination-controls{display:flex;align-items:center;gap:8px}.list-view .pagination-controls button{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text-primary);font-size:14px;transition:all .15s}.list-view .pagination-controls button:hover:not(:disabled){background:var(--accent-interactive);border-color:var(--accent-interactive);color:#fff}.list-view .pagination-controls button:disabled{opacity:.4;cursor:not-allowed}.list-view .pagination-controls .page-indicator{font-size:13px;color:var(--text-secondary);min-width:80px;text-align:center}.list-view .documents-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--text-secondary);text-align:center}.list-view .documents-empty-icon{font-size:48px;margin-bottom:16px;opacity:.5}.list-view .documents-empty h3{font-size:16px;color:var(--text-primary);margin-bottom:4px}.list-view .documents-empty p{font-size:13px}.list-view .schema-panel,.list-view .documents-panel{display:none!important}.sidebar-container{display:flex;flex-shrink:0;position:relative}.sidebar-container.collapsed .sidebar{width:48px!important;min-width:48px!important;overflow:hidden}.sidebar-container.collapsed .sidebar .sidebar-header{padding:12px;justify-content:center}.sidebar-container.collapsed .sidebar .sidebar-header>span{display:none}.sidebar-container.collapsed .sidebar .sidebar-header .sidebar-collapse-btn{margin-left:0}.sidebar-container.collapsed .sidebar .sidebar-search,.sidebar-container.collapsed .sidebar .table-list{display:none}.sidebar-container.collapsed .code-panel{width:0!important;min-width:0!important;padding:0;overflow:hidden;border:none}.sidebar-container.collapsed .resize-handle{display:none}.resize-handle{width:4px;cursor:col-resize;background:transparent;transition:background .2s;position:relative;z-index:10}.resize-handle:hover,.resize-handle.dragging{background:var(--accent-interactive)}.resize-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:40px;border-radius:2px;background:var(--border);opacity:0;transition:opacity .2s}.resize-handle:hover:after{opacity:1;background:#fff}.sidebar-toggle{display:none}.list-view .sidebar-header{position:relative}.list-view .sidebar-header .sidebar-collapse-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px;height:24px;background:var(--bg-hover);border:1px solid var(--border);border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .2s}.list-view .sidebar-header .sidebar-collapse-btn:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.list-view .sidebar-header .sidebar-collapse-btn svg{width:12px;height:12px;transition:transform .2s}.sidebar-container.collapsed .sidebar-collapse-btn svg{transform:rotate(180deg)}.list-view .sidebar{min-width:180px;max-width:400px}.list-view .sidebar-container{height:100%}.toolbar{display:flex;align-items:center;padding:8px 16px;background:var(--bg-secondary);border-bottom:1px solid var(--border);gap:4px;flex-shrink:0;width:100%;z-index:10}.toolbar-group{display:flex;align-items:center;gap:2px}.toolbar-separator{width:1px;height:24px;background:var(--border);margin:0 8px}.toolbar-spacer{flex:1}.toolbar-btn{display:flex;align-items:center;gap:6px;padding:6px 10px;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-secondary);font-size:13px;cursor:pointer;transition:all .15s ease}.toolbar-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary);border-color:var(--border)}.toolbar-btn.active{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.toolbar-btn.active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.toolbar-btn.icon-only{padding:6px}.toolbar-btn svg{flex-shrink:0}.toolbar-btn .dropdown-arrow{margin-left:2px;opacity:.6}.zoom-group{display:flex;align-items:center;gap:4px;background:var(--bg-primary);border:1px solid var(--border);border-radius:6px;padding:2px}.zoom-group .toolbar-btn{border-radius:4px}.zoom-display{min-width:48px;text-align:center;font-size:12px;font-weight:500;color:var(--text-secondary);font-family:var(--font-mono)}.graph-content{display:flex;flex:1;overflow:hidden;flex-direction:row}.graph-content .enhanced-sidebar{order:0}.graph-content .graph-panel{order:1;flex:1}.graph-content .sidebar-container{order:2}.sidebar-container.hidden .code-panel{width:0!important;min-width:0;padding:0;overflow:hidden;border:none}.sidebar-container.hidden .resize-handle{display:none}.sidebar-container.hidden .sidebar-toggle{left:0;border-radius:0 6px 6px 0}.zoom-panel{position:absolute;bottom:20px;left:20px;display:flex;flex-direction:column;gap:4px;background:#fff;border:1px solid var(--border);border-radius:10px;padding:8px;box-shadow:0 4px 12px #0000001a;z-index:10}.zoom-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.zoom-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.zoom-btn:active{background:var(--accent-interactive);color:#fff}.zoom-level{text-align:center;font-size:11px;font-weight:500;color:var(--text-secondary);font-family:var(--font-mono);padding:4px 0}.zoom-separator{height:1px;background:var(--border);margin:4px 0}.dropdown-menu{position:absolute;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px #0000001f;z-index:100;overflow:hidden;min-width:180px}.export-menu{top:52px;left:140px}.dropdown-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;background:transparent;border:none;color:var(--text-primary);font-size:13px;cursor:pointer;transition:background .15s ease;text-align:left}.dropdown-item:hover{background:var(--bg-hover)}.dropdown-item svg{color:var(--text-secondary)}.filter-menu{position:absolute;top:52px;right:200px;width:280px}.filter-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);font-weight:600;font-size:14px}.filter-close{background:none;border:none;font-size:18px;color:var(--text-secondary);cursor:pointer;padding:0;line-height:1}.filter-close:hover{color:var(--text-primary)}.filter-body{padding:16px}.filter-group{margin-bottom:14px}.filter-group:last-child{margin-bottom:0}.filter-group label{display:block;font-size:12px;font-weight:500;color:var(--text-secondary);margin-bottom:6px}.filter-group input[type=text],.filter-group select{width:100%;padding:8px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;font-size:13px;color:var(--text-primary)}.filter-group input[type=text]:focus,.filter-group select:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.filter-group.checkbox label{display:flex;align-items:center;gap:8px;cursor:pointer}.filter-group.checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent-interactive)}.filter-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-secondary)}.filter-footer .btn{padding:6px 14px;font-size:13px}.btn-secondary{background:var(--bg-primary);border:1px solid var(--border);color:var(--text-primary)}.btn-secondary:hover{background:var(--bg-hover)}.enhanced-sidebar{width:260px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;height:100%;margin:0;padding:0;position:relative;transition:width .2s ease,min-width .2s ease}.graph-sidebar-toggle{position:absolute;top:50%;right:-14px;transform:translateY(-50%);width:28px;height:48px;background:var(--bg-secondary);border:1px solid var(--border);border-left:none;border-radius:0 8px 8px 0;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);z-index:20;transition:all .15s ease;box-shadow:2px 0 8px #0000000d}.graph-sidebar-toggle:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.graph-sidebar-toggle svg{transition:transform .2s ease}.enhanced-sidebar.collapsed{width:0!important;min-width:0!important;border-right:none;overflow:visible}.enhanced-sidebar.collapsed .sidebar-deployment,.enhanced-sidebar.collapsed .sidebar-section{display:none}.enhanced-sidebar.collapsed .graph-sidebar-toggle{right:-28px;border-left:1px solid var(--border);border-radius:0 8px 8px 0}.sidebar-deployment{padding:14px 16px;border-bottom:1px solid var(--border);background:linear-gradient(to bottom,var(--bg-hover),var(--bg-secondary))}.deployment-status{display:flex;align-items:center;gap:8px;margin-bottom:4px}.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--success)}.status-indicator.error{background:var(--accent-interactive)}.deployment-label{font-size:13px;font-weight:600;color:var(--text-primary)}.deployment-url-small{font-size:11px;font-family:var(--font-mono);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-section{border-bottom:1px solid var(--border)}.section-header{display:flex;align-items:center;gap:8px;padding:12px 14px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s ease}.section-header:hover{background:var(--bg-hover)}.section-chevron{transition:transform .2s ease;color:var(--text-secondary)}.sidebar-section:not(.collapsed) .section-chevron{transform:rotate(90deg)}.section-title{font-size:11px;font-weight:600;letter-spacing:.5px;color:var(--text-secondary);text-transform:uppercase}.section-count{margin-left:auto;font-size:11px;color:var(--text-secondary);background:var(--bg-hover);padding:2px 8px;border-radius:10px}.section-content{max-height:500px;overflow:hidden;transition:max-height .3s ease,opacity .2s ease}.sidebar-section.collapsed .section-content{max-height:0;opacity:0}.sidebar-toolbar{display:flex;gap:6px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-primary)}.sidebar-filter{flex:1;padding:6px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;font-size:12px;color:var(--text-primary)}.sidebar-filter:focus{outline:none;border-color:var(--accent-interactive);box-shadow:0 0 0 2px #eb56011a}.sort-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:all .15s ease}.sort-btn:hover{background:var(--bg-hover);border-color:var(--accent);color:var(--text-primary)}.sidebar-table-list{list-style:none;max-height:400px;overflow-y:auto;padding:4px 0}.sidebar-table-item{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;cursor:pointer;transition:background .15s ease}.sidebar-table-item:hover{background:var(--bg-hover)}.sidebar-table-item.active{background:var(--accent-interactive)}.sidebar-table-item.active .table-name,.sidebar-table-item.active .table-icon{color:#fff}.sidebar-table-item.active .table-item-meta span{background:#fff3;color:#fff}.sidebar-table-item.filtered-out{opacity:.4}.table-item-main{display:flex;align-items:center;gap:8px;min-width:0}.table-icon{flex-shrink:0;color:var(--text-secondary)}.sidebar-table-item .table-name{font-size:13px;font-weight:500;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-item-meta{display:flex;align-items:center;gap:6px}.field-count,.doc-count{font-size:10px;padding:2px 6px;border-radius:8px;background:var(--bg-hover);color:var(--text-secondary)}.field-count{background:#eb56011a;color:var(--accent-interactive)}.convex-info-list{padding:8px 14px}.convex-info-item{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)}.convex-info-item:last-child{border-bottom:none}.info-label{font-size:12px;color:var(--text-secondary)}.info-value{font-size:12px;font-weight:600;color:var(--text-primary)}.legend-line.dashed{background:repeating-linear-gradient(to right,var(--accent) 0px,var(--accent) 4px,transparent 4px,transparent 8px)}.graph-view .sidebar-container{display:flex;flex-direction:row;flex-shrink:0;position:relative;border-left:1px solid var(--border);height:100%}.graph-view .sidebar-container .code-panel{border-right:none;border-left:none;min-width:200px;max-width:600px}.resize-handle-left{cursor:col-resize;width:4px;background:transparent;transition:background .2s}.resize-handle-left:hover,.resize-handle-left.dragging{background:var(--accent-interactive)}.sidebar-toggle-right{position:absolute;top:12px;left:-32px;right:auto}.sidebar-toggle-right svg{transform:rotate(180deg)}.sidebar-container.collapsed .sidebar-toggle-right{left:-24px}.sidebar-container.collapsed .sidebar-toggle-right svg{transform:rotate(0)}.sidebar-container.hidden{display:none}.tooltip{position:fixed;z-index:1000;max-width:280px;padding:10px 14px;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000001f;font-size:12px;line-height:1.5;animation:tooltipFadeIn .2s ease;pointer-events:none}@keyframes tooltipFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.tooltip-title{font-weight:600;color:var(--text-primary);margin-bottom:4px}.tooltip-content{color:var(--text-secondary)}.tooltip-content code{background:var(--bg-secondary);padding:1px 5px;border-radius:4px;font-family:var(--font-mono);font-size:11px;color:var(--accent-interactive)}.tooltip-content strong{color:var(--text-primary)}.tooltip-content em{color:var(--warning);font-style:normal}.tooltip-system{border-left:3px solid var(--text-secondary)}.tooltip-field{border-left:3px solid var(--accent-interactive)}.tooltip-relationship{border-left:3px solid var(--accent)}.loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:#faf8f5e6;display:flex;align-items:center;justify-content:center;z-index:50}.loading-content{text-align:center}.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 16px}.loading-text{color:var(--text-secondary);font-size:14px}.skeleton-sidebar{padding:16px}.skeleton-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.skeleton-icon{width:20px;height:20px;border-radius:4px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}.skeleton-text{flex:1;height:14px;border-radius:4px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}.skeleton-badge{width:32px;height:18px;border-radius:9px;background:linear-gradient(90deg,#f0efed 25%,#e6e4e1,#f0efed 75%);background-size:200px 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.empty-state-enhanced{text-align:center;padding:60px 30px;color:var(--text-secondary)}.empty-icon{font-size:48px;margin-bottom:16px;opacity:.6}.empty-title{font-size:18px;font-weight:600;color:var(--text-primary);margin-bottom:8px}.empty-description{font-size:14px;margin-bottom:20px;max-width:320px;margin-left:auto;margin-right:auto}.empty-action .btn{display:inline-flex;align-items:center;gap:8px}.table-card,.sidebar-table-item{transition:transform .15s ease,box-shadow .15s ease}.graph-view,.list-view{animation:viewFadeIn .3s ease}@keyframes viewFadeIn{0%{opacity:0}to{opacity:1}}.toolbar-btn:active,.zoom-btn:active,.graph-btn:active{transform:scale(.95)}.toolbar-btn:focus-visible,.zoom-btn:focus-visible,.btn:focus-visible{outline:2px solid var(--accent-interactive);outline-offset:2px}@media(min-width:1600px){.enhanced-sidebar{width:300px}.graph-view .sidebar-container .code-panel{width:420px!important}.sidebar-table-list{max-height:600px}}@media(min-width:1920px){.enhanced-sidebar{width:320px}.graph-view .sidebar-container .code-panel{width:480px!important}}@media(max-width:1200px){.enhanced-sidebar{width:220px}.code-panel{width:300px!important}}@media(max-width:900px){.toolbar-btn span{display:none}.toolbar-btn,.toolbar-btn.icon-only{padding:6px}.zoom-display{min-width:40px;font-size:11px}.enhanced-sidebar{width:180px}.sidebar-deployment{padding:10px 12px}.deployment-label{font-size:12px}}@media print{.toolbar,.enhanced-sidebar,.sidebar-container,.zoom-panel,.graph-legend{display:none!important}.graph-panel{width:100%!important}}.shortcuts-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.shortcuts-modal-content{background:var(--bg-primary);border-radius:12px;box-shadow:var(--shadow-lg);max-width:480px;width:90%;max-height:80vh;overflow:hidden}.shortcuts-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.shortcuts-modal-header h3{margin:0;font-size:16px;font-weight:600;color:var(--text-primary)}.shortcuts-close{background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-secondary);padding:0;line-height:1}.shortcuts-close:hover{color:var(--text-primary)}.shortcuts-modal-body{padding:20px;overflow-y:auto;max-height:calc(80vh - 60px)}.shortcuts-section{margin-bottom:20px}.shortcuts-section:last-child{margin-bottom:0}.shortcuts-section h4{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:0 0 12px}.shortcut-item{display:flex;align-items:center;gap:8px;padding:8px 0;font-size:13px;color:var(--text-primary)}.shortcut-item kbd{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 8px;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:4px;font-family:var(--font-mono);font-size:11px;color:var(--text-primary)}*{box-sizing:border-box;margin:0;padding:0}html{width:100%;height:100%}body{width:100%;min-height:100%;overflow-x:hidden;overflow-y:auto}:root{--bg-primary: #faf8f5;--bg-secondary: #f5f3f0;--bg-hover: #ebe9e6;--text-primary: #1a1a1a;--text-secondary: #6b6b6b;--border: #e6e4e1;--accent: #8b7355;--accent-interactive: #eb5601;--accent-hover: #d14a01;--success: #4a8c5c;--warning: #c4842d;--info: #4a7c9b;--font-mono: "SF Mono", Monaco, "Cascadia Code", "Courier New", monospace;--chart-gradient-start: #eb5601;--chart-gradient-end: #d14a01;--chart-area-opacity: .1}[data-theme=dark]{--bg-primary: #1e1e1e;--bg-secondary: #252526;--bg-hover: #37373d;--text-primary: #cccccc;--text-secondary: #8b8b8b;--border: #3c3c3c;--accent: #c9a87c;--accent-interactive: #ff6b35;--accent-hover: #ff8555;--success: #4ec9b0;--warning: #dcdcaa;--info: #4fc1ff;--chart-gradient-start: #ff6b35;--chart-gradient-end: #ff8555;--chart-area-opacity: .15}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;padding:16px 20px 40px;margin:0}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h1{font-size:20px;display:flex;align-items:center;gap:10px;color:var(--text-primary)}.header-right{display:flex;align-items:center;gap:16px}.deployment-url{font-size:12px;color:var(--text-secondary);font-family:var(--font-mono);margin-right:16px}.last-update{color:var(--text-secondary);font-size:12px}.theme-toggle-btn{background:var(--bg-hover);border:1px solid var(--border);color:var(--text-primary);width:32px;height:32px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s ease}.theme-toggle-btn:hover{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.chart-subtitle{font-size:12px;color:var(--text-secondary)}.pie-legend{padding:20px}.pie-item{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--border)}.pie-item:last-child{border-bottom:none}.pie-color{width:12px;height:12px;border-radius:2px}.pie-label{flex:1;font-size:13px}.pie-value{font-family:var(--font-mono);font-size:12px;color:var(--text-secondary)}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse 2s infinite}.status-dot.disconnected{background:var(--accent-interactive);animation:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-bottom:24px}.metric-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:20px;transition:transform .2s,box-shadow .2s}.metric-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000014}.metric-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.metric-label{font-size:12px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;font-weight:600}.metric-icon{width:32px;height:32px;background:var(--bg-hover);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--accent)}.metric-value{font-size:36px;font-weight:700;margin-bottom:8px;font-family:var(--font-mono);color:var(--text-primary)}.metric-change{font-size:13px;display:flex;align-items:center;gap:4px}.metric-change.positive{color:var(--success)}.metric-change.negative{color:var(--accent-interactive)}.metric-change.neutral{color:var(--text-secondary)}.metric-source{font-size:11px;color:var(--text-secondary);margin-top:8px;font-family:var(--font-mono)}.charts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:16px}@media(max-width:900px){.charts-grid{grid-template-columns:1fr}}.chart-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:20px}.chart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.chart-title{font-size:14px;font-weight:600;color:var(--text-primary)}.chart-actions{display:flex;gap:8px}.chart-btn{background:var(--bg-hover);border:1px solid var(--border);color:var(--text-secondary);padding:4px 8px;border-radius:4px;font-size:11px;cursor:pointer;transition:all .2s}.chart-btn:hover{color:var(--text-primary);border-color:var(--accent)}.chart-btn.active{background:var(--accent-interactive);color:#fff;border-color:var(--accent-interactive)}.chart-container{height:220px;background:var(--bg-hover);border-radius:8px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.bar-chart{display:flex;align-items:flex-end;justify-content:space-around;height:100%;width:100%;padding:20px;gap:8px}.bar{flex:1;max-width:40px;background:linear-gradient(to top,var(--accent-interactive),var(--accent-hover));border-radius:4px 4px 0 0;transition:height .3s ease;position:relative;min-height:4px}.bar:after{content:attr(data-value);position:absolute;top:-20px;left:50%;transform:translate(-50%);font-size:11px;color:var(--text-secondary);font-family:var(--font-mono)}.bar-label{position:absolute;bottom:-20px;left:50%;transform:translate(-50%);font-size:10px;color:var(--text-secondary);white-space:nowrap}.tables-overview-card{grid-column:1 / -1}.tables-overview-container{max-height:400px;overflow-y:auto;overflow-x:hidden;padding:0 4px}.horizontal-bar-chart{display:flex;flex-direction:column;gap:8px;padding:12px 0}.h-bar-row{display:grid;grid-template-columns:140px 1fr 60px;align-items:center;gap:12px;padding:6px 8px;border-radius:6px;transition:background .15s ease}.h-bar-row:hover{background:var(--bg-hover)}.h-bar-label{font-size:12px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font-mono)}.h-bar-track{height:20px;background:var(--bg-hover);border-radius:4px;overflow:hidden;position:relative}.h-bar-fill{height:100%;background:linear-gradient(to right,var(--accent-interactive),var(--accent-hover));border-radius:4px;transition:width .4s cubic-bezier(.4,0,.2,1);min-width:2px}.h-bar-value{font-size:12px;font-weight:600;color:var(--text-secondary);font-family:var(--font-mono);text-align:right}.tables-overview-container::-webkit-scrollbar{width:6px}.tables-overview-container::-webkit-scrollbar-track{background:var(--bg-hover);border-radius:3px}.tables-overview-container::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.tables-overview-container::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media(max-width:600px){.h-bar-row{grid-template-columns:100px 1fr 50px;gap:8px}.h-bar-label,.h-bar-value{font-size:11px}}.recent-activity-card{grid-column:1 / -1}.recent-activity-container{max-height:400px;overflow-y:auto;overflow-x:auto}.activity-table{width:100%;border-collapse:collapse;font-size:13px}.activity-table thead{position:sticky;top:0;z-index:1}.activity-table th{background:var(--bg-secondary);font-weight:600;text-align:left;padding:12px 16px;border-bottom:2px solid var(--border);color:var(--text-primary);font-size:11px;text-transform:uppercase;letter-spacing:.5px}.activity-table td{padding:12px 16px;border-bottom:1px solid var(--border);vertical-align:middle}.activity-table tbody tr{transition:background .15s ease}.activity-table tbody tr:hover{background:var(--bg-hover)}.table-badge{display:inline-block;padding:4px 10px;background:var(--bg-hover);border-radius:4px;font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--text-primary)}.id-cell{font-family:var(--font-mono);color:var(--accent);font-size:12px}.time-cell{color:var(--text-secondary);font-size:12px;white-space:nowrap}.recent-activity-container::-webkit-scrollbar{width:6px;height:6px}.recent-activity-container::-webkit-scrollbar-track{background:var(--bg-hover);border-radius:3px}.recent-activity-container::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.recent-activity-container::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media(max-width:600px){.activity-table th,.activity-table td{padding:10px 12px}.table-badge{font-size:11px;padding:3px 8px}.id-cell,.time-cell{font-size:11px}}.line-chart{width:100%;height:100%;padding:20px}.line-chart svg{width:100%;height:100%}.line-chart path{fill:none;stroke:var(--accent-interactive);stroke-width:2}.line-chart .area{fill:var(--accent-interactive);opacity:.1}.table-chart{width:100%;height:100%;overflow:auto;padding:0}.table-chart table{width:100%;border-collapse:collapse;font-size:12px}.table-chart th,.table-chart td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}.table-chart th{background:var(--bg-secondary);font-weight:600;position:sticky;top:0;color:var(--text-primary)}.table-chart tr:hover td{background:#eb56010d}.empty-state{text-align:center;color:var(--text-secondary);padding:40px}.empty-state h3{color:var(--text-primary);margin-bottom:8px;font-size:16px}.empty-state p{font-size:13px}.loading{display:flex;align-items:center;justify-content:center;gap:12px;color:var(--text-secondary)}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--accent-interactive);border-radius:50%;animation:spin .8s linear infinite}@media(max-width:600px){body{padding:12px}.header{flex-direction:column;align-items:flex-start;gap:12px}.metrics-grid{grid-template-columns:1fr}.metric-value{font-size:28px}}:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--text-primary: #f0f6fc;--text-secondary: #8b949e;--text-muted: #484f58;--border-color: #30363d;--accent-color: #58a6ff;--success-color: #3fb950;--warning-color: #d29922;--error-color: #f85149;--processing-color: #58a6ff}[data-theme=github-light]{--bg-primary: #ffffff;--bg-secondary: #f6f8fa;--bg-tertiary: #eaeef2;--text-primary: #1f2328;--text-secondary: #656d76;--text-muted: #8c959f;--border-color: #d0d7de;--accent-color: #0969da;--success-color: #1a7f37;--warning-color: #9a6700;--error-color: #cf222e;--processing-color: #0969da}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;background:var(--bg-primary);color:var(--text-primary);line-height:1.5;min-height:100vh}#app{padding:24px;max-width:1600px;margin:0 auto}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border-color)}.header h1{font-size:24px;font-weight:600}.header-meta{display:flex;align-items:center;gap:16px}.deployment{font-size:13px;color:var(--text-secondary);padding:4px 8px;background:var(--bg-secondary);border-radius:4px}.theme-toggle{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;width:36px;height:36px;padding:0;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s}.theme-toggle:hover{background:var(--bg-tertiary);color:var(--text-primary)}.theme-toggle svg{display:block}.theme-toggle .sun-icon{display:block}.theme-toggle .moon-icon,[data-theme=github-light] .theme-toggle .sun-icon{display:none}[data-theme=github-light] .theme-toggle .moon-icon{display:block}.mode-tabs{display:flex;gap:8px;margin-bottom:24px}.mode-tab{padding:10px 20px;border-radius:6px;border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:500;transition:all .15s}.mode-tab:hover{background:var(--bg-tertiary);color:var(--text-primary)}.mode-tab.active{background:var(--accent-color);color:#fff;border-color:var(--accent-color)}.section{margin-bottom:32px}.section-header{margin-bottom:16px}.section-title{font-size:18px;font-weight:600;margin-bottom:4px}.section-subtitle{font-size:13px;color:var(--text-secondary)}.kanban-container{display:flex;gap:16px;overflow-x:auto;padding:4px 0 16px;min-height:400px}.kanban-column{flex:0 0 300px;background:var(--bg-secondary);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;max-height:calc(100vh - 240px)}.column-header{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border-color)}.column-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.column-title{font-weight:600;font-size:14px;flex:1}.column-count{background:var(--bg-tertiary);padding:2px 10px;border-radius:12px;font-size:12px;color:var(--text-secondary);font-weight:500}.column-items{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px}.kanban-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:8px;padding:14px;cursor:pointer;transition:transform .1s,box-shadow .1s,border-color .15s}.kanban-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026;border-color:var(--accent-color)}.card-title{font-weight:500;font-size:14px;margin-bottom:6px;word-break:break-word;color:var(--text-primary)}.card-meta{font-size:12px;color:var(--text-secondary);margin-bottom:8px}.card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.card-badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.badge-cron{background:#8b5cf633;color:#a78bfa}.badge-scheduled{background:#3b82f633;color:#60a5fa}.badge-agent{background:#22c55e33;color:#4ade80}.badge-error{background:#f8514933;color:#f87171}.status-pending{color:var(--warning-color)}.status-running{color:var(--processing-color)}.status-completed{color:var(--success-color)}.status-failed{color:var(--error-color)}.status-idle{color:var(--text-secondary)}.status-processing{color:var(--processing-color)}.status-waiting{color:var(--warning-color)}.empty-state{text-align:center;padding:60px 20px;color:var(--text-secondary)}.empty-state p{margin-bottom:12px}.empty-state a{color:var(--accent-color);text-decoration:none}.empty-state a:hover{text-decoration:underline}.loading{display:flex;align-items:center;justify-content:center;padding:60px;color:var(--text-secondary)}.loading-spinner{width:24px;height:24px;border:2px solid var(--border-color);border-top-color:var(--accent-color);border-radius:50%;animation:spin .8s linear infinite;margin-right:12px}@keyframes spin{to{transform:rotate(360deg)}}.column-items::-webkit-scrollbar{width:6px}.column-items::-webkit-scrollbar-track{background:transparent}.column-items::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.column-items::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media(max-width:768px){#app{padding:16px}.kanban-column{flex:0 0 280px}.header{flex-direction:column;gap:12px;align-items:flex-start}}
|
|
@@ -349,9 +349,9 @@ function pruneGraph(nodes, edges, maxNodes) {
|
|
|
349
349
|
const prunedEdges = edges.filter((edge) => keepIds.has(edge.from) && keepIds.has(edge.to));
|
|
350
350
|
return { nodes: prunedNodes, edges: prunedEdges };
|
|
351
351
|
}
|
|
352
|
-
// Convert graph to subway layout
|
|
352
|
+
// Convert graph to subway layout (VERTICAL layout like NYC subway map)
|
|
353
353
|
function buildSubwayLayout(nodes, edges) {
|
|
354
|
-
// Group nodes by folder (each folder = one line)
|
|
354
|
+
// Group nodes by folder (each folder = one vertical line)
|
|
355
355
|
const groups = new Map();
|
|
356
356
|
for (const node of nodes) {
|
|
357
357
|
if (!groups.has(node.group))
|
|
@@ -392,12 +392,12 @@ function buildSubwayLayout(nodes, edges) {
|
|
|
392
392
|
transfers.set(nodeId, otherLines);
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
|
-
// Build lines with station positions
|
|
395
|
+
// Build lines with VERTICAL station positions
|
|
396
396
|
const lines = [];
|
|
397
|
-
const
|
|
398
|
-
const
|
|
399
|
-
const MARGIN_LEFT =
|
|
400
|
-
const MARGIN_TOP =
|
|
397
|
+
const STATION_SPACING_Y = 70; // Vertical spacing between stations
|
|
398
|
+
const LINE_SPACING_X = 180; // Horizontal spacing between lines
|
|
399
|
+
const MARGIN_LEFT = 60;
|
|
400
|
+
const MARGIN_TOP = 100;
|
|
401
401
|
groupEntries.forEach(([group, groupNodes], lineIndex) => {
|
|
402
402
|
const color = LINE_COLORS[lineIndex % LINE_COLORS.length];
|
|
403
403
|
// Sort nodes: entry files first, then alphabetically
|
|
@@ -408,12 +408,13 @@ function buildSubwayLayout(nodes, edges) {
|
|
|
408
408
|
return aIsEntry ? -1 : 1;
|
|
409
409
|
return a.shortLabel.localeCompare(b.shortLabel);
|
|
410
410
|
});
|
|
411
|
+
// Vertical layout: x is fixed per line, y increases per station
|
|
411
412
|
const stations = sortedNodes.map((node, stationIndex) => ({
|
|
412
413
|
id: node.id,
|
|
413
414
|
label: node.label,
|
|
414
415
|
shortLabel: node.shortLabel,
|
|
415
|
-
x: MARGIN_LEFT +
|
|
416
|
-
y: MARGIN_TOP +
|
|
416
|
+
x: MARGIN_LEFT + lineIndex * LINE_SPACING_X,
|
|
417
|
+
y: MARGIN_TOP + stationIndex * STATION_SPACING_Y,
|
|
417
418
|
line: group,
|
|
418
419
|
isTransfer: transfers.has(node.id),
|
|
419
420
|
connections: Array.from(connections.get(node.id) || []),
|
|
@@ -427,41 +428,54 @@ function buildSubwayLayout(nodes, edges) {
|
|
|
427
428
|
});
|
|
428
429
|
return { lines, transfers };
|
|
429
430
|
}
|
|
430
|
-
// Build SVG subway map with
|
|
431
|
+
// Build SVG subway map with VERTICAL layout (lines go down, connections go across)
|
|
431
432
|
function buildSubwaySvg(lines, transfers) {
|
|
432
433
|
if (lines.length === 0) {
|
|
433
434
|
return '<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="400"><text x="50%" y="200" text-anchor="middle" fill="#999" font-size="18">No files to map</text></svg>';
|
|
434
435
|
}
|
|
435
|
-
//
|
|
436
|
-
const
|
|
437
|
-
const
|
|
438
|
-
const
|
|
439
|
-
const
|
|
440
|
-
const
|
|
441
|
-
const
|
|
442
|
-
const LINE_WIDTH = 10;
|
|
436
|
+
// Vertical layout constants - wider spacing for better readability
|
|
437
|
+
const STATION_SPACING_Y = 70;
|
|
438
|
+
const LINE_SPACING_X = 280; // Increased from 180 for more space between lines
|
|
439
|
+
const MARGIN_TOP = 100;
|
|
440
|
+
const STATION_RADIUS = 10;
|
|
441
|
+
const TRANSFER_RADIUS = 14;
|
|
442
|
+
const LINE_WIDTH = 8;
|
|
443
443
|
const FONT_SIZE = 12;
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
444
|
+
const LABEL_OFFSET_X = 20;
|
|
445
|
+
// Sort lines: put multi-station lines first, single-station lines at the end
|
|
446
|
+
const sortedLines = [...lines].sort((a, b) => {
|
|
447
|
+
if (a.stations.length === 1 && b.stations.length > 1)
|
|
448
|
+
return 1;
|
|
449
|
+
if (a.stations.length > 1 && b.stations.length === 1)
|
|
450
|
+
return -1;
|
|
451
|
+
return b.stations.length - a.stations.length;
|
|
452
|
+
});
|
|
453
|
+
// Calculate content width and center it
|
|
454
|
+
const maxStations = Math.max(...sortedLines.map((l) => l.stations.length), 1);
|
|
455
|
+
const contentWidth = sortedLines.length * LINE_SPACING_X + 200;
|
|
456
|
+
const minWidth = 1400;
|
|
457
|
+
const width = Math.max(minWidth, contentWidth);
|
|
458
|
+
const height = Math.max(700, MARGIN_TOP + maxStations * STATION_SPACING_Y + 120);
|
|
459
|
+
// Center the lines horizontally within the SVG
|
|
460
|
+
const totalLinesWidth = (sortedLines.length - 1) * LINE_SPACING_X;
|
|
461
|
+
const marginLeft = Math.max(150, (width - totalLinesWidth - 200) / 2);
|
|
462
|
+
// Set station positions (vertical layout) - using sortedLines now
|
|
463
|
+
for (let lineIndex = 0; lineIndex < sortedLines.length; lineIndex++) {
|
|
464
|
+
const line = sortedLines[lineIndex];
|
|
451
465
|
for (let stationIndex = 0; stationIndex < line.stations.length; stationIndex++) {
|
|
452
|
-
line.stations[stationIndex].x =
|
|
453
|
-
|
|
454
|
-
|
|
466
|
+
line.stations[stationIndex].x = marginLeft + lineIndex * LINE_SPACING_X;
|
|
467
|
+
line.stations[stationIndex].y =
|
|
468
|
+
MARGIN_TOP + stationIndex * STATION_SPACING_Y;
|
|
455
469
|
}
|
|
456
470
|
}
|
|
457
471
|
// Build station lookup for connections
|
|
458
472
|
const stationMap = new Map();
|
|
459
|
-
for (const line of
|
|
473
|
+
for (const line of sortedLines) {
|
|
460
474
|
for (const station of line.stations) {
|
|
461
475
|
stationMap.set(station.id, station);
|
|
462
476
|
}
|
|
463
477
|
}
|
|
464
|
-
// Build connection data for
|
|
478
|
+
// Build connection data for horizontal cross-line connections
|
|
465
479
|
const connectionData = [];
|
|
466
480
|
const drawnConnections = new Set();
|
|
467
481
|
for (const [nodeId, otherLines] of transfers) {
|
|
@@ -485,76 +499,104 @@ function buildSubwaySvg(lines, transfers) {
|
|
|
485
499
|
}
|
|
486
500
|
const svgParts = [];
|
|
487
501
|
// SVG header
|
|
488
|
-
svgParts.push(`<svg id="subway-svg" xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" class="subway-map" style="min-width: ${width}px;">`);
|
|
502
|
+
svgParts.push(`<svg id="subway-svg" xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" class="subway-map" style="min-width: ${width}px; min-height: ${height}px;">`);
|
|
489
503
|
// Background
|
|
490
|
-
svgParts.push(`<rect width="100%" height="100%" fill="var(--subway-bg, #
|
|
491
|
-
//
|
|
504
|
+
svgParts.push(`<rect width="100%" height="100%" fill="var(--subway-bg, #f5f3ef)"/>`);
|
|
505
|
+
// Subtle grid pattern
|
|
492
506
|
svgParts.push(`<defs>
|
|
493
507
|
<pattern id="subway-grid" width="40" height="40" patternUnits="userSpaceOnUse">
|
|
494
|
-
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="var(--subway-grid, rgba(0,0,0,0.
|
|
508
|
+
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="var(--subway-grid, rgba(0,0,0,0.03))" stroke-width="1"/>
|
|
495
509
|
</pattern>
|
|
496
510
|
</defs>
|
|
497
511
|
<rect width="100%" height="100%" fill="url(#subway-grid)"/>`);
|
|
498
|
-
//
|
|
512
|
+
// Title at top
|
|
513
|
+
const totalStations = sortedLines.reduce((sum, l) => sum + l.stations.length, 0);
|
|
514
|
+
const totalConnections = connectionData.length;
|
|
515
|
+
svgParts.push(`<text x="${width / 2}" y="36" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="22" font-weight="700" fill="var(--subway-text, #1a1a1a)">Codebase Metro Map</text>`);
|
|
516
|
+
svgParts.push(`<text x="${width / 2}" y="56" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="13" fill="var(--subway-text-muted, #666)">${totalStations} stations · ${totalConnections} connections</text>`);
|
|
517
|
+
// Group for horizontal transfer connections (dashed lines across)
|
|
499
518
|
svgParts.push(`<g id="transfer-connections">`);
|
|
500
519
|
for (const conn of connectionData) {
|
|
501
520
|
const s1 = stationMap.get(conn.from);
|
|
502
521
|
const s2 = stationMap.get(conn.to);
|
|
503
522
|
if (!s1 || !s2)
|
|
504
523
|
continue;
|
|
505
|
-
|
|
506
|
-
|
|
524
|
+
// Horizontal bezier curve connection
|
|
525
|
+
const midX = (s1.x + s2.x) / 2;
|
|
526
|
+
svgParts.push(`<path id="conn-${conn.from}-${conn.to}" class="transfer-path" data-from="${conn.from}" data-to="${conn.to}" d="M${s1.x},${s1.y} C${midX},${s1.y} ${midX},${s2.y} ${s2.x},${s2.y}" fill="none" stroke="var(--subway-connection, #9d8ec9)" stroke-width="2.5" stroke-dasharray="6,4" opacity="0.7"/>`);
|
|
507
527
|
}
|
|
508
528
|
svgParts.push(`</g>`);
|
|
509
|
-
// Group for line routes
|
|
529
|
+
// Group for vertical line routes
|
|
510
530
|
svgParts.push(`<g id="line-routes">`);
|
|
511
|
-
for (const line of
|
|
531
|
+
for (const line of sortedLines) {
|
|
512
532
|
if (line.stations.length === 0)
|
|
513
533
|
continue;
|
|
514
534
|
const stationIds = line.stations.map((s) => s.id).join(",");
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
535
|
+
// For single-station lines, draw a short vertical stub
|
|
536
|
+
let pathD;
|
|
537
|
+
if (line.stations.length === 1) {
|
|
538
|
+
const s = line.stations[0];
|
|
539
|
+
const stubLength = 40; // Short vertical line above and below the station
|
|
540
|
+
pathD = `M${s.x},${s.y - stubLength} L${s.x},${s.y + stubLength}`;
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
pathD = "M" + line.stations.map((s) => `${s.x},${s.y}`).join(" L");
|
|
544
|
+
}
|
|
545
|
+
// Glow effect
|
|
546
|
+
svgParts.push(`<path id="glow-${line.id}" class="line-glow" data-line="${line.id}" data-stations="${stationIds}" d="${pathD}" fill="none" stroke="${line.color}" stroke-width="${LINE_WIDTH + 6}" stroke-linecap="round" stroke-linejoin="round" opacity="0.12"/>`);
|
|
518
547
|
// Main line
|
|
519
|
-
svgParts.push(`<path id="path-${line.id}" class="line-path" data-line="${line.id}" data-stations="${stationIds}" d="
|
|
548
|
+
svgParts.push(`<path id="path-${line.id}" class="line-path" data-line="${line.id}" data-stations="${stationIds}" d="${pathD}" fill="none" stroke="${line.color}" stroke-width="${LINE_WIDTH}" stroke-linecap="round" stroke-linejoin="round"/>`);
|
|
520
549
|
}
|
|
521
550
|
svgParts.push(`</g>`);
|
|
522
|
-
// Group for stations
|
|
551
|
+
// Group for stations
|
|
523
552
|
svgParts.push(`<g id="stations">`);
|
|
524
|
-
for (const line of
|
|
553
|
+
for (const line of sortedLines) {
|
|
525
554
|
for (const station of line.stations) {
|
|
526
555
|
const r = station.isTransfer ? TRANSFER_RADIUS : STATION_RADIUS;
|
|
527
556
|
svgParts.push(`<g id="station-${station.id}" class="station-group" data-id="${station.id}" data-line="${line.id}" data-x="${station.x}" data-y="${station.y}" style="cursor: grab;">`);
|
|
528
557
|
if (station.isTransfer) {
|
|
529
|
-
|
|
530
|
-
svgParts.push(`<circle class="station-
|
|
558
|
+
// Transfer station: larger circle with inner dot
|
|
559
|
+
svgParts.push(`<circle class="station-outer" cx="${station.x}" cy="${station.y}" r="${TRANSFER_RADIUS}" fill="var(--subway-station, #fff)" stroke="${line.color}" stroke-width="4"/>`);
|
|
560
|
+
svgParts.push(`<circle class="station-inner" cx="${station.x}" cy="${station.y}" r="${TRANSFER_RADIUS - 6}" fill="${line.color}"/>`);
|
|
531
561
|
}
|
|
532
562
|
else {
|
|
533
|
-
|
|
563
|
+
// Regular station: simple dot
|
|
564
|
+
svgParts.push(`<circle class="station-dot" cx="${station.x}" cy="${station.y}" r="${STATION_RADIUS}" fill="var(--subway-station, #fff)" stroke="${line.color}" stroke-width="3"/>`);
|
|
534
565
|
}
|
|
535
|
-
// Label
|
|
536
|
-
svgParts.push(`<text class="station-label" x="${station.x}" y="${station.y
|
|
566
|
+
// Label to the right of station
|
|
567
|
+
svgParts.push(`<text class="station-label" x="${station.x + r + LABEL_OFFSET_X}" y="${station.y + 4}" text-anchor="start" font-family="system-ui, -apple-system, sans-serif" font-size="${FONT_SIZE}" fill="var(--subway-text, #333)" font-weight="500">${escapeHtml(station.shortLabel)}</text>`);
|
|
537
568
|
svgParts.push(`</g>`);
|
|
538
569
|
}
|
|
539
570
|
}
|
|
540
571
|
svgParts.push(`</g>`);
|
|
541
|
-
// Line
|
|
542
|
-
svgParts.push(`<g id="line-
|
|
543
|
-
for (const line of
|
|
572
|
+
// Line labels at top of each vertical line
|
|
573
|
+
svgParts.push(`<g id="line-labels">`);
|
|
574
|
+
for (const line of sortedLines) {
|
|
544
575
|
if (line.stations.length === 0)
|
|
545
576
|
continue;
|
|
546
577
|
const firstStation = line.stations[0];
|
|
547
|
-
const labelX =
|
|
548
|
-
const labelY =
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
svgParts.push(`<
|
|
552
|
-
|
|
553
|
-
svgParts.push(`<
|
|
554
|
-
svgParts.push(`<text class="badge-text" x="${labelX + labelWidth / 2}" y="${labelY + 5}" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="14" fill="#fff" font-weight="600">${escapeHtml(line.name)}</text>`);
|
|
578
|
+
const labelX = firstStation.x;
|
|
579
|
+
const labelY = MARGIN_TOP - 30;
|
|
580
|
+
svgParts.push(`<g id="label-${line.id}" class="line-label" data-line="${line.id}">`);
|
|
581
|
+
// Colored dot indicator
|
|
582
|
+
svgParts.push(`<circle cx="${labelX}" cy="${labelY}" r="8" fill="${line.color}"/>`);
|
|
583
|
+
// Label text below dot
|
|
584
|
+
svgParts.push(`<text x="${labelX}" y="${labelY + 22}" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="11" fill="var(--subway-text, #333)" font-weight="600">${escapeHtml(line.name)}</text>`);
|
|
555
585
|
svgParts.push(`</g>`);
|
|
556
586
|
}
|
|
557
587
|
svgParts.push(`</g>`);
|
|
588
|
+
// Legend in bottom right
|
|
589
|
+
const legendX = width - 200;
|
|
590
|
+
const legendY = height - (lines.length * 22 + 50);
|
|
591
|
+
svgParts.push(`<g id="legend" transform="translate(${legendX}, ${legendY})">`);
|
|
592
|
+
svgParts.push(`<rect x="0" y="0" width="180" height="${lines.length * 22 + 40}" rx="8" fill="var(--subway-legend-bg, rgba(255,255,255,0.9))" stroke="var(--subway-border, #ddd)" stroke-width="1"/>`);
|
|
593
|
+
svgParts.push(`<text x="16" y="24" font-family="system-ui, -apple-system, sans-serif" font-size="12" font-weight="600" fill="var(--subway-text, #333)">Legend</text>`);
|
|
594
|
+
lines.forEach((line, i) => {
|
|
595
|
+
const y = 44 + i * 22;
|
|
596
|
+
svgParts.push(`<rect x="16" y="${y}" width="20" height="6" rx="3" fill="${line.color}"/>`);
|
|
597
|
+
svgParts.push(`<text x="44" y="${y + 5}" font-family="system-ui, -apple-system, sans-serif" font-size="11" fill="var(--subway-text, #333)">${escapeHtml(line.name)}</text>`);
|
|
598
|
+
});
|
|
599
|
+
svgParts.push(`</g>`);
|
|
558
600
|
svgParts.push("</svg>");
|
|
559
601
|
return svgParts.join("\n");
|
|
560
602
|
}
|
|
@@ -741,10 +783,14 @@ function buildMapHtml(svg, lines, root, _fileCount) {
|
|
|
741
783
|
padding: 24px;
|
|
742
784
|
min-height: calc(100vh - 160px);
|
|
743
785
|
background: var(--subway-bg);
|
|
786
|
+
display: flex;
|
|
787
|
+
justify-content: center;
|
|
788
|
+
align-items: flex-start;
|
|
744
789
|
}
|
|
745
790
|
|
|
746
791
|
.subway-map {
|
|
747
792
|
display: block;
|
|
793
|
+
margin: 0 auto;
|
|
748
794
|
}
|
|
749
795
|
|
|
750
796
|
.path-bar {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codebase-subway-map.js","sourceRoot":"","sources":["../../src/tools/codebase-subway-map.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codebase-subway-map.js","sourceRoot":"","sources":["../../src/tools/codebase-subway-map.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "convex-mcp-visual",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Visual MCP tools for exploring Convex databases - schema browser, dashboard, ER diagrams. Works as CLI, MCP server, or Claude Code plugin.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|