A CLI-first git forge.

cli forge git self-hosted

https://gitbay.org

Commit 0db33b1ad1

0db33b1ad160bda8a1fd2900e84c654ba25f1218

parent: eec36526d2

Verified · cmc ci/build: success

cmc <hello@cleberg.net> · 2026-08-26T22:37:25Z

web: left-align table headers, and keep the avatar out of the hover underline

tr.cols is the shared header-row idiom, but the rule was scoped to
table.tree, so key and member tables fell through to the browser default
and centred their headers over left-aligned values.

The avatar underline needed a different fix than the one that shipped: a
descendant cannot cancel an ancestor's text-decoration, so the link
carries none and the username draws its own.
internal/web/static/style.css +10 −5
@@ -279,8 +279,10 @@ ul.raillist.wide .owner { font-size: var(--fs-0); }
279279 }
280280 .railfoot a { color: var(--shell-fg); }
281281 a.railuser { display: inline-flex; align-items: center; gap: var(--sp-2); }
282/* the square is a graphic, not text: the link's hover underline stops at it */
283a.railuser:hover .avatar { text-decoration: none; }
282/* a descendant cannot cancel an ancestor's underline, so the link carries
283 none and the name draws its own — the avatar square stays undecorated */
284a.railuser:hover { text-decoration: none; }
285a.railuser:hover .uname { text-decoration: underline; }
284286 .railfoot .railsettings { color: var(--shell-muted); display: inline-flex; }
285287 .railfoot .railsettings:hover { color: var(--shell-fg); }
286288 .railfoot form { margin-left: auto; }
@@ -494,7 +496,7 @@ table.tree td, table.refs td {
494496 }
495497 table.tree tr:last-child td, table.refs tr:last-child td { border-bottom: none; }
496498 table.tree tr:hover td, table.refs tr:hover td { background: var(--hover); }
497table.tree tr.cols th {
499tr.cols th {
498500 text-align: left;
499501 font-weight: 500;
500502 font-size: var(--fs-1);
@@ -503,10 +505,10 @@ table.tree tr.cols th {
503505 border-bottom: 1px solid var(--line);
504506 background: var(--bg);
505507 }
506table.tree tr.cols:hover th { background: var(--bg); }
508tr.cols:hover th { background: var(--bg); }
507509 /* right-aligned columns keep their header with their values; this needs to
508510 outrank the tr.cols th rule above, which is why it names both */
509table.tree tr.cols th.age, table.tree tr.cols th.size { text-align: right; }
511tr.cols th.age, tr.cols th.size { text-align: right; }
510512 table.tree th.size { text-align: right; }
511513 table.tree td.name { width: 100%; }
512514 table.tree td.name a { color: var(--fg); }
@@ -825,6 +827,9 @@ form.logfilter input { flex: 1; min-width: 12rem; max-width: 28rem; }
825827
826828 /* account settings */
827829 table.keys td { padding: var(--sp-2) var(--sp-4) var(--sp-2) 0; }
830/* these tables sit flush with the page text, so the header row drops the
831 left padding the card-style listings use */
832table.keys tr.cols th { padding-left: 0; background: transparent; }
828833 table.keys td.mono, .mono { font-family: var(--mono); font-size: var(--fs-1); overflow-wrap: anywhere; }
829834 table.keys td.act { text-align: right; }
830835 ul.plain { list-style: none; margin: 0 0 var(--sp-3); padding: 0; }
internal/web/templates/layout.html +1 −1
@@ -43,7 +43,7 @@
4343 {{if .Viewer}}<li><a {{if eq (str . "Tab") "account"}}aria-current="page" {{end}}href="/settings">Settings</a></li>{{end}}
4444 </ul>
4545 <div class="railfoot">
46 {{if .Viewer}}<a class="railuser" href="/{{.Viewer}}"><span class="avatar">{{initial .Viewer}}</span>{{.Viewer}}</a>
46 {{if .Viewer}}<a class="railuser" href="/{{.Viewer}}"><span class="avatar">{{initial .Viewer}}</span><span class="uname">{{.Viewer}}</span></a>
4747 <form method="post" action="/logout"><button type="submit" class="linklike">Log out</button></form>
4848 {{else}}<a href="/login">Sign in</a>{{end}}
4949 </div>