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 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 %}