fabrica

hanna/fabrica

fix(web): release button alignment, assets spacing, branch meta bullets

97f5f00 · hanna committed on 2026-07-26

- Reset the stacked-form top margin on the release Delete button so it aligns
  with the Edit link instead of floating below it.
- Give the edit-page Assets section top margin so it doesn't abut the form card.
- Bullet-separate the branch list meta (counts · updated · author); ahead/behind
  stay grouped as one segment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed by hannaSSH key fingerprint: SHA256:4g9cWhkAAw8gwqhJUcVbSnGEvdGwklW+1Aa/fMUu59k
4 files changed · +27 −8UnifiedSplit
assets/base.css +20 −0
@@ -2249,6 +2249,15 @@ pre.code {
22492249 gap: 0.5rem;
22502250 flex: none;
22512251 }
2252+/* The Delete button sits in a card form, so it would otherwise inherit the
2253+ stacked-form top margin and float below the Edit link. */
2254+.release-actions form button[type="submit"] {
2255+ margin-top: 0;
2256+}
2257+/* Asset management sits below the edit form; give it room to breathe. */
2258+.release-assets-editor {
2259+ margin-top: 1.5rem;
2260+}
22522261 .release-notes {
22532262 margin: 1rem 0;
22542263 padding-top: 1rem;
@@ -2688,6 +2697,17 @@ table.blob tr:target {
26882697 .entry-row-meta .ahead {
26892698 color: var(--fb-success);
26902699 }
2700+/* Branch list meta: bullet-separate the segments (counts · updated · author).
2701+ Ahead/behind stay grouped in `.branch-counts`, so they read as one segment. */
2702+.branch-meta > * + *::before {
2703+ content: "·";
2704+ margin-right: 0.4rem;
2705+ color: var(--fb-fg-muted);
2706+}
2707+.branch-counts {
2708+ display: inline-flex;
2709+ gap: 0.35rem;
2710+}
26912711 .entry-row-actions {
26922712 display: flex;
26932713 align-items: center;
crates/web/src/releases.rs +1 −1
@@ -344,7 +344,7 @@ fn release_form(
344344 /// buttons, then the upload form. Only reachable once a release exists.
345345 fn assets_editor(release_id: &str, csrf: &str, assets: &[store::ReleaseAsset]) -> Markup {
346346 html! {
347- section class="listing" {
347+ section class="listing release-assets-editor" {
348348 h2 { "Assets" }
349349 div class="card" {
350350 @if assets.is_empty() {
crates/web/src/repo.rs +6 −6
@@ -1201,12 +1201,12 @@ async fn branches_view(
12011201 li class="entry-row" {
12021202 div class="entry-row-body" {
12031203 a class="entry-row-title" href=(format!("{base}/-/tree/{}", b.name)) { (b.name) }
1204- div class="entry-row-meta muted" {
1205- @if b.ahead > 0 {
1206- span class="ahead" { "↑" (b.ahead) }
1207- }
1208- @if b.behind > 0 {
1209- span class="behind" { "↓" (b.behind) }
1204+ div class="entry-row-meta muted branch-meta" {
1205+ @if b.ahead > 0 || b.behind > 0 {
1206+ span class="branch-counts" {
1207+ @if b.ahead > 0 { span class="ahead" { "↑" (b.ahead) } }
1208+ @if b.behind > 0 { span class="behind" { "↓" (b.behind) } }
1209+ }
12101210 }
12111211 span { "Updated " (crate::activity::fmt_relative(b.tip.author.time_ms, now)) }
12121212 span { "by " (b.tip.author.name) }
data/repos/01/01kye56ybp94wrec3fm02e9ge8.git/refs/tags/v0.0.0 +0 −1
@@ -1 +0,0 @@
1-37157e7f0e8a390c3579e4bfc14dbbbf1d06a711