- every refused scheme and spacing renders as text; protocol-relative
URLs are anchors, never site paths or active; rel only for _blank;
active matching rules and same-host absolute URLs; the trail marks
ancestors only
- useMenuApi uses the server base with the forwarded visitor on the
server and the public base in the browser
- typed client and useMenu/useMenuApi (SSR, menu:<code>:<locale> key,
server and public bases, x-forwarded-for forwarded also on cached renders)
- MenuNav and recursive MenuNavItem: WAI disclosure navigation, URL
allowlist with a text fallback, rel on _blank, active link and trail,
mobile toggle, Esc / focus-out / outside pointer / route change closing
- menu tokens and base CSS, README
- node tests (link rules, client, server-rendered NavItem) and a playground
SSR smoke against a fixture API