Skip to content

Markdown versions of all docs pages are available by appending .md to any docs URL.

Layout widths

Page as Markdown

How wide the sidebar, content, TOC, and navbar are, what each pane’s width comes from, and where the breakpoints that hide them live.

The docs page is a horizontal row of up to three panes — left sidebar, center content, right table of contents (TOC) — inside a wrapper capped by page.width. The navbar above it is capped separately by navbar.width, which should normally match page.width; see the note at the end.

The panes, at a glance

    block-beta
  columns 24
  sidebar["Sidebar<br/>256px<br/>visible ≥1280px"]:4
  content["Content<br/>≈672–832px of readable text<br/>(1152px cap, rarely reached)"]:16
  toc["TOC<br/>256px<br/>visible ≥1024px"]:4
  

This is drawn to the proportions of a 1440px (page.width: wide) viewport with both rails visible. It is not to scale below xl (1280px), where the sidebar stops being persistent — see Breakpoints.

Where each width comes from

PaneWidthConfigurable?Source
Wrapper (sidebar + content + TOC)page.width: normal = 80rem (1280px), wide = 90rem (1440px), full = 100%Yes, params.page.widthdocs/width-class.html, utils/page-width.html
NavbarSame three options as page.widthYes, params.navbar.width (keep it matching page.width)layouts/_partials/navbar.html
Sidebar256px (w-64)No — fixedpartials/sidebar.html
TOC256px (w-64)No — fixed_partials/toc.html
Content (<main id="content">)1152px (72rem) max-width capIndirectly — a consumer can override the docs/content-class.html extension slot; agentgateway-oss-website does, to the same 1152pxVendored Hextra, hardcoded — there is no content.width param

The content cap rarely binds in practice: at any page.width up to wide (1440px), subtracting the sidebar and TOC leaves less room than the 1152px cap, so the real constraint on content width is the wrapper width minus the rails, not the cap itself (see the worked numbers below). The cap only takes over on very wide viewports with page.width: full.

Worked numbers by page.width

Assuming both the sidebar and TOC are visible (viewport ≥1280px) and content carries its own hx:md:px-12 (48px each side) padding:

page.widthWrapperSidebarTOCRemaining for contentContent paddingNet readable text
normal (80rem)1280px256px256px768px96px≈672px
wide (90rem)1440px256px256px928px96px≈832px
full= viewport256px256pxviewport − 512px96pxviewport − 608px (until the 1152px cap binds, around viewport ≈1760px+)

So a hoped-for “content pane ≤800px” holds at page.width: normal (≈672px) but not quite at wide (≈832px) — wide is what agentgateway-oss-website and the docs hub’s agentgateway product both use.

Breakpoints

PanePersistent atBelow thatSource
Sidebarxl, 1280pxSlide-in drawer (280px, fixed), toggled by hamburgerpartials/sidebar.html, docs-theme-extras.css (mobile drawer rules)
TOC1024pxHidden entirely (no drawer equivalent)docs-theme-extras.css — this module lowers Hextra’s own xl (1280px) TOC breakpoint to min-width: 1024px
Hamburger triggerWired below 768px; the tablet-only trigger (768–1279px) opens the same sidebar drawerlayouts/_partials/navbar.html

Note the TOC and sidebar do not share a breakpoint in this module: between 1024px and 1279px the TOC is visible but the sidebar is drawer-only, which is a deliberate divergence from vendored Hextra (where both use xl).

Keep navbar.width matching page.width

The navbar and the content wrapper are two independent settings — params.navbar.width and params.page.width — and nothing enforces that they agree. If they diverge, the navbar’s logo drifts out of alignment with the sidebar below it as the window resizes. Until this module’s [Unreleased] fix (see CHANGELOG.md), navbar.width was silently discarded and the navbar always rendered at the wide default regardless of what a consumer set — worth knowing if you’re diagnosing an older pinned version.

Was this page helpful?