+ {/* Top bar */}
+
+
+
+
+ {graph?.project.name ?? "Understand Anything"}
+
+
+
+
+
+ {/* Search (collapsible) */}
+ {searchOpen &&
}
+
+ {/* Validation warnings */}
+ {allIssues.length > 0 && !loadError &&
}
+
+ {/* Load error */}
+ {loadError && (
+
+ {loadError}
+
+ )}
+
+ {/* Tabbed content — all panes stay mounted to preserve layout/state.
+ Inactive panes are kept in the layout (not display:none) so that
+ ReactFlow keeps real dimensions and pinch/pan don't collapse on
+ tab switch. */}
+
+
+ {viewMode === "knowledge" ? (
+
+ ) : viewMode === "domain" && domainGraph ? (
+
+ ) : (
+
+ )}
+
+
+
+ {infoContent}
+
+
+
+
+
+
+
+ {/* Bottom tab nav */}
+
+
+ {/* Drawer */}
+
setDrawerOpen(false)}
+ onTogglePathFinder={togglePathFinder}
+ onShowKeyboardHelp={() => setShowKeyboardHelp(true)}
+ />
+
+ {/* Code viewer — always fullscreen on mobile */}
+ {codeViewerOpen && (
+
+
event.stopPropagation()}
+ >
+
+
+
+
+
+ )}
+
+ {/* Keyboard help (mobile reads it as a quick reference too) */}
+ {showKeyboardHelp && (
+
+ setShowKeyboardHelp(false)}
+ />
+
+ )}
+
+ {/* Path finder */}
+ {pathFinderOpen && (
+
+
+
+ )}
+
+ );
+}
diff --git a/understand-anything-plugin/packages/dashboard/src/components/SearchBar.tsx b/understand-anything-plugin/packages/dashboard/src/components/SearchBar.tsx
index 27a1c94..a7135e6 100644
--- a/understand-anything-plugin/packages/dashboard/src/components/SearchBar.tsx
+++ b/understand-anything-plugin/packages/dashboard/src/components/SearchBar.tsx
@@ -84,7 +84,7 @@ export default function SearchBar() {
return (