doc 04 §3d: slider thumbs white + page bg pure black

Two cosmetic CSS tweaks appended to CustomCss via standard
GET-edit-POST flow (HTTP 204, all prior blocks preserved).

Thumbs: scope to .MuiSlider-thumb / .osdPositionSlider / .osdVolumeSlider
(plus legacy emby-slider .sliderThumb) -> #fff. Avoids touching
--mui-palette-primary-main so buttons/focus rings stay untinted.

Background: force --primary-background-color + --background-color and
html/body/.skinHeader/.mainAnimatedPages/#reactRoot/.dashboardDocument
to #000 so OLED + Netflix-style artwork fades read clean.

Last branding POST in this sequence.
This commit is contained in:
s8n 2026-05-08 03:38:32 +01:00
parent 004016b3cf
commit 88296d892b

View file

@ -293,6 +293,87 @@ logo override, Quick Connect hide, Settings drawer hide, LoginDisclaimer,
SplashscreenEnabled). POST returned 204; same operational rule from §3b
applies — this was the last branding POST in the sequence.
### 3d. Slider thumb white + pure-black background (2026-05-08)
Two small visual nits remained after §3c. (1) The OSD scrubber and volume
slider thumbs in the video player were rendered with the Material-UI
default primary tint (blue-ish circle), clashing against the otherwise
red/white/black Cineplex palette; we want pure white circles so the thumb
reads as a neutral "where am I" indicator and not a brand colour.
(2) The page surface throughout the SPA was a near-black grey
(roughly `#181818`, inherited from Jellyfin / Cineplex defaults) rather
than true `#000000`; on OLED displays and against the Netflix-style
artwork-edge fades this looked dusty. Both fixed with pure CSS appended
to `CustomCss`, no `index.html` edit, no container restart.
**Selectors verified against the live bundle.** `osdPositionSlider` and
`osdVolumeSlider` are visible in `playback-video-index-html.*.chunk.js`
and `90742.*.chunk.js` (grep on `/jellyfin/jellyfin-web/*.js`). The
inner `.MuiSlider-thumb` class is added at runtime by MUI's React
component, so it doesn't appear as a literal in the bundle but is the
documented MUI public API surface — overriding it directly (rather than
the `--mui-palette-primary-main` CSS variable) keeps the rest of the
button/control palette unchanged. Older Jellyfin builds used
`emby-slider .sliderThumb`, included as a belt-and-braces fallback.
```css
/* Tweak: white thumbs (2026-05-08) */
.MuiSlider-thumb,
.osdPositionSlider .MuiSlider-thumb,
.osdVolumeSlider .MuiSlider-thumb,
emby-slider .sliderThumb {
color: #ffffff !important;
background-color: #ffffff !important;
border-color: #ffffff !important;
}
.MuiSlider-thumb:hover,
.MuiSlider-thumb.Mui-focusVisible,
.MuiSlider-thumb:active {
box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.16) !important;
}
/* Tweak: pure black bg (2026-05-08) */
:root {
--primary-background-color: #000000 !important;
--background-color: #000000 !important;
}
html, body, .preload, .skinBody, .mainDrawerHandle {
background-color: #000000 !important;
}
.skinHeader,
.skinHeader.semiTransparent,
.skinHeader.skinHeader-withBackground,
.mainAnimatedPages,
#reactRoot,
.dashboardDocument {
background-color: #000000 !important;
}
```
Rationale notes:
- We deliberately did **not** override `--mui-palette-primary-main` at
`:root` — that variable re-tints buttons, focus rings, and a handful
of other accents globally. Scoping to `.MuiSlider-thumb` keeps the
fix surgical.
- We kept the red track (`.MuiSlider-track`) and grey rail
(`.MuiSlider-rail`) untouched; only the draggable thumb changed.
- For the background, both the Jellyfin shell variables
(`--primary-background-color`, `--background-color`) and the concrete
wrapper elements (`html`, `body`, `.skinHeader`, `.mainAnimatedPages`,
`#reactRoot`, `.dashboardDocument`) are forced to `#000`. Belt and
braces — different views render through different wrappers and the
Cineplex import sometimes redeclares the variables.
- Screenshots: capture player chrome (scrubber + volume) and home/lib
pages on next visual sweep; if poster cards visibly lose contrast
against pure black, soften the card surface to `#0a0a0a` in a
follow-up tweak rather than raising the page surface again.
POST returned 204. Verified via `GET /Branding/Configuration`: both
new blocks present, all prior blocks (Cineplex `@import`, cast/crew
hide, ARRFLIX logo override, Quick Connect hide, Settings drawer hide,
header icon hide) preserved verbatim. Same race rule applies — this is
the last branding POST in the sequence.
---
## 4. Multi-user UX prep