# Per-agent page > Part of [Web UI](../web-ui.md). See also: > [Shape (shared)](shape.md) · [Dashboard layout](dashboard.md) Three fixed-position layers frame a full-viewport terminal: a header, scrollable main content, and a footer composer — plus a slide-in side panel for flyouts and long content. ## Header Preact component tree (`Header.tsx` + `StatusChips.tsx` + `MetaNav.tsx` + `OverflowMenu.tsx` + `HeaderPill.tsx`, wired together in `Root.tsx`) — see `frontend/packages/agent/src/components/`. This section describes the rendered result, not the DOM ids the pre-Preact page used (there are none any more — every element is component output, not something a selector reaches by id). **Fixed-overlay header** (`
`): frosted glass — `backdrop-filter: blur` lets scrolled terminal rows show through. Measures its own rendered height via `ResizeObserver` (`Header.tsx`) and writes it to a CSS custom property the content below reads for its offset — a fixed `6em` guess used to be baked into `agent.css`, which silently broke (content overlapping the header) the moment any row of badges/pills wrapped onto an extra line at some viewport width; measuring instead of guessing closes that bug class structurally rather than for one specific trigger. Two columns: - **Agent icon** (``): fixed-size square identity anchor — `width: 5em; height: 5em` with explicit pixel sizing so the ``'s intrinsic (large) dimensions don't push the parent flex container open via `align-items: stretch`-driven height feedback. Falls back to the dimmed hyperhive mark (`/favicon.svg`) on load error (`/icon` 404s when the agent has no `hyperhive.icon` override — there is no server-side default image). - **Main column** (`.agent-header-main`, `Header.tsx`): two rows — title (`◆