From bd292fbe320741c30b35277d07369a13052e8f09 Mon Sep 17 00:00:00 2001 From: Barely Removable Date: Wed, 26 Aug 2026 23:02:36 -0700 Subject: [PATCH 1/2] Rebuild request rows to match indexer rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Requests and Indexers cards sit side by side but read as two unrelated lists: requests led with a type badge, indexers with a status dot, and the rows drifted out of alignment once the share bar landed. Give a request row the same anatomy as an indexer row — status dot, title over a dimmed detail line, badge on the right — folding the type into the detail line and mapping request status onto the existing dot colours (a new .warn light covers pending). Both row types now share a --row-h floor so the two cards line up row for row; the share bar's top margin is trimmed so an indexer row reaches that height without overshooting it. Co-Authored-By: Claude Opus 5 --- static/css/base.css | 1 + static/css/dashboard.css | 15 +++++++++++++-- templates/dashboard.html | 10 +++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/static/css/base.css b/static/css/base.css index 1ae39c2..3886dc2 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -48,6 +48,7 @@ --radius: 10px; --radius-sm: 7px; --tap: 44px; /* minimum touch target */ + --row-h: 4.25rem; /* paired Requests / Indexers row height */ --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; diff --git a/static/css/dashboard.css b/static/css/dashboard.css index 0d7f6f3..3adc388 100644 --- a/static/css/dashboard.css +++ b/static/css/dashboard.css @@ -71,6 +71,7 @@ header { } .status-light.up { background: var(--ok); box-shadow: 0 0 0 3px var(--ok-dim); } .status-light.down { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-dim); } +.status-light.warn { background: var(--warn); box-shadow: 0 0 0 3px var(--warn-dim); } .header-right { order: 2; @@ -442,6 +443,7 @@ dd.is-accent { color: var(--accent); } display: flex; align-items: center; gap: 0.7rem; + min-height: var(--row-h); padding: 0.6rem 0.7rem; background: var(--surface-2); border: 1px solid var(--border); @@ -458,9 +460,11 @@ dd.is-accent { color: var(--accent); } .indexer-sub { font-size: var(--fs-xs); color: var(--text-3); } .indexer-sub .proto { text-transform: capitalize; } .indexer-sub:empty::before { content: "Indexer"; } -/* Share of grabs, scaled to the busiest indexer (see dashboard.html) */ +/* Share of grabs, scaled to the busiest indexer (see dashboard.html). + The margin is trimmed so a bar-carrying row still fits inside --row-h + and stays flush with the request rows beside it. */ .share-bar { - margin-top: 0.35rem; + margin-top: 0.3rem; height: 4px; border-radius: 100px; background: var(--surface); @@ -482,17 +486,24 @@ dd.is-accent { color: var(--accent); } } /* ── Requests (Ombi) ────────────────────────────────── */ +/* Request rows are the same object as an indexer row — same geometry and + the same dot/title/sub/badge anatomy — so the two cards read across as + one pair. --row-h keeps them aligned line-for-line; the indexer rows + reach it naturally once their share bar is in. */ .req-list { display: flex; flex-direction: column; gap: 0.5rem; } .req-item.is-hidden { display: none; } .req-item { display: flex; align-items: center; gap: 0.7rem; + min-height: var(--row-h); padding: 0.6rem 0.7rem; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); } +.req-item .status-light { width: 9px; height: 9px; flex-shrink: 0; } +.req-type { text-transform: capitalize; } .badge { font-size: var(--fs-xs); font-weight: 600; diff --git a/templates/dashboard.html b/templates/dashboard.html index b856635..26a1928 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -347,13 +347,17 @@ {% if ombi.recent %}
{% for req in ombi.recent %} + {# Same anatomy as an indexer row: status dot, name over a + dimmed detail line, status badge on the right. #} + {% set st = req.status | lower %}
- {{ req.type }} +
{{ req.title }}
-
{{ req.user }} · {{ req.date_display }}
+
{{ req.type }} · {{ req.user }} · {{ req.date_display }}
- {{ req.status }} + {{ req.status }}
{% endfor %}
From 4b56f1fba9bd3ad680b2ea83a89a5bc5bd6e31e3 Mon Sep 17 00:00:00 2001 From: Barely Removable Date: Wed, 26 Aug 2026 23:03:35 -0700 Subject: [PATCH 2/2] Bump to v1.3.0 for deploy Co-Authored-By: Claude Opus 5 --- app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.py b/app.py index 72a79db..2446478 100644 --- a/app.py +++ b/app.py @@ -20,7 +20,7 @@ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Docker tab caches stale container IDs, so the footer is the reliable way # to confirm a `docker compose up -d --build` actually took effect. # Both are env-overridable if the deploy pipeline ever injects them. -APP_VERSION = os.environ.get("APP_VERSION", "1.2.0") +APP_VERSION = os.environ.get("APP_VERSION", "1.3.0") APP_VERSION_DATE = os.environ.get("APP_VERSION_DATE", "2026-08-26") # Must point at a path that survives `docker compose up --build` — the