Conversation
|
I did some quick tests and looked through it and it seems to work. Does this interfere with anything you might be working on? If not, ill merge it. I always use dark mode so I didnt even realise this was an issue haha |
|
Thanks for the quick reply. I haven't worked on any other issues or FRs in here so far. This PR actually only involves those two files. |
|
@StudioNirin hold off on the merge for a moment, it does interfere, though not in the way the question was meant. @DeLo1585 the theme change itself looks good and the approach is the right one, I'll come back to that. The problem is the branch. It's based on current main, but the two files were committed as their v3.2.0 versions with the token change applied on top, so the diff carries everything that's landed in those files since the release as deletions. That's 276 lines removed against 86 added. Merging it as is would take out all of the Recently Added styles, the share-mismatch warning, the extras badge and bytes-first progress line from #210, and the group id keying that stops two groups for the same show from colliding in the banner. Easy to miss when you've been testing by copying the files into a running container, since that container is on 3.2.0 too. The fix is small. Check out main, reapply only the token block and the On the design side, some background. The pill being dark in light mode was a deliberate call back in February, not a leftover. Light theme came later than the rest of the UI, we tried a light pill at the time and it didn't look right, so we kept it dark with a stronger border and shadow. I'm not against a light pill, but the pill's status colours are hard coded literals that were tuned for a black surface, and they don't hold up on white. In your screenshots the Plex orange idle accent clashes with the card, and the muted text is going to be hard to read, since a lot of the swaps land at 0.15 to 0.25 black on white. The light blue countdown timer is a fixed colour too. If you want to keep going with the light surface, I'd suggest:
If that ends up being a lot of tuning, the other option the issue itself raised is fine with me: keep the pill as a deliberate dark element in light mode and give it a stronger border so it reads as intentional. Either way, thanks for digging into this, light mode has had less attention than it deserves. |
|
Ahh I see, good catch @Brandon-Haney I didnt think to look for that |
|
Yeah, I used the v3.2.0 source zip, that explains it, wasn't on current main. I redo the changes against the current branch (with Claude's Sonnet help) and then update this PR and let you both know once it's ready first adjustments results were:
|
|
(Worked with Claude Sonnet 5 on this patch — hoping nothing got scrambled or out of sync this time around!) I've rebased against current main and reapplied just the token block + rgba swaps on top, nothing else touched. Diff is now 45 removed / 120 added in custom.css and a clean 13/13 in the template, all one-line replacements, no removed blocks (Recently Added, the share-mismatch warning, extras badge, bytes-first progress, and the group-id keying are all untouched and still present). On the design points, I went with tuning it rather than falling back to a dark pill, using your suggestions directly:
Pushed both files to the same branch. Let me know if the contrast tiers need further adjustment, I picked the boosted values based on your 0.45–0.6 guidance but didn't have a way to measure actual contrast ratios here. |
|
Small correction to my last comment, the I originally tried deriving it dynamically as Functionally the result is the same either way, tint stays in sync with whichever state/token is active, this is just the version that's actually in the branch now. Sorry for the mismatch in the writeup. so @StudioNirin @Brandon-Haney its ready for review the updates 2 files |
|
Went through the rebased branch and it's clean now. Merge base is current main, every removed line is one of the literal colour swaps, the template is 13 one-line replacements, and all the code I was worried about is untouched. Dark theme resolves to the same values as before. Nice work turning that around quickly. I put the pill states side by side in both themes (dark left, light right) and measured the light side. All the text tiers you boosted come out above 4.5:1, most well above, so the tiering approach did its job. Click the image for full size, or open dark and light separately. Two spots are still short:
Happy to approve once those two are in. @StudioNirin from my side this is good to merge after that. |
|
@Brandon-Haney Thank you for your Honest expertise and the comparison screenshots. This overview is truly fantastic, and helps me a lot. I will implement this change within the next 12 hours 🙏👌💪 |
Looks good, buzz me when youve made that change and ill merge. 🫡 |
|
Both fixed.
While Sonnet5 was at it and went looking for anything else with the same shape of bug and found one more: "Resume" in the Queue Paused state had the identical setup
Testing on my own container in a bit, but happy for you to take another pass whenever, in case something else is still off that I haven't caught. Don't have your nice side-by-side comparison setup though, so I'm mostly eyeballing it :D |

Fixes #213
Source review / writing / testing done together with Claude Sonnet 5 (Anthropic).
What changed
The floating operation-status pill (
#global-operation-banner .di-pill) previously had a hard-coded black background and white text/decoration colors throughout, both in its compact and expanded (Tier 2/3, detail-log) states. The existing Light theme override only softened the drop shadow, intentionally keeping the pill black (see the removed comment "Pill stays dark in light mode").This PR makes the pill genuinely theme-aware for Light mode instead, while leaving Dark mode pixel-identical to before.
Approach
Introduced three CSS custom properties, scoped to
#global-operation-banner(the pill's outer, always-present container):Dark theme keeps these at their original literal values, so nothing changes there.
[data-theme="light"] #global-operation-banneroverrides them to a light surface (var(--plex-bg-card)) and dark-on-light text, matching the rest of the app's existing Light theme palette:All previously hard-coded
rgba(255,255,255,X)/#fff/#1a1a1aoccurrences inside the pill (label, muted metric, progress bar/track, divider, expand-hint, detail log rows, queue/countdown text, etc. — both compact and expanded states) now reference these tokens instead, in bothcustom.cssand the few inlinestyle="..."occurrences inglobal_operation_banner.htmlthat CSS classes alone couldn't reach.Left untouched on purpose:
--accentoperation-state colors (.di-pill--caching,--evicting,--error, etc.) — caching/evicting/error color coding is identical in both themes..di-error-badgekeeps fixed white text, since its background is always red regardless of theme.Testing
Manually tested on a running v3.2.0 container (Docker/Unraid) by swapping in the patched files via
docker cpand comparing both themes before/after:Screenshots: