Files
Nexus.Reader/src/NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor.css
T
mjasin 34794db209 feat(ui/graph): Knowledge Graph Refinement and Sidebar Hierarchy (#25)
This PR addresses several UI/UX and architectural refinements for the Knowledge Graph and Intelligence Sidebar.

### Key Changes:
- **Knowledge Graph (#21, #22)**:
  - Implemented \"pill-shaped\" nodes with dynamic label truncation and SVG tooltips.
  - Added bound-constrained simulation to keep nodes within the viewport.
  - Integrated `ResizeObserver` for dynamic layout handling.
  - Implemented Zoom-to-Fit functionality.
  - Enforced unique concept IDs in AI prompts and hardened JS logic to prevent multi-selection bugs.
- **Intelligence Sidebar (#23)**:
  - Improved visual depth with a radial gradient background for the graph.
  - Increased sidebar divider contrast for better layering.
  - Transformed graph controls into a floating glassmorphism panel.
  - Relocated the \"Logout\" action to the toolbar bottom and rebranded it as \"Exit\".

Fixes #21
Fixes #22
Fixes #23

Reviewed-on: #25
Co-authored-by: Marek Jasiński <jasins.marek@gmail.com>
Co-committed-by: Marek Jasiński <jasins.marek@gmail.com>
2026-05-09 09:36:23 +00:00

97 lines
2.0 KiB
CSS

.intelligence-toolbar {
width: 50px;
height: 100%;
background: #0D0D0D;
border-right: 1px solid rgba(255, 255, 255, 0.08);
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 1.5rem 0;
align-items: center;
z-index: 20;
box-shadow: inset -2px 0 10px rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
}
.toolbar-top, .toolbar-middle, .toolbar-bottom {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.toolbar-item {
background: none;
border: none;
color: #555;
cursor: pointer;
width: 34px;
height: 34px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: 8px;
position: relative;
}
.toolbar-item:hover {
color: var(--nexus-neon);
background: rgba(0, 255, 153, 0.05);
box-shadow: 0 0 15px rgba(0, 255, 153, 0.15);
filter: drop-shadow(0 0 5px var(--nexus-neon));
}
.toolbar-item.active {
color: var(--nexus-neon);
background: rgba(0, 255, 153, 0.08);
box-shadow: 0 0 20px rgba(0, 255, 153, 0.25);
filter: drop-shadow(0 0 8px var(--nexus-neon));
}
.toolbar-item.active::after {
content: '';
position: absolute;
right: -2px;
top: 25%;
height: 50%;
width: 3px;
background: var(--nexus-neon);
box-shadow: 0 0 8px var(--nexus-neon);
border-radius: 2px;
}
.toolbar-item.focus-active {
color: var(--nexus-neon);
filter: drop-shadow(0 0 8px var(--nexus-neon));
}
.rotate-180 {
transform: rotate(180deg);
}
.toolbar-item.danger:hover {
color: #ff4d4d;
background: rgba(255, 77, 77, 0.1);
}
.toolbar-item.logout-item {
margin-top: 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding-top: 1.5rem;
height: auto;
width: 100%;
display: flex;
justify-content: center;
border-radius: 0;
color: #444;
}
.toolbar-item.logout-item:hover {
color: #ff4d4d;
background: none;
filter: drop-shadow(0 0 8px rgba(255, 77, 77, 0.4));
}