ade21ee4e0109c70e29860d5393306e48e6a44d3
lrnassar
  Mon Mar 16 16:38:58 2026 -0700
Adding keyboard navigation accessibility to the Genome Browser menu bar and all main CGI pages. Converts non-focusable menu bar span elements to keyboard-accessible buttons using the W3C disclosure navigation pattern, adds aria-expanded state for screen readers, skip navigation link, and main content landmark. Also adds a Keyboard Navigation section to the accessibility page with screenshots. refs #37252

diff --git src/hg/lib/cart.c src/hg/lib/cart.c
index 624ae97804a..9b48f969e07 100644
--- src/hg/lib/cart.c
+++ src/hg/lib/cart.c
@@ -3028,31 +3028,33 @@
 char *db, *org, *pos;
 char titlePlus[2048];
 pushWarnHandler(cartEarlyWarningHandler);
 cart = cartAndCookie(cookieName, exclude, oldVars);
 getDbAndGenome(cart, &db, &org, oldVars);
 pos = cartGetPosition(cart, db, NULL);
 pos = addCommasToPos(db, stripCommas(pos));
 cartSetLastPosition(cart, pos, oldVars);
 safef(titlePlus, sizeof(titlePlus), "%s %s %s %s", 
                     org ? trackHubSkipHubName(org) : "", db ? db : "",  pos ? pos : "", title);
 popWarnHandler();
 
 cartGenericStartup(cart);
 
 htmStartWithHead(stdout, head, titlePlus);
+puts("<main id=\"mainContent\">");
 cartWarnCatcher(doMiddle, cart, htmlVaWarn);
+puts("</main>");
 cartCheckout(&cart);
 cartFooter();
 }
 
 static void cartEmptyShellMaybeContent(void (*doMiddle)(struct cart *cart), char *cookieName,
                                        char **exclude, struct hash *oldVars, boolean doContentType)
 /* Get cart and cookies and set up error handling.
  * If doContentType, print out Content-type:text/html
  * but don't start writing any html yet.
  * The doMiddleFunction has to call cartHtmlStart(title), and
  * cartHtmlEnd(), as well as writing the body of the HTML.
  * oldVars - those in cart that are overlayed by cgi-vars are
  * put in optional hash oldVars. */
 {
 struct cart *cart = cartAndCookieWithHtml(cookieName, exclude, oldVars, doContentType);