diff --git a/webui/static/style.css b/webui/static/style.css
index fab8bd65..85072d48 100644
--- a/webui/static/style.css
+++ b/webui/static/style.css
@@ -66325,32 +66325,58 @@ body.em-scroll-lock { overflow: hidden; }
}
/* ── Modal revamp: live track-row states (animation == gauge, in the table) ──
- The download-status cell carries data-state (set by the renderer); the row
- carries .row-working while a track is actively searching/downloading/
- processing. Badges are state-colored pills; only ACTIVE states breathe. */
+ The download-status cell carries data-state (set by the main renderer; a
+ secondary live-progress writer uses the legacy download-downloading /
+ download-complete classes — both vocabularies are styled). The row carries
+ .row-working while a track is actively searching/downloading/processing.
-.track-download-status[data-state] {
- display: inline-flex;
- align-items: center;
- padding: 3px 11px;
- border-radius: 999px;
+ LAYOUT NOTE: these are
s — they must stay display:table-cell, so the
+ pill is a centered pseudo-element painted BEHIND the text, not a box model
+ change on the cell itself. State colors are CSS vars on the td; the pseudo
+ reads them. */
+
+.track-download-status[data-state],
+.track-download-status.download-downloading,
+.track-download-status.download-complete,
+.track-match-status {
+ position: relative;
+ z-index: 0;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.02em;
- border: 1px solid var(--row-state-border, rgba(255, 255, 255, 0.1));
- background: var(--row-state-bg, rgba(255, 255, 255, 0.04));
color: var(--row-state-fg, rgba(255, 255, 255, 0.65));
- white-space: nowrap;
+}
+
+.track-download-status[data-state]::before,
+.track-download-status.download-downloading::before,
+.track-download-status.download-complete::before,
+.track-match-status.match-found::before,
+.track-match-status.match-missing::before,
+.track-match-status.match-checking::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: calc(100% - 18px);
+ height: 26px;
+ border-radius: 999px;
+ background: var(--row-state-bg, rgba(255, 255, 255, 0.04));
+ border: 1px solid var(--row-state-border, rgba(255, 255, 255, 0.1));
+ z-index: -1;
+ pointer-events: none;
}
.track-download-status[data-state="pending"],
.track-download-status[data-state="cancelled"],
-.track-download-status[data-state="cancelling"] {
+.track-download-status[data-state="cancelling"],
+.track-download-status[data-state="not_found"] {
--row-state-fg: rgba(255, 255, 255, 0.5);
}
.track-download-status[data-state="searching"],
-.track-download-status[data-state="downloading"] {
+.track-download-status[data-state="downloading"],
+.track-download-status.download-downloading {
--row-state-border: rgba(var(--accent-rgb), 0.4);
--row-state-bg: rgba(var(--accent-rgb), 0.12);
--row-state-fg: rgb(var(--accent-light-rgb));
@@ -66362,7 +66388,8 @@ body.em-scroll-lock { overflow: hidden; }
--row-state-fg: #fbbf24;
}
-.track-download-status[data-state="completed"] {
+.track-download-status[data-state="completed"],
+.track-download-status.download-complete {
--row-state-border: rgba(74, 222, 128, 0.35);
--row-state-bg: rgba(74, 222, 128, 0.1);
--row-state-fg: #4ade80;
@@ -66380,15 +66407,12 @@ body.em-scroll-lock { overflow: hidden; }
--row-state-fg: #fb923c;
}
-.track-download-status[data-state="not_found"] {
- --row-state-fg: rgba(255, 255, 255, 0.4);
-}
-
/* Only states that are actually WORKING breathe */
.track-download-status[data-state="searching"],
.track-download-status[data-state="downloading"],
.track-download-status[data-state="post_processing"],
-.track-download-status[data-state="cancelling"] {
+.track-download-status[data-state="cancelling"],
+.track-download-status.download-downloading {
animation: row-state-breathe 1.8s ease-in-out infinite;
}
@@ -66397,33 +66421,21 @@ body.em-scroll-lock { overflow: hidden; }
50% { opacity: 0.55; }
}
-/* Match-status cells get the same pill language (classes already existed) */
-.track-match-status {
- display: inline-flex;
- align-items: center;
- padding: 3px 11px;
- border-radius: 999px;
- font-size: 11px;
- font-weight: 600;
- white-space: nowrap;
-}
-
+/* Match-status colors feed the same pill (classes already existed) */
.track-match-status.match-found {
- border: 1px solid rgba(74, 222, 128, 0.35);
- background: rgba(74, 222, 128, 0.1);
- color: #4ade80;
+ --row-state-border: rgba(74, 222, 128, 0.35);
+ --row-state-bg: rgba(74, 222, 128, 0.1);
+ --row-state-fg: #4ade80;
}
.track-match-status.match-missing {
- border: 1px solid rgba(251, 191, 36, 0.35);
- background: rgba(251, 191, 36, 0.1);
- color: #fbbf24;
+ --row-state-border: rgba(251, 191, 36, 0.35);
+ --row-state-bg: rgba(251, 191, 36, 0.1);
+ --row-state-fg: #fbbf24;
}
.track-match-status.match-checking {
- border: 1px solid rgba(255, 255, 255, 0.1);
- background: rgba(255, 255, 255, 0.04);
- color: rgba(255, 255, 255, 0.5);
+ --row-state-fg: rgba(255, 255, 255, 0.5);
}
/* The actively-working row carries a persistent accent presence — like the
|