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 {
2249 gap: 0.5rem;2249 gap: 0.5rem;
2250 flex: none;2250 flex: none;
2251}2251}
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}
2252.release-notes {2261.release-notes {
2253 margin: 1rem 0;2262 margin: 1rem 0;
2254 padding-top: 1rem;2263 padding-top: 1rem;
@@ -2688,6 +2697,17 @@ table.blob tr:target {
2688.entry-row-meta .ahead {2697.entry-row-meta .ahead {
2689 color: var(--fb-success);2698 color: var(--fb-success);
2690}2699}
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}
2691.entry-row-actions {2711.entry-row-actions {
2692 display: flex;2712 display: flex;
2693 align-items: center;2713 align-items: center;
crates/web/src/releases.rs +1 −1
@@ -344,7 +344,7 @@ fn release_form(
344/// buttons, then the upload form. Only reachable once a release exists.344/// buttons, then the upload form. Only reachable once a release exists.
345fn assets_editor(release_id: &str, csrf: &str, assets: &[store::ReleaseAsset]) -> Markup {345fn assets_editor(release_id: &str, csrf: &str, assets: &[store::ReleaseAsset]) -> Markup {
346 html! {346 html! {
347 section class="listing" {347 section class="listing release-assets-editor" {
348 h2 { "Assets" }348 h2 { "Assets" }
349 div class="card" {349 div class="card" {
350 @if assets.is_empty() {350 @if assets.is_empty() {
crates/web/src/repo.rs +6 −6
@@ -1201,12 +1201,12 @@ async fn branches_view(
1201 li class="entry-row" {1201 li class="entry-row" {
1202 div class="entry-row-body" {1202 div class="entry-row-body" {
1203 a class="entry-row-title" href=(format!("{base}/-/tree/{}", b.name)) { (b.name) }1203 a class="entry-row-title" href=(format!("{base}/-/tree/{}", b.name)) { (b.name) }
1204 div class="entry-row-meta muted" {1204 div class="entry-row-meta muted branch-meta" {
1205 @if b.ahead > 0 {1205 @if b.ahead > 0 || b.behind > 0 {
1206 span class="ahead" { "↑" (b.ahead) }1206 span class="branch-counts" {
1207 }1207 @if b.ahead > 0 { span class="ahead" { "↑" (b.ahead) } }
1208 @if b.behind > 0 {1208 @if b.behind > 0 { span class="behind" { "↓" (b.behind) } }
1209 span class="behind" { "↓" (b.behind) }1209 }
1210 }1210 }
1211 span { "Updated " (crate::activity::fmt_relative(b.tip.author.time_ms, now)) }1211 span { "Updated " (crate::activity::fmt_relative(b.tip.author.time_ms, now)) }
1212 span { "by " (b.tip.author.name) }1212 span { "by " (b.tip.author.name) }
data/repos/01/01kye56ybp94wrec3fm02e9ge8.git/refs/tags/v0.0.0 +0 −1
@@ -1 +0,0 @@
137157e7f0e8a390c3579e4bfc14dbbbf1d06a711