web: the ten findings from the forge comparison !430

merged merged by cmc on 2026-09-19 14:26 UTC · krz/gitbay:web-findings into main

Discussion

cmc

Closes #232. One change per finding, in the issue's order:

  1. p a, .syscomment a are underlined; .repotitle a, p.title a, .pathbar a, .pager a and button/chip links are not.
  2. .chroma .lnlinks is a 24px inline block. chroma's own LineLink rule (outline: none) is dropped from the served palette, so line numbers keep the site's focus ring. history · blame · raw get 6px/4px padding.
  3. focusableBlocks adds tabindex="0" to every rendered <pre> (markdown, org, highlighted blobs); the landing quickstart block carries it in the template.
  4. The order: -1 on .withaside .aside under 62rem is gone.
  5. table.tree td.name wraps under 40rem instead of overflowing the card.
  6. mux.HandleFunc("/", s.notFound) after the route table.
  7. imageAlt names an org image with no alt after its file (build.svg → alt="build"); the wrapping link gets its name from it.
  8. Release titles are h2, sized as before.
  9. compressed gzips text/*, JSON, Atom and SVG responses for clients that accept it, deciding on the content type when headers are final; git transport and binaries pass through. style.css goes from 67 KB to 17 KB on the wire.
  10. web theme show|set system|light|dark (migration 0057, users.theme), an Appearance section on /settings, data-theme on <html>. themedCSS serves style.css with the dark block guarded by :root:not([data-theme="light"]) and repeated under :root[data-theme="dark"]; the source keeps one block for the token tests. The syntax palettes are scoped the same way.

Rescanned a local instance with axe-core 4.10 in both schemes at 1280, 390 and 320px: repo, issues, issue, blob, log, landing and login report zero violations (baseline: 21 link-in-text-block on an issue, 287 target-size on a blob, scrollable-region-focusable, image-alt, heading-order). The one node left is the 404 page's 64px numeral, --faint with a --line stroke, which axe reads at 1.4:1; unchanged, it is drawn as a picture on purpose.

Unit tests for the store, control command, served stylesheet, 404 fallback, gzip and the HTML post-processing; e2e/theme_test.go covers the command and the account form. Parity and Users wiki pages and the CHANGELOG are updated.