diff --git a/frontend/packages/swarm-ui/src/shell/LinksMenu.css b/frontend/packages/swarm-ui/src/shell/LinksMenu.css index 68dfc5fd..ddb2fd89 100644 --- a/frontend/packages/swarm-ui/src/shell/LinksMenu.css +++ b/frontend/packages/swarm-ui/src/shell/LinksMenu.css @@ -1,6 +1,10 @@ /* — a single header icon-button + popover. Kept visually quiet (no border/fill until interacted with) so it reads as chrome, - not another nav item. */ + not another nav item. Button is sized to the same touch-target floor + as the shared `ui/` kit (2.75em ≈ 44px, WCAG 2.5.5) even though it + isn't built from that kit — a bespoke icon trigger, not a form + control, but the floor applies regardless of which component drew + it. */ .links-menu { position: relative; margin-left: auto; @@ -9,8 +13,8 @@ display: flex; align-items: center; justify-content: center; - width: 2em; - height: 2em; + width: 2.75em; + height: 2.75em; padding: 0; border: 1px solid transparent; border-radius: 0.4em; @@ -43,6 +47,7 @@ display: flex; align-items: center; gap: 0.5em; + min-height: 2.75em; padding: 0.4em 0.6em; border-radius: 0.35em; color: var(--fg); diff --git a/frontend/packages/swarm-ui/src/shell/Shell.css b/frontend/packages/swarm-ui/src/shell/Shell.css index 4a6de52c..9b8833c1 100644 --- a/frontend/packages/swarm-ui/src/shell/Shell.css +++ b/frontend/packages/swarm-ui/src/shell/Shell.css @@ -2,10 +2,17 @@ renders into. Colour vars come from ../theme.css (same base16 slots the per-hive dashboard uses, so this reads as recognizably hyperhive) — the layout itself is this package's own, not - @hive/shared's chrome.css. */ + @hive/shared's chrome.css. + + `flex-wrap` on the header and nav rather than a hamburger/collapse + menu: a narrow viewport (phone or a tiled desktop window) wraps onto + a second line instead of overflowing — "don't break, don't + over-invest" is the explicit scope here, not full mobile navigation + redesign. */ .shell-header { display: flex; align-items: center; + flex-wrap: wrap; gap: 1.5em; padding: 0.75em 1.25em; border-bottom: 1px solid var(--border); @@ -18,6 +25,7 @@ } .shell-nav { display: flex; + flex-wrap: wrap; gap: 1em; } .shell-nav-link { diff --git a/frontend/packages/swarm-ui/src/ui/table/Table.css b/frontend/packages/swarm-ui/src/ui/table/Table.css index f990dae6..68407656 100644 --- a/frontend/packages/swarm-ui/src/ui/table/Table.css +++ b/frontend/packages/swarm-ui/src/ui/table/Table.css @@ -1,3 +1,8 @@ +/* Scrolls horizontally within its own box on a narrow viewport instead + of forcing the whole page to overflow — see Table.tsx's comment. */ +.ui-table-scroll { + overflow-x: auto; +} .ui-table { width: 100%; border-collapse: collapse; diff --git a/frontend/packages/swarm-ui/src/ui/table/Table.tsx b/frontend/packages/swarm-ui/src/ui/table/Table.tsx index 3e852063..e8e82c44 100644 --- a/frontend/packages/swarm-ui/src/ui/table/Table.tsx +++ b/frontend/packages/swarm-ui/src/ui/table/Table.tsx @@ -3,6 +3,12 @@ // their own cell rendering rather than this component knowing about // any particular row shape, so it stays reusable for the swarm-wide // agent roster later without a rewrite. +// +// Wrapped in a scrollable container rather than letting a wide table +// force the whole page to overflow horizontally on a narrow viewport — +// a `` doesn't shrink below its content's natural width on its +// own, so without this the page itself would break, not just look +// cramped. import type { ComponentChildren } from 'preact'; import './Table.css'; @@ -22,23 +28,25 @@ export function Table({ rowKey: (row: T) => string; }) { return ( -
- - - {columns.map((c) => ( - - ))} - - - - {rows.map((row) => ( - +
+
{c.header}
+ + {columns.map((c) => ( - + ))} - ))} - -
{c.render(row)}{c.header}
+ + + {rows.map((row) => ( + + {columns.map((c) => ( + {c.render(row)} + ))} + + ))} + + + ); }