{/* navigation */}
{/* routed content */}
```
Use the same token value for both heights. The panel then uses the remaining
viewport height and its sticky offset clears the site header.
## Accessibility
- Give every `Sidebar.Panel`, `Sidebar.Trigger`, `Sidebar.CloseTrigger`, and
`Sidebar.Rail` a concise, unique accessible name.
- Render destinations as real links, set `aria-current="page"` on the active
destination, and reserve buttons for actions.
- Wrap link text in `Sidebar.Label` for icon-collapse navigation. It remains
available to assistive technology when visually reduced.
- Add a `Tooltip` to icon-only links. A tooltip supplements rather than replaces
the link's `aria-label`.
- Put expanded-only headings, descriptions, and controls in
`Sidebar.Expanded`; it removes them from layout and accessibility when the
desktop panel collapses.
- Prefer `side="start"` and `side="end"` over physical left/right assumptions.
Set `dir="rtl"` on the root when the application direction is RTL.
- Do not manually add `aria-expanded`, `aria-controls`, focus traps, or inert
state to the built-in trigger and panel. Sidebar and Drawer own those states.
## Acceptance checklist
- Icon collapse leaves the active link understandable by name and tooltip.
- A two-pane panel retains the rail and removes the detail pane when collapsed.
- End-side panels render and swipe from the logical end edge.
- Start and end panels can coexist without sharing expansion state.
- A full-width sticky Header remains outside the panel/content row and its height
matches `--spacing-sidebar-offset`.
- Keyboard users can reach the trigger and links, dismiss a mobile panel with
its CloseTrigger or Escape, and return focus to the trigger.
- Both LTR and RTL layouts are checked at widths above and below
`--breakpoint-sidebar-desktop`.
## Common mistakes
- Do not add visual `variant="floating"` or `variant="inset"` branches to model
layouts that composition already expresses.
- Do not use Accordion for two physical panes.
- Do not create a second mobile navigation tree; Sidebar moves the same panel
composition into Drawer.
- Do not hardcode `16rem`, `3.5rem`, `18rem`, or `64rem` in app code. Override
the documented Sidebar tokens at the theme boundary when needed.
- Do not place a header trigger outside its Sidebar root.
## Validation Commands
```sh
rg -n "<(aside|nav)[^>]*className=.*(fixed|sticky|w-|border-)" apps
rg -P -n "