diff --git a/apps/client/src/features/page/tree/components/doc-tree.tsx b/apps/client/src/features/page/tree/components/doc-tree.tsx index f74d0680..69d88fe2 100644 --- a/apps/client/src/features/page/tree/components/doc-tree.tsx +++ b/apps/client/src/features/page/tree/components/doc-tree.tsx @@ -510,6 +510,12 @@ function DocTreeInner( top: 0, left: 0, width: '100%', + // Give the row slot the exact virtualizer stride height so the + // inner highlight can fill and vertically center within it. + // Without a definite height here, `.node`'s `height: 100%` + // collapses to content height and the selection pill ends up + // top-aligned (asymmetric) inside the stride. + height: rowHeight, transform: `translateY(${virtualItem.start}px)`, }} > diff --git a/apps/client/src/features/page/tree/components/space-tree-node-menu.tsx b/apps/client/src/features/page/tree/components/space-tree-node-menu.tsx index d65a9c41..6a33445d 100644 --- a/apps/client/src/features/page/tree/components/space-tree-node-menu.tsx +++ b/apps/client/src/features/page/tree/components/space-tree-node-menu.tsx @@ -124,6 +124,7 @@ export function NodeMenu({ node, canEdit }: NodeMenuProps) { bullet + indent from the DocTree
    and nested
      nodes. The tree's own indent is driven by paddingLeft on .rowWrapper. */ @@ -98,6 +98,9 @@ display: flex; align-items: center; border-radius: 4px; + /* Fill the full row slot (the
    • is sized to the virtualizer stride) so + align-items: center can vertically center the inset `.node` pill. */ + height: 100%; } .node[data-dragging="true"] { diff --git a/apps/client/src/features/share/components/share.module.css b/apps/client/src/features/share/components/share.module.css index ebf1e74c..11c8a6b2 100644 --- a/apps/client/src/features/share/components/share.module.css +++ b/apps/client/src/features/share/components/share.module.css @@ -10,7 +10,6 @@ .treeNode { text-decoration: none; user-select: none; - padding-bottom: 0; } .navbar,