FileToLink / apex /ui /abyss.css
Hermes Agent
feat: modern streaming upgrades - 16:9 landscape continue watching rails, hide my media row, frosted glass catalog toolbar
23463b4
Raw History Blame Contribute Delete
166 kB
/* Robust AlphaPicker complete suppression to eliminate React DOM reconciliation crashes */
.alphaPicker,
.alphaPicker-fixed,
.alphaPicker-fixed-right,
.alphanumeric-scrollbar,
#alpha-scrubber-hud,
div[class*="alphaPicker"],
div[class*="alphanumeric"],
div[class*="alpha-picker"] {
display: none !important;
visibility: hidden !important;
pointer-events: none !important;
width: 0 !important;
height: 0 !important;
opacity: 0 !important;
position: absolute !important;
overflow: hidden !important;
}
/* 1. IMPORTS & FONTS
- Override this to customise font of abyss for your setup. */
@import url('https://fonts.googleapis.com/css2?family=Google+Sans:ital,opsz,wght@0,17..18,400..700;1,17..18,400..700&display=swap');
@font-face {
font-family: 'Material Icons Round';
font-style: normal;
font-weight: 400;
src: url(https://cdn.jsdelivr.net/npm/material-icons@1.13.12/iconfont/material-icons-round.woff2) format('woff2');
}
/* Force rendering on icon elements across the theme */
.material-icons-round,
.material-symbols-rounded,
[class*="material-icons"] {
font-family: 'Material Icons Round' !important;
font-weight: normal;
font-style: normal;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: 'liga';
font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* 2. THEME VARIABLES
— Override these to customise abyss for your setup. */
:root {
/* Primary accent colour — used for highlights, active states, progress bars.
Format: R, G, B (no rgb() wrapper) so opacity variants work cleanly. */
--abyss-accent: 245, 245, 247;
/* Space-separated twin used by Jellyfin 12's MUI channel variables. */
--abyss-accent-channel: 245 245 247;
/* Corner rounding applied globally */
--abyss-radius: 12px;
/* Fixed defaults */
/* Backgorund for drawers and dialogs */
--abyss-glass-tint: 42, 42, 42;
/* Custom cubic-bezier */
--abyss-ease: cubic-bezier(0.16, 1, 0.3, 1);
--abyss-ease-snappy: cubic-bezier(0.4, 0.0, 0.2, 1);
/* Rendering controls used by the optional Lite override */
--abyss-backdrop-blur: 23px;
--abyss-glass-blur: 15px;
}
/* Jellyfin 12 exposes the built-in theme palette as CSS variables. Keep the
MUI and legacy surfaces on the same Abyss palette without relying on
generated Emotion class names. */
html[data-theme="dark"] {
--jf-palette-primary-main: rgb(var(--abyss-accent));
--jf-palette-primary-mainChannel: var(--abyss-accent-channel);
--jf-palette-primary-contrastText: #121212;
--jf-palette-secondary-main: rgb(var(--abyss-accent));
--jf-palette-secondary-mainChannel: var(--abyss-accent-channel);
--jf-palette-secondary-contrastText: #121212;
--jf-palette-AppBar-defaultBg: rgba(var(--abyss-glass-tint), 0.92);
--jf-palette-AppBar-transparentBg: rgba(var(--abyss-glass-tint), 0.72);
--jf-card-borderRadius: var(--abyss-radius);
--jf-palette-error-main: #f92672;
--jf-palette-error-light: rgb(249, 38, 114);
--jf-palette-error-dark: rgb(172, 26, 78);
}
/* 3. BASE / GLOBAL */
#reactRoot {
scrollbar-gutter: stable;
}
body {
font-family: "Google Sans", sans-serif;
font-optical-sizing: auto;
font-style: normal;
font-variation-settings: "GRAD" 0;
overscroll-behavior: none;
}
.material-icons {
font-family: 'Material Icons Round' !important;
font-weight: normal;
font-style: normal;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
font-feature-settings: 'liga';
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
}
:root {
scrollbar-color: rgba(var(--abyss-accent), 0.8) #0000 !important;
}
::-webkit-scrollbar-track-piece {
background-color: #0000;
}
::-webkit-scrollbar-corner {
background-color: #0000;
}
::-webkit-scrollbar-thumb {
background: rgba(var(--abyss-accent), 0.8) !important;
border-radius: var(--abyss-radius);
}
fieldset {
border: 1px solid rgba(40, 40, 40, 0.8);
border-radius: 0.4em;
}
progress {
border-radius: var(--abyss-radius);
background: rgba(0, 0, 0, 0.5) !important;
border: 1px solid rgba(var(--abyss-accent), 0.22);
}
progress::-webkit-progress-bar {
border-radius: var(--abyss-radius);
background: rgba(0, 0, 0, 0.5) !important;
border: 0px solid rgba(var(--abyss-accent), 0.22);
}
progress::-moz-progress-bar {
border-radius: var(--abyss-radius);
background-color: rgba(var(--abyss-accent), 0.75);
}
progress::-webkit-progress-value {
border-radius: var(--abyss-radius);
background-color: rgba(var(--abyss-accent), 0.75);
}
.taskProgressOuter,
.taskProgressInner {
border-radius: var(--abyss-radius) !important;
}
.taskProgressOuter {
background: rgba(0, 0, 0, 0.5) !important;
border: 1px solid rgba(var(--abyss-accent), 0.22);
}
.taskProgressInner,
#videoOsdPage .sliderMarker.watched {
background: rgba(var(--abyss-accent), 1) !important;
}
#videoOsdPage .sliderMarker.unwatched {
background: hsl(0deg 0% 30%) !important;
}
.mdl-slider-background-flex {
background: hsl(0deg 0% 30%) !important;
}
#divRunningTasks span {
color: rgba(var(--abyss-accent), 0.75) !important;
}
#scheduledTasksPage span {
color: rgba(var(--abyss-accent), 0.75) !important;
}
/* Override browser default blue focus/selection colour */
::selection {
background: rgba(var(--abyss-accent), 0.25);
color: rgb(var(--abyss-accent));
}
::-moz-selection {
background: rgba(var(--abyss-accent), 0.25);
color: rgb(var(--abyss-accent));
}
:focus-visible {
outline-color: rgba(var(--abyss-accent), 0.6) !important;
}
input:focus,
textarea:focus,
select:focus,
.emby-input:focus,
.emby-textarea:focus,
.emby-select:focus,
.emby-select-withcolor:focus,
.checkboxOutline:focus {
border-color: rgba(var(--abyss-accent), 0.4) !important;
}
input[type="checkbox"]:checked,
input[type="radio"]:checked {
accent-color: rgb(var(--abyss-accent));
}
/* Override Chromium/Electron blue accent globally */
:root {
accent-color: rgb(var(--abyss-accent));
}
/* 4. TYPOGRAPHY - Native Header Tabs Fully Suppressed in Favor of Apex TV Topbar */
.headerTabs,
.headerTabs.sectionTabs,
.emby-tabs,
.emby-tabs-slider,
.sectionTabs {
display: none !important;
visibility: hidden !important;
height: 0 !important;
width: 0 !important;
opacity: 0 !important;
pointer-events: none !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
}
.pageTitle {
margin-top: auto;
margin-bottom: auto;
font-size: x-large;
opacity: 0.8;
font-weight: 500;
border-radius: 12px;
}
.pageTitle:not(:empty) {
padding: 0 12px;
}
.pageTitle.pageTitleWithLogo.pageTitleWithDefaultLogo {
display: none !important;
}
#tvRecommendedPage .pageTitle,
#moviesPage .pageTitle,
#musicRecommendedPage .pageTitle,
#itemDetailPage .pageTitle {
display: none !important;
}
#videoOsdPage .pageTitle {
display: flex !important;
}
.settingsContainer .MuiTypography-h2,
.sectionTitle {
font-weight: 600;
}
.settingsContainer .MuiTypography-h2,
.homeScreenSettingsContainer .sectionTitle,
#quickConnectPreferencesPage .sectionTitle,
.settingsContainer .sectionTitle {
font-size: xx-large;
}
.settingsContainer .MuiTypography-h2 {
margin-block-start: 0.83em;
}
.settingsContainer .MuiInputBase-root.MuiFilledInput-underline::after,
.settingsContainer .MuiInputBase-root.MuiFilledInput-underline::before {
border-bottom: none !important;
}
#favoritesTab .sectionTitle,
.homeSectionsContainer .sectionTitle {
margin-left: .4em !important;
margin-top: .2em !important;
margin-bottom: .2em !important;
}
.sectionTitleTextButton>.material-icons {
margin: 0;
}
.sectionTitleTextButton:not(.padded-left) {
padding: 4px 12px 6px 6px !important;
margin-left: -6px !important;
border-radius: var(--abyss-radius);
}
.sectionTitleTextButton>.sectionTitle {
margin-right: 16px;
}
.inputLabel,
.selectLabel,
.checkboxLabel {
font-weight: 500;
}
.cardText {
padding: .06em .5em 0 .06em;
font-weight: 200;
font-size: medium;
opacity: 0.8;
}
.cardText-first {
margin-top: 4px !important;
font-weight: 600;
font-size: larger !important;
opacity: 1 !important;
}
.cardTextCentered,
.cardTextCentered>.textActionButton {
text-align: left !important;
}
.itemName {
margin: .5em 0 !important;
}
.starIcon {
color: rgba(var(--abyss-accent), .8);
}
.dialog {
font-weight: 500;
}
.formDialogHeaderTitle {
font-weight: bold !important;
margin-left: 0 !important;
}
#dialogToc {
overflow: clip;
display: flex;
flex-direction: column;
}
#dialogToc .toc {
overflow-y: scroll;
}
#dialogToc .toc li {
margin-bottom: 12px;
}
/* 5. LAYOUT & STRUCTURE */
/* Header */
.headerTop {
padding: 2em 0 !important;
}
.skinHeader {
background-color: transparent;
display: flex !important;
justify-items: center !important;
align-self: center !important;
justify-content: center !important;
}
.skinHeader.semiTransparent {
background-color: transparent;
}
.skinHeader-withBackground::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
height: 8em;
pointer-events: none;
background: none;
z-index: 1;
}
.headerLeft,
.headerRight {
padding: 0 31px;
align-items: center;
}
.headerUserButtonRound {
border-radius: 50px !important;
}
/* Jellyfin 12 modern app shell (React / MUI) [BETA] */
/* Completely remove alphabet-based search and quick scroller */
.alphaPicker,
.alphaPicker-fixed,
.alphaPicker-fixed-right,
.alphanumeric-scrollbar,
.alphaPickerInner,
.alphaPickerButton,
.alphaPickerRow,
div[class*="alphaPicker"],
div[class*="alphanumeric"],
div[class*="alpha-picker"],
#alpha-scrubber-hud {
display: none !important;
visibility: hidden !important;
pointer-events: none !important;
width: 0 !important;
height: 0 !important;
opacity: 0 !important;
margin: 0 !important;
padding: 0 !important;
}
.alphaPicker .alphaPickerInner,
.alphaPicker-fixed-right .alphaPickerInner,
.alphaPicker-fixed-right .MuiPaper-root,
div[class*="alphaPicker"] .MuiPaper-root,
div[class*="alphaPickerInner"] {
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
box-shadow: none !important;
border: none !important;
border-radius: 0 !important;
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
height: 100% !important;
max-height: 100% !important;
box-sizing: border-box !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: space-between !important;
}
/* Exclude # symbol completely - alphabets only */
.alphaPickerButton[data-value="#"],
.alphaPickerButton[data-letter="#"],
.alphaPickerButton[data-item="#"],
.alphaPickerRow[data-prefix="#"],
.alphaPickerRow[data-item="#"],
.hide-hash {
display: none !important;
}
.alphaPickerButton,
.alphaPickerRow,
.alphaPicker-fixed-right .MuiButtonBase-root,
.alphaPicker-fixed-right .MuiPaper-root .MuiButtonBase-root,
div[class*="alphaPicker"] button,
div[class*="alphaPickerButton"] {
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
box-shadow: none !important;
border: none !important;
border-radius: 0 !important;
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
color: rgba(255, 255, 255, 0.42) !important;
font-size: 10px !important;
font-weight: 600 !important;
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Inter", "Segoe UI", Roboto, sans-serif !important;
line-height: 1 !important;
padding: 0 !important;
margin: 0 !important;
width: 18px !important;
min-width: 0 !important;
height: auto !important;
min-height: 0 !important;
flex: 1 1 0% !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9) !important;
transform: none !important;
transition: color 0.12s ease !important;
touch-action: none !important;
cursor: pointer !important;
}
/* Scrolling/Hover: NO shapes, NO box, NO scaling - change letter color only */
.alphaPickerButton:hover,
.alphaPickerButton:focus,
.alphaPickerButton:active,
.alphaPickerButton.active-scrub,
.alphaPickerButton.selectedItem,
.alphaPickerButton-selected,
.alphaPicker-fixed-right .MuiButtonBase-root:hover,
.alphaPicker-fixed-right .MuiButtonBase-root.Mui-selected {
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
box-shadow: none !important;
border: none !important;
border-radius: 0 !important;
transform: none !important;
color: #ffffff !important;
font-weight: 800 !important;
text-shadow: 0 0 6px rgba(255, 255, 255, 0.95), 0 1px 2px #000000 !important;
}
#alpha-scrubber-hud {
display: none !important;
}
.MuiTouchRipple-root {
color: rgb(var(--abyss-accent));
}
header.MuiAppBar-root>.MuiToolbar-root {
position: relative;
}
/* Disabled conflicting absolute toolbar centering */
/* header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type neutralized */
html[data-theme="dark"] header.MuiAppBar-root>.MuiToolbar-root:nth-of-type(2) .MuiButtonBase-root {
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
}
header.MuiAppBar-root>.MuiToolbar-root>.MuiBox-root:last-child {
order: initial;
margin-right: initial;
}
header.MuiAppBar-root>.MuiToolbar-root>.MuiStack-root:last-child {
overflow: scroll;
scrollbar-width: none;
}
/*Filter button Group buttons*/
header.MuiAppBar-root>.MuiToolbar-root>.MuiStack-root:last-child .MuiButtonGroup-root:nth-last-child(2) .MuiButtonBase-root {
border-radius: 12px !important;
padding: 0.56rem !important;
}
/*Counter Chip*/
header.MuiAppBar-root>.MuiToolbar-root:nth-child(2)>.MuiBox-root>.MuiChip-root {
font-family: "Google Sans", sans-serif !important;
font-size: medium;
font-weight: 500;
padding: 0.75rem 0;
height: auto;
background-color: transparent !important;
color: rgba(var(--abyss-accent), 0.78);
border-radius: var(--abyss-radius) !important;
margin: 0;
transition: background-color 0.25s var(--abyss-ease), color 0.25s var(--abyss-ease), transform 0.25s var(--abyss-ease);
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
}
/* Disabled conflicting order -1 rule on header right */
/* header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-child neutralized */
body:has(#videoOsdPage:not(.hide)) header.MuiAppBar-root>.MuiToolbar-root>.MuiBox-root:last-child {
order: initial;
margin-right: initial;
}
html[data-theme="dark"] .MuiBox-root .tabContent.pageTabContent.is-active.abyss-spotlight-active .featurediframe.focusable {
margin-top: 0 !important;
}
html[data-theme="dark"] header.MuiAppBar-root {
color: rgb(var(--abyss-accent));
background-color: transparent !important;
background: transparent !important;
background-image: none !important;
box-shadow: none !important;
--Paper-shadow: none;
--Paper-overlay: none;
}
html[data-theme="dark"] header.MuiAppBar-root {
background: transparent !important;
overflow: visible;
}
html[data-theme="dark"] .MuiButton-icon img[src*="icon-transparent"] {
max-height: 0.85em !important;
max-width: 0.85em !important;
opacity: 0.85;
filter: brightness(0) invert(1);
}
html[data-theme="dark"] header.MuiAppBar-root:has(> .MuiToolbar-root + .MuiToolbar-root)::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
height: 10rem;
z-index: -1;
pointer-events: none;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0.28) 55%, rgba(0, 0, 0, 0) 100%);
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
-webkit-mask-image: linear-gradient(to bottom, black 0%, black 55%, transparent 100%);
mask-image: linear-gradient(to bottom, black 0%, black 55%, transparent 100%);
}
html[data-theme="dark"] header.MuiAppBar-root.MuiAppBar-positionFixed {
border: none;
--Paper-shadow: none !important;
}
html[data-theme="dark"] header.MuiAppBar-root .MuiStack-root:first-of-type {
border-radius: 50px;
padding: 4px;
overflow: auto;
scrollbar-width: none;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(87, 87, 87, 0);
-webkit-backdrop-filter: blur(var(--abyss-glass-blur)) !important;
backdrop-filter: blur(var(--abyss-glass-blur)) !important;
background-color: transparent;
transition: all 0.45s var(--abyss-ease)
}
html[data-theme="dark"] header.MuiAppBar-root.MuiPaper-elevation1 .MuiStack-root:first-of-type {
border: 1px solid rgba(87, 87, 87, 0.18);
background-color: rgba(var(--abyss-glass-tint), 0.69) !important;
transition: all 0.45s var(--abyss-ease)
}
html[data-theme="dark"] header.MuiAppBar-root .MuiToolbar-root:first-of-type .MuiButtonBase-root {
border-radius: 50px;
}
html[data-theme="dark"] header.MuiAppBar-root .MuiButtonBase-root.MuiIconButton-root {
border-radius: var(--abyss-radius) !important;
background: transparent !important;
-webkit-backdrop-filter: blur(var(--abyss-glass-blur)) !important;
backdrop-filter: blur(var(--abyss-glass-blur)) !important;
}
html[data-theme="dark"] header.MuiAppBar-root .MuiButtonBase-root.MuiIconButton-root:has(.MuiAvatar-root) {
border-radius: 50px !important;
padding: 0 !important;
margin-left: 0.48rem
}
html[data-theme="dark"] header.MuiAppBar-root>.MuiToolbar-root:not(:has(> .MuiStack-root:first-of-type))>.MuiButtonBase-root:first-child {
margin: 0 8px !important;
}
html[data-theme="dark"] header.MuiAppBar-root .MuiBox-root {
gap: 0.48rem;
}
html[data-theme="dark"] .MuiToolbar-root {
min-height: 64px;
}
html[data-theme="dark"] .MuiTypography-root {
font-family: "Google Sans", sans-serif !important;
}
html[data-theme="dark"] .MuiToolbar-root .MuiButton-root,
html[data-theme="dark"] .MuiToolbar-root .MuiIconButton-root {
color: rgba(var(--abyss-accent), 0.78);
border-radius: var(--abyss-radius);
transition: background-color 0.25s var(--abyss-ease),
color 0.25s var(--abyss-ease),
transform 0.25s var(--abyss-ease);
}
html[data-theme="dark"] .MuiToolbar-root .MuiButton-root {
min-width: auto;
padding: 0.56rem 1rem;
font-family: inherit;
font-weight: 600;
line-height: 1.25;
text-transform: none;
}
html[data-theme="dark"] .MuiToolbar-root .MuiIconButton-root {
padding: 0.6rem;
}
html[data-theme="dark"] .MuiToolbar-root .MuiButtonGroup-root {
border-radius: 50px;
gap: 0.1rem;
box-shadow: none;
}
.MuiToolbar-root .MuiButtonGroup-root .MuiButtonBase-root {
border: none;
}
.MuiButtonGroup-root .MuiButtonGroup-firstButton {
border-top-left-radius: 50px !important;
border-bottom-left-radius: 50px !important;
}
.MuiButtonGroup-root .MuiButtonGroup-lastButton {
border-top-right-radius: 50px !important;
border-bottom-right-radius: 50px !important;
}
html[data-theme="dark"] .MuiToolbar-root .MuiButton-root:hover,
html[data-theme="dark"] .MuiToolbar-root .MuiIconButton-root:hover {
color: rgb(var(--abyss-accent));
background-color: rgba(var(--abyss-accent), 0.12);
}
html[data-theme="dark"] .MuiToolbar-root .MuiButton-root.MuiButton-colorPrimary {
color: #121212;
background-color: rgb(var(--abyss-accent));
}
html[data-theme="dark"] .MuiToolbar-root .MuiButton-root.MuiButton-colorPrimary:hover {
color: #121212;
background-color: rgba(var(--abyss-accent), 0.88);
}
html[data-theme="dark"] .MuiDrawer-paper,
html[data-theme="dark"] .MuiMenu-paper,
html[data-theme="dark"] .MuiDialog-paper {
color: rgb(var(--abyss-accent));
background-color: rgba(var(--abyss-glass-tint), 0.72);
background-image: none;
border: 1px solid rgba(var(--abyss-accent), 0.16);
box-shadow: 0 8px 36px rgba(0, 0, 0, 0.32);
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
}
html[data-theme="dark"] .MuiDrawer-paper .MuiDivider-root {
display: none;
}
html[data-theme="dark"] .MuiDrawer-paper .MuiListItemIcon-root {
background: #cccccf69;
border-radius: 50px;
padding: 10px;
min-width: auto;
margin-right: 0.75em;
}
html[data-theme="dark"] .MuiDrawer-paper .MuiListItemIcon-root img[src*="icon-transparent"] {
max-height: 24px !important;
max-width: 24px !important;
opacity: 0.85;
filter: brightness(0) invert(1);
}
html[data-theme="dark"] .MuiDrawer-paper .MuiListItemButton-root:hover .MuiListItemIcon-root img[src*="icon-transparent"],
html[data-theme="dark"] .MuiDrawer-paper .MuiListItemButton-root.Mui-selected .MuiListItemIcon-root img[src*="icon-transparent"] {
filter: brightness(0) invert(0);
}
html[data-theme="dark"] .MuiDrawer-paper .MuiListItemText-root .MuiTypography-root {
font-weight: 500;
font-size: large;
}
html[data-theme="dark"] .MuiListItemButton-root:hover .MuiListItemText-root .MuiTypography-root,
html[data-theme="dark"] .MuiListItemButton-root.Mui-selected .MuiListItemText-root .MuiTypography-root {
font-weight: 700;
color: #121212;
}
html[data-theme="dark"] .MuiDrawer-paper .MuiListSubheader-root {
margin: 0.9em 0 0.2em;
letter-spacing: 0.02em;
opacity: 0.5;
font-weight: 600;
font-size: medium;
}
html[data-theme="dark"] .MuiMenu-paper {
border-radius: 24px;
padding: 0 8px;
}
html[data-theme="dark"] .MuiMenu-paper .MuiButtonBase-root {
border-radius: 16px;
padding: 12px 16px;
}
html[data-theme="dark"] .MuiDialog-paper {
border-radius: var(--abyss-radius);
}
html[data-theme="dark"] .MuiListItemButton-root {
margin: 2px 8px;
padding: 0.5em 0.9em !important;
margin-bottom: 2px !important;
border-radius: 12px !important;
transition: background-color 0.25s var(--abyss-ease),
color 0.25s var(--abyss-ease);
}
html[data-theme="dark"] .MuiListItemButton-root:hover,
html[data-theme="dark"] .MuiMenu-paper .MuiButtonBase-root:hover {
background: rgb(var(--abyss-accent)) !important;
color: #121212;
}
html[data-theme="dark"] .MuiListItemButton-root:hover .MuiSvgIcon-root,
html[data-theme="dark"] .MuiListItemButton-root.Mui-selected .MuiSvgIcon-root,
html[data-theme="dark"] .MuiMenu-paper .MuiButtonBase-root:hover .MuiSvgIcon-root,
html[data-theme="dark"] .MuiMenu-paper .MuiButtonBase-root:hover .MuiSvgIcon-root {
color: #121212 !important;
}
html[data-theme="dark"] .MuiListItemButton-root.Mui-selected,
html[data-theme="dark"] .MuiListItemButton-root.Mui-selected:hover {
color: #121212;
background-color: rgb(var(--abyss-accent));
}
html[data-theme="dark"] .MuiFilledInput-root,
html[data-theme="dark"] .MuiOutlinedInput-root {
border-radius: var(--abyss-radius);
background-color: rgba(255, 255, 255, 0.08);
}
/* Let the Modern app bar float over Spotlight instead of reserving an opaque
strip above it. The loader owns this state so other routes keep their
normal app-bar spacing. */
html.abyss-spotlight-visible[data-theme="dark"] .MuiAppBar-root.MuiAppBar-colorTransparent:has(+div[aria-hidden="true"]) {
background-color: transparent !important;
background-image: none !important;
border-bottom-color: transparent;
box-shadow: none;
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
html.abyss-spotlight-visible[data-theme="dark"] .MuiAppBar-root+div[aria-hidden="true"] {
height: 0 !important;
}
/* Main content */
.backdropImage {
-webkit-filter: blur(var(--abyss-backdrop-blur)) saturate(120%) contrast(120%) brightness(25%);
filter: blur(var(--abyss-backdrop-blur)) saturate(120%) contrast(120%) brightness(25%);
}
.hideMainDrawer .backdropImage {
-webkit-filter: none;
filter: none;
}
.backdropContainer {
width: 100vw;
height: 100vh;
overflow: visible;
}
.backgroundContainer.withBackdrop {
background-color: rgba(0, 0, 0, 0);
}
.sidebarHeader {
margin: 0.9em 0 0.2em;
letter-spacing: 0.02em;
opacity: 0.5;
font-weight: 600;
}
[dir=ltr] .sidebarHeader {
padding-left: 0.8em;
}
.emby-tabs {
border-radius: 50px;
}
.emby-tabs-slider {
border-radius: 50px;
padding: 5px 2.5px;
overflow: auto;
scrollbar-width: none;
background-color: rgba(var(--abyss-glass-tint), 0.9);
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(87, 87, 87, 0.18);
}
/* Engines without scrollbar-width support (Chromium <121, e.g. JMP) */
.emby-tabs-slider::-webkit-scrollbar {
display: none;
}
.navMenuOptionText {
margin-top: 0;
font-weight: 500;
font-size: large;
}
.navMenuOptionIcon,
.listItemIcon {
background: #cccccf69;
border-radius: 50px;
padding: 10px;
}
[dir=ltr] .navMenuOptionIcon {
margin-right: 0.75em;
}
[dir=ltr] .listItemIcon {
background: #cccccf69 !important;
border-radius: 50px !important;
padding: 10px !important;
}
[dir=ltr] .navMenuOption {
padding: 0.5em 0.9em !important;
margin-bottom: 2px !important;
border-radius: 12px !important;
}
.scrollContainer {
padding: 36px 12px 0 12px;
}
/* Footer */
.appfooter {
background: rgba(0, 0, 0, 0.9);
margin: 24px;
border-radius: 24px;
}
/* Backdrop / detail ribbon */
.layout-tv .itemBackdrop,
.layout-desktop .itemBackdrop {
height: 20vh !important;
display: inherit;
}
.layout-tv .detailRibbon,
.layout-desktop .detailRibbon {
background: rgba(0, 0, 0, .2) !important;
margin-top: 0;
padding-top: .5em;
padding-bottom: .5em;
}
.itemBackdrop::after {
background: rgba(0, 0, 0, .5) !important;
}
#itemDetailPage .detailLogo {
position: static;
margin-left: 32.5%;
display: block;
filter: drop-shadow(0 0 10px rgba(2, 2, 2, 0.75));
-webkit-filter: drop-shadow(0 0 10px rgba(2, 2, 2, 0.75));
flex-shrink: 0;
background-position: 0 50%;
margin-bottom: 2vh;
}
/* Infobanner */
.infoBanner {
background: #101010;
}
/* Blurhash canvas */
.blurhash-canvas {
-webkit-filter: blur(var(--abyss-backdrop-blur)) saturate(120%) contrast(120%) brightness(25%);
filter: opacity(60%) saturate(60%);
}
/* Default card backgrounds */
.defaultCardBackground1 {
background-color: #0a0a0a;
}
.defaultCardBackground2 {
background-color: #141414;
}
.defaultCardBackground1,
.defaultCardBackground2,
.defaultCardBackground3,
.defaultCardBackground4,
.defaultCardBackground5 {
background: linear-gradient(135deg, #161622 0%, #0d0d16 60%, #08080d 100%) !important;
background-color: #0d0d16 !important;
}
/* My Media / Library Channel Cards: Strict Uniform 2:3 Cards on Portrait & Landscape */
.card[data-type="CollectionFolder"],
.card[data-type="UserView"],
[data-category="views"] .card,
.section0 .card,
.apex-library-card {
width: 140px !important;
max-width: 140px !important;
min-width: 140px !important;
flex: 0 0 140px !important;
border-radius: 14px !important;
background: linear-gradient(135deg, #181824 0%, #0d0d14 100%) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
overflow: hidden !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.6) !important;
}
.card[data-type="CollectionFolder"] .cardPadder,
.card[data-type="UserView"] .cardPadder,
[data-category="views"] .cardPadder,
.section0 .cardPadder,
.apex-library-card .cardPadder {
padding-bottom: 150% !important;
aspect-ratio: 2 / 3 !important;
height: 0 !important;
}
.card[data-type="CollectionFolder"] .cardScalable,
.card[data-type="UserView"] .cardScalable,
[data-category="views"] .cardScalable,
.section0 .cardScalable,
.apex-library-card .cardScalable {
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
overflow: hidden !important;
}
@media (orientation: landscape) {
.card[data-type="CollectionFolder"],
.card[data-type="UserView"],
[data-category="views"] .card,
.section0 .card,
.apex-library-card {
width: 130px !important;
max-width: 130px !important;
min-width: 130px !important;
flex: 0 0 130px !important;
}
}
.card[data-type="CollectionFolder"] .cardScalable::after,
.apex-library-card .cardScalable::after {
content: '' !important;
position: absolute !important;
inset: 0 !important;
background: linear-gradient(to top, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.45) 50%, rgba(0, 0, 0, 0.1) 100%) !important;
pointer-events: none !important;
z-index: 2 !important;
}
.homeSectionsContainer .verticalSection:has([data-type="CollectionFolder"]) .cardText,
.card[data-type="CollectionFolder"] .cardText,
.card[data-type="CollectionFolder"] .cardText-first,
.apex-library-card .cardText,
.apex-library-card .cardText-first {
display: block !important;
color: #F5F5F5 !important;
font-weight: 700 !important;
font-size: 1rem !important;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.9) !important;
position: relative !important;
z-index: 3 !important;
}
.homeSectionsContainer {
padding: 0 7px !important;
}
#indexPage:has(.featurediframe) #favoritesTab {
margin-top: 7.5rem !important;
}
/* Disable theme selectors - managed by Abyss */
.selectContainer:has(#selectTheme),
.selectDashboardThemeContainer {
cursor: not-allowed !important;
}
/* Lock theme selectors only when dark theme is active */
.selectContainer:has(#selectTheme option[value="dark"]:checked),
.selectContainer:has(#selectDashboardTheme option[value="dark"]:checked) {
cursor: not-allowed !important;
}
.selectContainer:has(#selectTheme option[value="dark"]:checked) #selectTheme,
.selectContainer:has(#selectDashboardTheme option[value="dark"]:checked) #selectDashboardTheme {
pointer-events: none !important;
opacity: 0.4 !important;
}
.selectContainer:has(#selectTheme option[value="dark"]:checked) #selectTheme+.selectArrow,
.selectContainer:has(#selectDashboardTheme option[value="dark"]:checked) #selectDashboardTheme+.selectArrow {
opacity: 0.4 !important;
}
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="theme"]),
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="dashboardTheme"]) {
cursor: not-allowed !important;
}
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="theme"]) .MuiInputLabel-root,
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="theme"]) .MuiInputBase-root,
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="dashboardTheme"]) .MuiInputLabel-root,
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="dashboardTheme"]) .MuiInputBase-root {
opacity: 0.4 !important;
}
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="theme"]) .MuiInputBase-root,
html[data-theme="dark"] #displayPreferencesPage .MuiFormControl-root:has(input[name="dashboardTheme"]) .MuiInputBase-root {
pointer-events: none !important;
}
/* 6. COMPONENTS */
/* Buttons & Interactive */
.raised,
.fab,
a[data-role="button"] {
background: rgba(40, 40, 40, 0.8) !important;
transition: background 0.37s var(--abyss-ease),
color 0.37s var(--abyss-ease),
border-color 0.37s var(--abyss-ease),
box-shadow 0.37s var(--abyss-ease) !important;
}
.raised:hover,
.fab:hover,
a[data-role="button"]:hover {
background: rgba(var(--abyss-accent), 0.5) !important;
}
.raised:hover,
.fab:hover,
.navMenuOption:hover,
.listItem:hover,
.actionSheetMenuItem:hover {
background: rgb(var(--abyss-accent)) !important;
color: #121212;
font-weight: 700;
}
.listItem-content:hover {
color: #121212;
}
.actionSheetMenuItem {
border-radius: var(--abyss-radius) !important;
}
.actionSheetContent {
padding: .7em .6em !important;
}
.cardContent.cardImageContainer {
box-shadow: 0 0 3px rgba(200, 200, 200, 0.35) inset;
}
.paper-icon-button-light:hover,
.paper-icon-button-light:hover:not(:disabled) {
background-color: rgba(0, 0, 0, 0.4) !important;
}
.paper-icon-button-light {
border-radius: var(--abyss-radius);
}
.emby-tab-button {
padding: 0.5em 1.5em;
margin: 0 2.5px;
border-radius: 50px;
border: 3px solid transparent;
}
.emby-tab-button-active {
background: rgb(var(--abyss-accent)) !important;
color: #121212 !important;
border-radius: 50px;
}
.emby-tab-button-active:hover {
color: #121212 !important;
}
.button-flat:hover {
background: rgba(0, 0, 0, 0.4);
color: rgb(var(--abyss-accent)) !important;
}
.detailButton {
border-radius: var(--abyss-radius);
max-width: 15vw !important;
}
.button-submit {
position: sticky;
bottom: 24px;
margin-top: 48px !important;
box-shadow: 0 0 24px 2px rgba(var(--abyss-accent), 0.2);
z-index: 2;
color: rgba(245, 245, 247);
}
html[data-theme="dark"] #displayPreferencesPage form button[type="submit"].MuiButton-root {
position: sticky;
bottom: 48px;
width: 97%;
align-self: center;
margin-top: 48px !important;
box-shadow: 0 0 24px 2px rgba(var(--abyss-accent), 0.2);
z-index: 2;
min-height: 3.25rem;
border-radius: var(--abyss-radius);
color: rgb(var(--abyss-accent)) !important;
font-weight: 500;
font-family: "Google Sans", sans-serif;
border: solid 1px rgba(245, 245, 247, 0.2) !important;
}
html[data-theme="dark"] #displayPreferencesPage form button[type="submit"].MuiButton-root:hover {
font-weight: 700;
color: #121212 !important;
background-color: rgba(var(--abyss-accent), 0.88) !important;
}
/* Active / played / link states */
.paper-icon-button-light:hover,
.raised.homeLibraryButton:hover,
.button-flat:hover,
.playstatebutton-icon-played,
.ratingbutton-icon-withrating,
.paper-icon-button-light:hover:not(:disabled),
.emby-tab-button:hover,
.selectLabelFocused,
.inputLabelFocused,
.textareaLabelFocused,
.buttonActive,
.button-link {
color: rgb(var(--abyss-accent));
}
#itemDetailPage .button-link {
text-align: left;
}
.ratingbutton-icon-withrating {
color: rgb(249, 38, 114) !important;
}
/* Theme user setting tab buttons */
div[data-role="controlgroup"] a.ui-btn-active {
background: rgba(0, 0, 0, 0.5) !important;
color: white !important;
}
div[data-role="controlgroup"] a[data-role="button"] {
display: table-cell !important;
margin: 0 !important;
}
/* Home Library Buttons */
.homeLibraryButton {
min-width: 12em;
margin: 0.4em;
width: auto !important;
}
.raised.homeLibraryButton {
background: rgba(0, 0, 0, 0.3) !important;
transition: background 0.37s var(--abyss-ease),
border-color 0.37s var(--abyss-ease),
box-shadow 0.37s var(--abyss-ease);
border: solid 1px rgba(var(--abyss-accent), 0) !important;
}
.raised.homeLibraryButton:hover {
background: rgba(0, 0, 0, 0.5) !important;
}
/* Dialogs & Overlays */
.playerStats-stats,
.upNextContainer,
.dialog,
.toast {
border-radius: 24px !important;
}
.iconOsd {
right: 24px;
top: 8.5%;
border-radius: 18px !important;
}
.iconOsdIcon {
margin: .5em .63em 0 .63em;
}
.iconOsdProgressOuter {
margin: 1.5em .25em 0.35em;
}
.formDialogHeader {
border-top-left-radius: var(--abyss-radius);
border-top-right-radius: var(--abyss-radius);
}
.formDialogFooter {
border-bottom-left-radius: var(--abyss-radius);
border-bottom-right-radius: var(--abyss-radius);
}
.formDialogFooter-clear,
.formDialogHeader-clear,
.innerCardFooterClear {
background-color: transparent !important;
}
.formDialogContent {
margin-bottom: 6.2em;
}
.dialogContentInner {
padding: .5em 1em 1em;
padding-right: 1em;
padding-left: 1em;
}
/* Cards */
.visualCardBox,
.cardImageContainer {
box-shadow: none;
}
.cardBox-bottompadded {
margin-bottom: 0.6em !important;
}
.cardOverlayContainer {
border-radius: var(--abyss-radius) !important;
border: solid 1px rgba(var(--abyss-accent), 0.0) !important;
transition: border-color 0.15s var(--abyss-ease) !important;
}
.button-submit,
.cardOverlayContainer:hover,
.dialog,
.toast,
.upNextContainer,
.playerStats-stats,
.raised.homeLibraryButton:hover {
border: solid 1px rgba(245, 245, 247, 0.2) !important;
}
.cardPadder {
background-color: #0000 !important;
box-shadow: none !important;
border-radius: var(--abyss-radius) !important;
}
.card.show-animation:focus>.cardBox {
-webkit-transform: scale(1.1);
transform: scale(1.1);
transition: transform 0.37s var(--abyss-ease) !important;
}
/* Card Indicators */
.indicator {
border: 0.5px solid rgba(0, 0, 0, 0.1);
}
.cardIndicators,
.listItemIndicators {
right: .225em;
top: .225em;
padding: 2px;
}
.mediaSourceIndicator {
left: 0.5em;
top: 0.5em;
background: rgba(0, 0, 0, 0.4);
box-shadow: none;
border-radius: var(--abyss-radius);
}
.innerCardFooter {
margin: .5em;
background: rgba(0, 0, 0, 0.4);
box-shadow: none;
}
.countIndicator {
background: rgba(var(--abyss-accent), 0.8);
box-shadow: none;
border-radius: 10px !important;
padding: 4px;
font-weight: bolder;
}
.playedIndicator {
background: rgb(var(--abyss-accent));
box-shadow: none;
border-radius: 10px !important;
padding: 4px;
font-weight: bolder;
}
.cardOverlayButton-br button[title="Watched"] .MuiSvgIcon-root[data-testid="CheckIcon"] {
border-radius: 8px;
background: rgb(var(--abyss-accent));
color: black;
}
.cardOverlayButton-br.cardIndicators {
bottom: 0;
position: absolute;
}
/* Indicators & Progress */
.missingIndicator,
.unairedIndicator {
background: #ae3030eb;
padding: .3em .6em;
color: #fff;
}
.transcodingProgress>div,
.itemProgressBarForeground {
background: #E50914 !important;
height: 100% !important;
box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) !important;
}
.playbackProgress>div {
background-color: rgba(var(--abyss-accent), 0.75);
}
.backgroundProgress>div {
background: rgba(0, 0, 0, 0);
background-color: #0000;
}
.itemProgressBar {
background: rgba(0, 0, 0, 0.25);
}
/* Sliders */
.mdl-slider-background-lower {
background-color: rgb(var(--abyss-accent));
}
.mdl-slider::-moz-range-thumb {
border-radius: 50%;
background: rgb(var(--abyss-accent));
}
.mdl-slider::-ms-thumb {
border-radius: 50%;
background: rgb(var(--abyss-accent));
}
.mdl-slider::-webkit-slider-thumb {
border-radius: 50%;
background: rgb(var(--abyss-accent));
}
.sliderMarker {
width: 3px;
border-radius: 2px;
}
/* Toggle Switches */
.mdl-switch__input:checked+.mdl-switch__label+.mdl-switch__trackContainer>.mdl-switch__track {
background: rgba(var(--abyss-accent), 0.5);
}
.mdl-switch__input:checked+.mdl-switch__label+.mdl-switch__trackContainer>.mdl-switch__thumb {
background: rgb(var(--abyss-accent));
}
/* Spinner */
.mdl-spinner__layer-1 {
border-color: rgb(var(--abyss-accent));
}
.mdl-spinner__layer-2 {
border-color: rgba(128, 128, 128, 1);
}
.mdl-spinner__layer-3 {
border-color: rgba(40, 40, 40, 1);
}
.mdl-spinner__layer-4 {
border-color: rgba(0, 0, 0, 1);
}
/* Progress Ring */
.progressring-spiner {
border-color: rgb(var(--abyss-accent)) !important;
border-width: .35em;
}
.progressring {
margin: .4em;
}
.progressring-bg {
display: none;
}
/* Lists */
.listItem {
padding-left: 1em;
margin-bottom: 2px !important;
}
.listItem bdi:first-of-type {
font-weight: 500;
font-variation-settings: "wght" 500;
transition: color 0.3s ease;
}
.listItem bdi p {
font-weight: 400 !important;
font-variation-settings: "wght" 400 !important;
}
.listItem:hover bdi:first-of-type {
font-weight: 600;
font-variation-settings: "wght" 600;
}
.listItem:hover bdi p,
.listItem:hover bdi p::before {
font-weight: 400 !important;
font-variation-settings: "wght" 400 !important;
}
.listItem-border {
border-color: rgba(var(--abyss-accent), 0) !important;
}
.listItemIcon {
background: #0000 !important;
border-radius: var(--abyss-radius) !important;
}
.listItem-indexnumberleft {
margin: 1em;
}
.listItemImageButton {
margin: auto;
font-size: 1.6em !important;
border-radius: var(--abyss-radius) !important;
}
.listItemImageButton-icon {
padding: 0;
}
.listItemImageButton:hover {
color: rgb(var(--abyss-accent));
}
.secondary.listItem-overview.listItemBodyText {
height: unset !important;
margin: 0;
}
.listItem:hover,
.listItem:hover .secondary,
.listItem:hover .listItem-secondaryText,
.listItem:hover p,
.listItem:hover span,
.listItem:hover div,
.listItem:hover .runtime,
.listItem:hover .starIcon::before,
.listItem:hover .starRatingContainer,
.listItem:hover .listItem-overview {
color: #121212b7 !important;
}
.listItem:hover,
.listItem:hover .listItemBodyText {
color: #121212 !important;
}
.listItem:hover .material-icons,
.listItem:hover .listItemImageButton {
color: #121212 !important;
}
.listItem:hover .countIndicator,
.listItem:hover .playedIndicator {
background: rgba(0, 0, 0, 0.15);
color: #121212 !important;
}
.listItem:hover .itemProgressBarForeground {
background: #E50914 !important;
height: 100% !important;
box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) !important;
}
.listItem:hover .itemProgressBar {
background: rgba(18, 18, 18, 0.2) !important;
}
.listItem:hover .ratingbutton-icon-withrating {
color: rgb(249, 38, 114) !important;
}
.listItem:hover .listItemImageButton-icon {
color: rgba(255, 255, 255, 0.9) !important;
}
/* Form Inputs */
#homeScreenPreferencesPage,
#languagePreferencesPage {
& form {
display: flex;
flex-direction: column;
justify-content: center;
}
& .button-submit {
width: 97%;
align-self: center !important;
}
}
#quickConnectPreferencesPage .inputContainer {
text-align: center;
}
.emby-input,
.emby-textarea {
padding: .4em .55em;
}
.emby-textarea {
font-family: monospace;
font-size: 10pt;
}
.emby-select {
padding: .35em 1.9em .35em .35em;
}
.selectArrow {
margin-top: 1.05em;
}
.itemSelectionPanel,
.checkboxOutline,
.emby-input,
.emby-textarea,
.emby-select-withcolor,
.checkboxOutline:focus,
.emby-input:focus,
.emby-textarea:focus,
.emby-select-withcolor:focus {
border: 1px solid rgba(40, 40, 40, 0.8);
}
.checkboxOutline {
border-color: rgba(var(--abyss-accent), 0.3) !important;
transition: background 0.2s var(--abyss-ease),
border-color 0.2s var(--abyss-ease);
}
input[type="checkbox"]:checked~.checkboxOutline,
input[type="checkbox"]:checked+.checkboxOutline {
background: rgb(var(--abyss-accent)) !important;
border-color: rgb(var(--abyss-accent)) !important;
}
.checkboxIcon {
color: #121212 !important;
}
input[type="checkbox"]:focus~.checkboxOutline,
input[type="checkbox"]:focus+.checkboxOutline {
outline: 2px solid rgba(var(--abyss-accent), 0.4) !important;
outline-offset: 2px;
}
#txtQuickConnectCode {
font-size: xxx-large;
font-weight: 900;
letter-spacing: 12px;
text-align: center;
margin-top: 12px;
}
/* Paper / Table */
.sessionCardFooter {
border: none;
}
#user_usage_report_table,
.detailTable {
background: rgba(0, 0, 0, .5);
}
.detailTableBodyRow-shaded {
background: #0000 !important;
}
/* Sync Play */
.syncPlayIconCircle {
color: rgb(var(--abyss-accent)) !important;
text-shadow: none !important;
}
/* Subtitle Preview */
.subtitleappearance-preview {
background: linear-gradient(140deg, rgb(var(--abyss-accent)), #111) !important;
}
.subtitleappearance-preview #sliderVertical {
margin: 24px !important;
}
.subtitle {
padding-left: 0 !important;
}
/* Others */
#userProfilePage .readOnlyContent,
.readOnlyContent .verticalSection,
#languagePreferencesPage .settingsContainer .verticalSection,
.subtitleAppearanceSection,
.homeScreenSettingsContainer .perLibrarySettings,
.homeScreenSettingsContainer .verticalSection-extrabottompadding,
.settingsContainer .MuiStack-root .MuiStack-root {
padding: 16px;
background-color: rgba(var(--abyss-glass-tint), 0.69);
border-radius: 32px;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
border: solid 1px rgba(245, 245, 247, 0.2) !important;
}
.settingsContainer .MuiStack-root .MuiStack-root .MuiStack-root {
border-radius: 12px !important;
padding: 0 !important;
background-color: transparent !important;
box-shadow: none !important;
border: none !important;
margin: 8px !important;
}
.homeScreenSettingsContainer .verticalSection-extrabottompadding .verticalSection {
padding: 0 !important;
border-radius: 0;
background: none !important;
box-shadow: none;
border: none !important;
}
.homeScreenSettingsContainer .perLibrarySettings {
margin-bottom: 36px !important;
}
.homeScreenSettingsContainer .paperList {
padding: 12px;
background-color: rgba(var(--abyss-glass-tint), 0.69);
border-radius: 24px !important;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
margin: 0 !important;
}
.readOnlyContent .adminSection {
border-radius: 32px 32px 6px 6px !important;
margin-bottom: 12px !important;
}
.readOnlyContent .userSection {
border-radius: 6px 6px 32px 32px !important;
}
.readOnlyContent .userSection .sectionTitle {
padding-top: 0 !important;
}
#userProfilePage .readOnlyContent {
padding: 0 !important;
}
#userProfilePage .readOnlyContent div {
align-items: baseline !important;
margin-right: 12px !important;
}
#image,
#uploadImage {
border-radius: 24px !important;
margin: 12px !important;
}
#quickConnectPreferencesPage {
justify-items: center;
}
.itemSelectionPanel {
padding: 12px !important;
}
.selectionCommandsPanel {
padding: 1.5em 24px !important;
}
.selectionCommandsPanel * {
color: rgb(var(--abyss-accent));
}
[dir=ltr] .playerStats-stats {
padding: 1em 3em 2em 2em;
}
.playerStats-stat {
align-items: baseline;
}
.playerStats-stat-header {
font-size: medium !important;
}
.playerStats-stat-label {
opacity: 0.5;
padding-bottom: 2px;
}
.playerStats-stat-value {
font-family: monospace;
font-size: medium;
}
.playerStats-closeButton {
margin: 10px;
}
[dir="ltr"] .upNextContainer {
margin: 0px 2em 10.4em 0px;
}
#castCollapsible,
#scenesCollapsible,
#similarCollapsible,
.moreFromSeasonSection {
overflow: hidden;
}
.playstatebutton-icon-played::before {
background-color: rgba(var(--abyss-accent), 0.8);
border-radius: 8px;
color: #000;
}
.listItem-content:hover .playstatebutton-icon-played::before {
background-color: #000;
color: rgba(var(--abyss-accent), 0.8);
}
.listItem-content:hover .playedIndicator {
background: rgba(var(--abyss-accent));
color: #121212 !important;
}
/* 7. ROUNDED CORNERS */
.missingIndicator,
.unairedIndicator,
.detailTable,
.primaryImageWrapper>img,
.toast,
.paperList,
.cardContent,
.sessionNowPlayingInnerContent,
.subtitleappearance-preview,
.listItemImage,
.listItemImageButton,
.listItemButton,
.listItem,
.cardImage,
.fab,
.raised,
.multiSelectCheckboxOutline,
.itemSelectionPanel,
.cardContent-button,
.cardContent-shadow,
.itemDetailImage,
.cardImageContainer,
.listItemIcon,
.blurhash-canvas,
.countIndicator,
.playedIndicator,
.listItem-border,
.visualCardBox,
.chapterThumbTextContainer,
.chapterThumbContainer,
.chapterThumb,
.emby-input,
.emby-textarea,
.nowPlayingPageImage,
.upNextDialog-poster-img,
.cardOverlayButtonIcon,
.innerCardFooter {
border-radius: var(--abyss-radius) !important;
}
.osdPoster img {
border-radius: var(--abyss-radius);
border: none;
}
div[data-role="controlgroup"] a[data-role="button"]:first-child {
border-bottom-left-radius: var(--abyss-radius);
border-top-left-radius: var(--abyss-radius);
}
div[data-role="controlgroup"] a[data-role="button"]:last-child {
border-bottom-right-radius: var(--abyss-radius);
border-top-right-radius: var(--abyss-radius);
}
#dashboardPage .cardContent,
#dashboardPage .sessionNowPlayingInnerContent {
border-radius: var(--abyss-radius) var(--abyss-radius) 0 0 !important;
}
#divVirtualFolders .cardImageContainer,
#divVirtualFolders .cardContent {
border-radius: var(--abyss-radius) var(--abyss-radius) 0 0 !important;
}
#userProfilesPage .cardImage,
#userProfilesPage .cardContent {
border-radius: var(--abyss-radius) var(--abyss-radius) 0 0 !important;
}
[dir=ltr] .emby-select,
#inputTextColor,
.checkboxOutline {
border-radius: 8px !important;
}
.dialog-fullscreen {
border-radius: 8px !important;
}
.upNextContainer,
.playerStats,
.playerStats-stats {
border-radius: 24px !important;
}
.detailImageContainer .cardImageContainer,
.detailImageContainer .card {
border-radius: 24px !important;
}
/* 8. MEDIA PLAYER */
.nowPlayingPageImage {
border: none;
}
.osdPoster img {
border-radius: var(--abyss-radius);
border: none;
}
.startTimeText,
.endTimeText {
width: 3.4em;
display: block;
text-align: center;
}
.osdTitle {
margin-left: 0.5em;
}
.skinHeader.osdHeader {
height: 5em;
}
.osdTextContainer {
margin: 0 !important;
margin-top: 0.2em !important;
padding-left: 0.5em !important;
padding-right: 0.5em !important;
}
.nowPlayingBarCurrentTime {
width: 6em;
}
.upNextDialog-countdownText {
color: rgb(var(--abyss-accent));
}
.iconOsdProgressInner {
background: rgb(var(--abyss-accent));
}
/* Chapter thumb */
.chapterThumb {
height: 14vh;
min-width: 14vh;
box-shadow: 0 0 1.9vh #000;
}
.chapterThumbText {
font-size: 1em;
}
.chapterThumbTextContainer {
right: auto;
bottom: 4px;
padding: .25em 0.7em;
}
.chapterThumbContainer {
box-shadow: 0 0 1.9vh #000;
}
.sliderBubble {
background: #0000;
-webkit-transform: translate3d(-50%, -108%, 0);
transform: translate3d(-50%, -108%, 0);
}
/* Playing Bar */
.nowPlayingBarTop {
margin-top: 24px;
}
.videoOsdBottom .osdControls,
.nowPlayingBar {
border-radius: 24px;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
padding: 12px;
}
.nowPlayingBar .nowPlayingImage {
width: 2.91em;
border-radius: 8px;
}
.nowPlayingBarPositionContainer {
top: -1.5em;
padding: 0 8px;
}
.nowPlayingBarInfoContainer {
margin-left: 8px;
}
body:has(#videoOsdPage) .skinHeader .MuiTypography-root.MuiTypography-body1 {
font-size: large;
font-weight: 500;
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
padding: 4px 12px;
border-radius: 12px;
}
.videoOsdBottom {
padding: 0 !important;
margin: 24px !important;
border-radius: 24px;
background: none !important;
}
.osdTimeText {
margin-left: 0 !important;
opacity: 0.5;
}
/* Track selector */
.trackSelections .selectContainer .detailTrackSelect {
padding: .5em 1.9em .5em .5em;
}
.trackSelections .selectContainer .selectArrowContainer .selectArrow {
margin-top: .2em;
}
.trackSelections .selectContainer {
align-items: center;
}
/* Slider track rounding */
.mdl-slider-background-flex,
.mdl-slider-background-flex-inner,
.mdl-slider-background-upper,
.mdl-slider-background-lower {
border-radius: 2px;
}
/* 10. ITEM DETAIL PAGE */
.mainDetailButtons {
font-size: 120%;
}
.hide+.detailPageWrapperContainer .itemName {
display: block !important;
}
.sectionTitleTextButton:hover {
color: transparent;
}
/* Progress bars on item pages */
#indexPage .innerCardFooterClear,
.libraryPage .innerCardFooterClear,
#itemDetailPage .innerCardFooterClear {
background-color: transparent !important;
box-shadow: none;
}
#indexPage .itemProgressBarForeground,
.libraryPage .itemProgressBarForeground,
#itemDetailPage .itemProgressBarForeground,
#indexPage .itemProgressBar,
.libraryPage .itemProgressBar,
#itemDetailPage .itemProgressBar {
border-radius: var(--abyss-radius);
}
#indexPage .itemProgressBarForeground,
.libraryPage .itemProgressBarForeground,
#itemDetailPage .itemProgressBarForeground {
background: #E50914 !important;
height: 100% !important;
box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) !important;
}
#indexPage .itemProgressBar,
.libraryPage .itemProgressBar,
#itemDetailPage .itemProgressBar {
height: 7px;
background: rgba(0, 0, 0, 0.4);
margin: .5em .8em;
}
#itemDetailPage .detailButton {
padding: 8px !important;
margin-right: 8px !important;
}
#itemDetailPage .btnPlay {
background: rgba(255, 255, 255, 0.95);
color: #111;
max-width: none !important;
}
#itemDetailPage .btnPlay:hover {
background: #fff;
color: #111 !important;
transform: scale(1.03);
box-shadow: 0 0 20px rgba(255, 255, 255, 0.25);
}
#itemDetailPage .btnPlay .detailButton-content {
flex-direction: row !important;
}
#itemDetailPage .btnReplay {
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.2) !important;
color: rgba(255, 255, 255, 0.9);
}
#itemDetailPage .btnReplay:hover {
background: rgba(255, 255, 255, 1);
color: rgba(0, 0, 0, 0.9) !important;
transform: scale(1.05);
}
#itemDetailPage:has(.btnReplay.hide) .btnPlayTrailer {
background: rgba(255, 255, 255, 0.12);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.2) !important;
color: rgba(255, 255, 255, 0.9);
}
#itemDetailPage:has(.btnReplay.hide) #itemDetailPage .btnPlayTrailer:hover {
background: rgba(255, 255, 255, 1);
color: rgba(0, 0, 0, 0.9) !important;
transform: scale(1.05);
}
/* 11. LOGIN PAGE */
#loginPage {
background-size: cover !important;
}
#loginPage .readOnlyContent,
#loginPage form {
max-width: 22em;
}
#loginPage h1 {
display: none;
}
#loginPage .padded-left.padded-right.padded-bottom-page {
margin-top: 8em;
}
#loginPage .raised.cancel.block.btnForgotPassword.emby-button {
margin-top: 0.8em;
background: rgba(var(--abyss-accent), 0.0) !important;
}
#loginPage .raised.cancel.block.btnForgotPassword.emby-button:hover {
color: rgb(var(--abyss-accent)) !important;
}
.manualLoginForm {
border-radius: 24px;
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
border: solid 1px rgba(245, 245, 247, 0.2) !important;
padding: 24px 12px 7px;
margin-bottom: 24px;
}
/* 12. CAST THUMBNAILS (responsive sizing) */
.layout-desktop #castContent .card.overflowPortraitCard,
.layout-desktop #guestCastContent .card.overflowPortraitCard {
width: 10vw !important;
font-size: 90% !important;
}
.layout-desktop #castContent .cardScalable,
.layout-desktop #guestCastContent .cardScalable {
width: calc(10vw - 0.6em) !important;
height: calc(14vw - 0.6em) !important;
}
.layout-tablet #castContent .card.overflowPortraitCard,
.layout-tablet #guestCastContent .card.overflowPortraitCard {
width: 17vw !important;
font-size: 90% !important;
}
.layout-tablet #castContent .cardScalable,
.layout-tablet #guestCastContent .cardScalable {
width: calc(17vw - 0.6em) !important;
height: calc(12vw - 0.6em) !important;
}
.layout-mobile #castContent .card,
.layout-mobile #guestCastContent .card {
width: 95px !important;
min-width: 95px !important;
max-width: 95px !important;
flex: 0 0 95px !important;
font-size: 85% !important;
}
.layout-mobile #castContent .cardScalable,
.layout-mobile #guestCastContent .cardScalable {
width: 95px !important;
height: 130px !important;
aspect-ratio: 3 / 4 !important;
}
.layout-mobile .innerCardFooterClear {
padding-right: 24px !important;
}
.layout-mobile .noItemsMessage.centerMessage {
font-size: 28px;
}
.layout-mobile .centerMessage {
width: 90% !important;
}
@media (orientation: landscape) and (max-height: 500px) {
.layout-mobile #castContent .card,
.layout-mobile #guestCastContent .card {
width: 90px !important;
min-width: 90px !important;
max-width: 90px !important;
flex: 0 0 90px !important;
font-size: 85% !important;
}
.layout-mobile #castContent .cardScalable,
.layout-mobile #guestCastContent .cardScalable {
width: 90px !important;
height: 120px !important;
aspect-ratio: 3 / 4 !important;
}
.layout-mobile .innerCardFooterClear {
padding-right: 24px !important;
}
}
/* 13. RESPONSIVE / MEDIA QUERIES */
/* Mobile layout tweaks */
.layout-mobile .detailPagePrimaryContainer {
background: transparent;
}
.layout-mobile .adminDrawerLogo {
border-bottom: none;
}
.layout-mobile #itemDetailPage .parentName,
.layout-mobile #itemDetailPage .parentNameLast,
.layout-mobile #itemDetailPage .itemName.subtitle {
text-align: left;
justify-content: left;
}
.layout-mobile #itemDetailPage .mainDetailButtons,
.layout-mobile #itemDetailPage .itemMiscInfo {
justify-content: left;
}
.layout-mobile .itemBackdrop {
position: relative;
background-size: cover;
background-position: center 20%;
background-repeat: no-repeat;
margin-top: 0;
z-index: 0;
-webkit-mask-image:
linear-gradient(to bottom, black 40%, transparent 100%),
linear-gradient(to right, transparent 0%, black 25%, black 70%, transparent 100%),
linear-gradient(to bottom, transparent 0%, black 8%);
-webkit-mask-composite: source-in;
mask-image:
linear-gradient(to bottom, black 40%, transparent 100%),
linear-gradient(to right, transparent 0%, black 25%, black 70%, transparent 100%),
linear-gradient(to bottom, transparent 0%, black 8%);
mask-composite: intersect;
}
.layout-mobile .detailLogo {
margin-top: -15vh;
margin-bottom: 4vh !important;
margin-left: 40vw !important;
width: 50vw !important;
}
.layout-mobile .sectionTitleTextButton>.material-icons {
padding-top: .2em;
}
.layout-mobile .listItemImageButton {
background: rgba(0, 0, 0, 0);
}
.layout-mobile .sectionTitle {
padding-top: 0em;
}
.layout-mobile #itemDetailPage .itemName.infoText.parentNameLast {
display: block;
}
.layout-mobile :not(.sectionTitleContainer-cards)>.sectionTitle-cards {
padding-top: 0em;
}
/* TV Layout */
.card:focus .cardBox.visualCardBox,
.card:focus .cardBox:not(.visualCardBox) .cardScalable {
border-radius: 24px !important;
border: 0.3em solid rgb(var(--abyss-accent)) !important;
transition: all 0.5s !important;
}
.layout-tv .pageTitle,
.layout-tv .cardText {
font-size: revert;
}
.layout-tv .emby-tab-button {
padding: 0.3em 1.2em;
margin: 4px;
}
.layout-tv .sliderMarker {
height: 24px !important;
}
.layout-tv .chapterThumbContainer {
transform: scale(1.5) !important;
top: -72px !important;
}
.emby-button.show-focus:focus,
.headerButton.show-focus:focus,
.actionSheetMenuItem.show-focus:focus {
background: rgb(var(--abyss-accent)) !important;
color: #121212 !important;
}
.headerButton.show-focus:focus,
.raised.button-submit.emby-button.show-focus:focus {
transform: scale(1.02) !important;
transition: transform 0.3s !important;
margin-top: .4em !important;
margin-bottom: .4em !important;
}
.headerUserButton.show-focus:focus {
transform: none !important;
}
#itemDetailPage .emby-button.show-focus:focus {
transform: scale(1.1) !important;
padding: 0 .4em;
margin: .4em;
border-radius: 10px;
background: rgb(var(--abyss-accent)) !important;
color: #121212 !important;
}
.emby-tab-button.show-focus {
background: transparent;
transform: none !important;
color: #999;
}
.emby-button.emby-tab-button.show-focus:focus {
background: transparent !important;
transform: none !important;
border-color: rgb(var(--abyss-accent));
color: rgb(var(--abyss-accent)) !important;
}
.emby-tab-button.show-focus:focus .emby-button-foreground {
transform: scale(1.1) !important;
font-weight: 500;
transition: 0.3s;
}
.emby-tab-button.show-focus:focus.emby-tab-button-active {
background: rgb(var(--abyss-accent)) !important;
color: #121212 !important;
border-color: transparent !important;
border-radius: 50px;
}
.emby-select-withcolor {
background: rgba(255, 255, 255, 0.12);
border: 1px solid rgba(255, 255, 255, 0.2) !important;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.libraryPage .paper-icon-button-light.show-focus:focus,
#videoOsdPage .paper-icon-button-light.show-focus:focus {
background: rgb(var(--abyss-accent)) !important;
color: #121212 !important;
padding: 4px !important;
}
/* Desktop layout & TV*/
.layout-desktop #itemDetailPage .btnPlay,
.layout-tv #itemDetailPage .btnPlay {
margin-right: 12px !important;
padding: .4em 1.4em .4em 1em !important;
}
.layout-desktop #itemDetailPage .btnPlay .detailButton-content::after,
.layout-tv #itemDetailPage .btnPlay .detailButton-content::after {
content: "Play";
margin-left: 0.45em;
font-weight: 700;
font-size: 0.9em;
}
.layout-desktop #itemDetailPage:has(.btnReplay:not(.hide)) .btnPlay .detailButton-content::after,
.layout-tv #itemDetailPage:has(.btnReplay:not(.hide)) .btnPlay .detailButton-content::after {
content: "Resume";
}
.layout-tv .detailImageContainer .card,
.layout-desktop .detailImageContainer .card {
position: fixed !important;
top: 15% !important;
}
.layout-tv .detailPageSecondaryContainer.padded-left,
.layout-desktop .detailPageSecondaryContainer.padded-left {
padding-left: max(env(safe-area-inset-left), 32.45vw);
}
.withSectionTabs .headerTop {
width: 100% !important;
align-self: center !important;
}
@media (max-width: 100em) {
.withSectionTabs .headerTop {
padding-bottom: 0;
}
}
@media all and (min-width: 75em) {
.cardOverlayFab-primary {
background-color: #00000000;
}
.cardOverlayButtonIcon {
background-color: #00000000 !important;
}
.cardOverlayContainer {
background-color: rgba(0, 0, 0, 0.7);
}
.headerTabs.sectionTabs {
display: none !important;
}
}
@media all and (max-width: 75em) {
.cardOverlayFab-primary {
background-color: #00000000;
}
.cardOverlayButtonIcon {
background-color: #00000000 !important;
}
.cardOverlayContainer {
background-color: rgba(0, 0, 0, 0.7);
}
.cardOverlayButton {
padding: 0.25em;
}
}
/* ipad minish */
@media screen and (min-width: 768px) and (max-width: 1024px) {
.layout-mobile .detailRibbon {
padding-left: 12% !important;
}
}
@media all and (max-width: 26em) {
.homeLibraryButton {
min-width: 45%;
width: auto !important;
}
.pageTitle {
font-size: medium !important;
font-weight: 500;
padding: 0 6px !important;
}
.sectionTitle {
font-size: 1.2em;
font-weight: 500;
}
.headerLeft,
.headerRight {
padding: 0 12px;
}
.detailImageContainer .cardImageContainer,
.detailImageContainer .card {
border-radius: 12px !important;
}
.emby-tab-button {
padding: 0.4em 1.2em;
}
.paper-icon-button-light>.material-icons {
font-size: 1.4em !important;
}
.paper-icon-button-light {
padding: 8px;
}
/* btnPause fixed neutralized */
}
@media screen and (max-height: 26em) and (orientation: landscape) {
.pageTitle {
font-size: large !important;
}
/* btnPause fixed landscape neutralized */
body:has(#indexPage.homePage:not(.hide)) .headerTabs.sectionTabs {
display: none !important;
}
}
@media all and (min-width: 100em) {
.button-flat {
margin: .2em !important;
padding: .85em !important;
}
.listItemImage.listItemImage-large.itemAction.lazy {
height: 160px !important;
}
.listItem-content {
height: unset !important;
}
}
@media all and (max-width: 100em) {
.mainDetailButtons {
font-size: 155%;
}
.listItemImage.listItemImage-large.itemAction.lazy {
height: 160px !important;
}
.listItem-content {
height: unset !important;
}
.secondary.listItem-overview.listItemBodyText {
height: unset !important;
margin: 0;
}
#indexPage .itemProgressBar,
.libraryPage .itemProgressBar,
#itemDetailPage .itemProgressBar {
margin-right: .8em;
}
}
@media (min-aspect-ratio: 1.98/1) {
.detailImageContainer .card {
width: 150px !important;
max-width: 150px !important;
}
.detailRibbon {
padding-left: 20px !important;
}
.detailPagePrimaryContent,
.layout-tv .detailPageSecondaryContainer.padded-left,
.layout-desktop .detailPageSecondaryContainer.padded-left {
padding-left: 0 !important;
}
.detailPageContent {
padding-left: 0 !important;
}
}
@media (min-aspect-ratio: 2.7/1) {
.detailImageContainer .card {
width: 150px !important;
max-width: 150px !important;
}
.detailRibbon {
padding-left: 20px !important;
}
.detailPagePrimaryContent,
.layout-tv .detailPageSecondaryContainer.padded-left,
.layout-desktop .detailPageSecondaryContainer.padded-left {
padding-left: 0 !important;
}
.detailPageContent {
padding-left: 0 !important;
}
}
/* Backdrop filter support */
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
html[data-theme="dark"] .MuiDialog-paper,
.manualLoginForm,
.dialog,
.iconOsd,
.mainDrawer,
.toast,
.emby-tabs-slider,
.videoOsdBottom .osdControls,
.readOnlyContent .verticalSection,
.button-submit,
.upNextContainer,
.selectionCommandsPanel,
.playerStats-stats,
.appfooter,
html[data-theme="dark"] #displayPreferencesPage form button[type="submit"].MuiButton-root {
-webkit-backdrop-filter: blur(var(--abyss-glass-blur)) !important;
backdrop-filter: blur(var(--abyss-glass-blur)) !important;
background-color: rgba(var(--abyss-glass-tint), 0.69) !important;
}
.raised.cancel.block.btnForgotPassword.emby-button,
.btnQuick,
.pageTitle,
.videoOsdBottom,
.headerButton {
-webkit-backdrop-filter: blur(var(--abyss-glass-blur)) !important;
backdrop-filter: blur(var(--abyss-glass-blur)) !important;
}
.paper-icon-button-light:hover,
#itemDetailPage .itemProgressBar,
#dashboardPage .backgroundProgress>div {
backdrop-filter: blur(4px);
}
.indicator {
backdrop-filter: blur(2px);
}
@media all and (max-width: 75em) {
.cardOverlayButtonIcon {
background-color: rgba(0, 0, 0, 0.35) !important;
backdrop-filter: blur(4px);
}
}
#indexPage .itemProgressBar,
.libraryPage .itemProgressBar,
#itemDetailPage .itemProgressBar {
backdrop-filter: blur(4px);
background: rgba(0, 0, 0, 0.35) !important;
}
body:has(.nowPlayingBar:not(.hide)) .backgroundContainer.withBackdrop {
-webkit-backdrop-filter: blur(var(--abyss-glass-blur));
backdrop-filter: blur(var(--abyss-glass-blur));
}
}
/* Item container margins */
.itemsContainer>.card>.cardBox {
margin-left: 0.6em !important;
margin-right: 0.8em;
}
/* Episode list image sizing */
.listItemImage.listItemImage-large.itemAction.lazy {
transition: filter 0.15s var(--abyss-ease);
margin-top: 3px;
margin-bottom: 3px;
}
/* 14. SEARCH PAGE */
.searchSuggestionsList .emby-button {
color: rgba(var(--abyss-accent), 0.6);
font-weight: 100;
font-size: 18px;
letter-spacing: 1px;
text-align: left;
}
#searchTextInput {
font-weight: bold;
font-size: 24px;
padding: 12px 18px;
letter-spacing: 1.1px;
}
.searchFieldsInner .inputLabel {
display: none;
}
.searchfields-icon {
align-self: center !important;
}
.verticalSection.searchSuggestions .sectionTitle {
display: none;
}
.verticalSection.searchSuggestions {
text-align: left !important;
padding: 12px 0 0 0 !important;
display: flex;
flex-direction: column;
align-items: center;
max-height: calc(100vh - 190px);
overflow: hidden;
}
.searchSuggestionsList {
width: fit-content;
min-width: min(908px, calc(100vw - 70px));
padding-left: 50px;
box-sizing: border-box;
overflow-y: auto;
max-height: 100%;
scrollbar-width: thin;
scrollbar-color: rgba(var(--abyss-accent), 0.5) transparent;
}
.searchSuggestionsList::-webkit-scrollbar {
width: 4px;
}
.searchSuggestionsList::-webkit-scrollbar-thumb {
background: rgba(var(--abyss-accent), 0.5);
border-radius: var(--abyss-radius);
}
.searchSuggestionsList::-webkit-scrollbar-track {
background: transparent;
}
.noItemsMessage.centerMessage {
font-weight: 100 !important;
font-size: 36px;
letter-spacing: 1.2px;
opacity: 0.8;
}
.centerMessage {
padding: 2em 0 !important;
}
@media all and (max-width: 50em) {
.searchSuggestionsList {
min-width: calc(100vw - 80px);
padding-left: 44px;
}
}
/* 15. ANIMATIONS & KEYFRAMES */
html[data-theme="dark"] .MuiDrawer-root *,
.playstatebutton-icon-played::before,
.cardOverlayContainer,
.cardOverlayButtonIcon,
.cardOverlayButton,
.paper-icon-button-light,
.emby-tab-button,
.emby-tab-button-active,
.button-flat,
.navMenuOption,
.listItem,
.actionSheetMenuItem {
transition: background 0.37s var(--abyss-ease),
color 0.37s var(--abyss-ease),
border-color 0.37s var(--abyss-ease),
opacity 0.37s var(--abyss-ease),
transform 0.37s var(--abyss-ease) !important;
}
.mainDrawer {
transition: transform 0.18s var(--abyss-ease-snappy) !important;
}
/* Favourite button heart animation — all contexts */
@keyframes abyss-heart-pop {
0% {
transform: scale(1);
}
40% {
transform: scale(1.3);
}
70% {
transform: scale(0.95);
}
100% {
transform: scale(1);
}
}
@keyframes abyss-heart-glow {
0% {
filter: drop-shadow(0 0 0px rgba(249, 38, 114, 0));
}
40% {
filter: drop-shadow(0 0 10px rgba(249, 38, 114, 0.9));
}
100% {
filter: drop-shadow(0 0 0px rgba(249, 38, 114, 0));
}
}
.ratingbutton-withrating .material-icons.favorite {
animation: abyss-heart-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) normal none,
abyss-heart-glow 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) normal none;
}
/* Section entrance animations, all pages */
@keyframes abyss-section-fade-up {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.settingsContainer .MuiStack-root .MuiStack-root,
.verticalSection:nth-child(1) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.05s;
}
.verticalSection:nth-child(2) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.1s;
}
.verticalSection:nth-child(3) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.15s;
}
.verticalSection:nth-child(4) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.2s;
}
.verticalSection:nth-child(5) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.25s;
}
.verticalSection:nth-child(6) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.3s;
}
.verticalSection:nth-child(7) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.35s;
}
.verticalSection:nth-child(8) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.4s;
}
.verticalSection:nth-child(n+9) {
animation: abyss-section-fade-up 0.7s var(--abyss-ease) both 0.45s;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* ==========================================================================
PURE ABYSS 100%: COMPLETE DASHBOARD & SETTINGS (ALL INTERIOR & REACT PAGES)
========================================================================== */
/* 1. Global Backgrounds for ALL Settings, Dashboard, and Interior Pages */
html.jellyfin-settings-page,
.type-interior,
.pageWithSidebar,
.settingsContainer,
#dashboardPage,
body:has(.MuiDrawer-docked),
body:has(#dashboardPage),
body:has(.pageWithSidebar),
div[data-role="page"]:has(.dashboardSection),
div[data-role="page"]:has(.content-primary),
main.MuiBox-root,
.MuiBox-root:has(.MuiDrawer-docked) {
background-color: #0b0b0e !important;
color: rgb(var(--abyss-accent)) !important;
font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
}
/* Hide backdrops on settings and interior pages */
html.jellyfin-settings-page #abyss-spotlight-backdrop,
body:has(.type-interior) #abyss-spotlight-backdrop,
body:has(#dashboardPage) #abyss-spotlight-backdrop,
body:has(.MuiDrawer-docked) #abyss-spotlight-backdrop,
body:has(.pageWithSidebar) #abyss-spotlight-backdrop,
html.jellyfin-settings-page .backdropContainer,
body:has(.type-interior) .backdropContainer,
body:has(#dashboardPage) .backdropContainer,
body:has(.MuiDrawer-docked) .backdropContainer,
body:has(.pageWithSidebar) .backdropContainer {
display: none !important;
opacity: 0 !important;
}
/* 2. Top Navigation Bar on Settings / Dashboard (No overlap, clean alignment) */
html.jellyfin-settings-page header.MuiAppBar-root,
body:has(.MuiDrawer-docked) header.MuiAppBar-root,
body:has(#dashboardPage) header.MuiAppBar-root,
body:has(.pageWithSidebar) header.MuiAppBar-root {
background: rgba(11, 11, 14, 0.85) !important;
backdrop-filter: blur(20px) !important;
-webkit-backdrop-filter: blur(20px) !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
box-shadow: none !important;
}
html.jellyfin-settings-page header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type,
body:has(.MuiDrawer-docked) header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type,
body:has(#dashboardPage) header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type,
body:has(.pageWithSidebar) header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type,
header.MuiAppBar-root:has([data-testid*="ArrowBack"]) > .MuiToolbar-root > .MuiStack-root:first-of-type {
position: static !important;
left: auto !important;
transform: none !important;
}
html.jellyfin-settings-page header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-child,
body:has(.MuiDrawer-docked) header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-child,
body:has(#dashboardPage) header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-child,
body:has(.pageWithSidebar) header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-child,
header.MuiAppBar-root:has([data-testid*="ArrowBack"]) > .MuiToolbar-root > .MuiBox-root:last-child {
order: initial !important;
margin-right: initial !important;
}
/* 3. Natural Page & Content Alignment (Zero top blank space, Zero scroll offset) */
.pageWithSidebar {
display: block !important;
}
.pageWithSidebar .content-primary,
.type-interior .content-primary,
main.MuiBox-root,
div[role="main"] {
padding-top: 76px !important;
max-width: 1400px;
box-sizing: border-box !important;
}
/* 4. Pure Abyss Sidebar / Drawer (MUI & Legacy) */
.mainDrawer,
.mainDrawer-scrollContainer,
.MuiDrawer-docked,
.MuiDrawer-paper {
background-color: #111114 !important;
border-right: 1px solid rgba(255, 255, 255, 0.08) !important;
box-shadow: none !important;
color: rgba(var(--abyss-accent), 0.8) !important;
}
/* Navigation items in sidebar (Frosted glass pills) */
.mainDrawer .navMenuOption,
.MuiDrawer-paper .MuiListItemButton-root {
border-radius: 50px !important;
margin: 4px 12px !important;
padding: 10px 18px !important;
color: rgba(var(--abyss-accent), 0.75) !important;
transition: all 0.2s var(--abyss-ease) !important;
font-family: "Google Sans", sans-serif !important;
font-weight: 500 !important;
}
.mainDrawer .navMenuOption:hover,
.MuiDrawer-paper .MuiListItemButton-root:hover {
background-color: rgba(255, 255, 255, 0.08) !important;
color: #ffffff !important;
}
.mainDrawer .navMenuOption-selected,
.MuiDrawer-paper .MuiListItemButton-root.Mui-selected {
background: rgba(255, 255, 255, 0.15) !important;
color: #ffffff !important;
font-weight: 700 !important;
backdrop-filter: blur(12px) !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
}
.mainDrawer .navMenuOptionIcon,
.MuiDrawer-paper .MuiListItemIcon-root {
background: transparent !important;
color: inherit !important;
padding: 0 !important;
min-width: 36px !important;
margin-right: 12px !important;
}
.mainDrawer .sidebarHeader,
.MuiDrawer-paper .MuiListSubheader-root {
background: transparent !important;
color: rgba(var(--abyss-accent), 0.45) !important;
font-family: "Google Sans", sans-serif !important;
font-size: 0.78rem !important;
font-weight: 700 !important;
text-transform: uppercase !important;
letter-spacing: 0.08em !important;
padding-left: 24px !important;
margin: 16px 0 6px !important;
}
/* 5. 100% Pure Abyss Cards & Widgets Across ALL Settings Pages */
.MuiPaper-root:not(header):not(.MuiDrawer-paper):not(.MuiMenu-paper):not(.MuiPopover-paper),
.MuiCard-root,
.type-interior .cardBox,
.type-interior .paperList,
.type-interior .visualCardBox,
.type-interior .readOnlyContent,
.type-interior .dashboardSection,
.type-interior .dashboardColumn,
.type-interior .userCard,
.type-interior .card.squareCard,
.type-interior .card.portraitCard,
.type-interior .card.backdropCard,
.type-interior .cardContent,
.settingsContainer .cardBox,
.settingsContainer .paperList {
background: rgba(22, 22, 26, 0.75) !important;
border: 1px solid rgba(255, 255, 255, 0.08) !important;
border-radius: 16px !important;
backdrop-filter: blur(20px) !important;
-webkit-backdrop-filter: blur(20px) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25) !important;
color: rgb(var(--abyss-accent)) !important;
}
/* Section titles */
.type-interior .sectionTitle,
.settingsContainer .sectionTitle,
.MuiTypography-h4,
.MuiTypography-h5,
.MuiTypography-h6 {
font-family: "Google Sans", sans-serif !important;
font-weight: 700 !important;
color: #ffffff !important;
}
/* 6. Device Cards (Override default teal #00607a background) */
.MuiCard-root:has([data-testid*="Computer"]),
.MuiCard-root:has([data-testid*="Phone"]),
.MuiCard-root:has([data-testid*="Tv"]),
.MuiCard-root:has([data-testid*="Cast"]),
.MuiCard-root:has(svg[data-testid]),
[class*="deviceCard"],
[class*="DeviceCard"] {
background: rgba(25, 25, 32, 0.85) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
border-radius: 16px !important;
backdrop-filter: blur(20px) !important;
-webkit-backdrop-filter: blur(20px) !important;
}
/* 7. Activity Log List & Bell Icons (Override default cyan #00a4dc circles) */
.MuiListItem-root:has(.MuiAvatar-root),
.type-interior .listItem,
.type-interior .paperList .listItem,
.activityLogList .listItem {
background: rgba(255, 255, 255, 0.03) !important;
border: 1px solid rgba(255, 255, 255, 0.06) !important;
border-radius: 12px !important;
margin-bottom: 8px !important;
padding: 12px 16px !important;
transition: background 0.2s ease, border-color 0.2s ease !important;
}
.MuiListItem-root:has(.MuiAvatar-root):hover,
.type-interior .listItem:hover,
.activityLogList .listItem:hover {
background: rgba(255, 255, 255, 0.07) !important;
border-color: rgba(255, 255, 255, 0.12) !important;
}
.MuiListItemAvatar-root .MuiAvatar-root,
.MuiAvatar-root:has(svg),
.activityLogList .listItemIcon,
.type-interior .listItemIcon {
background-color: rgba(255, 255, 255, 0.12) !important;
color: #ffffff !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
border-radius: 50px !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25) !important;
}
/* 8. User Cards (Users page) */
.MuiCard-root:has([data-testid*="MoreVert"]),
.type-interior .card.squareCard.userCard,
.type-interior .card.squareCard,
.userCard {
background: rgba(22, 22, 26, 0.8) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-radius: 16px !important;
transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease !important;
}
.MuiCard-root:has([data-testid*="MoreVert"]):hover,
.type-interior .card.squareCard:hover {
transform: translateY(-4px) !important;
border-color: rgba(255, 255, 255, 0.25) !important;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5) !important;
}
/* 9. Action Buttons Across ALL Settings & Dashboard */
.MuiButton-contained,
.MuiButton-containedPrimary,
#dashboardPage button.raised:not([class*="delete"]):not([class*="cancel"]):not([class*="warn"]):not([class*="restart"]):not([class*="shutdown"]):not([class*="button-flat"]),
.dashboardPage button.raised:not([class*="delete"]):not([class*="cancel"]):not([class*="warn"]):not([class*="restart"]):not([class*="shutdown"]):not([class*="button-flat"]),
.settingsContainer button.raised,
.formDialog button.raised,
.type-interior .button-submit {
background: rgba(255, 255, 255, 0.95) !important;
color: #0e0e11 !important;
border-radius: 50px !important;
font-family: "Google Sans", sans-serif !important;
font-weight: 600 !important;
padding: 0.6em 1.6em !important;
letter-spacing: 0.02em !important;
border: none !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3) !important;
transition: transform 0.2s ease, background 0.2s ease, box-shadow 0.2s ease !important;
}
.MuiButton-contained:hover,
.type-interior button.raised:hover {
transform: translateY(-2px) !important;
box-shadow: 0 4px 16px rgba(255, 255, 255, 0.2) !important;
}
/* Universal suppression of floating Play All & Shuffle All buttons outside item detail & video */
:is(.view, .page, [data-role="page"], .libraryPage):not(#itemDetailPage):not(#videoOsdPage) :is(
.btnPlay,
.btnShuffle,
.fab,
button[data-action="playall"],
button[data-action="shuffleall"],
button[data-action="play"],
button[data-action="shuffle"],
button[title*="Play" i],
button[title*="Shuffle" i],
button:has(svg[data-testid="PlayArrowIcon"]),
button:has(svg[data-testid="ShuffleIcon"])
),
.viewSettings :is(.btnPlay, .btnShuffle, button[data-action="play"], button[data-action="shuffle"], button[title*="Play" i], button[title*="Shuffle" i], .fab),
.pageTitleWithDefaultButton :is(.btnPlay, .btnShuffle, .fab),
.mainTabsContainer :is(.btnPlay, .btnShuffle, .fab),
.headerRight :is(.btnPlay, .btnShuffle) {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
padding: 0 !important;
margin: 0 !important;
pointer-events: none !important;
opacity: 0 !important;
}
/* Hidden duplicate cards */
.card.apex-duplicate-hidden {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
flex: 0 0 0 !important;
pointer-events: none !important;
overflow: hidden !important;
}
/* Restart button */
.MuiButton-root:has([data-testid*="Restart"]),
button[id*="Restart"],
button:has([data-testid*="Restart"]),
.button-restart {
background: rgba(255, 255, 255, 0.1) !important;
color: #ffffff !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
border-radius: 50px !important;
font-weight: 600 !important;
}
/* Shutdown button */
.MuiButton-root:has([data-testid*="Power"]),
button[id*="Shutdown"],
button:has([data-testid*="Power"]),
.button-shutdown {
background: rgba(235, 87, 87, 0.15) !important;
color: #ff6b6b !important;
border: 1px solid rgba(235, 87, 87, 0.3) !important;
border-radius: 50px !important;
font-weight: 600 !important;
}
/* Add / Fab button */
.MuiFab-root,
.MuiButtonBase-root:has([data-testid*="Add"]) {
background: rgba(255, 255, 255, 0.15) !important;
color: #ffffff !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
border-radius: 50px !important;
transition: transform 0.2s ease, background 0.2s ease !important;
}
.MuiFab-root:hover,
.MuiButtonBase-root:has([data-testid*="Add"]):hover {
background: rgba(255, 255, 255, 0.25) !important;
transform: scale(1.05) !important;
}
/* 10. Inputs, Dropdowns, Checkboxes & Forms (Pixel-Perfect Abyss Alignment) */
.MuiFilledInput-root::before,
.MuiFilledInput-root::after,
.MuiFilledInput-underline::before,
.MuiFilledInput-underline::after,
.MuiInput-underline::before,
.MuiInput-underline::after,
.MuiInputBase-root::before,
.MuiInputBase-root::after {
display: none !important;
border-bottom: none !important;
content: none !important;
}
.MuiFormControl-root {
margin-bottom: 18px !important;
width: 100% !important;
}
.MuiFilledInput-root,
.MuiOutlinedInput-root,
.emby-select,
.emby-textarea {
position: relative !important;
background-color: rgba(255, 255, 255, 0.04) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
border-radius: 14px !important;
color: #ffffff !important;
font-family: "Google Sans", sans-serif !important;
box-shadow: none !important;
transition: border-color 0.25s var(--abyss-ease), background-color 0.25s var(--abyss-ease), box-shadow 0.25s var(--abyss-ease) !important;
}
.MuiFilledInput-root {
padding: 24px 16px 8px 16px !important;
min-height: 56px !important;
box-sizing: border-box !important;
}
.MuiFilledInput-root:hover,
.MuiOutlinedInput-root:hover,
.emby-select:hover,
.emby-textarea:hover {
background-color: rgba(255, 255, 255, 0.07) !important;
border-color: rgba(255, 255, 255, 0.22) !important;
}
.MuiFilledInput-root.Mui-focused,
.MuiOutlinedInput-root.Mui-focused,
.emby-select:focus,
.emby-textarea:focus {
background-color: rgba(255, 255, 255, 0.08) !important;
border-color: rgba(255, 255, 255, 0.6) !important;
box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.1) !important;
outline: none !important;
}
.MuiFilledInput-input,
.MuiOutlinedInput-input {
background: transparent !important;
border: none !important;
padding: 0 !important;
font-family: "Google Sans", sans-serif !important;
font-size: 0.95rem !important;
font-weight: 500 !important;
color: #ffffff !important;
height: auto !important;
line-height: 1.4 !important;
box-shadow: none !important;
}
.MuiFormLabel-root,
.MuiInputLabel-root {
font-family: "Google Sans", sans-serif !important;
color: rgba(var(--abyss-accent), 0.55) !important;
font-size: 0.9rem !important;
pointer-events: none !important;
}
.MuiInputLabel-filled {
transform: translate(16px, 17px) scale(1) !important;
transform-origin: top left !important;
transition: color 0.2s cubic-bezier(0.0, 0, 0.2, 1) 0ms, transform 0.2s cubic-bezier(0.0, 0, 0.2, 1) 0ms !important;
}
.MuiInputLabel-filled.MuiInputLabel-shrink {
transform: translate(16px, 7px) scale(0.75) !important;
color: rgba(var(--abyss-accent), 0.75) !important;
font-weight: 600 !important;
}
.MuiInputLabel-root.Mui-focused {
color: #ffffff !important;
}
.MuiFormHelperText-root {
font-family: "Google Sans", sans-serif !important;
color: rgba(var(--abyss-accent), 0.48) !important;
font-size: 0.8rem !important;
line-height: 1.4 !important;
margin-top: 6px !important;
padding-left: 4px !important;
}
.MuiCheckbox-root {
color: rgba(var(--abyss-accent), 0.5) !important;
border-radius: 8px !important;
transition: color 0.2s ease, transform 0.2s ease !important;
}
.MuiCheckbox-root.Mui-checked {
color: #ffffff !important;
}
.MuiFormControlLabel-label {
font-family: "Google Sans", sans-serif !important;
font-size: 0.95rem !important;
font-weight: 500 !important;
color: rgb(var(--abyss-accent)) !important;
}
.checkboxOutline {
border-radius: 6px !important;
}
.emby-toggle-button {
border-radius: 50px !important;
}
/* 11. Top Navigation Bar: Hide server switch warning pill & raw name */
header.MuiAppBar-root .MuiStack-root:first-of-type > .MuiButtonBase-root:has(svg[data-testid*="Warning"]),
header.MuiAppBar-root .MuiStack-root:first-of-type > .MuiButtonBase-root:has(svg[data-testid*="Dns"]),
header.MuiAppBar-root .MuiStack-root:first-of-type > [class*="MuiChip"]:has(svg[data-testid*="Warning"]),
header.MuiAppBar-root .MuiStack-root:first-of-type > [class*="MuiChip"]:has(svg[data-testid*="Dns"]),
header.MuiAppBar-root [class*="server-name"],
header.MuiAppBar-root [class*="serverName"],
.headerServerButton {
display: none !important;
}
/* 12. Crisp Card & Image Rendering - True HD Smooth Filtering */
.cardImage,
.cardContent,
.cardImageContainer,
.cardScalable,
.cardPadder,
.cardBox,
.card-withdetails,
.innerCardContainer {
image-rendering: auto !important;
image-rendering: high-quality !important;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
transform: translateZ(0);
}
.backdropImage {
image-rendering: auto !important;
image-rendering: high-quality !important;
}
/* Ensure video player elements always render on top without backdrop interference */
#videoOsdPage,
.videoPlayerContainer,
.htmlvideoplayer {
z-index: 99999 !important;
}
body:has(#videoOsdPage) #abyss-spotlight-backdrop,
body.videoPlayerContainerVisible #abyss-spotlight-backdrop {
display: none !important;
}
/* Mobile Touch & Tap Lag Elimination (0ms Click Response) */
html,
body,
button,
a,
.card,
.cardBox,
.cardScalable,
.emby-button,
.paper-icon-button-light,
.listItem,
.navMenuOption,
.headerButton,
.emby-tab-button,
.btn {
touch-action: manipulation !important;
-webkit-tap-highlight-color: transparent !important;
}
/* 13. Android & Mobile Perfection */
@media (max-width: 959px) {
:root {
--abyss-glass-blur: 4px !important;
--abyss-backdrop-blur: 6px !important;
}
.cardImageContainer .cardImage {
background-size: cover !important;
background-position: center top !important;
image-rendering: -webkit-optimize-contrast !important;
}
.card:active .cardScalable,
.cardBox:active,
.listItem:active,
.emby-button:active {
transform: scale(0.97) !important;
transition: transform 0.08s ease !important;
}
.MuiDrawer-modal .MuiDrawer-paper,
.mainDrawer {
position: fixed !important;
top: 0 !important;
left: 0 !important;
bottom: 0 !important;
width: 280px !important;
max-width: 80vw !important;
background: rgba(17, 17, 21, 0.98) !important;
backdrop-filter: blur(12px) !important;
-webkit-backdrop-filter: blur(12px) !important;
border: none !important;
border-right: 1px solid rgba(255, 255, 255, 0.1) !important;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.7) !important;
z-index: 1300 !important;
}
}
@media (max-width: 600px) {
button,
.button-flat,
.emby-button,
.cardOverlayButton,
.MuiIconButton-root,
.MuiButton-root {
min-height: 44px;
min-width: 44px;
}
.skinHeader {
padding: 8px 12px !important;
}
.itemsContainer.padded-left.padded-right {
padding-left: 12px !important;
padding-right: 12px !important;
}
.content-primary,
.dashboardContent,
main.MuiBox-root {
padding: 16px 12px !important;
}
}
/* Claude-Style Stepped Hamburger Menu Bar (Top long 20px, Middle medium 13.5px, Bottom short 7.5px) */
svg[data-testid="MenuIcon"],
svg.claude-stepped-menu {
width: 20px !important;
height: 15px !important;
display: block !important;
}
/* Hide default horizontal straight path when not replaced */
svg[data-testid="MenuIcon"]:not(.claude-stepped-menu) path,
.mainDrawerButton:not(.claude-stepped-menu) .material-icons {
display: none !important;
}
svg[data-testid="MenuIcon"]:not(.claude-stepped-menu),
.mainDrawerButton:not(.claude-stepped-menu) {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='15' viewBox='0 0 20 15' fill='none'%3E%3Crect x='0' y='0.5' width='20' height='2' rx='1' fill='white'/%3E%3Crect x='0' y='6.5' width='13.5' height='2' rx='1' fill='white'/%3E%3Crect x='0' y='12.5' width='7.5' height='2' rx='1' fill='white'/%3E%3C/svg%3E") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: contain !important;
}
button:has(svg[data-testid="MenuIcon"]),
button[aria-label="Menu"],
button[aria-label="menu"],
.mainDrawerButton,
.headerButtonMenu {
position: relative !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
}
/* ==========================================================================
Apex Official Delta Logo Branding (Pure OLED Pitch Black + Solid White)
Target ONLY explicit app logos, NEVER media cards, posters, or user avatars!
========================================================================== */
.headerLogo img,
.imgLogoIcon,
.pageTitleWithDefaultLogo,
.pageTitleWithLogo {
content: url('apex-logo.svg') !important;
background-image: url('apex-logo.svg') !important;
background-size: contain !important;
background-repeat: no-repeat !important;
background-position: center !important;
object-fit: contain !important;
}
/* Header Start Icon & Title Bar Logo */
.headerLogo img,
.imgLogoIcon {
max-height: 22px !important;
max-width: 22px !important;
object-fit: contain !important;
}
/* Drawer Brand Card Logo - refined, small logo (22px) as requested */
.mainDrawer a[to="/"] img,
.mainDrawer a[href="/"] img,
.mainDrawer .adminDrawerLogo img,
.mainDrawer .adminDrawerLogo .apex-delta-icon,
.mainDrawer .apex-delta-icon,
.mainDrawer img[src*="icon-transparent"],
.mainDrawer img[src*="apex-logo"] {
width: 22px !important;
height: 22px !important;
max-width: 22px !important;
max-height: 22px !important;
min-width: 22px !important;
min-height: 22px !important;
object-fit: contain !important;
display: inline-block !important;
vertical-align: middle !important;
}
/* Hard safeguarding for real media card posters and user avatars */
.card img,
.cardImage,
.cardContent img,
.cardScalable img,
.detailImage img,
.headerButton-user img,
.headerUserImage,
.userImage {
content: normal !important;
}
/* Splash Screen Logo */
.splashLogo,
#splashScreen .splashLogo {
background-image: url('apex-logo.svg') !important;
background-size: contain !important;
background-repeat: no-repeat !important;
background-position: center !important;
width: 100px !important;
height: 100px !important;
}
/* Modern Drawer Server Brand Card */
.mainDrawer a[to="/"],
.mainDrawer .navMenuOption.lnkMediaFolder.btnSelectServer,
.mainDrawer .navMenuOption.btnSelectServer,
.mainDrawer .adminDrawerLogo,
.mainDrawer .navMenuHeader {
background: rgba(22, 22, 32, 0.7) !important;
border: 1px solid rgba(255, 255, 255, 0.08) !important;
border-radius: 14px !important;
margin: 10px 14px 14px !important;
padding: 10px 14px !important;
}
/* Never show raw container hostname or server URL anywhere in the UI */
.mainDrawer .serverUrl,
.mainDrawer .serverAddress,
.manualServerAddress,
.serverUrl,
.serverAddress,
[class*="serverUrl"],
[class*="serverAddress"],
[class*="ServerAddress"] {
display: none !important;
}
/* ==========================================================================
Android TV & Apple TV+ Professional Streaming UI Engine
========================================================================== */
/* 1. Global OLED Palette & Typography Tokens */
:root {
--tv-bg: #000000;
--tv-surface: #111111;
--tv-glass: rgba(17, 17, 17, 0.75);
--tv-text-primary: #F5F5F5;
--tv-text-muted: #999999;
--tv-focus-border: #FFFFFF;
--tv-radius: 12px;
}
body, html, .backgroundContainer {
background-color: var(--tv-bg) !important;
color: var(--tv-text-primary) !important;
}
/* 2. Top Navigation Bar (Unified Glass Header) */
.skinHeader,
.skinHeader.focuscontainer-x,
.skinHeader-withBackground {
background: transparent !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
border: none !important;
border-bottom: none !important;
box-shadow: none !important;
}
/* Clean up header buttons (remove excessive shadow/background boxes) */
.skinHeader .headerButton,
.skinHeader .paper-icon-button-light {
background: transparent !important;
box-shadow: none !important;
border-radius: 50% !important;
color: var(--tv-text-primary) !important;
transition: background-color 0.2s ease, transform 0.2s ease !important;
}
.skinHeader .headerButton:hover,
.skinHeader .headerButton:focus-visible {
background: rgba(255, 255, 255, 0.12) !important;
transform: scale(1.05) !important;
}
/* 3. Section Titles & Row Headers */
.sectionTitle,
.sectionTitleTextButton {
color: var(--tv-text-primary) !important;
font-weight: 700 !important;
font-size: 1.25rem !important;
letter-spacing: -0.01em !important;
padding-left: 0.15em !important;
margin-bottom: 0.5em !important;
}
/* 4. Horizontal Carousels & Card Peeking */
.itemsContainer.padded-left.padded-right {
padding-left: 4.5vw !important;
padding-right: 4.5vw !important;
gap: 16px !important;
scroll-behavior: smooth !important;
scroll-snap-type: x mandatory !important;
}
.itemsContainer > .card {
scroll-snap-align: start !important;
margin-right: 14px !important;
}
/* 5. Differentiated Card Aspect Ratios */
/* Portrait 2:3 ratio for Movies, Shows, and General Media */
.cardScalable,
.portraitCard .cardScalable {
border-radius: var(--tv-radius) !important;
overflow: hidden !important;
background-color: var(--tv-surface) !important;
border: 1px solid rgba(255, 255, 255, 0.08) !important;
transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), outline 0.18s ease, box-shadow 0.18s ease !important;
}
.cardImageContainer {
background-color: var(--tv-surface) !important;
}
/* 16:9 Landscape Ratio for Continue Watching & Next Up */
.resumeSection .card,
.nextUpSection .card,
div[data-category="resume"] .card,
div[data-category="nextup"] .card,
.thumbCard .cardScalable,
.backdropCard .cardScalable {
border-radius: var(--tv-radius) !important;
}
/* 6. Continue Watching Progress Bar (Thin 3px Flush Line) */
.itemProgressBar {
position: absolute !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
height: 3px !important;
background: rgba(255, 255, 255, 0.22) !important;
border-radius: 0 0 var(--tv-radius) var(--tv-radius) !important;
margin: 0 !important;
z-index: 4 !important;
}
.itemProgressBarForeground {
background: #E50914 !important;
height: 100% !important;
box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) !important;
}
/* 7. Card Text & Metadata Scrims */
.cardText {
color: var(--tv-text-muted) !important;
font-size: 0.85rem !important;
font-weight: 500 !important;
}
.cardText-first {
color: var(--tv-text-primary) !important;
font-weight: 600 !important;
font-size: 0.92rem !important;
}
/* Bottom gradient behind text on backdrop cards */
.cardOverlayContainer {
background: linear-gradient(to top, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.5) 40%, transparent 100%) !important;
}
/* 8. TV Spatial Focus Transform & Border Ring */
.card:focus-visible,
.card.focused,
.card:focus {
outline: none !important;
}
.card:focus-visible .cardScalable,
.card.focused .cardScalable,
.card:focus .cardScalable,
.card:hover .cardScalable {
transform: scale(1.04) !important;
outline: 2px solid var(--tv-focus-border) !important;
outline-offset: 2px !important;
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.85), 0 0 20px rgba(255, 255, 255, 0.18) !important;
z-index: 10 !important;
}
/* Top Floating Category Navigation (Android TV / Disney+ Style) */
/* Top Floating Category Navigation (Android TV / Disney+ Style) */
/* 1. COMPLETELY HIDE HAMBURGER MENU, CAST, AND SYNCPLAY */
button[aria-label="Menu"],
button[aria-label="menu"],
button:has(svg[data-testid="MenuIcon"]),
svg[data-testid="MenuIcon"],
.claude-stepped-menu,
.mainDrawerButton,
.headerButtonMenu,
button[title*="menu" i],
.headerSyncplayButton,
.headerButtonSyncPlay,
.btnSyncPlay,
button[data-action="syncplay"],
button[title*="SyncPlay" i],
button[aria-label*="SyncPlay" i],
.headerCastButton,
.headerButtonCast,
.btnCast,
button[data-action="cast"],
button[title*="Cast" i],
button[aria-label*="Cast" i],
button:has(svg[data-testid="CastIcon"]),
button:has(svg[data-testid="GroupIcon"]),
button:has(svg[data-testid="PeopleIcon"]),
.headerLeft,
header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:first-of-type:has(button[aria-label="Menu"]),
header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:first-of-type:has(button[aria-label="Menu"]) {
display: none !important;
visibility: hidden !important;
pointer-events: none !important;
width: 0 !important;
height: 0 !important;
padding: 0 !important;
margin: 0 !important;
position: absolute !important;
overflow: hidden !important;
opacity: 0 !important;
}
/* 2. HEADER CONTAINER & BAR - Fully transparent, zero blur over spotlight */
.skinHeader,
.skinHeader.focuscontainer-x,
.skinHeader-withBackground,
.skinHeader-withBackground::before,
header.MuiAppBar-root {
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
border: none !important;
border-bottom: none !important;
box-shadow: none !important;
height: 56px !important;
min-height: 56px !important;
padding: 0 !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
z-index: 1000 !important;
pointer-events: none !important;
}
.skinHeader *,
header.MuiAppBar-root * {
pointer-events: auto;
}
.headerTop,
header.MuiAppBar-root > .MuiToolbar-root,
header > .MuiToolbar-root {
display: flex !important;
flex-direction: row !important;
justify-content: space-between !important;
align-items: center !important;
height: 56px !important;
min-height: 56px !important;
width: 100% !important;
padding: 0 16px !important;
margin: 0 !important;
box-sizing: border-box !important;
}
/* 3. LEFT: TOP NAVIGATION TABS (Home, Movies, TV Shows) */
.apex-top-nav {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 14px !important;
margin: 0 !important;
padding: 0 !important;
z-index: 100 !important;
flex-shrink: 0 !important;
order: -1 !important;
}
.apex-nav-item {
color: rgba(255, 255, 255, 0.72) !important;
font-size: 14px !important;
font-weight: 500 !important;
font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
text-decoration: none !important;
cursor: pointer !important;
background: transparent !important;
border: 1px solid transparent !important;
padding: 5px 12px !important;
border-radius: 18px !important;
transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) !important;
outline: none !important;
white-space: nowrap !important;
-webkit-tap-highlight-color: transparent !important;
}
.apex-nav-item:hover,
.apex-nav-item:focus-visible {
color: #FFFFFF !important;
background: rgba(255, 255, 255, 0.12) !important;
border-color: rgba(255, 255, 255, 0.2) !important;
}
.apex-nav-item.active {
color: #FFFFFF !important;
background: rgba(255, 255, 255, 0.22) !important;
border-color: rgba(255, 255, 255, 0.45) !important;
font-weight: 600 !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.4) !important;
}
/* 4. RIGHT: SEARCH AND PROFILE ONLY */
.headerRight,
header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-of-type,
header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:last-of-type {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 10px !important;
margin-left: auto !important;
order: 10 !important;
}
.headerSearchButton,
button[data-action="search"] {
background: transparent !important;
color: #FFFFFF !important;
border-radius: 50% !important;
width: 36px !important;
height: 36px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
margin: 0 !important;
padding: 0 !important;
cursor: pointer !important;
}
/* Landscape Mode & Desktop/TV: EXACT MATCH TO IMAGE 4 */
@media (min-width: 601px), (orientation: landscape) {
.headerTop,
header.MuiAppBar-root > .MuiToolbar-root,
header > .MuiToolbar-root {
padding: 0 24px !important;
}
.apex-top-nav {
gap: 22px !important;
}
.apex-nav-item {
font-size: 15px !important;
padding: 6px 14px !important;
}
/* Image 4 Search Pill Bar */
.apex-search-pill {
display: inline-flex !important;
align-items: center !important;
gap: 8px !important;
background: rgba(255, 255, 255, 0.12) !important;
border: 1px solid rgba(255, 255, 255, 0.18) !important;
border-radius: 24px !important;
padding: 6px 16px !important;
color: rgba(255, 255, 255, 0.75) !important;
font-size: 13.5px !important;
font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
margin-right: 8px !important;
outline: none !important;
}
.apex-search-pill:hover,
.apex-search-pill:focus-visible {
background: rgba(255, 255, 255, 0.2) !important;
color: #FFFFFF !important;
border-color: rgba(255, 255, 255, 0.3) !important;
}
.headerSearchButton {
display: none !important;
}
}
/* Mobile Portrait Mode */
@media (max-width: 600px) and (orientation: portrait) {
.headerTop,
header.MuiAppBar-root > .MuiToolbar-root,
header > .MuiToolbar-root {
padding: 0 12px !important;
}
.apex-top-nav {
gap: 10px !important;
}
.apex-nav-item {
font-size: 13.5px !important;
padding: 4px 8px !important;
}
.apex-search-pill {
display: none !important;
}
.headerSearchButton {
display: flex !important;
}
}
/* STRICT HOMEPAGE HORIZONTAL RAILS - NEVER WRAP */
#indexPage .itemsContainer,
.homeSectionsContainer .itemsContainer,
.section0 .itemsContainer,
.section1 .itemsContainer,
.section2 .itemsContainer,
.section3 .itemsContainer,
.section4 .itemsContainer,
.section5 .itemsContainer,
.emby-scroller .itemsContainer {
display: flex !important;
flex-wrap: nowrap !important;
flex-direction: row !important;
overflow-x: auto !important;
overflow-y: hidden !important;
-webkit-overflow-scrolling: touch !important;
scroll-behavior: smooth !important;
scroll-snap-type: x mandatory !important;
padding-left: 14px !important;
padding-right: 14px !important;
gap: 14px !important;
}
#indexPage .itemsContainer > .card,
.homeSectionsContainer .itemsContainer > .card,
.emby-scroller .itemsContainer > .card {
flex-shrink: 0 !important;
scroll-snap-align: start !important;
margin-right: 14px !important;
}
/* 1. Continue Watching & Next Up: True 16:9 Widescreen Landscape Rails (Android TV & Modern Streaming) */
.resumeSection .card,
.nextUpSection .card,
div[data-category="resume"] .card,
div[data-category="nextup"] .card {
width: 230px !important;
max-width: 230px !important;
min-width: 230px !important;
flex: 0 0 230px !important;
scroll-snap-align: start !important;
}
@media (min-width: 800px) {
.resumeSection .card,
.nextUpSection .card,
div[data-category="resume"] .card,
div[data-category="nextup"] .card {
width: 275px !important;
max-width: 275px !important;
min-width: 275px !important;
flex: 0 0 275px !important;
}
}
.resumeSection .cardPadder,
.nextUpSection .cardPadder,
div[data-category="resume"] .cardPadder,
div[data-category="nextup"] .cardPadder,
.cardPadder-backdrop,
.cardPadder-overflowBackdrop {
padding-bottom: 56.25% !important;
aspect-ratio: 16 / 9 !important;
height: 0 !important;
}
.resumeSection .cardScalable,
.nextUpSection .cardScalable,
div[data-category="resume"] .cardScalable,
div[data-category="nextup"] .cardScalable {
aspect-ratio: 16 / 9 !important;
border-radius: 12px !important;
overflow: hidden !important;
position: relative !important;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6) !important;
}
.resumeSection .cardImageContainer img,
.nextUpSection .cardImageContainer img,
div[data-category="resume"] .cardImageContainer img,
div[data-category="nextup"] .cardImageContainer img {
object-fit: cover !important;
width: 100% !important;
height: 100% !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
}
/* Streaming Watch Progress Bar (Netflix / Android TV Red Glow) */
.resumeSection .itemProgressBar,
.nextUpSection .itemProgressBar,
div[data-category="resume"] .itemProgressBar,
div[data-category="nextup"] .itemProgressBar,
#indexPage .itemProgressBar {
position: absolute !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
height: 4px !important;
background: rgba(255, 255, 255, 0.22) !important;
border-radius: 0 0 12px 12px !important;
overflow: hidden !important;
z-index: 5 !important;
}
.resumeSection .itemProgressBarForeground,
.nextUpSection .itemProgressBarForeground,
div[data-category="resume"] .itemProgressBarForeground,
div[data-category="nextup"] .itemProgressBarForeground,
#indexPage .itemProgressBarForeground {
background: linear-gradient(90deg, #E50914 0%, #FF2E4D 100%) !important;
border-radius: 0 0 12px 12px !important;
height: 100% !important;
box-shadow: 0 0 8px rgba(229, 9, 20, 0.6) !important;
}
@media (max-width: 600px) {
.resumeSection .card,
.nextUpSection .card,
div[data-category="resume"] .card,
div[data-category="nextup"] .card {
width: 215px !important;
max-width: 215px !important;
min-width: 215px !important;
flex: 0 0 215px !important;
}
}
/* 2. Portrait Media Base (2:3 Vertical) */
.portraitCard,
.card[data-type="Movie"],
.card[data-type="Series"] {
width: 150px !important;
max-width: 150px !important;
flex: 0 0 150px !important;
}
.portraitCard .cardScalable,
.card[data-type="Movie"] .cardScalable,
.card[data-type="Series"] .cardScalable {
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
overflow: hidden !important;
}
@media (max-width: 600px) {
#indexPage .portraitCard,
#indexPage .card[data-type="Movie"],
#indexPage .card[data-type="Series"] {
width: 125px !important;
max-width: 125px !important;
flex: 0 0 125px !important;
}
}
/* 3. Dedicated Library/Catalog views (3-Column Grid ONLY on Non-Home Library Pages) */
@media (max-width: 600px) and (orientation: portrait) {
.page:not(#indexPage):not(#itemDetailPage) .itemsContainer,
div[data-role="page"]:not(#indexPage) .itemsContainer,
.pageTabContent:not(#homeTab) .itemsContainer,
.itemsContainer.itemsContainer-wrap,
.itemsContainer.vertical-wrap,
.vertical-wrap.itemsContainer,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer),
#moviesPage .itemsContainer,
#tvShowsPage .itemsContainer,
#showsPage .itemsContainer,
#libraryPage .itemsContainer,
#itemsPage .itemsContainer {
display: flex !important;
flex-wrap: wrap !important;
flex-direction: row !important;
gap: 6px !important;
padding: 6px 8px !important;
box-sizing: border-box !important;
justify-content: flex-start !important;
width: 100% !important;
scroll-snap-type: none !important;
}
.page:not(#indexPage):not(#itemDetailPage) .itemsContainer > .card,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card,
.pageTabContent:not(#homeTab) .itemsContainer > .card,
.itemsContainer.itemsContainer-wrap > .card,
.itemsContainer.vertical-wrap > .card,
.vertical-wrap.itemsContainer > .card,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card,
#moviesPage .card,
#tvShowsPage .card,
#showsPage .card,
#libraryPage .card,
#itemsPage .card,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card),
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) {
width: calc((100% - 12px) / 3) !important;
max-width: calc((100% - 12px) / 3) !important;
min-width: calc((100% - 12px) / 3) !important;
flex: 0 0 calc((100% - 12px) / 3) !important;
margin: 0 0 10px 0 !important;
padding: 0 !important;
box-sizing: border-box !important;
scroll-snap-align: none !important;
}
.page:not(#indexPage) .itemsContainer > .card > .cardBox,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card > .cardBox,
.itemsContainer.vertical-wrap > .card > .cardBox,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card > .cardBox,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card) > .cardBox,
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) > .cardBox {
margin: 0 !important;
padding: 0 !important;
width: 100% !important;
box-sizing: border-box !important;
}
.page:not(#indexPage) .itemsContainer > .card .cardScalable,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card .cardScalable,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card .cardScalable,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardScalable,
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardScalable {
aspect-ratio: 2 / 3 !important;
border-radius: 8px !important;
width: 100% !important;
}
.page:not(#indexPage) .itemsContainer > .card .cardText,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card .cardText,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card .cardText,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardText,
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardText {
font-size: 0.72rem !important;
line-height: 1.15 !important;
padding: 4px 1px 0 !important;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
max-width: 100% !important;
}
}
/* 4. LANDSCAPE MODE & WIDESCREEN: HIGH DENSITY CARDS (7-8 Cards Per Row) */
@media (orientation: landscape), (min-width: 601px) {
.page:not(#indexPage):not(#itemDetailPage) .itemsContainer,
div[data-role="page"]:not(#indexPage) .itemsContainer,
.pageTabContent:not(#homeTab) .itemsContainer,
.itemsContainer.itemsContainer-wrap,
.itemsContainer.vertical-wrap,
.vertical-wrap.itemsContainer,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer),
#moviesPage .itemsContainer,
#tvShowsPage .itemsContainer,
#showsPage .itemsContainer,
#libraryPage .itemsContainer,
#itemsPage .itemsContainer {
display: flex !important;
flex-wrap: wrap !important;
flex-direction: row !important;
gap: 8px !important;
padding: 10px 14px !important;
box-sizing: border-box !important;
justify-content: flex-start !important;
width: 100% !important;
}
.page:not(#indexPage):not(#itemDetailPage) .itemsContainer > .card,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card,
.pageTabContent:not(#homeTab) .itemsContainer > .card,
.itemsContainer.itemsContainer-wrap > .card,
.itemsContainer.vertical-wrap > .card,
.vertical-wrap.itemsContainer > .card,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card,
#moviesPage .card,
#tvShowsPage .card,
#showsPage .card,
#libraryPage .card,
#itemsPage .card,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card),
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) {
width: calc((100% - 56px) / 8) !important;
max-width: calc((100% - 56px) / 8) !important;
min-width: calc((100% - 56px) / 8) !important;
flex: 0 0 calc((100% - 56px) / 8) !important;
margin: 0 0 10px 0 !important;
padding: 0 !important;
box-sizing: border-box !important;
}
.page:not(#indexPage) .itemsContainer > .card > .cardBox,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card > .cardBox,
.itemsContainer.vertical-wrap > .card > .cardBox,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card > .cardBox,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card) > .cardBox,
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) > .cardBox {
margin: 0 !important;
padding: 0 !important;
width: 100% !important;
box-sizing: border-box !important;
}
.page:not(#indexPage) .itemsContainer > .card .cardText,
div[data-role="page"]:not(#indexPage) .itemsContainer > .card .cardText,
.itemsContainer:not(.itemsContainer-slider):not(#indexPage .itemsContainer) > .card .cardText,
.card[data-type="Series"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardText,
.card[data-type="Movie"]:not(.itemsContainer-slider .card):not(#indexPage .card) .cardText {
font-size: 0.75rem !important;
line-height: 1.2 !important;
padding: 3px 2px 0 !important;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
}
}
/* ZERO STARTUP LAG: INSTANT VISIBILITY OF HOMEPAGE CONTENT */
#homeTab,
.homeSectionsContainer,
#indexPage .sections,
.verticalSection,
.section0,
.section1,
.section2,
.section3 {
opacity: 1 !important;
visibility: visible !important;
}
/* ========================================================
APEX UNIVERSAL TV TOP NAVIGATION BAR (Home, Movies, TV Shows)
Mounted directly under document.body - immune to React DOM wiping
======================================================== */
#apex-tv-topbar {
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
width: 100% !important;
height: 52px !important;
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
pointer-events: none !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
z-index: 99999 !important;
box-sizing: border-box !important;
padding: 0 16px !important;
background: rgba(10, 11, 15, 0.92) !important;
backdrop-filter: blur(20px) saturate(180%) !important;
-webkit-backdrop-filter: blur(20px) saturate(180%) !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
transition: opacity 0.2s ease, visibility 0.2s ease !important;
}
body.show-apex-topbar #apex-tv-topbar,
#apex-tv-topbar.is-visible {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
pointer-events: auto !important;
}
#apex-tv-topbar .apex-tv-tabs {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 12px !important;
pointer-events: auto !important;
margin: 0 auto !important;
}
.apex-tv-tab,
.apex-nav-item {
background: transparent !important;
border: 1px solid transparent !important;
color: rgba(255, 255, 255, 0.72) !important;
font-size: 14.5px !important;
font-weight: 500 !important;
font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
padding: 6px 14px !important;
border-radius: 9999px !important;
cursor: pointer !important;
transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) !important;
outline: none !important;
white-space: nowrap !important;
-webkit-tap-highlight-color: transparent !important;
user-select: none !important;
-webkit-user-select: none !important;
line-height: 1 !important;
}
.apex-tv-tab:hover,
.apex-tv-tab:focus-visible,
.apex-nav-item:hover,
.apex-nav-item:focus-visible {
color: #FFFFFF !important;
background: rgba(255, 255, 255, 0.12) !important;
border-color: rgba(255, 255, 255, 0.2) !important;
}
.apex-tv-tab.active,
.apex-nav-item.active {
color: #FFFFFF !important;
background: rgba(255, 255, 255, 0.22) !important;
border-color: rgba(255, 255, 255, 0.4) !important;
font-weight: 600 !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.4) !important;
}
/* Mobile Portrait Mode: Compact tabs to prevent TV Shows & Search collision */
@media (max-width: 600px) and (orientation: portrait) {
#apex-tv-topbar {
height: 48px !important;
padding: 0 8px !important;
background: rgba(10, 11, 15, 0.92) !important;
backdrop-filter: blur(20px) saturate(180%) !important;
-webkit-backdrop-filter: blur(20px) saturate(180%) !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
}
#apex-tv-topbar .apex-tv-tabs {
gap: 4px !important;
}
.apex-tv-tab,
.apex-nav-item {
font-size: 12px !important;
padding: 4px 7px !important;
letter-spacing: -0.01em !important;
}
/* Right side controls: Search & Profile pinned safely to the right */
.headerRight,
header.MuiAppBar-root > .MuiToolbar-root > .MuiBox-root:last-of-type,
header.MuiAppBar-root > .MuiToolbar-root > .MuiStack-root:last-of-type {
position: absolute !important;
right: 8px !important;
top: 0 !important;
bottom: 0 !important;
display: flex !important;
align-items: center !important;
gap: 2px !important;
padding: 0 !important;
margin: 0 !important;
}
.headerSearchButton,
button[data-action="search"],
.headerUserButtonRound,
.headerButton-user {
margin: 0 1px !important;
padding: 4px !important;
min-width: 32px !important;
width: 32px !important;
height: 32px !important;
}
}
/* Never display topbar on splash screen, login screen, server selection, server mismatch, wizard, or video */
#loginPage:not(.hide) ~ #apex-tv-topbar,
#serverMismatchPage:not(.hide) ~ #apex-tv-topbar,
#selectServerPage:not(.hide) ~ #apex-tv-topbar,
body:has(#serverMismatchPage:not(.hide)) #apex-tv-topbar,
body:has(.serverMismatchPage:not(.hide)) #apex-tv-topbar,
body:has(#loginPage:not(.hide)) #apex-tv-topbar,
body:has(.loginPage:not(.hide)) #apex-tv-topbar,
body:has(#selectServerPage:not(.hide)) #apex-tv-topbar,
body:has(.selectServerPage:not(.hide)) #apex-tv-topbar,
body:has(#forgotPasswordPage:not(.hide)) #apex-tv-topbar,
body:has(#itemDetailPage:not(.hide)) #apex-tv-topbar,
body:has(.splashLogo:not(.hide):not(:empty)) #apex-tv-topbar,
body.is-logged-out #apex-tv-topbar,
body.hide-apex-topbar #apex-tv-topbar,
body.videoPlayerContainerVisible #apex-tv-topbar {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
pointer-events: none !important;
}
/* Clean header on login, mismatch, and splash */
#serverMismatchPage .skinHeader,
.serverMismatchPage .skinHeader,
#loginPage .skinHeader,
.loginPage .skinHeader,
#selectServerPage .skinHeader,
.selectServerPage .skinHeader {
display: none !important;
}
/* Landscape Mode & Desktop/TV */
@media (min-width: 601px), (orientation: landscape) {
#apex-tv-topbar {
height: 56px !important;
padding: 0 24px !important;
}
#apex-tv-topbar .apex-tv-tabs {
gap: 18px !important;
}
.apex-tv-tab,
.apex-nav-item {
font-size: 15px !important;
padding: 6px 16px !important;
}
}
/* Hide topbar only during active fullscreen video playback or settings */
body.videoPlayerContainerVisible #apex-tv-topbar,
body.hide-apex-topbar #apex-tv-topbar {
display: none !important;
opacity: 0 !important;
pointer-events: none !important;
}
/* Suppress redundant header text and brand elements in top header bar to prevent collision */
.headerTop .pageTitle,
.skinHeader .pageTitle,
header.MuiAppBar-root .pageTitle,
header .pageTitle,
.headerLogoText,
.pageTitleWithDefaultLogo,
.pageTitleWithLogo,
.skinHeader .headerLogo {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
pointer-events: none !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
}
/* ========================================================
DETAIL PAGE: MOBILE PORTRAIT & DEFAULT CLEAN LAYOUT
Clean single poster card + side-by-side title & metadata
======================================================== */
@media (orientation: portrait) {
#itemDetailPage .detailPageWrapperContainer,
#itemDetailPage .detailPagePrimaryContainer,
.layout-mobile #itemDetailPage .detailPagePrimaryContainer {
display: flex !important;
flex-direction: row !important;
align-items: flex-start !important;
flex-wrap: wrap !important;
padding: 56px 16px 16px 16px !important;
gap: 16px !important;
width: 100% !important;
box-sizing: border-box !important;
position: relative !important;
z-index: 2 !important;
}
/* Fixed Single Clean Poster Thumbnail in Portrait */
#itemDetailPage .detailPagePrimaryContainer > .detailImageContainer,
.layout-mobile #itemDetailPage .detailPagePrimaryContainer > .detailImageContainer {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
position: relative !important;
width: 110px !important;
min-width: 110px !important;
max-width: 110px !important;
height: 165px !important;
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
flex: 0 0 110px !important;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.75) !important;
border: 1px solid rgba(255, 255, 255, 0.14) !important;
}
/* STRICTLY ELIMINATE ANY DUPLICATE / GHOST POSTER */
#itemDetailPage .detailRibbon .detailImageContainer,
#itemDetailPage .detailImageContainer ~ .detailImageContainer,
#itemDetailPage .detailImageContainer:nth-of-type(n+2),
#itemDetailPage .detailLogo,
.layout-mobile #itemDetailPage .detailLogo {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
pointer-events: none !important;
}
#itemDetailPage .detailImageContainer .card,
.layout-mobile #itemDetailPage .detailImageContainer .card,
#itemDetailPage .detailImageContainer .cardScalable {
width: 100% !important;
height: 100% !important;
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
overflow: hidden !important;
margin: 0 !important;
position: relative !important;
top: 0 !important;
left: 0 !important;
}
#itemDetailPage .detailImageContainer .cardPadder {
display: none !important;
}
#itemDetailPage .detailRibbon,
.layout-mobile #itemDetailPage .detailRibbon {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
justify-content: flex-start !important;
flex: 1 1 calc(100% - 136px) !important;
min-width: 0 !important;
gap: 4px !important;
margin: 0 !important;
padding: 0 !important;
background: transparent !important;
}
#itemDetailPage .infoWrapper,
.layout-mobile #itemDetailPage .infoWrapper {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
justify-content: flex-start !important;
width: 100% !important;
gap: 3px !important;
margin: 0 !important;
padding: 0 !important;
}
#itemDetailPage .nameContainer,
.layout-mobile #itemDetailPage .nameContainer {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
justify-content: flex-start !important;
gap: 2px !important;
width: 100% !important;
max-width: 100% !important;
margin: 0 0 4px 0 !important;
}
#itemDetailPage .itemName,
.layout-mobile #itemDetailPage .itemName,
#itemDetailPage h1.itemName,
#itemDetailPage .itemName.hide,
#itemDetailPage .nameContainer,
#itemDetailPage .nameContainer.hide {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
width: 100% !important;
max-width: 100% !important;
font-size: 1.45rem !important;
font-weight: 700 !important;
line-height: 1.25 !important;
color: #ffffff !important;
white-space: normal !important;
word-break: normal !important;
overflow-wrap: break-word !important;
letter-spacing: -0.01em !important;
margin: 0 !important;
padding: 0 !important;
text-align: left !important;
position: relative !important;
z-index: 10 !important;
}
#itemDetailPage .originalTitle,
#itemDetailPage .parentName,
#itemDetailPage .itemName.originalTitle,
#itemDetailPage .nameContainer > *:not(h1) {
font-size: 0.95rem !important;
font-weight: 500 !important;
color: rgba(255, 255, 255, 0.72) !important;
margin: 0 !important;
padding: 0 !important;
text-align: left !important;
}
#itemDetailPage .itemMiscInfo,
.layout-mobile #itemDetailPage .itemMiscInfo {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
flex-wrap: wrap !important;
gap: 8px !important;
width: 100% !important;
margin: 2px 0 6px 0 !important;
color: rgba(255, 255, 255, 0.72) !important;
font-size: 0.85rem !important;
}
#itemDetailPage .mainDetailButtons,
.layout-mobile #itemDetailPage .mainDetailButtons {
position: relative !important;
bottom: auto !important;
left: auto !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
flex-wrap: nowrap !important;
gap: 12px !important;
margin: 8px 0 12px 0 !important;
width: 100% !important;
clear: both !important;
}
/* Media info and technical specs placed cleanly below buttons */
#itemDetailPage .detailSectionContent,
#itemDetailPage .mediaInfo,
#itemDetailPage .trackSelections,
#itemDetailPage .audioVideoInfo,
#itemDetailPage .mediaInfoStreamContainer {
position: relative !important;
display: block !important;
margin-top: 10px !important;
margin-bottom: 6px !important;
clear: both !important;
width: 100% !important;
}
/* Media stream info & technical specs */
#itemDetailPage .detailSectionContent,
#itemDetailPage .mediaInfo,
#itemDetailPage .trackSelections,
#itemDetailPage .audioVideoInfo {
position: relative !important;
display: block !important;
margin-top: 10px !important;
margin-bottom: 8px !important;
clear: both !important;
width: 100% !important;
}
}
/* Universal Abyss Spotlight Hero Banner Iframe */
iframe.featurediframe {
width: 100% !important;
display: block !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
min-height: 520px !important;
height: 68vh !important;
max-height: 720px !important;
opacity: 1 !important;
visibility: visible !important;
}
@media (max-width: 768px) and (orientation: portrait) {
iframe.featurediframe {
height: 68vh !important;
min-height: 500px !important;
max-height: 640px !important;
}
}
@media (orientation: landscape) {
iframe.featurediframe {
height: 75vh !important;
min-height: 360px !important;
}
}
/* Suppress Cast, SyncPlay, Menu/Hamburger buttons */
button[aria-label="Menu"],
button[aria-label="menu"],
button:has(svg[data-testid="MenuIcon"]),
.claude-stepped-menu,
.mainDrawerButton,
.headerButtonMenu,
.headerSyncplayButton,
.btnSyncPlay,
.headerCastButton,
.btnCast,
button[data-action="cast"],
button[data-action="syncplay"],
button[title*="SyncPlay" i],
button[aria-label*="SyncPlay" i],
button[title*="Cast" i],
button[aria-label*="Cast" i],
button:has(svg[data-testid="CastIcon"]),
button:has(svg[data-testid="GroupIcon"]),
button:has(svg[data-testid="PeopleIcon"]),
.headerLeft,
.headerTabs.sectionTabs {
display: none !important;
visibility: hidden !important;
pointer-events: none !important;
width: 0 !important;
height: 0 !important;
opacity: 0 !important;
}
/* ========================================================
LANDSCAPE MOVIE DETAIL PAGE: 2-COLUMN NETFLIX/APPLE TV LAYOUT
======================================================== */
@media (orientation: landscape) {
#itemDetailPage {
background: #0c0d10 !important;
overflow-y: auto !important;
}
/* Completely hide detailLogo in all orientations to eliminate duplicate ghost posters */
#itemDetailPage .detailLogo,
.layout-mobile #itemDetailPage .detailLogo,
.layout-desktop #itemDetailPage .detailLogo,
.layout-tv #itemDetailPage .detailLogo {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
pointer-events: none !important;
}
#itemDetailPage .itemBackdrop,
.layout-mobile #itemDetailPage .itemBackdrop {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100vw !important;
height: 100vh !important;
opacity: 0.28 !important;
filter: blur(8px) brightness(0.7) !important;
-webkit-filter: blur(8px) brightness(0.7) !important;
pointer-events: none !important;
z-index: 0 !important;
background-size: cover !important;
background-position: center !important;
}
#itemDetailPage .detailPageWrapperContainer,
#itemDetailPage .detailPagePrimaryContainer {
position: relative !important;
z-index: 2 !important;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
padding: 0 !important;
margin: 0 !important;
}
#itemDetailPage .detailRibbon,
.layout-mobile #itemDetailPage .detailRibbon {
position: relative !important;
width: 100% !important;
box-sizing: border-box !important;
padding: 16px 24px 16px 185px !important;
min-height: 228px !important;
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
justify-content: flex-start !important;
gap: 6px !important;
background: transparent !important;
}
/* Fixed Left Column Poster (135px width, 2:3 ratio) */
#itemDetailPage .detailImageContainer,
.layout-mobile #itemDetailPage .detailImageContainer,
.layout-desktop #itemDetailPage .detailImageContainer,
.layout-tv #itemDetailPage .detailImageContainer {
position: absolute !important;
left: 28px !important;
top: 16px !important;
width: 135px !important;
max-width: 135px !important;
height: 202px !important;
min-width: 135px !important;
display: block !important;
visibility: visible !important;
z-index: 10 !important;
margin: 0 !important;
padding: 0 !important;
}
#itemDetailPage .detailImageContainer .card,
.layout-mobile #itemDetailPage .detailImageContainer .card {
width: 135px !important;
height: 202px !important;
max-width: 135px !important;
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
overflow: hidden !important;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.85) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
margin: 0 !important;
position: relative !important;
top: 0 !important;
left: 0 !important;
}
#itemDetailPage .detailImageContainer .cardScalable {
aspect-ratio: 2 / 3 !important;
border-radius: 12px !important;
width: 100% !important;
height: 100% !important;
}
#itemDetailPage .detailImageContainer .cardPadder {
display: none !important;
}
/* Right Column: Title, Metadata, Buttons Stacked Naturally */
#itemDetailPage .infoWrapper,
.layout-mobile #itemDetailPage .infoWrapper {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
width: 100% !important;
max-width: 100% !important;
margin: 0 !important;
padding: 0 !important;
gap: 4px !important;
}
#itemDetailPage .nameContainer,
.layout-mobile #itemDetailPage .nameContainer,
.layout-desktop #itemDetailPage .nameContainer,
.layout-tv #itemDetailPage .nameContainer {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
justify-content: flex-start !important;
width: 100% !important;
max-width: 100% !important;
gap: 2px !important;
margin: 0 0 4px 0 !important;
}
#itemDetailPage .originalTitle,
#itemDetailPage .parentName,
#itemDetailPage .itemName.originalTitle,
#itemDetailPage .nameContainer > *:not(h1) {
font-size: 1.1rem !important;
font-weight: 500 !important;
color: rgba(255, 255, 255, 0.75) !important;
margin: 2px 0 0 0 !important;
padding: 0 !important;
text-align: left !important;
}
#itemDetailPage .itemName,
.layout-mobile #itemDetailPage .itemName,
#itemDetailPage h1.itemName,
#itemDetailPage .itemName.hide,
#itemDetailPage .nameContainer,
#itemDetailPage .nameContainer.hide {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
font-size: 1.65rem !important;
font-weight: 700 !important;
line-height: 1.22 !important;
color: #ffffff !important;
margin: 0 !important;
padding: 0 !important;
white-space: normal !important;
word-break: normal !important;
overflow-wrap: break-word !important;
letter-spacing: -0.01em !important;
position: relative !important;
z-index: 10 !important;
}
#itemDetailPage .itemMiscInfo,
.layout-mobile #itemDetailPage .itemMiscInfo {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
flex-wrap: wrap !important;
gap: 10px !important;
color: rgba(255, 255, 255, 0.72) !important;
font-size: 0.9rem !important;
margin: 2px 0 6px 0 !important;
}
#itemDetailPage .mainDetailButtons,
.layout-mobile #itemDetailPage .mainDetailButtons {
position: relative !important;
bottom: auto !important;
left: auto !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
flex-wrap: nowrap !important;
gap: 12px !important;
margin: 8px 0 0 0 !important;
width: 100% !important;
}
#itemDetailPage .detailPagePrimaryContent {
position: relative !important;
z-index: 2 !important;
padding-left: 28px !important;
padding-right: 28px !important;
padding-top: 12px !important;
box-sizing: border-box !important;
width: 100% !important;
}
}
/* Unified Button Styling Across Portrait & Landscape */
#itemDetailPage .mainDetailButtons .detailButton,
#itemDetailPage .mainDetailButtons .emby-button {
width: 44px !important;
height: 44px !important;
min-width: 44px !important;
max-width: 44px !important;
border-radius: 50% !important;
padding: 0 !important;
margin: 0 !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
text-align: center !important;
box-sizing: border-box !important;
}
#itemDetailPage .mainDetailButtons .detailButton-content {
display: flex !important;
align-items: center !important;
justify-content: center !important;
width: 100% !important;
height: 100% !important;
margin: 0 !important;
padding: 0 !important;
}
#itemDetailPage .mainDetailButtons .detailButton-text {
display: none !important;
}
#itemDetailPage .mainDetailButtons .material-icons,
#itemDetailPage .mainDetailButtons .detailButton-icon {
font-size: 22px !important;
width: 24px !important;
height: 24px !important;
line-height: 24px !important;
margin: 0 !important;
padding: 0 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
#itemDetailPage .btnPlay,
#itemDetailPage .btnReplay {
background: #ffffff !important;
color: #000000 !important;
border-radius: 50% !important;
width: 44px !important;
height: 44px !important;
min-width: 44px !important;
max-width: 44px !important;
padding: 0 !important;
margin: 0 !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
box-shadow: 0 4px 16px rgba(255, 255, 255, 0.2) !important;
border: none !important;
flex-shrink: 0 !important;
}
#itemDetailPage .btnPlay .material-icons,
#itemDetailPage .btnReplay .material-icons {
color: #000000 !important;
font-size: 24px !important;
width: 24px !important;
height: 24px !important;
line-height: 1 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
margin: 0 !important;
padding: 0 !important;
}
#itemDetailPage .btnPlayTrailer,
#itemDetailPage .btnFavorite,
#itemDetailPage .btnPlaystate,
#itemDetailPage .btnUserRating,
#itemDetailPage .btnMoreCommands,
#itemDetailPage .btnDownload {
width: 44px !important;
height: 44px !important;
min-width: 44px !important;
border-radius: 50% !important;
background: rgba(255, 255, 255, 0.12) !important;
backdrop-filter: blur(10px) !important;
-webkit-backdrop-filter: blur(10px) !important;
border: 1px solid rgba(255, 255, 255, 0.18) !important;
color: #ffffff !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
padding: 0 !important;
margin: 0 !important;
flex-shrink: 0 !important;
transition: transform 0.15s ease, background 0.15s ease !important;
}
/* ========================================================
VIDEO PLAYER OSD: CLEAN, UNIFIED LANDSCAPE CONTROLS
Fixes scattered playback buttons and misaligned bottom bar
======================================================== */
#videoOsdPage {
background: #000000 !important;
}
/* 1. Neutralize disruptive fixed positioning on btnPause */
.btnPause,
#videoOsdPage .btnPause {
position: static !important;
transform: none !important;
left: auto !important;
margin: 0 !important;
}
/* 2. Unified Centered Media Transport Cluster (Play, Pause, Rewind, Fast-Forward, Next, Prev) */
#videoOsdPage .videoOsdBottom .buttons > div[dir="ltr"] {
position: fixed !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 32px !important;
margin: 0 !important;
padding: 0 !important;
z-index: 100 !important;
pointer-events: auto !important;
}
#videoOsdPage .videoOsdBottom .btnPause {
width: 64px !important;
height: 64px !important;
min-width: 64px !important;
border-radius: 50% !important;
background: rgba(255, 255, 255, 0.22) !important;
backdrop-filter: blur(12px) !important;
-webkit-backdrop-filter: blur(12px) !important;
border: 1.5px solid rgba(255, 255, 255, 0.35) !important;
color: #ffffff !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) !important;
transition: transform 0.15s ease, background 0.15s ease !important;
}
#videoOsdPage .videoOsdBottom .btnPause:active {
transform: scale(0.92) !important;
background: rgba(255, 255, 255, 0.35) !important;
}
#videoOsdPage .videoOsdBottom .btnPause .material-icons {
font-size: 38px !important;
color: #ffffff !important;
}
#videoOsdPage .videoOsdBottom .btnRewind,
#videoOsdPage .videoOsdBottom .btnFastForward,
#videoOsdPage .videoOsdBottom .btnPreviousTrack,
#videoOsdPage .videoOsdBottom .btnNextTrack,
#videoOsdPage .videoOsdBottom .btnPreviousChapter,
#videoOsdPage .videoOsdBottom .btnNextChapter {
width: 48px !important;
height: 48px !important;
min-width: 48px !important;
border-radius: 50% !important;
background: rgba(0, 0, 0, 0.35) !important;
backdrop-filter: blur(8px) !important;
-webkit-backdrop-filter: blur(8px) !important;
color: #ffffff !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
padding: 0 !important;
}
#videoOsdPage .videoOsdBottom .btnRewind .material-icons,
#videoOsdPage .videoOsdBottom .btnFastForward .material-icons,
#videoOsdPage .videoOsdBottom .btnPreviousTrack .material-icons,
#videoOsdPage .videoOsdBottom .btnNextTrack .material-icons {
font-size: 30px !important;
color: #ffffff !important;
}
/* 3. Bottom Control Bar: Pinned, Clean, Gradient Backdrop */
#videoOsdPage .videoOsdBottom {
position: fixed !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
margin: 0 !important;
padding: 12px 28px 16px 28px !important;
background: linear-gradient(to top, rgba(0, 0, 0, 0.88) 0%, rgba(0, 0, 0, 0.4) 65%, transparent 100%) !important;
width: 100% !important;
box-sizing: border-box !important;
border-radius: 0 !important;
z-index: 50 !important;
}
#videoOsdPage .videoOsdBottom .osdControls {
background: transparent !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
border-radius: 0 !important;
width: 100% !important;
}
/* 4. Timeline Slider Row */
#videoOsdPage .flex.flex-direction-row.align-items-center {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 14px !important;
width: 100% !important;
margin-bottom: 6px !important;
}
#videoOsdPage .startTimeText,
#videoOsdPage .endTimeText {
color: rgba(255, 255, 255, 0.9) !important;
font-size: 13px !important;
font-weight: 500 !important;
min-width: 44px !important;
text-align: center !important;
}
#videoOsdPage .sliderContainer {
flex: 1 1 auto !important;
margin: 0 !important;
padding: 0 !important;
}
/* Perfect Center Alignment for Spinner and Play Button */
.docspinner,
.mdl-spinner.docspinner,
#videoOsdPage .docspinner {
position: fixed !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
margin: 0 !important;
pointer-events: none !important;
z-index: 1000 !important;
}
#videoOsdPage .videoOsdBottom .buttons > div[dir=ltr] .hide {
display: none !important;
width: 0 !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
}
/* 5. Bottom Icons Row (Audio, Subtitles, Settings, Pip, Fullscreen) - Spaced Evenly across Landscape */
#videoOsdPage .videoOsdBottom .buttons {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: space-between !important;
width: 100% !important;
padding-top: 4px !important;
position: relative !important;
box-sizing: border-box !important;
}
#videoOsdPage .btnFullscreen {
margin-left: 0 !important;
}
#videoOsdPage .videoOsdBottom .buttons button[is="paper-icon-button-light"] {
color: rgba(255, 255, 255, 0.88) !important;
padding: 8px !important;
}
#videoOsdPage .videoOsdBottom .buttons button[is="paper-icon-button-light"] .material-icons {
font-size: 24px !important;
}
/* Ensure page content never sits underneath the fixed apex topbar */
body:not(.hide-apex-topbar) #indexPage,
body:not(.hide-apex-topbar) .homePage,
body:not(.hide-apex-topbar) .pageTabContent,
body:not(.hide-apex-topbar) #moviesPage,
body:not(.hide-apex-topbar) #tvShowsPage,
body:not(.hide-apex-topbar) #showsPage,
body:not(.hide-apex-topbar) .libraryPage:not(#itemDetailPage) {
padding-top: 56px !important;
box-sizing: border-box !important;
}
/* ========================================================
CAST & CREW / PEOPLE SECTION - PROPER CARD PROPORTIONS
======================================================== */
#castContent,
#guestCastContent,
#peopleSection,
.peopleSection,
.peopleSection .itemsContainer,
.castSection .itemsContainer,
.emby-scroller:has(#castContent),
.emby-scroller:has(#guestCastContent),
div[data-category="people"],
div[data-category="cast"] {
display: flex !important;
flex-direction: row !important;
flex-wrap: nowrap !important;
overflow-x: auto !important;
overflow-y: hidden !important;
gap: 12px !important;
padding: 8px 14px 16px 14px !important;
box-sizing: border-box !important;
-webkit-overflow-scrolling: touch !important;
scroll-behavior: smooth !important;
width: 100% !important;
max-width: 100% !important;
}
#castContent .card,
#guestCastContent .card,
#peopleSection .card,
.peopleSection .card,
.castSection .card,
div[data-category="people"] .card,
div[data-category="cast"] .card,
.card[data-type="Person"],
.personCard {
width: 95px !important;
min-width: 95px !important;
max-width: 95px !important;
flex: 0 0 95px !important;
margin: 0 !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
text-align: center !important;
box-sizing: border-box !important;
}
#castContent .cardScalable,
#guestCastContent .cardScalable,
#peopleSection .cardScalable,
.peopleSection .cardScalable,
.castSection .cardScalable,
div[data-category="people"] .cardScalable,
div[data-category="cast"] .cardScalable,
.personCard .cardScalable {
width: 95px !important;
height: 130px !important;
aspect-ratio: 3 / 4 !important;
border-radius: 12px !important;
overflow: hidden !important;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
position: relative !important;
}
#castContent .cardImage,
#guestCastContent .cardImage,
.personCard .cardImage,
#castContent img,
#guestCastContent img,
.personCard img {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
border-radius: 12px !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
}
#castContent .cardText,
#guestCastContent .cardText,
.personCard .cardText {
width: 120px !important;
max-width: 120px !important;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
font-size: 0.85rem !important;
text-align: center !important;
margin-top: 4px !important;
}
/* ========================================================
CLEAN MEDIA CARDS & SLEEK COUNT BADGES (NO BOX-IN-BOX)
======================================================== */
#indexPage .card,
.libraryPage .card,
.itemsContainer .card,
.card[data-type="Movie"],
.card[data-type="Series"],
.card[data-type="Episode"] {
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
#indexPage .cardBox,
.libraryPage .cardBox,
.itemsContainer .cardBox,
.itemsContainer .visualCardBox,
.card[data-type="Movie"] .cardBox,
.card[data-type="Series"] .cardBox,
.card[data-type="Episode"] .cardBox {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
}
/* TV Series Unplayed Count Badge */
.countIndicator {
background: rgba(0, 0, 0, 0.82) !important;
color: #ffffff !important;
border: 1px solid rgba(255, 255, 255, 0.25) !important;
border-radius: 6px !important;
font-size: 0.72rem !important;
font-weight: 700 !important;
padding: 2px 6px !important;
min-width: 18px !important;
height: 18px !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6) !important;
}
/* ========================================================
APEX FALLBACK CARD POSTERS & MOBILE MULTI-COLUMN GRID
======================================================== */
.apex-fallback-art {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
opacity: 0 !important;
pointer-events: none !important;
}
/* Multi-column grid for Series & Movies in library and catalog views (no single-column rows) */
@media (max-width: 600px) and (orientation: portrait) {
.itemsContainer-vertical,
.itemsContainer-cards,
.libraryPage .itemsContainer,
#moviesPage .itemsContainer,
#tvShowsPage .itemsContainer {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) !important;
gap: 12px 10px !important;
padding: 8px 12px !important;
width: 100% !important;
box-sizing: border-box !important;
}
.itemsContainer-vertical > .card,
.itemsContainer-cards > .card,
.libraryPage .card {
width: 100% !important;
max-width: 100% !important;
margin: 0 !important;
}
}
@media (orientation: landscape) and (max-height: 500px) {
.itemsContainer-vertical,
.itemsContainer-cards,
.libraryPage .itemsContainer,
#moviesPage .itemsContainer,
#tvShowsPage .itemsContainer {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(115px, 1fr)) !important;
gap: 12px 10px !important;
padding: 8px 16px !important;
width: 100% !important;
box-sizing: border-box !important;
}
}
/* ========================================================
APEX DYNAMIC AMBIENT BACKDROP SYNCHRONIZATION
Full-screen dynamic blur synced with active Spotlight item
======================================================== */
#abyss-spotlight-backdrop {
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 0;
overflow: hidden;
opacity: 0;
transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1);
background-color: #050508;
}
html.abyss-spotlight-visible #abyss-spotlight-backdrop {
opacity: 1;
}
.abyss-spotlight-backdrop-layer {
position: absolute;
inset: -50px;
background-size: cover;
background-position: center top;
opacity: 0;
filter: blur(58px) saturate(165%) contrast(115%) brightness(40%);
transform: scale(1.15);
transition: opacity 1.1s cubic-bezier(0.16, 1, 0.3, 1), transform 1.5s cubic-bezier(0.16, 1, 0.3, 1);
will-change: opacity, transform;
}
.abyss-spotlight-backdrop-layer.is-active {
opacity: 1;
transform: scale(1.03);
}
/* Atmospheric contrast gradient: transparent at top, soft vignette downwards, anchoring into true black */
#abyss-spotlight-backdrop::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
to bottom,
rgba(5, 5, 8, 0.15) 0%,
rgba(5, 5, 8, 0.35) 25%,
rgba(5, 5, 8, 0.65) 55%,
rgba(5, 5, 8, 0.88) 80%,
#050508 100%
);
pointer-events: none;
}
/* Ensure background transparency pass-through on the home screen when spotlight is active */
html.abyss-spotlight-visible body,
html.abyss-spotlight-visible .backgroundContainer,
html.abyss-spotlight-visible #indexPage,
html.abyss-spotlight-visible .pageTabContent,
html.abyss-spotlight-visible .homeSectionsContainer,
html.abyss-spotlight-visible .mainAnimatedPages,
html.abyss-spotlight-visible .pageContainer {
background-color: transparent !important;
background: transparent !important;
}
html.abyss-spotlight-visible #indexPage,
html.abyss-spotlight-visible .homeSectionsContainer {
position: relative;
z-index: 1;
}
/* ========================================================
MODERN STREAMING UPGRADES: PURE ANDROID TV & STREAMING APP
======================================================== */
/* 1. Hide redundant "My Media" library folders row from Home feed */
#indexPage .verticalSection:has([data-type="CollectionFolder"]),
#indexPage .verticalSection:has([data-type="UserView"]),
#indexPage .verticalSection:has(.card[data-type="CollectionFolder"]),
#indexPage .verticalSection:has(.card[data-type="UserView"]),
#indexPage [data-category="views"],
#indexPage .section0 {
display: none !important;
visibility: hidden !important;
height: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
pointer-events: none !important;
}
/* 2. Modernized Catalog Action Toolbar (Replaces stark white buttons with frosted glass) */
.viewSettings,
.libraryViewNav {
display: flex !important;
align-items: center !important;
justify-content: flex-end !important;
gap: 8px !important;
padding: 8px 14px !important;
margin: 0 !important;
}
/* Suppress nonsensical Play All & Shuffle All on Movie and TV series catalog grids */
.libraryPage :is(.btnPlay, .btnShuffle, button[data-action="playall"], button[data-action="shuffleall"], button[data-action="play"], button[data-action="shuffle"]),
#moviesPage :is(.btnPlay, .btnShuffle, button[data-action="playall"], button[data-action="shuffleall"]),
#tvShowsPage :is(.btnPlay, .btnShuffle, button[data-action="playall"], button[data-action="shuffleall"]),
.viewSettings :is(.btnPlay, .btnShuffle, button[data-action="playall"], button[data-action="shuffleall"], button[data-action="play"], button[data-action="shuffle"]) {
display: none !important;
visibility: hidden !important;
width: 0 !important;
height: 0 !important;
padding: 0 !important;
margin: 0 !important;
pointer-events: none !important;
overflow: hidden !important;
}
/* Frosted glass icon buttons for filters, sort, view toggles, and paging */
.viewSettings button,
.viewSettings .paper-icon-button-light,
.libraryViewNav button,
.listPaging button {
background: rgba(255, 255, 255, 0.08) !important;
backdrop-filter: blur(14px) !important;
-webkit-backdrop-filter: blur(14px) !important;
border: 1px solid rgba(255, 255, 255, 0.12) !important;
color: rgba(255, 255, 255, 0.85) !important;
border-radius: 9999px !important;
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
.viewSettings button:hover,
.viewSettings button:focus-visible,
.libraryViewNav button:hover,
.libraryViewNav button:focus-visible {
background: rgba(255, 255, 255, 0.22) !important;
border-color: rgba(255, 255, 255, 0.35) !important;
color: #FFFFFF !important;
transform: scale(1.06) !important;
}
/* 3. Android TV Card Bento Focus & Hover Elevation */
.itemsContainer .card:focus-visible,
.itemsContainer .card:hover,
.itemsContainer-slider .card:focus-visible,
.itemsContainer-slider .card:hover {
transform: scale(1.04) translateY(-2px) !important;
z-index: 10 !important;
transition: transform 0.24s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.24s cubic-bezier(0.16, 1, 0.3, 1) !important;
}
.itemsContainer .card:focus-visible .cardScalable,
.itemsContainer .card:hover .cardScalable,
.itemsContainer-slider .card:focus-visible .cardScalable,
.itemsContainer-slider .card:hover .cardScalable {
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.85), 0 0 0 1.5px rgba(255, 255, 255, 0.35) !important;
}
/* 4. Streaming Typography: Multi-line clean title clamp instead of abrupt cutoffs */
.cardText-first {
font-weight: 600 !important;
font-size: 0.88rem !important;
line-height: 1.25 !important;
color: #EDEDED !important;
display: -webkit-box !important;
-webkit-line-clamp: 2 !important;
-webkit-box-orient: vertical !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: normal !important;
max-height: 2.5em !important;
margin-top: 6px !important;
}
.cardText-secondary {
font-size: 0.78rem !important;
color: rgba(255, 255, 255, 0.55) !important;
font-weight: 500 !important;
margin-top: 2px !important;
}
/* Section titles with modern streaming hierarchy */
.sectionTitle {
font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
font-weight: 700 !important;
letter-spacing: -0.01em !important;
font-size: 1.18rem !important;
color: #FFFFFF !important;
margin: 18px 0 10px 0 !important;
display: inline-flex !important;
align-items: center !important;
}
.sectionTitleTextButton > .material-icons {
color: rgba(255, 255, 255, 0.45) !important;
font-size: 1.15rem !important;
margin-left: 4px !important;
transition: transform 0.2s ease, color 0.2s ease !important;
}
.sectionTitleTextButton:hover > .material-icons {
color: #FFFFFF !important;
transform: translateX(3px) !important;
}