rust-web-server 18.8.4

Single-binary web server and reverse proxy: automatic HTTPS (Let's Encrypt), HTTP/1.1, HTTP/2 and HTTP/3, load balancing, auth and rate limiting, configured in one TOML file. Also a Rust library: routing, middleware, MCP server, ORM, background jobs. No hyper, no Tower; HTTP/2 and HTTP/3 framing via h2 and quinn.
Documentation
// Mobile menu (skill B7): a full-height panel; links rise in one after another.
export function initMenu() {
  const toggle = document.querySelector("[data-menu-toggle]");
  const panel = document.getElementById("mobile-menu");
  if (!toggle || !panel) return;
  const set = (open) => {
    toggle.setAttribute("aria-expanded", String(open));
    toggle.setAttribute("aria-label", open ? "Close menu" : "Open menu");
    document.documentElement.classList.toggle("menu-open", open);
    if (open) {
      panel.hidden = false;
      requestAnimationFrame(() => panel.classList.add("open"));
    } else {
      panel.classList.remove("open");
      panel.addEventListener("transitionend", () => (panel.hidden = !panel.classList.contains("open") || panel.hidden), { once: true });
      setTimeout(() => { if (!panel.classList.contains("open")) panel.hidden = true; }, 500);
    }
  };
  toggle.addEventListener("click", () => set(toggle.getAttribute("aria-expanded") !== "true"));
  document.addEventListener("keydown", (e) => e.key === "Escape" && set(false));
  matchMedia("(min-width: 768px)").addEventListener("change", (e) => e.matches && set(false));
}