Spaces:
Running
Running
Hermes Agent
feat: modern streaming upgrades - 16:9 landscape continue watching rails, hide my media row, frosted glass catalog toolbar
23463b4 Download apex/ui/abyss.css from Jishnupg/FileToLink: direct link, hf CLI and curl.
- Browser
- Download file 166 kB
-
https://huggingface.co/spaces/Jishnupg/FileToLink/resolve/main/apex/ui/abyss.css
- Command line
-
hf download hf://spaces/Jishnupg/FileToLink/apex/ui/abyss.css
-
curl -L -o abyss.css https://huggingface.co/spaces/Jishnupg/FileToLink/resolve/main/apex/ui/abyss.css
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 ; | |
| visibility: hidden ; | |
| pointer-events: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| opacity: 0 ; | |
| position: absolute ; | |
| overflow: hidden ; | |
| } | |
| /* 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' ; | |
| 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' ; | |
| 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 ; | |
| } | |
| ::-webkit-scrollbar-track-piece { | |
| background-color: #0000; | |
| } | |
| ::-webkit-scrollbar-corner { | |
| background-color: #0000; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: rgba(var(--abyss-accent), 0.8) ; | |
| 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) ; | |
| 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) ; | |
| 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) ; | |
| } | |
| .taskProgressOuter { | |
| background: rgba(0, 0, 0, 0.5) ; | |
| border: 1px solid rgba(var(--abyss-accent), 0.22); | |
| } | |
| .taskProgressInner, | |
| #videoOsdPage .sliderMarker.watched { | |
| background: rgba(var(--abyss-accent), 1) ; | |
| } | |
| #videoOsdPage .sliderMarker.unwatched { | |
| background: hsl(0deg 0% 30%) ; | |
| } | |
| .mdl-slider-background-flex { | |
| background: hsl(0deg 0% 30%) ; | |
| } | |
| #divRunningTasks span { | |
| color: rgba(var(--abyss-accent), 0.75) ; | |
| } | |
| #scheduledTasksPage span { | |
| color: rgba(var(--abyss-accent), 0.75) ; | |
| } | |
| /* 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) ; | |
| } | |
| 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) ; | |
| } | |
| 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 ; | |
| visibility: hidden ; | |
| height: 0 ; | |
| width: 0 ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| overflow: hidden ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| .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 ; | |
| } | |
| #tvRecommendedPage .pageTitle, | |
| #moviesPage .pageTitle, | |
| #musicRecommendedPage .pageTitle, | |
| #itemDetailPage .pageTitle { | |
| display: none ; | |
| } | |
| #videoOsdPage .pageTitle { | |
| display: flex ; | |
| } | |
| .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 ; | |
| } | |
| #favoritesTab .sectionTitle, | |
| .homeSectionsContainer .sectionTitle { | |
| margin-left: .4em ; | |
| margin-top: .2em ; | |
| margin-bottom: .2em ; | |
| } | |
| .sectionTitleTextButton>.material-icons { | |
| margin: 0; | |
| } | |
| .sectionTitleTextButton:not(.padded-left) { | |
| padding: 4px 12px 6px 6px ; | |
| margin-left: -6px ; | |
| 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 ; | |
| font-weight: 600; | |
| font-size: larger ; | |
| opacity: 1 ; | |
| } | |
| .cardTextCentered, | |
| .cardTextCentered>.textActionButton { | |
| text-align: left ; | |
| } | |
| .itemName { | |
| margin: .5em 0 ; | |
| } | |
| .starIcon { | |
| color: rgba(var(--abyss-accent), .8); | |
| } | |
| .dialog { | |
| font-weight: 500; | |
| } | |
| .formDialogHeaderTitle { | |
| font-weight: bold ; | |
| margin-left: 0 ; | |
| } | |
| #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 ; | |
| } | |
| .skinHeader { | |
| background-color: transparent; | |
| display: flex ; | |
| justify-items: center ; | |
| align-self: center ; | |
| justify-content: center ; | |
| } | |
| .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 ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| pointer-events: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| opacity: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| .alphaPicker .alphaPickerInner, | |
| .alphaPicker-fixed-right .alphaPickerInner, | |
| .alphaPicker-fixed-right .MuiPaper-root, | |
| div[class*="alphaPicker"] .MuiPaper-root, | |
| div[class*="alphaPickerInner"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| border: none ; | |
| border-radius: 0 ; | |
| -webkit-backdrop-filter: none ; | |
| backdrop-filter: none ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| width: 100% ; | |
| height: 100% ; | |
| max-height: 100% ; | |
| box-sizing: border-box ; | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| } | |
| /* Exclude # symbol completely - alphabets only */ | |
| .alphaPickerButton[data-value="#"], | |
| .alphaPickerButton[data-letter="#"], | |
| .alphaPickerButton[data-item="#"], | |
| .alphaPickerRow[data-prefix="#"], | |
| .alphaPickerRow[data-item="#"], | |
| .hide-hash { | |
| display: none ; | |
| } | |
| .alphaPickerButton, | |
| .alphaPickerRow, | |
| .alphaPicker-fixed-right .MuiButtonBase-root, | |
| .alphaPicker-fixed-right .MuiPaper-root .MuiButtonBase-root, | |
| div[class*="alphaPicker"] button, | |
| div[class*="alphaPickerButton"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| border: none ; | |
| border-radius: 0 ; | |
| -webkit-backdrop-filter: none ; | |
| backdrop-filter: none ; | |
| color: rgba(255, 255, 255, 0.42) ; | |
| font-size: 10px ; | |
| font-weight: 600 ; | |
| font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Inter", "Segoe UI", Roboto, sans-serif ; | |
| line-height: 1 ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| width: 18px ; | |
| min-width: 0 ; | |
| height: auto ; | |
| min-height: 0 ; | |
| flex: 1 1 0% ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9) ; | |
| transform: none ; | |
| transition: color 0.12s ease ; | |
| touch-action: none ; | |
| cursor: pointer ; | |
| } | |
| /* 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 ; | |
| background-color: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| border: none ; | |
| border-radius: 0 ; | |
| transform: none ; | |
| color: #ffffff ; | |
| font-weight: 800 ; | |
| text-shadow: 0 0 6px rgba(255, 255, 255, 0.95), 0 1px 2px #000000 ; | |
| } | |
| #alpha-scrubber-hud { | |
| display: none ; | |
| } | |
| .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 ; | |
| padding: 0.56rem ; | |
| } | |
| /*Counter Chip*/ | |
| header.MuiAppBar-root>.MuiToolbar-root:nth-child(2)>.MuiBox-root>.MuiChip-root { | |
| font-family: "Google Sans", sans-serif ; | |
| font-size: medium; | |
| font-weight: 500; | |
| padding: 0.75rem 0; | |
| height: auto; | |
| background-color: transparent ; | |
| color: rgba(var(--abyss-accent), 0.78); | |
| border-radius: var(--abyss-radius) ; | |
| 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 ; | |
| } | |
| html[data-theme="dark"] header.MuiAppBar-root { | |
| color: rgb(var(--abyss-accent)); | |
| background-color: transparent ; | |
| background: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| --Paper-shadow: none; | |
| --Paper-overlay: none; | |
| } | |
| html[data-theme="dark"] header.MuiAppBar-root { | |
| background: transparent ; | |
| overflow: visible; | |
| } | |
| html[data-theme="dark"] .MuiButton-icon img[src*="icon-transparent"] { | |
| max-height: 0.85em ; | |
| max-width: 0.85em ; | |
| 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 ; | |
| } | |
| 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)) ; | |
| backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| 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) ; | |
| 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) ; | |
| background: transparent ; | |
| -webkit-backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| } | |
| html[data-theme="dark"] header.MuiAppBar-root .MuiButtonBase-root.MuiIconButton-root:has(.MuiAvatar-root) { | |
| border-radius: 50px ; | |
| padding: 0 ; | |
| 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 ; | |
| } | |
| 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 ; | |
| } | |
| 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 ; | |
| border-bottom-left-radius: 50px ; | |
| } | |
| .MuiButtonGroup-root .MuiButtonGroup-lastButton { | |
| border-top-right-radius: 50px ; | |
| border-bottom-right-radius: 50px ; | |
| } | |
| 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 ; | |
| max-width: 24px ; | |
| 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 ; | |
| margin-bottom: 2px ; | |
| border-radius: 12px ; | |
| 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)) ; | |
| 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 ; | |
| } | |
| 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 ; | |
| background-image: none ; | |
| 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 ; | |
| } | |
| /* 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 ; | |
| border-radius: 50px ; | |
| padding: 10px ; | |
| } | |
| [dir=ltr] .navMenuOption { | |
| padding: 0.5em 0.9em ; | |
| margin-bottom: 2px ; | |
| border-radius: 12px ; | |
| } | |
| .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 ; | |
| display: inherit; | |
| } | |
| .layout-tv .detailRibbon, | |
| .layout-desktop .detailRibbon { | |
| background: rgba(0, 0, 0, .2) ; | |
| margin-top: 0; | |
| padding-top: .5em; | |
| padding-bottom: .5em; | |
| } | |
| .itemBackdrop::after { | |
| background: rgba(0, 0, 0, .5) ; | |
| } | |
| #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%) ; | |
| background-color: #0d0d16 ; | |
| } | |
| /* 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 ; | |
| max-width: 140px ; | |
| min-width: 140px ; | |
| flex: 0 0 140px ; | |
| border-radius: 14px ; | |
| background: linear-gradient(135deg, #181824 0%, #0d0d14 100%) ; | |
| border: 1px solid rgba(255, 255, 255, 0.12) ; | |
| overflow: hidden ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.6) ; | |
| } | |
| .card[data-type="CollectionFolder"] .cardPadder, | |
| .card[data-type="UserView"] .cardPadder, | |
| [data-category="views"] .cardPadder, | |
| .section0 .cardPadder, | |
| .apex-library-card .cardPadder { | |
| padding-bottom: 150% ; | |
| aspect-ratio: 2 / 3 ; | |
| height: 0 ; | |
| } | |
| .card[data-type="CollectionFolder"] .cardScalable, | |
| .card[data-type="UserView"] .cardScalable, | |
| [data-category="views"] .cardScalable, | |
| .section0 .cardScalable, | |
| .apex-library-card .cardScalable { | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| } | |
| @media (orientation: landscape) { | |
| .card[data-type="CollectionFolder"], | |
| .card[data-type="UserView"], | |
| [data-category="views"] .card, | |
| .section0 .card, | |
| .apex-library-card { | |
| width: 130px ; | |
| max-width: 130px ; | |
| min-width: 130px ; | |
| flex: 0 0 130px ; | |
| } | |
| } | |
| .card[data-type="CollectionFolder"] .cardScalable::after, | |
| .apex-library-card .cardScalable::after { | |
| content: '' ; | |
| position: absolute ; | |
| inset: 0 ; | |
| 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%) ; | |
| pointer-events: none ; | |
| z-index: 2 ; | |
| } | |
| .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 ; | |
| color: #F5F5F5 ; | |
| font-weight: 700 ; | |
| font-size: 1rem ; | |
| text-shadow: 0 2px 10px rgba(0, 0, 0, 0.9) ; | |
| position: relative ; | |
| z-index: 3 ; | |
| } | |
| .homeSectionsContainer { | |
| padding: 0 7px ; | |
| } | |
| #indexPage:has(.featurediframe) #favoritesTab { | |
| margin-top: 7.5rem ; | |
| } | |
| /* Disable theme selectors - managed by Abyss */ | |
| .selectContainer:has(#selectTheme), | |
| .selectDashboardThemeContainer { | |
| cursor: not-allowed ; | |
| } | |
| /* 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 ; | |
| } | |
| .selectContainer:has(#selectTheme option[value="dark"]:checked) #selectTheme, | |
| .selectContainer:has(#selectDashboardTheme option[value="dark"]:checked) #selectDashboardTheme { | |
| pointer-events: none ; | |
| opacity: 0.4 ; | |
| } | |
| .selectContainer:has(#selectTheme option[value="dark"]:checked) #selectTheme+.selectArrow, | |
| .selectContainer:has(#selectDashboardTheme option[value="dark"]:checked) #selectDashboardTheme+.selectArrow { | |
| opacity: 0.4 ; | |
| } | |
| 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 ; | |
| } | |
| 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 ; | |
| } | |
| 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 ; | |
| } | |
| /* 6. COMPONENTS */ | |
| /* Buttons & Interactive */ | |
| .raised, | |
| .fab, | |
| a[data-role="button"] { | |
| background: rgba(40, 40, 40, 0.8) ; | |
| 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) ; | |
| } | |
| .raised:hover, | |
| .fab:hover, | |
| a[data-role="button"]:hover { | |
| background: rgba(var(--abyss-accent), 0.5) ; | |
| } | |
| .raised:hover, | |
| .fab:hover, | |
| .navMenuOption:hover, | |
| .listItem:hover, | |
| .actionSheetMenuItem:hover { | |
| background: rgb(var(--abyss-accent)) ; | |
| color: #121212; | |
| font-weight: 700; | |
| } | |
| .listItem-content:hover { | |
| color: #121212; | |
| } | |
| .actionSheetMenuItem { | |
| border-radius: var(--abyss-radius) ; | |
| } | |
| .actionSheetContent { | |
| padding: .7em .6em ; | |
| } | |
| .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) ; | |
| } | |
| .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)) ; | |
| color: #121212 ; | |
| border-radius: 50px; | |
| } | |
| .emby-tab-button-active:hover { | |
| color: #121212 ; | |
| } | |
| .button-flat:hover { | |
| background: rgba(0, 0, 0, 0.4); | |
| color: rgb(var(--abyss-accent)) ; | |
| } | |
| .detailButton { | |
| border-radius: var(--abyss-radius); | |
| max-width: 15vw ; | |
| } | |
| .button-submit { | |
| position: sticky; | |
| bottom: 24px; | |
| margin-top: 48px ; | |
| 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 ; | |
| 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)) ; | |
| font-weight: 500; | |
| font-family: "Google Sans", sans-serif; | |
| border: solid 1px rgba(245, 245, 247, 0.2) ; | |
| } | |
| html[data-theme="dark"] #displayPreferencesPage form button[type="submit"].MuiButton-root:hover { | |
| font-weight: 700; | |
| color: #121212 ; | |
| background-color: rgba(var(--abyss-accent), 0.88) ; | |
| } | |
| /* 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) ; | |
| } | |
| /* Theme user setting tab buttons */ | |
| div[data-role="controlgroup"] a.ui-btn-active { | |
| background: rgba(0, 0, 0, 0.5) ; | |
| color: white ; | |
| } | |
| div[data-role="controlgroup"] a[data-role="button"] { | |
| display: table-cell ; | |
| margin: 0 ; | |
| } | |
| /* Home Library Buttons */ | |
| .homeLibraryButton { | |
| min-width: 12em; | |
| margin: 0.4em; | |
| width: auto ; | |
| } | |
| .raised.homeLibraryButton { | |
| background: rgba(0, 0, 0, 0.3) ; | |
| 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) ; | |
| } | |
| .raised.homeLibraryButton:hover { | |
| background: rgba(0, 0, 0, 0.5) ; | |
| } | |
| /* Dialogs & Overlays */ | |
| .playerStats-stats, | |
| .upNextContainer, | |
| .dialog, | |
| .toast { | |
| border-radius: 24px ; | |
| } | |
| .iconOsd { | |
| right: 24px; | |
| top: 8.5%; | |
| border-radius: 18px ; | |
| } | |
| .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 ; | |
| } | |
| .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 ; | |
| } | |
| .cardOverlayContainer { | |
| border-radius: var(--abyss-radius) ; | |
| border: solid 1px rgba(var(--abyss-accent), 0.0) ; | |
| transition: border-color 0.15s var(--abyss-ease) ; | |
| } | |
| .button-submit, | |
| .cardOverlayContainer:hover, | |
| .dialog, | |
| .toast, | |
| .upNextContainer, | |
| .playerStats-stats, | |
| .raised.homeLibraryButton:hover { | |
| border: solid 1px rgba(245, 245, 247, 0.2) ; | |
| } | |
| .cardPadder { | |
| background-color: #0000 ; | |
| box-shadow: none ; | |
| border-radius: var(--abyss-radius) ; | |
| } | |
| .card.show-animation:focus>.cardBox { | |
| -webkit-transform: scale(1.1); | |
| transform: scale(1.1); | |
| transition: transform 0.37s var(--abyss-ease) ; | |
| } | |
| /* 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 ; | |
| padding: 4px; | |
| font-weight: bolder; | |
| } | |
| .playedIndicator { | |
| background: rgb(var(--abyss-accent)); | |
| box-shadow: none; | |
| border-radius: 10px ; | |
| 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 ; | |
| height: 100% ; | |
| box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) ; | |
| } | |
| .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)) ; | |
| border-width: .35em; | |
| } | |
| .progressring { | |
| margin: .4em; | |
| } | |
| .progressring-bg { | |
| display: none; | |
| } | |
| /* Lists */ | |
| .listItem { | |
| padding-left: 1em; | |
| margin-bottom: 2px ; | |
| } | |
| .listItem bdi:first-of-type { | |
| font-weight: 500; | |
| font-variation-settings: "wght" 500; | |
| transition: color 0.3s ease; | |
| } | |
| .listItem bdi p { | |
| font-weight: 400 ; | |
| font-variation-settings: "wght" 400 ; | |
| } | |
| .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 ; | |
| font-variation-settings: "wght" 400 ; | |
| } | |
| .listItem-border { | |
| border-color: rgba(var(--abyss-accent), 0) ; | |
| } | |
| .listItemIcon { | |
| background: #0000 ; | |
| border-radius: var(--abyss-radius) ; | |
| } | |
| .listItem-indexnumberleft { | |
| margin: 1em; | |
| } | |
| .listItemImageButton { | |
| margin: auto; | |
| font-size: 1.6em ; | |
| border-radius: var(--abyss-radius) ; | |
| } | |
| .listItemImageButton-icon { | |
| padding: 0; | |
| } | |
| .listItemImageButton:hover { | |
| color: rgb(var(--abyss-accent)); | |
| } | |
| .secondary.listItem-overview.listItemBodyText { | |
| height: unset ; | |
| 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 ; | |
| } | |
| .listItem:hover, | |
| .listItem:hover .listItemBodyText { | |
| color: #121212 ; | |
| } | |
| .listItem:hover .material-icons, | |
| .listItem:hover .listItemImageButton { | |
| color: #121212 ; | |
| } | |
| .listItem:hover .countIndicator, | |
| .listItem:hover .playedIndicator { | |
| background: rgba(0, 0, 0, 0.15); | |
| color: #121212 ; | |
| } | |
| .listItem:hover .itemProgressBarForeground { | |
| background: #E50914 ; | |
| height: 100% ; | |
| box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) ; | |
| } | |
| .listItem:hover .itemProgressBar { | |
| background: rgba(18, 18, 18, 0.2) ; | |
| } | |
| .listItem:hover .ratingbutton-icon-withrating { | |
| color: rgb(249, 38, 114) ; | |
| } | |
| .listItem:hover .listItemImageButton-icon { | |
| color: rgba(255, 255, 255, 0.9) ; | |
| } | |
| /* Form Inputs */ | |
| #homeScreenPreferencesPage, | |
| #languagePreferencesPage { | |
| & form { | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| } | |
| & .button-submit { | |
| width: 97%; | |
| align-self: center ; | |
| } | |
| } | |
| #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) ; | |
| 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)) ; | |
| border-color: rgb(var(--abyss-accent)) ; | |
| } | |
| .checkboxIcon { | |
| color: #121212 ; | |
| } | |
| input[type="checkbox"]:focus~.checkboxOutline, | |
| input[type="checkbox"]:focus+.checkboxOutline { | |
| outline: 2px solid rgba(var(--abyss-accent), 0.4) ; | |
| 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 ; | |
| } | |
| /* Sync Play */ | |
| .syncPlayIconCircle { | |
| color: rgb(var(--abyss-accent)) ; | |
| text-shadow: none ; | |
| } | |
| /* Subtitle Preview */ | |
| .subtitleappearance-preview { | |
| background: linear-gradient(140deg, rgb(var(--abyss-accent)), #111) ; | |
| } | |
| .subtitleappearance-preview #sliderVertical { | |
| margin: 24px ; | |
| } | |
| .subtitle { | |
| padding-left: 0 ; | |
| } | |
| /* 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) ; | |
| } | |
| .settingsContainer .MuiStack-root .MuiStack-root .MuiStack-root { | |
| border-radius: 12px ; | |
| padding: 0 ; | |
| background-color: transparent ; | |
| box-shadow: none ; | |
| border: none ; | |
| margin: 8px ; | |
| } | |
| .homeScreenSettingsContainer .verticalSection-extrabottompadding .verticalSection { | |
| padding: 0 ; | |
| border-radius: 0; | |
| background: none ; | |
| box-shadow: none; | |
| border: none ; | |
| } | |
| .homeScreenSettingsContainer .perLibrarySettings { | |
| margin-bottom: 36px ; | |
| } | |
| .homeScreenSettingsContainer .paperList { | |
| padding: 12px; | |
| background-color: rgba(var(--abyss-glass-tint), 0.69); | |
| border-radius: 24px ; | |
| box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); | |
| margin: 0 ; | |
| } | |
| .readOnlyContent .adminSection { | |
| border-radius: 32px 32px 6px 6px ; | |
| margin-bottom: 12px ; | |
| } | |
| .readOnlyContent .userSection { | |
| border-radius: 6px 6px 32px 32px ; | |
| } | |
| .readOnlyContent .userSection .sectionTitle { | |
| padding-top: 0 ; | |
| } | |
| #userProfilePage .readOnlyContent { | |
| padding: 0 ; | |
| } | |
| #userProfilePage .readOnlyContent div { | |
| align-items: baseline ; | |
| margin-right: 12px ; | |
| } | |
| #image, | |
| #uploadImage { | |
| border-radius: 24px ; | |
| margin: 12px ; | |
| } | |
| #quickConnectPreferencesPage { | |
| justify-items: center; | |
| } | |
| .itemSelectionPanel { | |
| padding: 12px ; | |
| } | |
| .selectionCommandsPanel { | |
| padding: 1.5em 24px ; | |
| } | |
| .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 ; | |
| } | |
| .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 ; | |
| } | |
| /* 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) ; | |
| } | |
| .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 ; | |
| } | |
| #divVirtualFolders .cardImageContainer, | |
| #divVirtualFolders .cardContent { | |
| border-radius: var(--abyss-radius) var(--abyss-radius) 0 0 ; | |
| } | |
| #userProfilesPage .cardImage, | |
| #userProfilesPage .cardContent { | |
| border-radius: var(--abyss-radius) var(--abyss-radius) 0 0 ; | |
| } | |
| [dir=ltr] .emby-select, | |
| #inputTextColor, | |
| .checkboxOutline { | |
| border-radius: 8px ; | |
| } | |
| .dialog-fullscreen { | |
| border-radius: 8px ; | |
| } | |
| .upNextContainer, | |
| .playerStats, | |
| .playerStats-stats { | |
| border-radius: 24px ; | |
| } | |
| .detailImageContainer .cardImageContainer, | |
| .detailImageContainer .card { | |
| border-radius: 24px ; | |
| } | |
| /* 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 ; | |
| margin-top: 0.2em ; | |
| padding-left: 0.5em ; | |
| padding-right: 0.5em ; | |
| } | |
| .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 ; | |
| margin: 24px ; | |
| border-radius: 24px; | |
| background: none ; | |
| } | |
| .osdTimeText { | |
| margin-left: 0 ; | |
| 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 ; | |
| } | |
| .sectionTitleTextButton:hover { | |
| color: transparent; | |
| } | |
| /* Progress bars on item pages */ | |
| #indexPage .innerCardFooterClear, | |
| .libraryPage .innerCardFooterClear, | |
| #itemDetailPage .innerCardFooterClear { | |
| background-color: transparent ; | |
| 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 ; | |
| height: 100% ; | |
| box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) ; | |
| } | |
| #indexPage .itemProgressBar, | |
| .libraryPage .itemProgressBar, | |
| #itemDetailPage .itemProgressBar { | |
| height: 7px; | |
| background: rgba(0, 0, 0, 0.4); | |
| margin: .5em .8em; | |
| } | |
| #itemDetailPage .detailButton { | |
| padding: 8px ; | |
| margin-right: 8px ; | |
| } | |
| #itemDetailPage .btnPlay { | |
| background: rgba(255, 255, 255, 0.95); | |
| color: #111; | |
| max-width: none ; | |
| } | |
| #itemDetailPage .btnPlay:hover { | |
| background: #fff; | |
| color: #111 ; | |
| transform: scale(1.03); | |
| box-shadow: 0 0 20px rgba(255, 255, 255, 0.25); | |
| } | |
| #itemDetailPage .btnPlay .detailButton-content { | |
| flex-direction: row ; | |
| } | |
| #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) ; | |
| color: rgba(255, 255, 255, 0.9); | |
| } | |
| #itemDetailPage .btnReplay:hover { | |
| background: rgba(255, 255, 255, 1); | |
| color: rgba(0, 0, 0, 0.9) ; | |
| 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) ; | |
| 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) ; | |
| transform: scale(1.05); | |
| } | |
| /* 11. LOGIN PAGE */ | |
| #loginPage { | |
| background-size: cover ; | |
| } | |
| #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) ; | |
| } | |
| #loginPage .raised.cancel.block.btnForgotPassword.emby-button:hover { | |
| color: rgb(var(--abyss-accent)) ; | |
| } | |
| .manualLoginForm { | |
| border-radius: 24px; | |
| box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); | |
| border: solid 1px rgba(245, 245, 247, 0.2) ; | |
| padding: 24px 12px 7px; | |
| margin-bottom: 24px; | |
| } | |
| /* 12. CAST THUMBNAILS (responsive sizing) */ | |
| .layout-desktop #castContent .card.overflowPortraitCard, | |
| .layout-desktop #guestCastContent .card.overflowPortraitCard { | |
| width: 10vw ; | |
| font-size: 90% ; | |
| } | |
| .layout-desktop #castContent .cardScalable, | |
| .layout-desktop #guestCastContent .cardScalable { | |
| width: calc(10vw - 0.6em) ; | |
| height: calc(14vw - 0.6em) ; | |
| } | |
| .layout-tablet #castContent .card.overflowPortraitCard, | |
| .layout-tablet #guestCastContent .card.overflowPortraitCard { | |
| width: 17vw ; | |
| font-size: 90% ; | |
| } | |
| .layout-tablet #castContent .cardScalable, | |
| .layout-tablet #guestCastContent .cardScalable { | |
| width: calc(17vw - 0.6em) ; | |
| height: calc(12vw - 0.6em) ; | |
| } | |
| .layout-mobile #castContent .card, | |
| .layout-mobile #guestCastContent .card { | |
| width: 95px ; | |
| min-width: 95px ; | |
| max-width: 95px ; | |
| flex: 0 0 95px ; | |
| font-size: 85% ; | |
| } | |
| .layout-mobile #castContent .cardScalable, | |
| .layout-mobile #guestCastContent .cardScalable { | |
| width: 95px ; | |
| height: 130px ; | |
| aspect-ratio: 3 / 4 ; | |
| } | |
| .layout-mobile .innerCardFooterClear { | |
| padding-right: 24px ; | |
| } | |
| .layout-mobile .noItemsMessage.centerMessage { | |
| font-size: 28px; | |
| } | |
| .layout-mobile .centerMessage { | |
| width: 90% ; | |
| } | |
| @media (orientation: landscape) and (max-height: 500px) { | |
| .layout-mobile #castContent .card, | |
| .layout-mobile #guestCastContent .card { | |
| width: 90px ; | |
| min-width: 90px ; | |
| max-width: 90px ; | |
| flex: 0 0 90px ; | |
| font-size: 85% ; | |
| } | |
| .layout-mobile #castContent .cardScalable, | |
| .layout-mobile #guestCastContent .cardScalable { | |
| width: 90px ; | |
| height: 120px ; | |
| aspect-ratio: 3 / 4 ; | |
| } | |
| .layout-mobile .innerCardFooterClear { | |
| padding-right: 24px ; | |
| } | |
| } | |
| /* 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 ; | |
| margin-left: 40vw ; | |
| width: 50vw ; | |
| } | |
| .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 ; | |
| border: 0.3em solid rgb(var(--abyss-accent)) ; | |
| transition: all 0.5s ; | |
| } | |
| .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 ; | |
| } | |
| .layout-tv .chapterThumbContainer { | |
| transform: scale(1.5) ; | |
| top: -72px ; | |
| } | |
| .emby-button.show-focus:focus, | |
| .headerButton.show-focus:focus, | |
| .actionSheetMenuItem.show-focus:focus { | |
| background: rgb(var(--abyss-accent)) ; | |
| color: #121212 ; | |
| } | |
| .headerButton.show-focus:focus, | |
| .raised.button-submit.emby-button.show-focus:focus { | |
| transform: scale(1.02) ; | |
| transition: transform 0.3s ; | |
| margin-top: .4em ; | |
| margin-bottom: .4em ; | |
| } | |
| .headerUserButton.show-focus:focus { | |
| transform: none ; | |
| } | |
| #itemDetailPage .emby-button.show-focus:focus { | |
| transform: scale(1.1) ; | |
| padding: 0 .4em; | |
| margin: .4em; | |
| border-radius: 10px; | |
| background: rgb(var(--abyss-accent)) ; | |
| color: #121212 ; | |
| } | |
| .emby-tab-button.show-focus { | |
| background: transparent; | |
| transform: none ; | |
| color: #999; | |
| } | |
| .emby-button.emby-tab-button.show-focus:focus { | |
| background: transparent ; | |
| transform: none ; | |
| border-color: rgb(var(--abyss-accent)); | |
| color: rgb(var(--abyss-accent)) ; | |
| } | |
| .emby-tab-button.show-focus:focus .emby-button-foreground { | |
| transform: scale(1.1) ; | |
| font-weight: 500; | |
| transition: 0.3s; | |
| } | |
| .emby-tab-button.show-focus:focus.emby-tab-button-active { | |
| background: rgb(var(--abyss-accent)) ; | |
| color: #121212 ; | |
| border-color: transparent ; | |
| border-radius: 50px; | |
| } | |
| .emby-select-withcolor { | |
| background: rgba(255, 255, 255, 0.12); | |
| border: 1px solid rgba(255, 255, 255, 0.2) ; | |
| 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)) ; | |
| color: #121212 ; | |
| padding: 4px ; | |
| } | |
| /* Desktop layout & TV*/ | |
| .layout-desktop #itemDetailPage .btnPlay, | |
| .layout-tv #itemDetailPage .btnPlay { | |
| margin-right: 12px ; | |
| padding: .4em 1.4em .4em 1em ; | |
| } | |
| .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 ; | |
| top: 15% ; | |
| } | |
| .layout-tv .detailPageSecondaryContainer.padded-left, | |
| .layout-desktop .detailPageSecondaryContainer.padded-left { | |
| padding-left: max(env(safe-area-inset-left), 32.45vw); | |
| } | |
| .withSectionTabs .headerTop { | |
| width: 100% ; | |
| align-self: center ; | |
| } | |
| @media (max-width: 100em) { | |
| .withSectionTabs .headerTop { | |
| padding-bottom: 0; | |
| } | |
| } | |
| @media all and (min-width: 75em) { | |
| .cardOverlayFab-primary { | |
| background-color: #00000000; | |
| } | |
| .cardOverlayButtonIcon { | |
| background-color: #00000000 ; | |
| } | |
| .cardOverlayContainer { | |
| background-color: rgba(0, 0, 0, 0.7); | |
| } | |
| .headerTabs.sectionTabs { | |
| display: none ; | |
| } | |
| } | |
| @media all and (max-width: 75em) { | |
| .cardOverlayFab-primary { | |
| background-color: #00000000; | |
| } | |
| .cardOverlayButtonIcon { | |
| background-color: #00000000 ; | |
| } | |
| .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% ; | |
| } | |
| } | |
| @media all and (max-width: 26em) { | |
| .homeLibraryButton { | |
| min-width: 45%; | |
| width: auto ; | |
| } | |
| .pageTitle { | |
| font-size: medium ; | |
| font-weight: 500; | |
| padding: 0 6px ; | |
| } | |
| .sectionTitle { | |
| font-size: 1.2em; | |
| font-weight: 500; | |
| } | |
| .headerLeft, | |
| .headerRight { | |
| padding: 0 12px; | |
| } | |
| .detailImageContainer .cardImageContainer, | |
| .detailImageContainer .card { | |
| border-radius: 12px ; | |
| } | |
| .emby-tab-button { | |
| padding: 0.4em 1.2em; | |
| } | |
| .paper-icon-button-light>.material-icons { | |
| font-size: 1.4em ; | |
| } | |
| .paper-icon-button-light { | |
| padding: 8px; | |
| } | |
| /* btnPause fixed neutralized */ | |
| } | |
| @media screen and (max-height: 26em) and (orientation: landscape) { | |
| .pageTitle { | |
| font-size: large ; | |
| } | |
| /* btnPause fixed landscape neutralized */ | |
| body:has(#indexPage.homePage:not(.hide)) .headerTabs.sectionTabs { | |
| display: none ; | |
| } | |
| } | |
| @media all and (min-width: 100em) { | |
| .button-flat { | |
| margin: .2em ; | |
| padding: .85em ; | |
| } | |
| .listItemImage.listItemImage-large.itemAction.lazy { | |
| height: 160px ; | |
| } | |
| .listItem-content { | |
| height: unset ; | |
| } | |
| } | |
| @media all and (max-width: 100em) { | |
| .mainDetailButtons { | |
| font-size: 155%; | |
| } | |
| .listItemImage.listItemImage-large.itemAction.lazy { | |
| height: 160px ; | |
| } | |
| .listItem-content { | |
| height: unset ; | |
| } | |
| .secondary.listItem-overview.listItemBodyText { | |
| height: unset ; | |
| margin: 0; | |
| } | |
| #indexPage .itemProgressBar, | |
| .libraryPage .itemProgressBar, | |
| #itemDetailPage .itemProgressBar { | |
| margin-right: .8em; | |
| } | |
| } | |
| @media (min-aspect-ratio: 1.98/1) { | |
| .detailImageContainer .card { | |
| width: 150px ; | |
| max-width: 150px ; | |
| } | |
| .detailRibbon { | |
| padding-left: 20px ; | |
| } | |
| .detailPagePrimaryContent, | |
| .layout-tv .detailPageSecondaryContainer.padded-left, | |
| .layout-desktop .detailPageSecondaryContainer.padded-left { | |
| padding-left: 0 ; | |
| } | |
| .detailPageContent { | |
| padding-left: 0 ; | |
| } | |
| } | |
| @media (min-aspect-ratio: 2.7/1) { | |
| .detailImageContainer .card { | |
| width: 150px ; | |
| max-width: 150px ; | |
| } | |
| .detailRibbon { | |
| padding-left: 20px ; | |
| } | |
| .detailPagePrimaryContent, | |
| .layout-tv .detailPageSecondaryContainer.padded-left, | |
| .layout-desktop .detailPageSecondaryContainer.padded-left { | |
| padding-left: 0 ; | |
| } | |
| .detailPageContent { | |
| padding-left: 0 ; | |
| } | |
| } | |
| /* 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)) ; | |
| backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| background-color: rgba(var(--abyss-glass-tint), 0.69) ; | |
| } | |
| .raised.cancel.block.btnForgotPassword.emby-button, | |
| .btnQuick, | |
| .pageTitle, | |
| .videoOsdBottom, | |
| .headerButton { | |
| -webkit-backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| backdrop-filter: blur(var(--abyss-glass-blur)) ; | |
| } | |
| .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) ; | |
| backdrop-filter: blur(4px); | |
| } | |
| } | |
| #indexPage .itemProgressBar, | |
| .libraryPage .itemProgressBar, | |
| #itemDetailPage .itemProgressBar { | |
| backdrop-filter: blur(4px); | |
| background: rgba(0, 0, 0, 0.35) ; | |
| } | |
| 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 ; | |
| 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 ; | |
| } | |
| .verticalSection.searchSuggestions .sectionTitle { | |
| display: none; | |
| } | |
| .verticalSection.searchSuggestions { | |
| text-align: left ; | |
| padding: 12px 0 0 0 ; | |
| 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 ; | |
| font-size: 36px; | |
| letter-spacing: 1.2px; | |
| opacity: 0.8; | |
| } | |
| .centerMessage { | |
| padding: 2em 0 ; | |
| } | |
| @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) ; | |
| } | |
| .mainDrawer { | |
| transition: transform 0.18s var(--abyss-ease-snappy) ; | |
| } | |
| /* 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 ; | |
| animation-duration: 0.01ms ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.01ms ; | |
| } | |
| } | |
| /* ========================================================================== | |
| 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 ; | |
| color: rgb(var(--abyss-accent)) ; | |
| font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif ; | |
| } | |
| /* 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 ; | |
| opacity: 0 ; | |
| } | |
| /* 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) ; | |
| backdrop-filter: blur(20px) ; | |
| -webkit-backdrop-filter: blur(20px) ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08) ; | |
| box-shadow: none ; | |
| } | |
| 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 ; | |
| left: auto ; | |
| transform: none ; | |
| } | |
| 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 ; | |
| margin-right: initial ; | |
| } | |
| /* 3. Natural Page & Content Alignment (Zero top blank space, Zero scroll offset) */ | |
| .pageWithSidebar { | |
| display: block ; | |
| } | |
| .pageWithSidebar .content-primary, | |
| .type-interior .content-primary, | |
| main.MuiBox-root, | |
| div[role="main"] { | |
| padding-top: 76px ; | |
| max-width: 1400px; | |
| box-sizing: border-box ; | |
| } | |
| /* 4. Pure Abyss Sidebar / Drawer (MUI & Legacy) */ | |
| .mainDrawer, | |
| .mainDrawer-scrollContainer, | |
| .MuiDrawer-docked, | |
| .MuiDrawer-paper { | |
| background-color: #111114 ; | |
| border-right: 1px solid rgba(255, 255, 255, 0.08) ; | |
| box-shadow: none ; | |
| color: rgba(var(--abyss-accent), 0.8) ; | |
| } | |
| /* Navigation items in sidebar (Frosted glass pills) */ | |
| .mainDrawer .navMenuOption, | |
| .MuiDrawer-paper .MuiListItemButton-root { | |
| border-radius: 50px ; | |
| margin: 4px 12px ; | |
| padding: 10px 18px ; | |
| color: rgba(var(--abyss-accent), 0.75) ; | |
| transition: all 0.2s var(--abyss-ease) ; | |
| font-family: "Google Sans", sans-serif ; | |
| font-weight: 500 ; | |
| } | |
| .mainDrawer .navMenuOption:hover, | |
| .MuiDrawer-paper .MuiListItemButton-root:hover { | |
| background-color: rgba(255, 255, 255, 0.08) ; | |
| color: #ffffff ; | |
| } | |
| .mainDrawer .navMenuOption-selected, | |
| .MuiDrawer-paper .MuiListItemButton-root.Mui-selected { | |
| background: rgba(255, 255, 255, 0.15) ; | |
| color: #ffffff ; | |
| font-weight: 700 ; | |
| backdrop-filter: blur(12px) ; | |
| border: 1px solid rgba(255, 255, 255, 0.15) ; | |
| } | |
| .mainDrawer .navMenuOptionIcon, | |
| .MuiDrawer-paper .MuiListItemIcon-root { | |
| background: transparent ; | |
| color: inherit ; | |
| padding: 0 ; | |
| min-width: 36px ; | |
| margin-right: 12px ; | |
| } | |
| .mainDrawer .sidebarHeader, | |
| .MuiDrawer-paper .MuiListSubheader-root { | |
| background: transparent ; | |
| color: rgba(var(--abyss-accent), 0.45) ; | |
| font-family: "Google Sans", sans-serif ; | |
| font-size: 0.78rem ; | |
| font-weight: 700 ; | |
| text-transform: uppercase ; | |
| letter-spacing: 0.08em ; | |
| padding-left: 24px ; | |
| margin: 16px 0 6px ; | |
| } | |
| /* 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) ; | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| border-radius: 16px ; | |
| backdrop-filter: blur(20px) ; | |
| -webkit-backdrop-filter: blur(20px) ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25) ; | |
| color: rgb(var(--abyss-accent)) ; | |
| } | |
| /* Section titles */ | |
| .type-interior .sectionTitle, | |
| .settingsContainer .sectionTitle, | |
| .MuiTypography-h4, | |
| .MuiTypography-h5, | |
| .MuiTypography-h6 { | |
| font-family: "Google Sans", sans-serif ; | |
| font-weight: 700 ; | |
| color: #ffffff ; | |
| } | |
| /* 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) ; | |
| border: 1px solid rgba(255, 255, 255, 0.12) ; | |
| border-radius: 16px ; | |
| backdrop-filter: blur(20px) ; | |
| -webkit-backdrop-filter: blur(20px) ; | |
| } | |
| /* 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) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| border-radius: 12px ; | |
| margin-bottom: 8px ; | |
| padding: 12px 16px ; | |
| transition: background 0.2s ease, border-color 0.2s ease ; | |
| } | |
| .MuiListItem-root:has(.MuiAvatar-root):hover, | |
| .type-interior .listItem:hover, | |
| .activityLogList .listItem:hover { | |
| background: rgba(255, 255, 255, 0.07) ; | |
| border-color: rgba(255, 255, 255, 0.12) ; | |
| } | |
| .MuiListItemAvatar-root .MuiAvatar-root, | |
| .MuiAvatar-root:has(svg), | |
| .activityLogList .listItemIcon, | |
| .type-interior .listItemIcon { | |
| background-color: rgba(255, 255, 255, 0.12) ; | |
| color: #ffffff ; | |
| border: 1px solid rgba(255, 255, 255, 0.15) ; | |
| border-radius: 50px ; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25) ; | |
| } | |
| /* 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) ; | |
| border: 1px solid rgba(255, 255, 255, 0.1) ; | |
| border-radius: 16px ; | |
| transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease ; | |
| } | |
| .MuiCard-root:has([data-testid*="MoreVert"]):hover, | |
| .type-interior .card.squareCard:hover { | |
| transform: translateY(-4px) ; | |
| border-color: rgba(255, 255, 255, 0.25) ; | |
| box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5) ; | |
| } | |
| /* 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) ; | |
| color: #0e0e11 ; | |
| border-radius: 50px ; | |
| font-family: "Google Sans", sans-serif ; | |
| font-weight: 600 ; | |
| padding: 0.6em 1.6em ; | |
| letter-spacing: 0.02em ; | |
| border: none ; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3) ; | |
| transition: transform 0.2s ease, background 0.2s ease, box-shadow 0.2s ease ; | |
| } | |
| .MuiButton-contained:hover, | |
| .type-interior button.raised:hover { | |
| transform: translateY(-2px) ; | |
| box-shadow: 0 4px 16px rgba(255, 255, 255, 0.2) ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| pointer-events: none ; | |
| opacity: 0 ; | |
| } | |
| /* Hidden duplicate cards */ | |
| .card.apex-duplicate-hidden { | |
| display: none ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| flex: 0 0 0 ; | |
| pointer-events: none ; | |
| overflow: hidden ; | |
| } | |
| /* 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) ; | |
| color: #ffffff ; | |
| border: 1px solid rgba(255, 255, 255, 0.2) ; | |
| border-radius: 50px ; | |
| font-weight: 600 ; | |
| } | |
| /* 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) ; | |
| color: #ff6b6b ; | |
| border: 1px solid rgba(235, 87, 87, 0.3) ; | |
| border-radius: 50px ; | |
| font-weight: 600 ; | |
| } | |
| /* Add / Fab button */ | |
| .MuiFab-root, | |
| .MuiButtonBase-root:has([data-testid*="Add"]) { | |
| background: rgba(255, 255, 255, 0.15) ; | |
| color: #ffffff ; | |
| border: 1px solid rgba(255, 255, 255, 0.2) ; | |
| border-radius: 50px ; | |
| transition: transform 0.2s ease, background 0.2s ease ; | |
| } | |
| .MuiFab-root:hover, | |
| .MuiButtonBase-root:has([data-testid*="Add"]):hover { | |
| background: rgba(255, 255, 255, 0.25) ; | |
| transform: scale(1.05) ; | |
| } | |
| /* 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 ; | |
| border-bottom: none ; | |
| content: none ; | |
| } | |
| .MuiFormControl-root { | |
| margin-bottom: 18px ; | |
| width: 100% ; | |
| } | |
| .MuiFilledInput-root, | |
| .MuiOutlinedInput-root, | |
| .emby-select, | |
| .emby-textarea { | |
| position: relative ; | |
| background-color: rgba(255, 255, 255, 0.04) ; | |
| border: 1px solid rgba(255, 255, 255, 0.12) ; | |
| border-radius: 14px ; | |
| color: #ffffff ; | |
| font-family: "Google Sans", sans-serif ; | |
| box-shadow: none ; | |
| transition: border-color 0.25s var(--abyss-ease), background-color 0.25s var(--abyss-ease), box-shadow 0.25s var(--abyss-ease) ; | |
| } | |
| .MuiFilledInput-root { | |
| padding: 24px 16px 8px 16px ; | |
| min-height: 56px ; | |
| box-sizing: border-box ; | |
| } | |
| .MuiFilledInput-root:hover, | |
| .MuiOutlinedInput-root:hover, | |
| .emby-select:hover, | |
| .emby-textarea:hover { | |
| background-color: rgba(255, 255, 255, 0.07) ; | |
| border-color: rgba(255, 255, 255, 0.22) ; | |
| } | |
| .MuiFilledInput-root.Mui-focused, | |
| .MuiOutlinedInput-root.Mui-focused, | |
| .emby-select:focus, | |
| .emby-textarea:focus { | |
| background-color: rgba(255, 255, 255, 0.08) ; | |
| border-color: rgba(255, 255, 255, 0.6) ; | |
| box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.1) ; | |
| outline: none ; | |
| } | |
| .MuiFilledInput-input, | |
| .MuiOutlinedInput-input { | |
| background: transparent ; | |
| border: none ; | |
| padding: 0 ; | |
| font-family: "Google Sans", sans-serif ; | |
| font-size: 0.95rem ; | |
| font-weight: 500 ; | |
| color: #ffffff ; | |
| height: auto ; | |
| line-height: 1.4 ; | |
| box-shadow: none ; | |
| } | |
| .MuiFormLabel-root, | |
| .MuiInputLabel-root { | |
| font-family: "Google Sans", sans-serif ; | |
| color: rgba(var(--abyss-accent), 0.55) ; | |
| font-size: 0.9rem ; | |
| pointer-events: none ; | |
| } | |
| .MuiInputLabel-filled { | |
| transform: translate(16px, 17px) scale(1) ; | |
| transform-origin: top left ; | |
| 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 ; | |
| } | |
| .MuiInputLabel-filled.MuiInputLabel-shrink { | |
| transform: translate(16px, 7px) scale(0.75) ; | |
| color: rgba(var(--abyss-accent), 0.75) ; | |
| font-weight: 600 ; | |
| } | |
| .MuiInputLabel-root.Mui-focused { | |
| color: #ffffff ; | |
| } | |
| .MuiFormHelperText-root { | |
| font-family: "Google Sans", sans-serif ; | |
| color: rgba(var(--abyss-accent), 0.48) ; | |
| font-size: 0.8rem ; | |
| line-height: 1.4 ; | |
| margin-top: 6px ; | |
| padding-left: 4px ; | |
| } | |
| .MuiCheckbox-root { | |
| color: rgba(var(--abyss-accent), 0.5) ; | |
| border-radius: 8px ; | |
| transition: color 0.2s ease, transform 0.2s ease ; | |
| } | |
| .MuiCheckbox-root.Mui-checked { | |
| color: #ffffff ; | |
| } | |
| .MuiFormControlLabel-label { | |
| font-family: "Google Sans", sans-serif ; | |
| font-size: 0.95rem ; | |
| font-weight: 500 ; | |
| color: rgb(var(--abyss-accent)) ; | |
| } | |
| .checkboxOutline { | |
| border-radius: 6px ; | |
| } | |
| .emby-toggle-button { | |
| border-radius: 50px ; | |
| } | |
| /* 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 ; | |
| } | |
| /* 12. Crisp Card & Image Rendering - True HD Smooth Filtering */ | |
| .cardImage, | |
| .cardContent, | |
| .cardImageContainer, | |
| .cardScalable, | |
| .cardPadder, | |
| .cardBox, | |
| .card-withdetails, | |
| .innerCardContainer { | |
| image-rendering: auto ; | |
| image-rendering: high-quality ; | |
| -webkit-backface-visibility: hidden; | |
| backface-visibility: hidden; | |
| transform: translateZ(0); | |
| } | |
| .backdropImage { | |
| image-rendering: auto ; | |
| image-rendering: high-quality ; | |
| } | |
| /* Ensure video player elements always render on top without backdrop interference */ | |
| #videoOsdPage, | |
| .videoPlayerContainer, | |
| .htmlvideoplayer { | |
| z-index: 99999 ; | |
| } | |
| body:has(#videoOsdPage) #abyss-spotlight-backdrop, | |
| body.videoPlayerContainerVisible #abyss-spotlight-backdrop { | |
| display: none ; | |
| } | |
| /* 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 ; | |
| -webkit-tap-highlight-color: transparent ; | |
| } | |
| /* 13. Android & Mobile Perfection */ | |
| @media (max-width: 959px) { | |
| :root { | |
| --abyss-glass-blur: 4px ; | |
| --abyss-backdrop-blur: 6px ; | |
| } | |
| .cardImageContainer .cardImage { | |
| background-size: cover ; | |
| background-position: center top ; | |
| image-rendering: -webkit-optimize-contrast ; | |
| } | |
| .card:active .cardScalable, | |
| .cardBox:active, | |
| .listItem:active, | |
| .emby-button:active { | |
| transform: scale(0.97) ; | |
| transition: transform 0.08s ease ; | |
| } | |
| .MuiDrawer-modal .MuiDrawer-paper, | |
| .mainDrawer { | |
| position: fixed ; | |
| top: 0 ; | |
| left: 0 ; | |
| bottom: 0 ; | |
| width: 280px ; | |
| max-width: 80vw ; | |
| background: rgba(17, 17, 21, 0.98) ; | |
| backdrop-filter: blur(12px) ; | |
| -webkit-backdrop-filter: blur(12px) ; | |
| border: none ; | |
| border-right: 1px solid rgba(255, 255, 255, 0.1) ; | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.7) ; | |
| z-index: 1300 ; | |
| } | |
| } | |
| @media (max-width: 600px) { | |
| button, | |
| .button-flat, | |
| .emby-button, | |
| .cardOverlayButton, | |
| .MuiIconButton-root, | |
| .MuiButton-root { | |
| min-height: 44px; | |
| min-width: 44px; | |
| } | |
| .skinHeader { | |
| padding: 8px 12px ; | |
| } | |
| .itemsContainer.padded-left.padded-right { | |
| padding-left: 12px ; | |
| padding-right: 12px ; | |
| } | |
| .content-primary, | |
| .dashboardContent, | |
| main.MuiBox-root { | |
| padding: 16px 12px ; | |
| } | |
| } | |
| /* 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 ; | |
| height: 15px ; | |
| display: block ; | |
| } | |
| /* 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 ; | |
| } | |
| 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") ; | |
| background-repeat: no-repeat ; | |
| background-position: center ; | |
| background-size: contain ; | |
| } | |
| button:has(svg[data-testid="MenuIcon"]), | |
| button[aria-label="Menu"], | |
| button[aria-label="menu"], | |
| .mainDrawerButton, | |
| .headerButtonMenu { | |
| position: relative ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| } | |
| /* ========================================================================== | |
| 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') ; | |
| background-image: url('apex-logo.svg') ; | |
| background-size: contain ; | |
| background-repeat: no-repeat ; | |
| background-position: center ; | |
| object-fit: contain ; | |
| } | |
| /* Header Start Icon & Title Bar Logo */ | |
| .headerLogo img, | |
| .imgLogoIcon { | |
| max-height: 22px ; | |
| max-width: 22px ; | |
| object-fit: contain ; | |
| } | |
| /* 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 ; | |
| height: 22px ; | |
| max-width: 22px ; | |
| max-height: 22px ; | |
| min-width: 22px ; | |
| min-height: 22px ; | |
| object-fit: contain ; | |
| display: inline-block ; | |
| vertical-align: middle ; | |
| } | |
| /* 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 ; | |
| } | |
| /* Splash Screen Logo */ | |
| .splashLogo, | |
| #splashScreen .splashLogo { | |
| background-image: url('apex-logo.svg') ; | |
| background-size: contain ; | |
| background-repeat: no-repeat ; | |
| background-position: center ; | |
| width: 100px ; | |
| height: 100px ; | |
| } | |
| /* 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) ; | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| border-radius: 14px ; | |
| margin: 10px 14px 14px ; | |
| padding: 10px 14px ; | |
| } | |
| /* 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 ; | |
| } | |
| /* ========================================================================== | |
| 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) ; | |
| color: var(--tv-text-primary) ; | |
| } | |
| /* 2. Top Navigation Bar (Unified Glass Header) */ | |
| .skinHeader, | |
| .skinHeader.focuscontainer-x, | |
| .skinHeader-withBackground { | |
| background: transparent ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| border: none ; | |
| border-bottom: none ; | |
| box-shadow: none ; | |
| } | |
| /* Clean up header buttons (remove excessive shadow/background boxes) */ | |
| .skinHeader .headerButton, | |
| .skinHeader .paper-icon-button-light { | |
| background: transparent ; | |
| box-shadow: none ; | |
| border-radius: 50% ; | |
| color: var(--tv-text-primary) ; | |
| transition: background-color 0.2s ease, transform 0.2s ease ; | |
| } | |
| .skinHeader .headerButton:hover, | |
| .skinHeader .headerButton:focus-visible { | |
| background: rgba(255, 255, 255, 0.12) ; | |
| transform: scale(1.05) ; | |
| } | |
| /* 3. Section Titles & Row Headers */ | |
| .sectionTitle, | |
| .sectionTitleTextButton { | |
| color: var(--tv-text-primary) ; | |
| font-weight: 700 ; | |
| font-size: 1.25rem ; | |
| letter-spacing: -0.01em ; | |
| padding-left: 0.15em ; | |
| margin-bottom: 0.5em ; | |
| } | |
| /* 4. Horizontal Carousels & Card Peeking */ | |
| .itemsContainer.padded-left.padded-right { | |
| padding-left: 4.5vw ; | |
| padding-right: 4.5vw ; | |
| gap: 16px ; | |
| scroll-behavior: smooth ; | |
| scroll-snap-type: x mandatory ; | |
| } | |
| .itemsContainer > .card { | |
| scroll-snap-align: start ; | |
| margin-right: 14px ; | |
| } | |
| /* 5. Differentiated Card Aspect Ratios */ | |
| /* Portrait 2:3 ratio for Movies, Shows, and General Media */ | |
| .cardScalable, | |
| .portraitCard .cardScalable { | |
| border-radius: var(--tv-radius) ; | |
| overflow: hidden ; | |
| background-color: var(--tv-surface) ; | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), outline 0.18s ease, box-shadow 0.18s ease ; | |
| } | |
| .cardImageContainer { | |
| background-color: var(--tv-surface) ; | |
| } | |
| /* 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) ; | |
| } | |
| /* 6. Continue Watching Progress Bar (Thin 3px Flush Line) */ | |
| .itemProgressBar { | |
| position: absolute ; | |
| bottom: 0 ; | |
| left: 0 ; | |
| right: 0 ; | |
| height: 3px ; | |
| background: rgba(255, 255, 255, 0.22) ; | |
| border-radius: 0 0 var(--tv-radius) var(--tv-radius) ; | |
| margin: 0 ; | |
| z-index: 4 ; | |
| } | |
| .itemProgressBarForeground { | |
| background: #E50914 ; | |
| height: 100% ; | |
| box-shadow: 0 0 10px rgba(229, 9, 20, 0.7) ; | |
| } | |
| /* 7. Card Text & Metadata Scrims */ | |
| .cardText { | |
| color: var(--tv-text-muted) ; | |
| font-size: 0.85rem ; | |
| font-weight: 500 ; | |
| } | |
| .cardText-first { | |
| color: var(--tv-text-primary) ; | |
| font-weight: 600 ; | |
| font-size: 0.92rem ; | |
| } | |
| /* 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%) ; | |
| } | |
| /* 8. TV Spatial Focus Transform & Border Ring */ | |
| .card:focus-visible, | |
| .card.focused, | |
| .card:focus { | |
| outline: none ; | |
| } | |
| .card:focus-visible .cardScalable, | |
| .card.focused .cardScalable, | |
| .card:focus .cardScalable, | |
| .card:hover .cardScalable { | |
| transform: scale(1.04) ; | |
| outline: 2px solid var(--tv-focus-border) ; | |
| outline-offset: 2px ; | |
| box-shadow: 0 12px 32px rgba(0, 0, 0, 0.85), 0 0 20px rgba(255, 255, 255, 0.18) ; | |
| z-index: 10 ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| pointer-events: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| position: absolute ; | |
| overflow: hidden ; | |
| opacity: 0 ; | |
| } | |
| /* 2. HEADER CONTAINER & BAR - Fully transparent, zero blur over spotlight */ | |
| .skinHeader, | |
| .skinHeader.focuscontainer-x, | |
| .skinHeader-withBackground, | |
| .skinHeader-withBackground::before, | |
| header.MuiAppBar-root { | |
| background: transparent ; | |
| background-color: transparent ; | |
| background-image: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| border: none ; | |
| border-bottom: none ; | |
| box-shadow: none ; | |
| height: 56px ; | |
| min-height: 56px ; | |
| padding: 0 ; | |
| position: fixed ; | |
| top: 0 ; | |
| left: 0 ; | |
| right: 0 ; | |
| z-index: 1000 ; | |
| pointer-events: none ; | |
| } | |
| .skinHeader *, | |
| header.MuiAppBar-root * { | |
| pointer-events: auto; | |
| } | |
| .headerTop, | |
| header.MuiAppBar-root > .MuiToolbar-root, | |
| header > .MuiToolbar-root { | |
| display: flex ; | |
| flex-direction: row ; | |
| justify-content: space-between ; | |
| align-items: center ; | |
| height: 56px ; | |
| min-height: 56px ; | |
| width: 100% ; | |
| padding: 0 16px ; | |
| margin: 0 ; | |
| box-sizing: border-box ; | |
| } | |
| /* 3. LEFT: TOP NAVIGATION TABS (Home, Movies, TV Shows) */ | |
| .apex-top-nav { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| gap: 14px ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| z-index: 100 ; | |
| flex-shrink: 0 ; | |
| order: -1 ; | |
| } | |
| .apex-nav-item { | |
| color: rgba(255, 255, 255, 0.72) ; | |
| font-size: 14px ; | |
| font-weight: 500 ; | |
| font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif ; | |
| text-decoration: none ; | |
| cursor: pointer ; | |
| background: transparent ; | |
| border: 1px solid transparent ; | |
| padding: 5px 12px ; | |
| border-radius: 18px ; | |
| transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) ; | |
| outline: none ; | |
| white-space: nowrap ; | |
| -webkit-tap-highlight-color: transparent ; | |
| } | |
| .apex-nav-item:hover, | |
| .apex-nav-item:focus-visible { | |
| color: #FFFFFF ; | |
| background: rgba(255, 255, 255, 0.12) ; | |
| border-color: rgba(255, 255, 255, 0.2) ; | |
| } | |
| .apex-nav-item.active { | |
| color: #FFFFFF ; | |
| background: rgba(255, 255, 255, 0.22) ; | |
| border-color: rgba(255, 255, 255, 0.45) ; | |
| font-weight: 600 ; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.4) ; | |
| } | |
| /* 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 ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| gap: 10px ; | |
| margin-left: auto ; | |
| order: 10 ; | |
| } | |
| .headerSearchButton, | |
| button[data-action="search"] { | |
| background: transparent ; | |
| color: #FFFFFF ; | |
| border-radius: 50% ; | |
| width: 36px ; | |
| height: 36px ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| cursor: pointer ; | |
| } | |
| /* 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 ; | |
| } | |
| .apex-top-nav { | |
| gap: 22px ; | |
| } | |
| .apex-nav-item { | |
| font-size: 15px ; | |
| padding: 6px 14px ; | |
| } | |
| /* Image 4 Search Pill Bar */ | |
| .apex-search-pill { | |
| display: inline-flex ; | |
| align-items: center ; | |
| gap: 8px ; | |
| background: rgba(255, 255, 255, 0.12) ; | |
| border: 1px solid rgba(255, 255, 255, 0.18) ; | |
| border-radius: 24px ; | |
| padding: 6px 16px ; | |
| color: rgba(255, 255, 255, 0.75) ; | |
| font-size: 13.5px ; | |
| font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif ; | |
| cursor: pointer ; | |
| transition: all 0.2s ease ; | |
| margin-right: 8px ; | |
| outline: none ; | |
| } | |
| .apex-search-pill:hover, | |
| .apex-search-pill:focus-visible { | |
| background: rgba(255, 255, 255, 0.2) ; | |
| color: #FFFFFF ; | |
| border-color: rgba(255, 255, 255, 0.3) ; | |
| } | |
| .headerSearchButton { | |
| display: none ; | |
| } | |
| } | |
| /* Mobile Portrait Mode */ | |
| @media (max-width: 600px) and (orientation: portrait) { | |
| .headerTop, | |
| header.MuiAppBar-root > .MuiToolbar-root, | |
| header > .MuiToolbar-root { | |
| padding: 0 12px ; | |
| } | |
| .apex-top-nav { | |
| gap: 10px ; | |
| } | |
| .apex-nav-item { | |
| font-size: 13.5px ; | |
| padding: 4px 8px ; | |
| } | |
| .apex-search-pill { | |
| display: none ; | |
| } | |
| .headerSearchButton { | |
| display: flex ; | |
| } | |
| } | |
| /* 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 ; | |
| flex-wrap: nowrap ; | |
| flex-direction: row ; | |
| overflow-x: auto ; | |
| overflow-y: hidden ; | |
| -webkit-overflow-scrolling: touch ; | |
| scroll-behavior: smooth ; | |
| scroll-snap-type: x mandatory ; | |
| padding-left: 14px ; | |
| padding-right: 14px ; | |
| gap: 14px ; | |
| } | |
| #indexPage .itemsContainer > .card, | |
| .homeSectionsContainer .itemsContainer > .card, | |
| .emby-scroller .itemsContainer > .card { | |
| flex-shrink: 0 ; | |
| scroll-snap-align: start ; | |
| margin-right: 14px ; | |
| } | |
| /* 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 ; | |
| max-width: 230px ; | |
| min-width: 230px ; | |
| flex: 0 0 230px ; | |
| scroll-snap-align: start ; | |
| } | |
| @media (min-width: 800px) { | |
| .resumeSection .card, | |
| .nextUpSection .card, | |
| div[data-category="resume"] .card, | |
| div[data-category="nextup"] .card { | |
| width: 275px ; | |
| max-width: 275px ; | |
| min-width: 275px ; | |
| flex: 0 0 275px ; | |
| } | |
| } | |
| .resumeSection .cardPadder, | |
| .nextUpSection .cardPadder, | |
| div[data-category="resume"] .cardPadder, | |
| div[data-category="nextup"] .cardPadder, | |
| .cardPadder-backdrop, | |
| .cardPadder-overflowBackdrop { | |
| padding-bottom: 56.25% ; | |
| aspect-ratio: 16 / 9 ; | |
| height: 0 ; | |
| } | |
| .resumeSection .cardScalable, | |
| .nextUpSection .cardScalable, | |
| div[data-category="resume"] .cardScalable, | |
| div[data-category="nextup"] .cardScalable { | |
| aspect-ratio: 16 / 9 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| position: relative ; | |
| box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6) ; | |
| } | |
| .resumeSection .cardImageContainer img, | |
| .nextUpSection .cardImageContainer img, | |
| div[data-category="resume"] .cardImageContainer img, | |
| div[data-category="nextup"] .cardImageContainer img { | |
| object-fit: cover ; | |
| width: 100% ; | |
| height: 100% ; | |
| position: absolute ; | |
| top: 0 ; | |
| left: 0 ; | |
| } | |
| /* 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 ; | |
| bottom: 0 ; | |
| left: 0 ; | |
| right: 0 ; | |
| height: 4px ; | |
| background: rgba(255, 255, 255, 0.22) ; | |
| border-radius: 0 0 12px 12px ; | |
| overflow: hidden ; | |
| z-index: 5 ; | |
| } | |
| .resumeSection .itemProgressBarForeground, | |
| .nextUpSection .itemProgressBarForeground, | |
| div[data-category="resume"] .itemProgressBarForeground, | |
| div[data-category="nextup"] .itemProgressBarForeground, | |
| #indexPage .itemProgressBarForeground { | |
| background: linear-gradient(90deg, #E50914 0%, #FF2E4D 100%) ; | |
| border-radius: 0 0 12px 12px ; | |
| height: 100% ; | |
| box-shadow: 0 0 8px rgba(229, 9, 20, 0.6) ; | |
| } | |
| @media (max-width: 600px) { | |
| .resumeSection .card, | |
| .nextUpSection .card, | |
| div[data-category="resume"] .card, | |
| div[data-category="nextup"] .card { | |
| width: 215px ; | |
| max-width: 215px ; | |
| min-width: 215px ; | |
| flex: 0 0 215px ; | |
| } | |
| } | |
| /* 2. Portrait Media Base (2:3 Vertical) */ | |
| .portraitCard, | |
| .card[data-type="Movie"], | |
| .card[data-type="Series"] { | |
| width: 150px ; | |
| max-width: 150px ; | |
| flex: 0 0 150px ; | |
| } | |
| .portraitCard .cardScalable, | |
| .card[data-type="Movie"] .cardScalable, | |
| .card[data-type="Series"] .cardScalable { | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| } | |
| @media (max-width: 600px) { | |
| #indexPage .portraitCard, | |
| #indexPage .card[data-type="Movie"], | |
| #indexPage .card[data-type="Series"] { | |
| width: 125px ; | |
| max-width: 125px ; | |
| flex: 0 0 125px ; | |
| } | |
| } | |
| /* 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 ; | |
| flex-wrap: wrap ; | |
| flex-direction: row ; | |
| gap: 6px ; | |
| padding: 6px 8px ; | |
| box-sizing: border-box ; | |
| justify-content: flex-start ; | |
| width: 100% ; | |
| scroll-snap-type: none ; | |
| } | |
| .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) ; | |
| max-width: calc((100% - 12px) / 3) ; | |
| min-width: calc((100% - 12px) / 3) ; | |
| flex: 0 0 calc((100% - 12px) / 3) ; | |
| margin: 0 0 10px 0 ; | |
| padding: 0 ; | |
| box-sizing: border-box ; | |
| scroll-snap-align: none ; | |
| } | |
| .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 ; | |
| padding: 0 ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| .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 ; | |
| border-radius: 8px ; | |
| width: 100% ; | |
| } | |
| .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 ; | |
| line-height: 1.15 ; | |
| padding: 4px 1px 0 ; | |
| white-space: nowrap ; | |
| overflow: hidden ; | |
| text-overflow: ellipsis ; | |
| max-width: 100% ; | |
| } | |
| } | |
| /* 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 ; | |
| flex-wrap: wrap ; | |
| flex-direction: row ; | |
| gap: 8px ; | |
| padding: 10px 14px ; | |
| box-sizing: border-box ; | |
| justify-content: flex-start ; | |
| width: 100% ; | |
| } | |
| .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) ; | |
| max-width: calc((100% - 56px) / 8) ; | |
| min-width: calc((100% - 56px) / 8) ; | |
| flex: 0 0 calc((100% - 56px) / 8) ; | |
| margin: 0 0 10px 0 ; | |
| padding: 0 ; | |
| box-sizing: border-box ; | |
| } | |
| .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 ; | |
| padding: 0 ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| .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 ; | |
| line-height: 1.2 ; | |
| padding: 3px 2px 0 ; | |
| white-space: nowrap ; | |
| overflow: hidden ; | |
| text-overflow: ellipsis ; | |
| } | |
| } | |
| /* ZERO STARTUP LAG: INSTANT VISIBILITY OF HOMEPAGE CONTENT */ | |
| #homeTab, | |
| .homeSectionsContainer, | |
| #indexPage .sections, | |
| .verticalSection, | |
| .section0, | |
| .section1, | |
| .section2, | |
| .section3 { | |
| opacity: 1 ; | |
| visibility: visible ; | |
| } | |
| /* ======================================================== | |
| 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 ; | |
| top: 0 ; | |
| left: 0 ; | |
| right: 0 ; | |
| width: 100% ; | |
| height: 52px ; | |
| display: none ; | |
| visibility: hidden ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: center ; | |
| z-index: 99999 ; | |
| box-sizing: border-box ; | |
| padding: 0 16px ; | |
| background: rgba(10, 11, 15, 0.92) ; | |
| backdrop-filter: blur(20px) saturate(180%) ; | |
| -webkit-backdrop-filter: blur(20px) saturate(180%) ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08) ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) ; | |
| transition: opacity 0.2s ease, visibility 0.2s ease ; | |
| } | |
| body.show-apex-topbar #apex-tv-topbar, | |
| #apex-tv-topbar.is-visible { | |
| display: flex ; | |
| visibility: visible ; | |
| opacity: 1 ; | |
| pointer-events: auto ; | |
| } | |
| #apex-tv-topbar .apex-tv-tabs { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: center ; | |
| gap: 12px ; | |
| pointer-events: auto ; | |
| margin: 0 auto ; | |
| } | |
| .apex-tv-tab, | |
| .apex-nav-item { | |
| background: transparent ; | |
| border: 1px solid transparent ; | |
| color: rgba(255, 255, 255, 0.72) ; | |
| font-size: 14.5px ; | |
| font-weight: 500 ; | |
| font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif ; | |
| padding: 6px 14px ; | |
| border-radius: 9999px ; | |
| cursor: pointer ; | |
| transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) ; | |
| outline: none ; | |
| white-space: nowrap ; | |
| -webkit-tap-highlight-color: transparent ; | |
| user-select: none ; | |
| -webkit-user-select: none ; | |
| line-height: 1 ; | |
| } | |
| .apex-tv-tab:hover, | |
| .apex-tv-tab:focus-visible, | |
| .apex-nav-item:hover, | |
| .apex-nav-item:focus-visible { | |
| color: #FFFFFF ; | |
| background: rgba(255, 255, 255, 0.12) ; | |
| border-color: rgba(255, 255, 255, 0.2) ; | |
| } | |
| .apex-tv-tab.active, | |
| .apex-nav-item.active { | |
| color: #FFFFFF ; | |
| background: rgba(255, 255, 255, 0.22) ; | |
| border-color: rgba(255, 255, 255, 0.4) ; | |
| font-weight: 600 ; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.4) ; | |
| } | |
| /* Mobile Portrait Mode: Compact tabs to prevent TV Shows & Search collision */ | |
| @media (max-width: 600px) and (orientation: portrait) { | |
| #apex-tv-topbar { | |
| height: 48px ; | |
| padding: 0 8px ; | |
| background: rgba(10, 11, 15, 0.92) ; | |
| backdrop-filter: blur(20px) saturate(180%) ; | |
| -webkit-backdrop-filter: blur(20px) saturate(180%) ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08) ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) ; | |
| } | |
| #apex-tv-topbar .apex-tv-tabs { | |
| gap: 4px ; | |
| } | |
| .apex-tv-tab, | |
| .apex-nav-item { | |
| font-size: 12px ; | |
| padding: 4px 7px ; | |
| letter-spacing: -0.01em ; | |
| } | |
| /* 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 ; | |
| right: 8px ; | |
| top: 0 ; | |
| bottom: 0 ; | |
| display: flex ; | |
| align-items: center ; | |
| gap: 2px ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| } | |
| .headerSearchButton, | |
| button[data-action="search"], | |
| .headerUserButtonRound, | |
| .headerButton-user { | |
| margin: 0 1px ; | |
| padding: 4px ; | |
| min-width: 32px ; | |
| width: 32px ; | |
| height: 32px ; | |
| } | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| /* Clean header on login, mismatch, and splash */ | |
| #serverMismatchPage .skinHeader, | |
| .serverMismatchPage .skinHeader, | |
| #loginPage .skinHeader, | |
| .loginPage .skinHeader, | |
| #selectServerPage .skinHeader, | |
| .selectServerPage .skinHeader { | |
| display: none ; | |
| } | |
| /* Landscape Mode & Desktop/TV */ | |
| @media (min-width: 601px), (orientation: landscape) { | |
| #apex-tv-topbar { | |
| height: 56px ; | |
| padding: 0 24px ; | |
| } | |
| #apex-tv-topbar .apex-tv-tabs { | |
| gap: 18px ; | |
| } | |
| .apex-tv-tab, | |
| .apex-nav-item { | |
| font-size: 15px ; | |
| padding: 6px 16px ; | |
| } | |
| } | |
| /* Hide topbar only during active fullscreen video playback or settings */ | |
| body.videoPlayerContainerVisible #apex-tv-topbar, | |
| body.hide-apex-topbar #apex-tv-topbar { | |
| display: none ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| pointer-events: none ; | |
| overflow: hidden ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| /* ======================================================== | |
| 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 ; | |
| flex-direction: row ; | |
| align-items: flex-start ; | |
| flex-wrap: wrap ; | |
| padding: 56px 16px 16px 16px ; | |
| gap: 16px ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| position: relative ; | |
| z-index: 2 ; | |
| } | |
| /* Fixed Single Clean Poster Thumbnail in Portrait */ | |
| #itemDetailPage .detailPagePrimaryContainer > .detailImageContainer, | |
| .layout-mobile #itemDetailPage .detailPagePrimaryContainer > .detailImageContainer { | |
| display: block ; | |
| visibility: visible ; | |
| opacity: 1 ; | |
| position: relative ; | |
| width: 110px ; | |
| min-width: 110px ; | |
| max-width: 110px ; | |
| height: 165px ; | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| flex: 0 0 110px ; | |
| box-shadow: 0 8px 24px rgba(0, 0, 0, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.14) ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| pointer-events: none ; | |
| } | |
| #itemDetailPage .detailImageContainer .card, | |
| .layout-mobile #itemDetailPage .detailImageContainer .card, | |
| #itemDetailPage .detailImageContainer .cardScalable { | |
| width: 100% ; | |
| height: 100% ; | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| margin: 0 ; | |
| position: relative ; | |
| top: 0 ; | |
| left: 0 ; | |
| } | |
| #itemDetailPage .detailImageContainer .cardPadder { | |
| display: none ; | |
| } | |
| #itemDetailPage .detailRibbon, | |
| .layout-mobile #itemDetailPage .detailRibbon { | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| justify-content: flex-start ; | |
| flex: 1 1 calc(100% - 136px) ; | |
| min-width: 0 ; | |
| gap: 4px ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| background: transparent ; | |
| } | |
| #itemDetailPage .infoWrapper, | |
| .layout-mobile #itemDetailPage .infoWrapper { | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| justify-content: flex-start ; | |
| width: 100% ; | |
| gap: 3px ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| #itemDetailPage .nameContainer, | |
| .layout-mobile #itemDetailPage .nameContainer { | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| justify-content: flex-start ; | |
| gap: 2px ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| margin: 0 0 4px 0 ; | |
| } | |
| #itemDetailPage .itemName, | |
| .layout-mobile #itemDetailPage .itemName, | |
| #itemDetailPage h1.itemName, | |
| #itemDetailPage .itemName.hide, | |
| #itemDetailPage .nameContainer, | |
| #itemDetailPage .nameContainer.hide { | |
| display: block ; | |
| visibility: visible ; | |
| opacity: 1 ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| font-size: 1.45rem ; | |
| font-weight: 700 ; | |
| line-height: 1.25 ; | |
| color: #ffffff ; | |
| white-space: normal ; | |
| word-break: normal ; | |
| overflow-wrap: break-word ; | |
| letter-spacing: -0.01em ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| text-align: left ; | |
| position: relative ; | |
| z-index: 10 ; | |
| } | |
| #itemDetailPage .originalTitle, | |
| #itemDetailPage .parentName, | |
| #itemDetailPage .itemName.originalTitle, | |
| #itemDetailPage .nameContainer > *:not(h1) { | |
| font-size: 0.95rem ; | |
| font-weight: 500 ; | |
| color: rgba(255, 255, 255, 0.72) ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| text-align: left ; | |
| } | |
| #itemDetailPage .itemMiscInfo, | |
| .layout-mobile #itemDetailPage .itemMiscInfo { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| flex-wrap: wrap ; | |
| gap: 8px ; | |
| width: 100% ; | |
| margin: 2px 0 6px 0 ; | |
| color: rgba(255, 255, 255, 0.72) ; | |
| font-size: 0.85rem ; | |
| } | |
| #itemDetailPage .mainDetailButtons, | |
| .layout-mobile #itemDetailPage .mainDetailButtons { | |
| position: relative ; | |
| bottom: auto ; | |
| left: auto ; | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| flex-wrap: nowrap ; | |
| gap: 12px ; | |
| margin: 8px 0 12px 0 ; | |
| width: 100% ; | |
| clear: both ; | |
| } | |
| /* Media info and technical specs placed cleanly below buttons */ | |
| #itemDetailPage .detailSectionContent, | |
| #itemDetailPage .mediaInfo, | |
| #itemDetailPage .trackSelections, | |
| #itemDetailPage .audioVideoInfo, | |
| #itemDetailPage .mediaInfoStreamContainer { | |
| position: relative ; | |
| display: block ; | |
| margin-top: 10px ; | |
| margin-bottom: 6px ; | |
| clear: both ; | |
| width: 100% ; | |
| } | |
| /* Media stream info & technical specs */ | |
| #itemDetailPage .detailSectionContent, | |
| #itemDetailPage .mediaInfo, | |
| #itemDetailPage .trackSelections, | |
| #itemDetailPage .audioVideoInfo { | |
| position: relative ; | |
| display: block ; | |
| margin-top: 10px ; | |
| margin-bottom: 8px ; | |
| clear: both ; | |
| width: 100% ; | |
| } | |
| } | |
| /* Universal Abyss Spotlight Hero Banner Iframe */ | |
| iframe.featurediframe { | |
| width: 100% ; | |
| display: block ; | |
| border: none ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| min-height: 520px ; | |
| height: 68vh ; | |
| max-height: 720px ; | |
| opacity: 1 ; | |
| visibility: visible ; | |
| } | |
| @media (max-width: 768px) and (orientation: portrait) { | |
| iframe.featurediframe { | |
| height: 68vh ; | |
| min-height: 500px ; | |
| max-height: 640px ; | |
| } | |
| } | |
| @media (orientation: landscape) { | |
| iframe.featurediframe { | |
| height: 75vh ; | |
| min-height: 360px ; | |
| } | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| pointer-events: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| opacity: 0 ; | |
| } | |
| /* ======================================================== | |
| LANDSCAPE MOVIE DETAIL PAGE: 2-COLUMN NETFLIX/APPLE TV LAYOUT | |
| ======================================================== */ | |
| @media (orientation: landscape) { | |
| #itemDetailPage { | |
| background: #0c0d10 ; | |
| overflow-y: auto ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| pointer-events: none ; | |
| } | |
| #itemDetailPage .itemBackdrop, | |
| .layout-mobile #itemDetailPage .itemBackdrop { | |
| position: fixed ; | |
| top: 0 ; | |
| left: 0 ; | |
| width: 100vw ; | |
| height: 100vh ; | |
| opacity: 0.28 ; | |
| filter: blur(8px) brightness(0.7) ; | |
| -webkit-filter: blur(8px) brightness(0.7) ; | |
| pointer-events: none ; | |
| z-index: 0 ; | |
| background-size: cover ; | |
| background-position: center ; | |
| } | |
| #itemDetailPage .detailPageWrapperContainer, | |
| #itemDetailPage .detailPagePrimaryContainer { | |
| position: relative ; | |
| z-index: 2 ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| box-sizing: border-box ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| } | |
| #itemDetailPage .detailRibbon, | |
| .layout-mobile #itemDetailPage .detailRibbon { | |
| position: relative ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| padding: 16px 24px 16px 185px ; | |
| min-height: 228px ; | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| justify-content: flex-start ; | |
| gap: 6px ; | |
| background: transparent ; | |
| } | |
| /* 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 ; | |
| left: 28px ; | |
| top: 16px ; | |
| width: 135px ; | |
| max-width: 135px ; | |
| height: 202px ; | |
| min-width: 135px ; | |
| display: block ; | |
| visibility: visible ; | |
| z-index: 10 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| #itemDetailPage .detailImageContainer .card, | |
| .layout-mobile #itemDetailPage .detailImageContainer .card { | |
| width: 135px ; | |
| height: 202px ; | |
| max-width: 135px ; | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.85) ; | |
| border: 1px solid rgba(255, 255, 255, 0.12) ; | |
| margin: 0 ; | |
| position: relative ; | |
| top: 0 ; | |
| left: 0 ; | |
| } | |
| #itemDetailPage .detailImageContainer .cardScalable { | |
| aspect-ratio: 2 / 3 ; | |
| border-radius: 12px ; | |
| width: 100% ; | |
| height: 100% ; | |
| } | |
| #itemDetailPage .detailImageContainer .cardPadder { | |
| display: none ; | |
| } | |
| /* Right Column: Title, Metadata, Buttons Stacked Naturally */ | |
| #itemDetailPage .infoWrapper, | |
| .layout-mobile #itemDetailPage .infoWrapper { | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| gap: 4px ; | |
| } | |
| #itemDetailPage .nameContainer, | |
| .layout-mobile #itemDetailPage .nameContainer, | |
| .layout-desktop #itemDetailPage .nameContainer, | |
| .layout-tv #itemDetailPage .nameContainer { | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| justify-content: flex-start ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| gap: 2px ; | |
| margin: 0 0 4px 0 ; | |
| } | |
| #itemDetailPage .originalTitle, | |
| #itemDetailPage .parentName, | |
| #itemDetailPage .itemName.originalTitle, | |
| #itemDetailPage .nameContainer > *:not(h1) { | |
| font-size: 1.1rem ; | |
| font-weight: 500 ; | |
| color: rgba(255, 255, 255, 0.75) ; | |
| margin: 2px 0 0 0 ; | |
| padding: 0 ; | |
| text-align: left ; | |
| } | |
| #itemDetailPage .itemName, | |
| .layout-mobile #itemDetailPage .itemName, | |
| #itemDetailPage h1.itemName, | |
| #itemDetailPage .itemName.hide, | |
| #itemDetailPage .nameContainer, | |
| #itemDetailPage .nameContainer.hide { | |
| display: block ; | |
| visibility: visible ; | |
| opacity: 1 ; | |
| font-size: 1.65rem ; | |
| font-weight: 700 ; | |
| line-height: 1.22 ; | |
| color: #ffffff ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| white-space: normal ; | |
| word-break: normal ; | |
| overflow-wrap: break-word ; | |
| letter-spacing: -0.01em ; | |
| position: relative ; | |
| z-index: 10 ; | |
| } | |
| #itemDetailPage .itemMiscInfo, | |
| .layout-mobile #itemDetailPage .itemMiscInfo { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| flex-wrap: wrap ; | |
| gap: 10px ; | |
| color: rgba(255, 255, 255, 0.72) ; | |
| font-size: 0.9rem ; | |
| margin: 2px 0 6px 0 ; | |
| } | |
| #itemDetailPage .mainDetailButtons, | |
| .layout-mobile #itemDetailPage .mainDetailButtons { | |
| position: relative ; | |
| bottom: auto ; | |
| left: auto ; | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| flex-wrap: nowrap ; | |
| gap: 12px ; | |
| margin: 8px 0 0 0 ; | |
| width: 100% ; | |
| } | |
| #itemDetailPage .detailPagePrimaryContent { | |
| position: relative ; | |
| z-index: 2 ; | |
| padding-left: 28px ; | |
| padding-right: 28px ; | |
| padding-top: 12px ; | |
| box-sizing: border-box ; | |
| width: 100% ; | |
| } | |
| } | |
| /* Unified Button Styling Across Portrait & Landscape */ | |
| #itemDetailPage .mainDetailButtons .detailButton, | |
| #itemDetailPage .mainDetailButtons .emby-button { | |
| width: 44px ; | |
| height: 44px ; | |
| min-width: 44px ; | |
| max-width: 44px ; | |
| border-radius: 50% ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| text-align: center ; | |
| box-sizing: border-box ; | |
| } | |
| #itemDetailPage .mainDetailButtons .detailButton-content { | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| width: 100% ; | |
| height: 100% ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| #itemDetailPage .mainDetailButtons .detailButton-text { | |
| display: none ; | |
| } | |
| #itemDetailPage .mainDetailButtons .material-icons, | |
| #itemDetailPage .mainDetailButtons .detailButton-icon { | |
| font-size: 22px ; | |
| width: 24px ; | |
| height: 24px ; | |
| line-height: 24px ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| } | |
| #itemDetailPage .btnPlay, | |
| #itemDetailPage .btnReplay { | |
| background: #ffffff ; | |
| color: #000000 ; | |
| border-radius: 50% ; | |
| width: 44px ; | |
| height: 44px ; | |
| min-width: 44px ; | |
| max-width: 44px ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| box-shadow: 0 4px 16px rgba(255, 255, 255, 0.2) ; | |
| border: none ; | |
| flex-shrink: 0 ; | |
| } | |
| #itemDetailPage .btnPlay .material-icons, | |
| #itemDetailPage .btnReplay .material-icons { | |
| color: #000000 ; | |
| font-size: 24px ; | |
| width: 24px ; | |
| height: 24px ; | |
| line-height: 1 ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| #itemDetailPage .btnPlayTrailer, | |
| #itemDetailPage .btnFavorite, | |
| #itemDetailPage .btnPlaystate, | |
| #itemDetailPage .btnUserRating, | |
| #itemDetailPage .btnMoreCommands, | |
| #itemDetailPage .btnDownload { | |
| width: 44px ; | |
| height: 44px ; | |
| min-width: 44px ; | |
| border-radius: 50% ; | |
| background: rgba(255, 255, 255, 0.12) ; | |
| backdrop-filter: blur(10px) ; | |
| -webkit-backdrop-filter: blur(10px) ; | |
| border: 1px solid rgba(255, 255, 255, 0.18) ; | |
| color: #ffffff ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| flex-shrink: 0 ; | |
| transition: transform 0.15s ease, background 0.15s ease ; | |
| } | |
| /* ======================================================== | |
| VIDEO PLAYER OSD: CLEAN, UNIFIED LANDSCAPE CONTROLS | |
| Fixes scattered playback buttons and misaligned bottom bar | |
| ======================================================== */ | |
| #videoOsdPage { | |
| background: #000000 ; | |
| } | |
| /* 1. Neutralize disruptive fixed positioning on btnPause */ | |
| .btnPause, | |
| #videoOsdPage .btnPause { | |
| position: static ; | |
| transform: none ; | |
| left: auto ; | |
| margin: 0 ; | |
| } | |
| /* 2. Unified Centered Media Transport Cluster (Play, Pause, Rewind, Fast-Forward, Next, Prev) */ | |
| #videoOsdPage .videoOsdBottom .buttons > div[dir="ltr"] { | |
| position: fixed ; | |
| top: 50% ; | |
| left: 50% ; | |
| transform: translate(-50%, -50%) ; | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: center ; | |
| gap: 32px ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| z-index: 100 ; | |
| pointer-events: auto ; | |
| } | |
| #videoOsdPage .videoOsdBottom .btnPause { | |
| width: 64px ; | |
| height: 64px ; | |
| min-width: 64px ; | |
| border-radius: 50% ; | |
| background: rgba(255, 255, 255, 0.22) ; | |
| backdrop-filter: blur(12px) ; | |
| -webkit-backdrop-filter: blur(12px) ; | |
| border: 1.5px solid rgba(255, 255, 255, 0.35) ; | |
| color: #ffffff ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5) ; | |
| transition: transform 0.15s ease, background 0.15s ease ; | |
| } | |
| #videoOsdPage .videoOsdBottom .btnPause:active { | |
| transform: scale(0.92) ; | |
| background: rgba(255, 255, 255, 0.35) ; | |
| } | |
| #videoOsdPage .videoOsdBottom .btnPause .material-icons { | |
| font-size: 38px ; | |
| color: #ffffff ; | |
| } | |
| #videoOsdPage .videoOsdBottom .btnRewind, | |
| #videoOsdPage .videoOsdBottom .btnFastForward, | |
| #videoOsdPage .videoOsdBottom .btnPreviousTrack, | |
| #videoOsdPage .videoOsdBottom .btnNextTrack, | |
| #videoOsdPage .videoOsdBottom .btnPreviousChapter, | |
| #videoOsdPage .videoOsdBottom .btnNextChapter { | |
| width: 48px ; | |
| height: 48px ; | |
| min-width: 48px ; | |
| border-radius: 50% ; | |
| background: rgba(0, 0, 0, 0.35) ; | |
| backdrop-filter: blur(8px) ; | |
| -webkit-backdrop-filter: blur(8px) ; | |
| color: #ffffff ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| padding: 0 ; | |
| } | |
| #videoOsdPage .videoOsdBottom .btnRewind .material-icons, | |
| #videoOsdPage .videoOsdBottom .btnFastForward .material-icons, | |
| #videoOsdPage .videoOsdBottom .btnPreviousTrack .material-icons, | |
| #videoOsdPage .videoOsdBottom .btnNextTrack .material-icons { | |
| font-size: 30px ; | |
| color: #ffffff ; | |
| } | |
| /* 3. Bottom Control Bar: Pinned, Clean, Gradient Backdrop */ | |
| #videoOsdPage .videoOsdBottom { | |
| position: fixed ; | |
| bottom: 0 ; | |
| left: 0 ; | |
| right: 0 ; | |
| margin: 0 ; | |
| padding: 12px 28px 16px 28px ; | |
| background: linear-gradient(to top, rgba(0, 0, 0, 0.88) 0%, rgba(0, 0, 0, 0.4) 65%, transparent 100%) ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| border-radius: 0 ; | |
| z-index: 50 ; | |
| } | |
| #videoOsdPage .videoOsdBottom .osdControls { | |
| background: transparent ; | |
| box-shadow: none ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| border-radius: 0 ; | |
| width: 100% ; | |
| } | |
| /* 4. Timeline Slider Row */ | |
| #videoOsdPage .flex.flex-direction-row.align-items-center { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| gap: 14px ; | |
| width: 100% ; | |
| margin-bottom: 6px ; | |
| } | |
| #videoOsdPage .startTimeText, | |
| #videoOsdPage .endTimeText { | |
| color: rgba(255, 255, 255, 0.9) ; | |
| font-size: 13px ; | |
| font-weight: 500 ; | |
| min-width: 44px ; | |
| text-align: center ; | |
| } | |
| #videoOsdPage .sliderContainer { | |
| flex: 1 1 auto ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| /* Perfect Center Alignment for Spinner and Play Button */ | |
| .docspinner, | |
| .mdl-spinner.docspinner, | |
| #videoOsdPage .docspinner { | |
| position: fixed ; | |
| top: 50% ; | |
| left: 50% ; | |
| transform: translate(-50%, -50%) ; | |
| margin: 0 ; | |
| pointer-events: none ; | |
| z-index: 1000 ; | |
| } | |
| #videoOsdPage .videoOsdBottom .buttons > div[dir=ltr] .hide { | |
| display: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| /* 5. Bottom Icons Row (Audio, Subtitles, Settings, Pip, Fullscreen) - Spaced Evenly across Landscape */ | |
| #videoOsdPage .videoOsdBottom .buttons { | |
| display: flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| width: 100% ; | |
| padding-top: 4px ; | |
| position: relative ; | |
| box-sizing: border-box ; | |
| } | |
| #videoOsdPage .btnFullscreen { | |
| margin-left: 0 ; | |
| } | |
| #videoOsdPage .videoOsdBottom .buttons button[is="paper-icon-button-light"] { | |
| color: rgba(255, 255, 255, 0.88) ; | |
| padding: 8px ; | |
| } | |
| #videoOsdPage .videoOsdBottom .buttons button[is="paper-icon-button-light"] .material-icons { | |
| font-size: 24px ; | |
| } | |
| /* 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 ; | |
| box-sizing: border-box ; | |
| } | |
| /* ======================================================== | |
| 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 ; | |
| flex-direction: row ; | |
| flex-wrap: nowrap ; | |
| overflow-x: auto ; | |
| overflow-y: hidden ; | |
| gap: 12px ; | |
| padding: 8px 14px 16px 14px ; | |
| box-sizing: border-box ; | |
| -webkit-overflow-scrolling: touch ; | |
| scroll-behavior: smooth ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| } | |
| #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 ; | |
| min-width: 95px ; | |
| max-width: 95px ; | |
| flex: 0 0 95px ; | |
| margin: 0 ; | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: center ; | |
| text-align: center ; | |
| box-sizing: border-box ; | |
| } | |
| #castContent .cardScalable, | |
| #guestCastContent .cardScalable, | |
| #peopleSection .cardScalable, | |
| .peopleSection .cardScalable, | |
| .castSection .cardScalable, | |
| div[data-category="people"] .cardScalable, | |
| div[data-category="cast"] .cardScalable, | |
| .personCard .cardScalable { | |
| width: 95px ; | |
| height: 130px ; | |
| aspect-ratio: 3 / 4 ; | |
| border-radius: 12px ; | |
| overflow: hidden ; | |
| box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6) ; | |
| border: 1px solid rgba(255, 255, 255, 0.1) ; | |
| position: relative ; | |
| } | |
| #castContent .cardImage, | |
| #guestCastContent .cardImage, | |
| .personCard .cardImage, | |
| #castContent img, | |
| #guestCastContent img, | |
| .personCard img { | |
| width: 100% ; | |
| height: 100% ; | |
| object-fit: cover ; | |
| border-radius: 12px ; | |
| position: absolute ; | |
| top: 0 ; | |
| left: 0 ; | |
| } | |
| #castContent .cardText, | |
| #guestCastContent .cardText, | |
| .personCard .cardText { | |
| width: 120px ; | |
| max-width: 120px ; | |
| white-space: nowrap ; | |
| overflow: hidden ; | |
| text-overflow: ellipsis ; | |
| font-size: 0.85rem ; | |
| text-align: center ; | |
| margin-top: 4px ; | |
| } | |
| /* ======================================================== | |
| 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 ; | |
| border: none ; | |
| box-shadow: none ; | |
| } | |
| #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 ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| } | |
| /* TV Series Unplayed Count Badge */ | |
| .countIndicator { | |
| background: rgba(0, 0, 0, 0.82) ; | |
| color: #ffffff ; | |
| border: 1px solid rgba(255, 255, 255, 0.25) ; | |
| border-radius: 6px ; | |
| font-size: 0.72rem ; | |
| font-weight: 700 ; | |
| padding: 2px 6px ; | |
| min-width: 18px ; | |
| height: 18px ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6) ; | |
| } | |
| /* ======================================================== | |
| APEX FALLBACK CARD POSTERS & MOBILE MULTI-COLUMN GRID | |
| ======================================================== */ | |
| .apex-fallback-art { | |
| display: none ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| /* 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 ; | |
| grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) ; | |
| gap: 12px 10px ; | |
| padding: 8px 12px ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| .itemsContainer-vertical > .card, | |
| .itemsContainer-cards > .card, | |
| .libraryPage .card { | |
| width: 100% ; | |
| max-width: 100% ; | |
| margin: 0 ; | |
| } | |
| } | |
| @media (orientation: landscape) and (max-height: 500px) { | |
| .itemsContainer-vertical, | |
| .itemsContainer-cards, | |
| .libraryPage .itemsContainer, | |
| #moviesPage .itemsContainer, | |
| #tvShowsPage .itemsContainer { | |
| display: grid ; | |
| grid-template-columns: repeat(auto-fill, minmax(115px, 1fr)) ; | |
| gap: 12px 10px ; | |
| padding: 8px 16px ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| } | |
| /* ======================================================== | |
| 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 ; | |
| background: transparent ; | |
| } | |
| 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 ; | |
| visibility: hidden ; | |
| height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| overflow: hidden ; | |
| pointer-events: none ; | |
| } | |
| /* 2. Modernized Catalog Action Toolbar (Replaces stark white buttons with frosted glass) */ | |
| .viewSettings, | |
| .libraryViewNav { | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: flex-end ; | |
| gap: 8px ; | |
| padding: 8px 14px ; | |
| margin: 0 ; | |
| } | |
| /* 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 ; | |
| visibility: hidden ; | |
| width: 0 ; | |
| height: 0 ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| pointer-events: none ; | |
| overflow: hidden ; | |
| } | |
| /* 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) ; | |
| backdrop-filter: blur(14px) ; | |
| -webkit-backdrop-filter: blur(14px) ; | |
| border: 1px solid rgba(255, 255, 255, 0.12) ; | |
| color: rgba(255, 255, 255, 0.85) ; | |
| border-radius: 9999px ; | |
| transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1) ; | |
| } | |
| .viewSettings button:hover, | |
| .viewSettings button:focus-visible, | |
| .libraryViewNav button:hover, | |
| .libraryViewNav button:focus-visible { | |
| background: rgba(255, 255, 255, 0.22) ; | |
| border-color: rgba(255, 255, 255, 0.35) ; | |
| color: #FFFFFF ; | |
| transform: scale(1.06) ; | |
| } | |
| /* 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) ; | |
| z-index: 10 ; | |
| transition: transform 0.24s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.24s cubic-bezier(0.16, 1, 0.3, 1) ; | |
| } | |
| .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) ; | |
| } | |
| /* 4. Streaming Typography: Multi-line clean title clamp instead of abrupt cutoffs */ | |
| .cardText-first { | |
| font-weight: 600 ; | |
| font-size: 0.88rem ; | |
| line-height: 1.25 ; | |
| color: #EDEDED ; | |
| display: -webkit-box ; | |
| -webkit-line-clamp: 2 ; | |
| -webkit-box-orient: vertical ; | |
| overflow: hidden ; | |
| text-overflow: ellipsis ; | |
| white-space: normal ; | |
| max-height: 2.5em ; | |
| margin-top: 6px ; | |
| } | |
| .cardText-secondary { | |
| font-size: 0.78rem ; | |
| color: rgba(255, 255, 255, 0.55) ; | |
| font-weight: 500 ; | |
| margin-top: 2px ; | |
| } | |
| /* Section titles with modern streaming hierarchy */ | |
| .sectionTitle { | |
| font-family: "Google Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif ; | |
| font-weight: 700 ; | |
| letter-spacing: -0.01em ; | |
| font-size: 1.18rem ; | |
| color: #FFFFFF ; | |
| margin: 18px 0 10px 0 ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| } | |
| .sectionTitleTextButton > .material-icons { | |
| color: rgba(255, 255, 255, 0.45) ; | |
| font-size: 1.15rem ; | |
| margin-left: 4px ; | |
| transition: transform 0.2s ease, color 0.2s ease ; | |
| } | |
| .sectionTitleTextButton:hover > .material-icons { | |
| color: #FFFFFF ; | |
| transform: translateX(3px) ; | |
| } | |