diff --git a/Theme/ElegantFin-theme-nightly.css b/Theme/ElegantFin-theme-nightly.css index 7fd5cb8..f6da648 100644 --- a/Theme/ElegantFin-theme-nightly.css +++ b/Theme/ElegantFin-theme-nightly.css @@ -36,9 +36,38 @@ font-style: normal; -webkit-tap-highlight-color: transparent !important; - /* Base theme colors */ + /* Material Symbols font-variation-settings */ + --fill: 1; + --wght: 400; + --grad: 0; + --opsz: 30; + color-scheme: dark; color: var(--textColor); + + /* standard component sizes */ + --largerRadius: 1.25em; + --largeRadius: 1em; + --smallRadius: 0.5em; + --smallerRadius: 0.375em; + --borderWidth: 0.06em; + --borderWidthDouble: 0.12em; + + --defaultBorder: var(--borderWidth) solid var(--borderColor); + --defaultLighterBorder: var(--borderWidth) solid var(--lighterBorderColor); + + --sidePadding: 3.3%; + --itemColumnGap: 1em; + + --minEpisodeCardWidth: 26em; + --appBarHeight: 5em; + + --blurSmallest: blur(2px); + --blurDefault: blur(5px); + --blurLarge: blur(10px); + --blurLargest: blur(20px); + + /* Base theme colors */ --darkerGradientPoint: #111827; --darkerGradientPointAlpha: rgba(17, 24, 39, 0.85); --lighterGradientPoint: #1d2635; @@ -54,32 +83,50 @@ --selectorBackgroundColor: hsl(217, 19%, 27%); --selectorBackgroundColorAlpha: hsla(217, 19%, 27%, 0.5); - --osdSeekBarPlayedColor: var(--textColor); - --osdSeekBarBufferedColorAlpha: rgba(128, 128, 128, 0.5); - --osdSeekBarThumbColor: white; - --tableBodyColor: rgb(31 41 55 / 1); - --accentColor: rgb(117 111 226); - --accentHoverColor: hsl(243, 75%, 62%); - --btnMiniPlayColor: rgb(41 154 93); + /* dark theme colors */ + --textColor: rgb(209, 213, 219); + --dimTextColor: rgb(156, 163, 175); + --fullContrastColor: #fff; + --zeroContrastColor: #000; + --svgIconFilter: none; + --clearLogoFilter: none; + + --accentColor: hsl(243, 75%, 62%); + --accentHoverColor: rgb(117, 111, 226); + --semiTransparentAccentColor: rgba(255, 255, 255, 0.125); + + --btnPlayColor: var(--textColor); + --btnPlayBorderColor: var(--borderColor); + + --btnMiniPlayColor: rgb(41, 154, 93); --btnMiniPlayBorderColor: rgb(50, 167, 105); /* Base component colors */ --btnDeleteColor: rgb(169, 29, 29); --btnDeleteBorderColor: rgb(217, 84, 84); --btnSubmitColor: rgb(61, 54, 178); - --btnSubmitBorderColor: rgb(117 111 226); + --btnSubmitBorderColor: rgb(117, 111, 226); --checkboxCheckedBgColor: rgb(79, 70, 229); --highlightOutlineColor: rgb(37, 99, 235); - --defaultBorder: var(--borderWidth) solid var(--borderColor); - --defaultLighterBorder: var(--borderWidth) solid var(--lighterBorderColor); + --hoverBackgroundColor: var(--textColor); + --hoverTabBackgroundColor: rgba(255, 255, 255, 0.9); + --hoverTextColor: #fff; + --activeBackgroundColor: var(--semiTransparentAccentColor); + --activeTextColor: #fff; - /* dark theme based text colors */ - --textColor: rgb(209, 213, 219); - --dimTextColor: rgb(156, 163, 175); - --fullContrastColor: #fff; - --zeroContrastColor: #000; - --svgFilter: none; + --cardHoverBorderColor: #fff; + --cardResumeProgressColor: var(--textColor); + --multiSelectOverlayColor: rgba(0, 0, 0, 0.8); + + --dividerColor: rgba(255, 255, 255, 0.05); + --textareaBackgroundColor: var(--selectorBackgroundColor); + + --tableBodyColor: rgb(31, 41, 55); + + --osdSeekBarPlayedColor: var(--textColor); + --osdSeekBarBufferedColorAlpha: rgba(128, 128, 128, 0.5); + --osdSeekBarThumbColor: #fff; /* textures */ --backgroundGradient: linear-gradient(0deg, var(--darkerGradientPoint) 35%, var(--lighterGradientPoint)); @@ -87,7 +134,7 @@ --backgroundAlphaOverlay: linear-gradient(180deg, var(--darkerGradientPointAlpha) 80%, transparent); --headerColorGradient: linear-gradient(180deg, rgba(30, 40, 54, 0.95) 30%, 55%, transparent 90%); --headerColorGradientAlt: linear-gradient(180deg, rgba(30, 40, 54, 1), 70%, transparent); - --headerBlurMask: linear-gradient(180deg, white 50%, 85%, transparent); + --headerBlurMask: linear-gradient(180deg, #fff 50%, 85%, transparent); --cardFooterGradient: linear-gradient(0deg, hsla(0, 0%, 5%, 0.95), 40%, transparent); --topOSDGradient: linear-gradient(180deg, hsla(0, 0%, 0%, 0.8), 45%, hsla(0, 0%, 0%, 0)); @@ -110,32 +157,10 @@ --itemBackdropMask: linear-gradient(180deg, rgba(0, 0, 0, 0.8), 75%, transparent); - /* standard component sizes */ - --largerRadius: 1.25em; - --largeRadius: 1em; - --smallRadius: 0.5em; - --smallerRadius: 0.375em; - --borderWidth: 0.06em; - --borderWidthDouble: 0.12em; - - --sidePadding: 3.3%; - --itemColumnGap: 1em; - - --minEpisodeCardWidth: 26em; - - --blurSmallest: blur(2px); - --blurDefault: blur(5px); - --blurLarge: blur(10px); - --blurLargest: blur(20px); - --shadow: 0.1em 0.1em 0.15em hsla(0, 0%, 0%, 0.3); --cardShadow: 0 1px 6px 0px hsla(0, 0%, 0%, 0.3); --iconShadow: 0px 0px 2px hsla(0, 0%, 0%, 0.8), 1px 1px 0px hsla(0, 0%, 0%, 0.5); - /* use "" to enable a fancy blur behind the app header / top bar [default]; - use none (without quotes) to disable it */ - --headerBlurLayerVisibility: ""; - /* use --headerColorGradient if the above is enabled [default]; use --headerColorGradientAlt otherwise */ --headerBackground: var(--headerColorGradient); @@ -150,8 +175,8 @@ --overlayPlayButtonPosition: 2.8em; /* use 'Material Symbols Rounded' for the new icons (~5mb) [default]; - use 'Material Symbols Rounded Minimal' to reduce bandwidth usage (~115kb) (may break compatibility with plugins); - use 'Material Icons' to revert to stock Jellyfin icons */ + use 'Material Symbols Rounded Minimal' to reduce bandwidth usage (~115kb) (may break compatibility with plugins); */ + /* use 'Material Icons' to revert to stock Jellyfin icons */ --iconPack: "Material Symbols Rounded"; /* none: hides the watched and mark favorite buttons on hover [default]; @@ -195,7 +220,7 @@ --miniOverlayButtonVisibility: block; /* none: keeps the media 'Ends at...' time indicator always hidden on phones [default]; - block: shows the the time when the media will end */ + block: shows the time when the media will end */ --endsAtVisibility: block; /* block: keeps the critics tomato rating visible [default]; @@ -206,9 +231,21 @@ use none (without quotes) to disable it */ --cardHoverEffect: ""; - /* use 5em to enable the fading app bar (seamless); - use 4.6em to get the solid app bar (cleaner with border) */ - --appBarHeight: 5em; + /* uncomment the block below to enable solid app bar style + keep it commented out to keep the seamless app bar style */ + /* + --appBarSeamlessBlur: none; + --appBarBlurStrength: var(--blurLargest); + --appBarColor: var(--headerColor); + --appBarBorder: var(--defaultBorder); + --appBarTabsPadding: 0; + */ + + /* uncomment the block below to enable fully transparent app bar style */ + /* + --appBarSeamlessBlur: none; + --appBarColor: transparent; + */ /* use 10% to crop the top 10% of a backdrop image on a 16:9 screen (recommended) [default]; use a figure between 0% and 20% according to your liking */ @@ -219,10 +256,87 @@ --resumeCardScale: 1; } +:root[data-theme="light"] { + color-scheme: light; + + /* Material Symbols font-variation-settings */ + --fill: 0; + + --darkerGradientPoint: #f2f2f2; + --darkerGradientPointAlpha: rgba(242, 242, 242, 0.85); + --lighterGradientPoint: #eeeeee; + --lighterGradientPointAlpha: rgba(255, 255, 255, 0.85); + + --headerColor: rgba(238, 238, 238, 0.8); + --drawerColor: rgba(238, 238, 238, 0.9); + + --borderColor: #b1b1b1; + --darkerBorderColor: #cacaca; + --lighterBorderColor: rgba(0, 0, 0, 0.2); + + --selectorBackgroundColor: #ffffff; + --selectorBackgroundColorAlpha: rgba(228, 228, 228, 0.5); + + --textColor: hsl(0, 0%, 13%); + --dimTextColor: hsl(0, 0%, 35%); + + --fullContrastColor: #000; + --zeroContrastColor: #fff; + + --svgIconFilter: invert(1); + --clearLogoFilter: invert(1) brightness(0.5) hue-rotate(180deg); + + --accentColor: hsl(246, 77%, 57%); + --accentHoverColor: hsl(244, 92%, 64%); + + --btnPlayColor: var(--accentColor); + --btnPlayBorderColor: var(--btnSubmitBorderColor); + + --btnMiniPlayColor: hsl(147, 55%, 38%); + --btnMiniPlayBorderColor: hsl(147, 53%, 43%); + + --btnDeleteColor: hsl(2, 61%, 45%); + --btnDeleteBorderColor: hsl(0, 78%, 65%); + --btnSubmitColor: hsl(241, 57%, 54%); + --btnSubmitBorderColor: hsl(243, 66%, 66%); + + --checkboxCheckedBgColor: hsl(241, 90%, 65%); + --highlightOutlineColor: hsl(221, 100%, 60%); + + --hoverBackgroundColor: var(--accentHoverColor); + --hoverTabBackgroundColor: var(--accentHoverColor); + --hoverTextColor: #fff; + + --activeBackgroundColor: var(--accentHoverColor); + --activeTextColor: #fff; + + --cardHoverBorderColor: var(--accentHoverColor); + --cardResumeProgressColor: #fff; + --multiSelectOverlayColor: rgb(208, 208, 208, 0.8); + + --dividerColor: rgba(0, 0, 0, 0.05); + --textareaBackgroundColor: #fff; + + --tableBodyColor: #fff; + + --osdSeekBarPlayedColor: var(--accentHoverColor); + --osdSeekBarThumbColor: var(--accentColor); + + --backgroundGradient: var(--lighterGradientPoint); + + --headerColorGradient: linear-gradient(180deg, rgba(255, 255, 255, 0.95) 30%, 55%, transparent 90%); + --headerColorGradientAlt: linear-gradient(180deg, rgba(255, 255, 255, 0.95), 70%, transparent); + + --cardFooterGradient: linear-gradient(0deg, hsla(0, 0%, 8%, 0.8), 40%, transparent); + + --shadow: 0.1em 0.1em 0.15em hsla(0, 0%, 0%, 0); + --cardShadow: 0 1px 6px 0px hsl(0, 0%, 85%); +} + :root.layout-mobile { --headerColorGradient: var(--headerColorGradientAlt); --blurLargest: blur(12px); - --headerBlurMask: linear-gradient(180deg, white 60%, 90%, transparent); + --headerBlurMask: linear-gradient(180deg, #fff 60%, 90%, transparent); --itemColumnGap: 0.4em; } @@ -260,23 +374,31 @@ select { direction: ltr; vertical-align: middle; text-rendering: geometricPrecision; + font-feature-settings: "liga"; -moz-osx-font-smoothing: grayscale; - -webkit-font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; font-variation-settings: - "FILL" 1, - "wght" 400, - "GRAD" 0, - "opsz" 48; + "FILL" var(--fill), + "wght" var(--wght), + "GRAD" var(--grad), + "opsz" var(--opsz); + transition: font-variation-settings 0.25s; } .material-icons.info_outline:before { content: "\e88e"; - font-variation-settings: - "FILL" 0, - "wght" 400, - "GRAD" 0, - "opsz" 48; +} + +.detailButton-icon { + --fill: 0; +} + +.ratingbutton-icon-withrating, +.starIcon, +.cardOverlayButtonIcon, +.indicatorIcon, +.cardImageIcon { + --fill: 1; } .dashboardFooter { @@ -369,6 +491,7 @@ select { .mediaSourceIndicator { background: rgb(31, 80, 189); border: var(--defaultLighterBorder); + color: #fff; } .layout-mobile .indicator { @@ -441,7 +564,7 @@ select { .card-hoverable:hover .cardScalable, .card-hoverable:hover .visualCardBox { - border-color: var(--fullContrastColor) !important; + border-color: var(--cardHoverBorderColor) !important; } .card-hoverable:hover .visualCardBox .cardScalable { @@ -504,10 +627,10 @@ select { .cardBox:not(.visualCardBox) .cardPadder { background-color: var(--lighterGradientPoint); + box-shadow: none; } .cardOverlayContainer > .cardOverlayFab-primary { - left: unset; margin-left: unset; margin-top: unset; top: unset; @@ -519,21 +642,20 @@ select { .listItemImageButton, .layout-mobile .cardOverlayButton-br:not([data-action="menu"]) > .cardOverlayButtonIcon { background-color: var(--btnMiniPlayColor) !important; - color: white; + color: #fff !important; border: var(--defaultLighterBorder); border-color: var(--btnMiniPlayBorderColor); font-size: 75%; - box-shadow: var(--shadow); z-index: 2; } .cardOverlayContainer > .cardOverlayFab-primary:hover, .listItemImageButton:hover { - color: white; + color: #fff; } -.layout-desktop .cardOverlayButton-br, -[dir="ltr"].layout-desktop .cardOverlayButton-br { +[dir="ltr"] .layout-desktop .cardOverlayButton-br, +.layout-desktop .cardOverlayButton-br { bottom: 1.2em; right: 0.7em; z-index: 1; @@ -541,10 +663,11 @@ select { } .layout-desktop .cardOverlayButton-br > button { - color: white; + color: #fff; display: var(--extraCardButtonsVisibility); text-shadow: var(--iconShadow); } + .cardOverlayButton-br .cardOverlayButton-hover[data-action="menu"], .layout-desktop .listItemButton[data-action="menu"] { display: var(--menuButtonVisibility); @@ -571,7 +694,7 @@ select { background-color: transparent !important; border: none; text-shadow: var(--iconShadow); - color: white; + color: #fff; } .cardOverlayContainer:has(> button:hover) { @@ -588,7 +711,6 @@ select { } /* episode grid start */ - @supports (display: revert) { .layout-desktop .vertical-list:has(.listItem-largeImage) { display: grid; @@ -637,7 +759,6 @@ select { align-self: center; } } - /* episode grid end */ .portraitCard { @@ -1019,14 +1140,12 @@ select { } .layout-desktop .detailPageWrapperContainer { - background: transparent; min-height: 46vh; background: linear-gradient(180deg, transparent, 17vh, var(--darkerGradientPointAlpha) 50vh); } .layout-tv .detailPageWrapperContainer { padding-left: 30vw; - background: transparent; min-height: 46vh; background: linear-gradient(0deg, var(--darkerGradientPointAlpha) 70%, 85%, transparent); } @@ -1112,6 +1231,10 @@ select { overflow: hidden; } +.paper-icon-button-light { + transition: none; +} + .paper-icon-button-light > .material-icons { font-size: 1.25em; } @@ -1121,7 +1244,7 @@ select { #itemDetailPage .scrollX { margin: 0 calc(-1 * var(--sidePadding)); padding-left: var(--sidePadding); - /* mask-image: linear-gradient(90deg, transparent, white var(--sidePadding), white calc(100vw - var(--sidePadding)), transparent); */ + /* mask-image: linear-gradient(90deg, transparent, #fff var(--sidePadding), #fff calc(100vw - var(--sidePadding)), transparent); */ } .layout-desktop .emby-scroller-container, @@ -1152,13 +1275,16 @@ select { color: transparent; } -.layout-desktop .sectionTitle, -.layout-tv .sectionTitle { +.sectionTitle { font-size: 1.5rem !important; } -.emby-scrollbuttons, -[dir="ltr"] .emby-scrollbuttons { +.layout-mobile .sectionTitle { + font-size: 1.35rem !important; +} + +[dir="ltr"] .emby-scrollbuttons, +.emby-scrollbuttons { padding-top: 0; } @@ -1202,7 +1328,6 @@ select { -webkit-text-fill-color: transparent; margin-left: -0.125em; transform: translateY(-0.02em); - font-variation-settings: "FILL" 1 !important; } [dir="ltr"] .mediaInfoCriticRating { @@ -1337,6 +1462,7 @@ body:not(.hide-scroll) > .videoPlayerContainer { transform: translateY(-100%); margin: auto 30%; height: 25vh; + filter: var(--clearLogoFilter); background-position: bottom; } @@ -1407,7 +1533,6 @@ body:not(.hide-scroll) > .videoPlayerContainer { } .layout-mobile .detailImageContainer .card { - -webkit-filter: drop-shadow(0 0 0.25rem rgba(0, 0, 0, 0.25)); filter: drop-shadow(0 0 0.25rem rgba(0, 0, 0, 0.25)); } @@ -1449,7 +1574,7 @@ body:not(.hide-scroll) > .videoPlayerContainer { margin-top: 0.5em; } -/* this hides the detail logo when media card is visible */ +/* this hides the detail logo when media card is visible */ #itemDetailPage:has(.detailImageContainer .backdropCard) .detailLogo, #itemDetailPage:has(.detailImageContainer .album) .detailLogo { z-index: 2; @@ -1741,7 +1866,7 @@ html, .itemProgressBarForeground { border-radius: 0 var(--largeRadius) var(--largeRadius) 0; - background-color: light-dark(var(--zeroContrastColor), var(--textColor)); + background-color: var(--cardResumeProgressColor); opacity: 0.75; } @@ -1756,12 +1881,12 @@ html, ::-moz-progress-bar { background: var(--accentColor) !important; - border-radius: var(--smallRadius) inherit var(--smallRadius) 0; + /* border-radius: var(--smallRadius) 0 var(--smallRadius) 0; */ } ::-webkit-progress-value { background: var(--accentColor) !important; - border-radius: var(--smallRadius) inherit var(--smallRadius) 0; + /* border-radius: var(--smallRadius) 0 var(--smallRadius) 0; */ } progress, @@ -1970,68 +2095,68 @@ progress + span { .layout-desktop .itemExternalLinks > a:hover, .itemExternalLinks > a:active { background-color: var(--accentColor) !important; - color: white !important; + color: #fff !important; } .layout-desktop .itemExternalLinks > a[href*="themoviedb.org"]:hover, .itemExternalLinks > a[href*="themoviedb.org"]:active { - background-color: rgb(26, 183, 216) !important; - color: black !important; + background-color: #1ab7d8 !important; + color: #000 !important; } .layout-desktop .itemExternalLinks > a[href*="imdb.com"]:hover, .itemExternalLinks > a[href*="imdb.com"]:active { - background-color: rgb(226, 182, 22) !important; - color: black !important; + background-color: #e2b616 !important; + color: #000 !important; } .layout-desktop .itemExternalLinks > a[href*="thetvdb.com"]:hover, .itemExternalLinks > a[href*="thetvdb.com"]:active { - background-color: rgb(108, 213, 145) !important; - color: black !important; + background-color: #6cd591 !important; + color: #000 !important; } .layout-desktop .itemExternalLinks > a[href*="trakt.tv"]:hover, .itemExternalLinks > a[href*="trakt.tv"]:active { - background-color: rgb(171, 58, 173) !important; - color: white !important; + background-color: #ab3aad !important; + color: #fff !important; } .layout-desktop .itemExternalLinks > a[href*="theaudiodb.com"]:hover, .itemExternalLinks > a[href*="theaudiodb.com"]:active { - background-color: rgb(99, 153, 204) !important; + background-color: #6399cc !important; color: rgb(15, 22, 28) !important; } .layout-desktop .itemExternalLinks > a[href*="musicbrainz.org"]:hover, .itemExternalLinks > a[href*="musicbrainz.org"]:active { - background-color: rgb(186, 71, 143) !important; - color: white !important; + background-color: #ba478f !important; + color: #fff !important; } /* Support for Jellyfin Enhanced (https://github.com/n00bcodr/Jellyfin-Enhanced) */ .layout-desktop .itemExternalLinks > a[href*="letterboxd.com"]:hover, .itemExternalLinks > a[href*="letterboxd.com"]:active { - background-color: rgb(20, 24, 28) !important; - color: white !important; + background-color: #14181c !important; + color: #fff !important; } .layout-desktop .itemExternalLinks > a[title*="Radarr"]:hover, .itemExternalLinks > a[title*="Radarr"]:active { - background-color: rgb(255, 194, 48) !important; - color: black !important; + background-color: #ffc230 !important; + color: #000 !important; } .layout-desktop .itemExternalLinks > a[title*="Sonarr"]:hover, .itemExternalLinks > a[title*="Sonarr"]:active { - background-color: rgb(7, 186, 233) !important; - color: black !important; + background-color: #07bae9 !important; + color: #000 !important; } .layout-desktop .itemExternalLinks > a[title*="Bazarr"]:hover, .itemExternalLinks > a[title*="Bazarr"]:active { background-color: var(--textColor) !important; - color: black !important; + color: #000 !important; } .itemTags, @@ -2123,7 +2248,7 @@ progress + span { .innerCardFooter, .chapterThumbTextContainer { background: var(--cardFooterGradient); - text-shadow: var(--shadow); + text-shadow: var(--iconShadow); padding: 0em 2em 2em 2em; align-content: end; display: grid; @@ -2229,7 +2354,6 @@ progress + span { .emby-checkbox:checked + span + .checkboxOutline { border-radius: var(--smallerRadius) !important; - box-shadow: inset 0em 7em 10em 20px rgba(0, 0, 0, 0.8); background: transparent; border-color: var(--fullContrastColor); border-style: solid; @@ -2237,9 +2361,13 @@ progress + span { outline: none; } +.emby-checkbox:checked + span + .multiSelectCheckboxOutline { + box-shadow: inset 0em 7em 10em 20px var(--multiSelectOverlayColor); +} + @supports (display: revert) { .emby-checkbox:checked + span + .checkboxOutline { - outline: solid var(--borderWidth) var(--fullContrastColor); + outline: solid var(--borderWidth) #fff; } } @@ -2287,6 +2415,16 @@ progress + span { height: calc(100% - 3em); } +.cardText-secondary, +.fieldDescription, +.guide-programNameCaret, +.listItem .secondary, +.nowPlayingBarSecondaryText, +.programSecondaryTitle, +.secondaryText { + color: var(--dimTextColor); +} + .cardFooter + .itemSelectionPanel > .checkboxContainer, .cardScalable + .itemSelectionPanel > .checkboxContainer { height: 100%; @@ -2306,12 +2444,11 @@ progress + span { .checkboxOutline:not(.multiSelectCheckboxOutline) { border: solid gray var(--borderWidth); - background-color: white; + background-color: #fff; transition: all 0.125s; } .emby-checkbox:checked + span + .checkboxOutline:not(.multiSelectCheckboxOutline) { - box-shadow: none; background: var(--checkboxCheckedBgColor); border: var(--defaultLighterBorder); } @@ -2327,13 +2464,8 @@ progress + span { } @supports (display: revert) { - .emby-checkbox:focus:not(:checked) + span + .checkboxOutline { - outline: var(--borderWidth) solid gray; - outline-offset: calc(-2.5 * var(--borderWidth)); - } - .emby-checkbox:focus + span + .checkboxOutline { - border-color: var(--fullContrastColor) !important; + border-color: #fff !important; outline: var(--borderWidth) solid var(--highlightOutlineColor); } } @@ -2447,39 +2579,10 @@ div[data-type="PhotoAlbum"] .play_arrow:before { padding: 0.5em 0.5em !important; } -.detailButton-icon { - font-variation-settings: - "FILL" 0, - "wght" 400, - "GRAD" 0, - "opsz" 48; -} - .cardScalable .material-icons.check:before { - font-variation-settings: - "FILL" 1, - "wght" 700, - "GRAD" 0, - "opsz" 20; transform: scale(1.25); } -.cardScalable .material-icons.more_vert:before { - font-variation-settings: - "FILL" 1, - "wght" 700, - "GRAD" 0, - "opsz" 35; -} - -.emby-button[title="Favorite"] .material-icons.favorite:before { - font-variation-settings: - "FILL" 1, - "wght" 400, - "GRAD" 0, - "opsz" 20; -} - .detailButton:not(.btnPlay) { color: var(--textColor); backdrop-filter: none; @@ -2492,19 +2595,19 @@ div[data-type="PhotoAlbum"] .play_arrow:before { .layout-desktop .detailButton:not(.btnPlay):hover { color: var(--zeroContrastColor); - background: var(--dimTextColor); + background: var(--hoverBackgroundColor); } .detailButton:active { - color: var(--zeroContrastColor); - background: var(--textColor); + color: #fff; + background: var(--activeBackgroundColor); } .btnPlay.detailButton { - background-color: var(--textColor); + background-color: var(--btnPlayColor); color: var(--zeroContrastColor); border-radius: 3em; - border-color: var(--borderColor); + border-color: var(--btnPlayBorderColor); height: 3em; min-width: 10em; margin-right: 0.5em !important; @@ -2522,13 +2625,9 @@ div[data-type="PhotoAlbum"] .play_arrow:before { } .btnPlay > .detailButton-content { - -webkit-align-items: unset; align-items: unset; - display: -webkit-flex; display: flex; - -webkit-flex-direction: unset; flex-direction: unset; - -webkit-justify-content: unset; align-content: unset; justify-content: flex-start; } @@ -2581,19 +2680,21 @@ div[data-role="controlgroup"] a.ui-btn-active { #btnShutdown { background: var(--btnDeleteColor) !important; border: solid var(--btnDeleteBorderColor) var(--borderWidth); - color: white !important; + color: #fff !important; } -.button-submit { +.button-submit, +.upNextContainer .btnStartNow, +.MuiButton-colorPrimary { background: var(--btnSubmitColor) !important; border: solid var(--btnSubmitBorderColor) var(--borderWidth) !important; - color: white !important; + color: #fff !important; } .userPreferencesPage .button-submit { position: sticky !important; bottom: calc(1em + max(env(safe-area-inset-bottom), var(--safe-area-inset-bottom, 1px))); - box-shadow: 0 0.75em 2em 3em var(--darkerGradientPoint); + box-shadow: 0 0.75em 2em 2em var(--darkerGradientPoint); z-index: 2 !important; } @@ -2695,11 +2796,6 @@ div[data-role="controlgroup"] a.ui-btn-active { background-color: rgba(255, 255, 255, 0.07); } -/* [dir="ltr"] .listItem:not(.actionSheetMenuItem)[data-type="Episode"] .listItemBodyText:not(.secondary) { - font-size: 1.17em; - font-weight: 600; -} */ - .listItem-largeImage .listItemBodyText:not(.secondary) { font-size: 1.17em; font-weight: 600; @@ -2715,7 +2811,7 @@ div[data-role="controlgroup"] a.ui-btn-active { -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; - color: var(--textColor); + color: inherit; } .listItem-overview { @@ -2748,7 +2844,8 @@ div[data-role="controlgroup"] a.ui-btn-active { .listItem:active, .navMenuOption:active { - background: rgba(255, 255, 255, 0.125); + background: var(--activeBackgroundColor); + color: #fff; } .listItem-border { @@ -2769,11 +2866,12 @@ div[data-role="controlgroup"] a.ui-btn-active { .Mui-selected { background-color: var(--accentColor) !important; + color: #fff; } .actionsheetDivider { height: 2px; - background: rgb(255, 255, 255, 0.05); + background: var(--dividerColor); } .actionsheet-xlargeFont { @@ -2801,7 +2899,7 @@ div[data-role="controlgroup"] a.ui-btn-active { } .actionSheetMenuItem:has(.listItemIcon.check) .listItemBodyText { - color: white; + color: var(--activeTextColor); } .actionSheetMenuItem:has(.listItemIcon.check) .listItemIcon.check { @@ -2812,8 +2910,13 @@ div[data-role="controlgroup"] a.ui-btn-active { background-color: transparent; } +.actionSheetMenuItem:has(.listItemIcon.check[style*="hidden"]) .listItemBodyText { + color: var(--fullContrastColor); + background-color: transparent; +} + .actionSheetMenuItem:has(.listItemIcon.check[style*="hidden"]):active { - background-color: rgba(255, 255, 255, 0.125); + background-color: var(--semiTransparentAccentColor); } .navMenuOption { @@ -2844,7 +2947,8 @@ div[data-role="controlgroup"] a.ui-btn-active { margin-bottom: 1.5em; } -/* Support .tmdb-review-swipe-container for Jellyfin Enhanced (https://github.com/n00bcodr/Jellyfin-Enhanced) */ +/* Support .tmdb-review-swipe-container for Jellyfin Enhanced + (https://github.com/n00bcodr/Jellyfin-Enhanced) */ .tmdb-review-swipe-container { max-width: 93vw; } @@ -2905,22 +3009,22 @@ div[data-role="controlgroup"] a.ui-btn-active { .selectVideoContainer.trackSelectionFieldContainer > label { background-image: url('data:image/svg+xml,'); - filter: var(--svgFilter); + filter: var(--svgIconFilter); } .selectAudioContainer.trackSelectionFieldContainer > label { background-image: url('data:image/svg+xml,'); - filter: var(--svgFilter); + filter: var(--svgIconFilter); } .selectSubtitlesContainer.trackSelectionFieldContainer > label { background-image: url('data:image/svg+xml,'); - filter: var(--svgFilter); + filter: var(--svgIconFilter); } .selectSourceContainer.trackSelectionFieldContainer > label { background-image: url('data:image/svg+xml,'); - filter: var(--svgFilter); + filter: var(--svgIconFilter); } .detailSectionContent a:not(.overview-expand) { @@ -3064,6 +3168,7 @@ div[data-role="controlgroup"] a.ui-btn-active { } .alphaPickerButton-selected { + background-color: var(--btnPlayColor); color: var(--zeroContrastColor) !important; } @@ -3191,17 +3296,14 @@ div[data-role="controlgroup"] a.ui-btn-active { font-size: unset; } -.sectionTitleTextButton > .material-icons::before { - content: "arrow_circle_right"; +.sectionTitleTextButton > .chevron_right { + --fill: 0; + --opsz: 48; font-size: 1.5rem; - font-variation-settings: - "FILL" 0, - "wght" 500, - "opsz" 48; } -.layout-mobile .sectionTitleTextButton > .material-icons::before { - font-size: 1.25rem; +.sectionTitleTextButton > .chevron_right::before { + content: "arrow_circle_right"; } .toast { @@ -3219,11 +3321,6 @@ div[data-role="controlgroup"] a.ui-btn-active { max-width: 80vw; } -.upNextContainer .btnStartNow { - background-color: var(--btnSubmitColor); - border-color: var(--btnSubmitBorderColor); -} - .upNextDialog-title { white-space: pre-wrap; width: unset; @@ -3277,17 +3374,11 @@ div[data-role="controlgroup"] a.ui-btn-active { width: 98% !important; } -.emby-tab-button:hover { - color: whitesmoke; -} - @media (hover: hover) and (pointer: fine) { .paper-icon-button-light:hover:not(:disabled) { - color: white; - } - - .actionSheetMenuItem.emby-button:has(.listItemIcon.material-icons.check[style*="hidden"]):hover { - background-color: rgba(255, 255, 255, 0.125); + color: var(--zeroContrastColor); + text-shadow: none !important; + background-color: var(--hoverBackgroundColor); } .emby-select-withcolor:hover:not(.emby-select[disabled], :focus), @@ -3307,7 +3398,8 @@ div[data-role="controlgroup"] a.ui-btn-active { } .btnPlay.detailButton:hover { - background-color: var(--textColor); + background-color: var(--btnPlayColor); + filter: brightness(1.1); color: var(--zeroContrastColor); } @@ -3315,13 +3407,28 @@ div[data-role="controlgroup"] a.ui-btn-active { color: var(--fullContrastColor); } - .listItem:hover { - background: rgba(255, 255, 255, 0.125); + .listItem-largeImage:hover { backdrop-filter: var(--blurLargest); } - .navMenuOption:hover { - background: rgba(255, 255, 255, 0.125); + .listItem:not(.actionSheetMenuItem:has(.check)):hover { + color: var(--hoverTextColor) !important; + background: var(--activeBackgroundColor) !important; + } + + .listItem:hover .listItemBodyText, + .listItem:hover .secondary { + color: var(--hoverTextColor) !important; + } + + .navMenuOption:not(.navMenuOption-selected):hover { + color: var(--hoverTextColor) !important; + background: var(--activeBackgroundColor) !important; + } + + .actionSheetMenuItem:has(.listItemIcon.check[style*="hidden"]):hover { + color: var(--hoverTextColor) !important; + background: var(--activeBackgroundColor) !important; } .searchfields-icon:hover, @@ -3342,11 +3449,22 @@ div[data-role="controlgroup"] a.ui-btn-active { color: var(--textColor) !important; text-decoration: none; } + + .sectionTabs .emby-tab-button:hover { + color: var(--zeroContrastColor); + background-color: var(--hoverTabBackgroundColor); + } } .paper-icon-button-light:active:not(:disabled) { - color: white; - background-color: rgb(255 255 255 / 5%); + color: var(--zeroContrastColor); + text-shadow: none !important; + background-color: var(--hoverBackgroundColor); +} + +.layout-mobile .cardOverlayButton-br:active > .cardOverlayButtonIcon { + color: var(--zeroContrastColor); + text-shadow: none; } .emby-textarea { @@ -3387,6 +3505,7 @@ div[data-role="controlgroup"] a.ui-btn-active { .emby-textarea:focus { border-color: var(--highlightOutlineColor) !important; outline: thin solid var(--highlightOutlineColor) !important; + background-color: var(--textareaBackgroundColor); } } @@ -3451,7 +3570,6 @@ div[data-role="controlgroup"] a.ui-btn-active { overflow: hidden; display: -webkit-box !important; -webkit-line-clamp: 3; - line-clamp: 3; -webkit-box-orient: vertical; } @@ -3501,7 +3619,7 @@ div[data-role="controlgroup"] a.ui-btn-active { } .programCell-active .guideProgramName { - background-color: rgba(255, 255, 255, 0.125); + background-color: var(--semiTransparentAccentColor); } .guideVerticalScroller { @@ -3515,7 +3633,7 @@ div[data-role="controlgroup"] a.ui-btn-active { } .guide-channelHeaderCell { - background-color: rgba(255, 255, 255, 0.125); + background-color: var(--semiTransparentAccentColor); margin: 0.35em 0.7em 0.7em 0.7em; width: auto; height: calc(4.42em - 0.7em); @@ -3603,6 +3721,7 @@ table:not(.MuiTable-root.MuiTable-stickyHeader) { .MuiList-root.MuiMenu-list { background-color: var(--drawerColor); + padding: 0.375em; } ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { @@ -3713,6 +3832,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { .runtime { width: 4.5em; box-sizing: border-box; + font-variant-numeric: tabular-nums; } .startTimeText { @@ -3777,7 +3897,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { } .nowPlayingPageImageContainerNoAlbum .defaultCardBackground { - background: repeating-radial-gradient(black, transparent 10em); + background: repeating-radial-gradient(#000, transparent 10em); } .nowPlayingPageImageContainerNoAlbum .cardImageContainer .cardImageIcon { @@ -3797,6 +3917,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { background: var(--drawerColor); border-top: var(--defaultBorder); backdrop-filter: var(--blurSmallest); + color: var(--textColor); z-index: 1; } @@ -3804,6 +3925,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { background: transparent; border-top: var(--defaultBorder); border-color: transparent; + color: var(--textColor); } .layout-desktop .nowPlayingInfoContainer { @@ -3945,14 +4067,29 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { transition: transform 0.5s; } -/* this is the default solid header, visible in home and libraries */ +/* this is the default seamless header, visible in home and libraries */ +/* var(--solid, --seamless) */ .skinHeader-blurred:not(.osdHeader):not(.semiTransparent) { - backdrop-filter: var(--blurLarge); - background: var(--headerColor); - border: var(--defaultBorder); + backdrop-filter: var(--appBarBlurStrength, none); + background-color: transparent; + background: var(--appBarColor, var(--headerBackground)); + border: var(--appBarBorder, none); border-width: 0 0 var(--borderWidth) 0; } +.skinHeader-blurred:not(.osdHeader):not(.semiTransparent)::after { + content: var(--appBarSeamlessBlur, ""); + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + backdrop-filter: var(--blurLargest); + -webkit-mask: var(--headerBlurMask); + mask: var(--headerBlurMask); + z-index: -1; +} + .layout-mobile .skinHeader-blurred:not(.osdHeader), .layout-mobile .withSectionTabs .headerTop { padding: 0; @@ -3961,6 +4098,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { .sectionTabs { display: inline-grid; height: var(--appBarHeight); + padding-bottom: var(--appBarTabsPadding, 1.5em); } .layout-mobile .sectionTabs { @@ -3983,10 +4121,10 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { border: none; } -.skinHeader-withBackground.semiTransparent .headerButton, -.skinHeader.headroom:not(.osdHeader, .noHomeButtonHeader):has(.pageTitle:empty) .headerButton { +.skinHeader-withBackground.semiTransparent .headerButton:not(:hover), +.skinHeader.headroom:not(.osdHeader, .noHomeButtonHeader):has(.pageTitle:empty) .headerButton:not(:hover) { text-shadow: var(--iconShadow); - color: white; + color: #fff; } /* this keeps the header elements aligned when its height is modified */ @@ -4025,13 +4163,19 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { } .noHomeButtonHeader .emby-tab-button:before { + --fill: 0; font-family: var(--iconPack), Material Icons; font-feature-settings: "liga"; /* padding-inline-end: 0.5ch; */ font-size: 1.2em; - font-variation-settings: "FILL" 0; + font-variation-settings: + "FILL" var(--fill), + "wght" var(--wght), + "GRAD" var(--grad), + "opsz" var(--opsz); + transition: font-variation-settings 0.25s; } .layout-tv .sectionTabs .emby-tabs.smoothScrollX { @@ -4052,7 +4196,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { .sectionTabs .emby-tab-button-active { margin: 0.25em 0.5em; color: var(--zeroContrastColor); - background-color: var(--textColor); + background-color: var(--btnPlayColor); } /* this increases page top padding when section tabs are expanded */ @@ -4126,54 +4270,6 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { margin: 0em 0.6em; } -/* this allows switching between the header styles easily */ -#reactRoot > div:nth-child(3) { - container-name: skinHeader; - container-type: size; - height: var(--appBarHeight); - position: sticky; - top: 0; - z-index: 1099; -} - -.touch-menu-la { - height: 100vh; - height: 100dvh; - z-index: 1099; -} - -@container skinHeader (min-height: 4.9em) { - /* this is the alternative faded app bar */ - .skinHeader-blurred:not(.osdHeader):not(.semiTransparent) { - backdrop-filter: none; - background-color: transparent; - border: none; - background: var(--headerBackground); - padding: 0; - } - - .skinHeader-blurred:not(.osdHeader):not(.semiTransparent)::after { - content: var(--headerBlurLayerVisibility); - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - backdrop-filter: var(--blurLargest); - -webkit-mask: var(--headerBlurMask); - mask: var(--headerBlurMask); - z-index: -1; - } - - .sectionTabs { - padding-bottom: 1.5em; - } - - .layout-mobile .sectionTabs { - align-content: center; - } -} - .skinHeader { /* this is for testing a fix for iOS */ padding-top: max(env(safe-area-inset-top), var(--safe-area-inset-top)) !important; @@ -4189,7 +4285,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { background: linear-gradient(transparent, var(--darkerGradientPointAlpha) 20em); } -/* performance improvements fot low-end TVs - start */ +/* performance improvements for low-end TVs - start */ /* .layout-tv *, .layout-tv *::before, @@ -4229,9 +4325,7 @@ ul.MuiList-root.MuiMenu-list.MuiList-dense > div:first-child { } .card.show-animation .cardBox { - transition: - transform 0.05s ease-out, - -webkit-transform 0.05s ease-out; + transition: transform 0.05s ease-out; } /* performance improvements fot low-end TVs - end */