/* * Jellyfin Slideshow by M0RPH3US v3.0.8 * Modified by CodeDevMLH v1.1.0.0 * * New features: * - optional Trailer background video support * - option to make video backdrops full width * - SponsorBlock support to skip intro/outro segments * - option to always show arrows * - option to disable/enable keyboard controls * - option to show/hide trailer button if trailer as backdrop is disabled (opens in a modal) * - option to wait for trailer to end before loading next slide * - option to set a maximum for the pagination dots (will turn into a counter style if exceeded) * - option to disable loading screen * - option to put collection (boxsets) IDs into the slideshow to display their items */ @import url(https://fonts.googleapis.com/css2?family=Archivo+Narrow:ital,wght@0,400..700;1,400..700&display=swap); .backdrop.animate { animation: frostedGlass 1.2s cubic-bezier(0.4, 0, 0.2, 1), kenBurnsZoomIn 10s ease-out forwards; } .logo.animate { animation: frostedGlass 1.2s cubic-bezier(0.4, 0, 0.2, 1); } @keyframes frostedGlass { from { filter: blur(8px); opacity: 0.7; } to { filter: blur(0); opacity: 1; } } @keyframes kenBurnsZoomIn { from { transform: scale3d(1, 1, 0); } to { transform: scale3d(1.1, 1.1, 0.1); } } .bar-loading { z-index: 99999999 !important; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-color: #000; display: flex; align-items: center; justify-content: center; opacity: 1; transition: opacity 0.3s ease-in-out; overflow: hidden; /*will-change: opacity;*/ } .bar-loading.hide { opacity: 0; } .loader-content { position: relative; display: flex; flex-direction: column; align-items: center; gap: 20px; width: 250px; height: auto; } .bar-loading h1 { width: 250px; margin: 0 auto; height: 250px; display: flex; justify-content: center; align-items: center; } .bar-loading h1 div { width: 250px; max-height: 250px; display: block; object-fit: contain; opacity: 0; transition: opacity 0.5s ease-in-out; } .progress-container { width: 200px; height: 6px; display: flex; align-items: center; position: relative; } .progress-bar { height: 5px; background: white; border-radius: 2px; transition: width 0.2s ease-in-out; } .progress-gap { width: 6px; height: 5px; background: transparent; flex-shrink: 0; } .unfilled-bar { height: 5px; background: #686868; border-radius: 2px; flex-grow: 1; transition: width 0.2s ease-in-out; } .layout-mobile .splashLogo { height: 12%; } .backdrop.low-quality { filter: blur(0.5px); transform: scale(1.01); transition: filter 0.3s ease-in-out, transform 0.3s ease-in-out; } .backdrop.high-quality { filter: blur(0); transform: scale(1); transition: filter 0.3s ease-in-out, transform 0.3s ease-in-out; } .logo.low-quality { filter: brightness(1) blur(0.5px); transition: filter 0.3s ease-in-out; } .logo.high-quality { filter: brightness(1.1) blur(0); transition: filter 0.3s ease-in-out; } .homeSectionsContainer { position: relative; top: 65vh; z-index: 6; } #slides-container { position: relative; width: 100vw; height: 90%; overflow: hidden; margin: 0 auto; pointer-events: auto; } #slides-container[style*="display: none"], #slides-container[style*="visibility: hidden"] { pointer-events: none !important; } .arrow { position: absolute; top: 50%; transform: translateY(-50%); font-size: 24px; cursor: pointer; color: #fff; z-index: 5; width: 40px; height: 40px; border-radius: 50%; display: block; text-align: center; -webkit-tap-highlight-color: #fff0; transition: background-color 0.3s ease, transform 0.2s ease; user-select: none; margin: 0; padding: 0; } .arrow i { display: block; font-size: 24px; line-height: 40px; width: 100%; height: 100%; text-align: center; margin: 0; padding: 0; } .arrow:hover { background-color: rgba(0, 0, 0, 0.4); backdrop-filter: blur(4px); transform: translateY(-50%) scale(1.1); } .left-arrow { left: 20px; } .right-arrow { right: 20px; } .pause-button { position: absolute; top: 5rem; right: 0.8rem; cursor: pointer; color: white; z-index: 10; opacity: 0.3; transition: opacity 0.3s ease; text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8); } .pause-button i { font-size: 1.5rem; } .pause-button:hover { opacity: 0.9; } @media (max-width: 1599px) { .pause-button { top: 8rem; } .pause-button i { font-size: 2rem; } } @media (max-width: 768px) { .pause-button i { font-size: 2.5rem; } } .mute-button { position: absolute; top: 5rem; right: 3.5rem; cursor: pointer; color: white; z-index: 10; opacity: 0.3; transition: opacity 0.3s ease; text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8); } .mute-button i { font-size: 1.5rem; } .mute-button:hover { opacity: 0.9; } @media (max-width: 1599px) { .mute-button { top: 8rem; } .mute-button i { font-size: 2rem; } } @media (max-width: 768px) { .mute-button i { font-size: 2.5rem; } } .dots-container { position: absolute; top: calc(50% + 18vh); right: 3%; z-index: 5; display: flex; justify-content: center; align-items: center; width: auto; height: auto; transition: opacity 0.3s ease-in-out; } .dot { display: inline-block; width: 0.5em; height: 0.5em; margin: 0 5px; background-color: #cecece99; border-radius: 50%; transform-origin: center; transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.5s ease-in-out; } .dot.active { background-color: #fff; transform: scale(1.7); } .slide { opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; transition: opacity 0.5s ease-in-out; z-index: 0; } .slide.active { opacity: 1; z-index: 1; } .backdrop-container { position: absolute; top: 0%; right: 0%; width: 100%; height: 100%; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); } .backdrop-container.full-width-video { overflow: hidden; mask-image: linear-gradient(to top, #fff0 0%, #fff0 10%, #000 25%); -webkit-mask-image: linear-gradient(to top, #fff0 0%, #fff0 10%, #000 25%); } .backdrop { right: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 20%; border-radius: 5px; z-index: 3; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); } .backdrop-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.2); border-radius: 5px; z-index: 4; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 4%, #000000 6%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 4%, #000000 6%); } .gradient-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(130deg, rgba(29, 29, 29, 0.65) 10%, rgba(29, 29, 29, 0.35) 30%, rgba(29, 29, 29, 0) 100%); z-index: 4; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 4%, #000000 6%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 4%, #000000 6%); } .gradient-overlay.full-width-video { z-index: 4; mask-image: linear-gradient(to top, #fff0 0%, #fff0 10%, #000 25%); -webkit-mask-image: linear-gradient(to top, #fff0 0%, #fff0 10%, #000 25%); } .logo-container { width: 40%; height: 35%; position: relative; display: flex; align-items: center; z-index: 5; top: 15vh; left: 4vw; } .logo { max-height: 70%; max-width: 100%; height: auto; width: auto; object-fit: contain; filter: brightness(1.5); font-size: 4rem; } .plot-container { position: absolute; top: calc(50% + 8vh); color: #fff; height: 15%; width: 90%; left: 4vw; z-index: 5; display: flex; align-items: flex-start; justify-content: flex-start; text-align: justify; box-sizing: border-box; } .plot { display: -webkit-box; line-clamp: 2; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .genre { display: flex; gap: 5px; align-items: center; justify-content: center; position: absolute; top: calc(50% + 4vh); left: 4vw; text-align: center; color: #fff; font-family: "Archivo Narrow", sans-serif; z-index: 5; flex-wrap: wrap; } .button-container { position: absolute; top: calc(50% + 17vh); left: 4vw; display: flex; z-index: 5; justify-content: space-between; gap: 15px; } .play-button, .trailer-button { display: inline-flex; flex-direction: row; align-items: center; justify-content: center; padding: 8px 16px; border: solid 0px rgba(255, 255, 255, 0); font-family: "Archivo Narrow", sans-serif; font-size: 18px; white-space: nowrap; cursor: pointer; transition: all 0.3s ease; font-weight: 700; gap: 6px; -webkit-tap-highlight-color: #fff0; border-radius: 8px; } .detail-button { font-size: 18px; color: rgb(0, 0, 0); border-radius: 50%; height: 50px; width: 50px; border: none; cursor: pointer; transition: color 0.2s; -webkit-tap-highlight-color: #fff0; } .favorite-button { font-size: 18px; color: red; border-radius: 50%; height: 50px; width: 50px; border: none; cursor: pointer; transition: color 0.2s; -webkit-tap-highlight-color: #fff0; } .favorite-button.favorited { color: red; } .favorite-button::before { content: "favorite_outline"; font-family: "Material Icons"; } .favorite-button.favorited::before { content: "favorite"; font-family: "Material Icons"; } .play-button::before { content: "play_arrow"; font-family: "Material Icons"; } .detail-button::before { content: "info_outline"; font-family: "Material Icons"; } .play-button::before, .detail-button::before, .favorite-button::before, .favorite-button.favorited::before { font-weight: 600; display: inline-block; font-size: 22px; color: inherit; vertical-align: middle; } .play-button:hover, .detail-button:hover, .favorite-button:hover, .trailer-button:hover { opacity: 0.8; } .info-container { position: absolute; top: calc(50% + 0vh); display: flex; align-items: center; justify-content: center; left: 4vw; color: #fff; z-index: 5; align-content: center; flex-wrap: wrap; font-weight: 500; } .misc-info { font-family: "Archivo Narrow", sans-serif; display: flex; align-items: center; z-index: 5; position: relative; gap: 10px; } .runTime { font-family: "Archivo Narrow", sans-serif; display: flex; align-items: center; align-content: center; justify-content: center; flex-wrap: wrap; font-weight: 500; } /* Star Icon Styling */ .community-rating-star { color: #f2b01e; font-size: 1.4em; height: auto !important; margin-right: 0.125em; width: auto !important; } .star-rating-container { display: flex; align-items: center; } /* Rotten Tomatoes Critic Rating Styles */ .critic-rating { -webkit-align-items: center; align-items: center; display: flex; min-height: 1.2em; gap: 0.25em; } /**/ .age-rating { display: flex; align-items: center; border-radius: 5px; background: rgb(255 255 255 / 0.8); color: #000; border: none; font-weight: 600; white-space: nowrap; padding: 0 0.5em; } .date { font-family: "Archivo Narrow", sans-serif; font-weight: 500; display: flex; align-items: center; flex-wrap: wrap; align-content: center; justify-content: center; } .separator-icon { font-size: 10px; color: aquamarine; } .featured-content { display: none; } /*Portrait-Modes Phone*/ @media only screen and (max-width: 767px) and (orientation: portrait) { .plot-container { display: none; } .backdrop-container { position: absolute; right: 0%; width: 100%; height: 100%; } .backdrop { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 20%; z-index: 3; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); } .gradient-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgb(0 0 0 / 0.25); z-index: 4; pointer-events: none; mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); -webkit-mask-image: linear-gradient(to top, #fff0 2%, rgb(0 0 0 / 0.5) 6%, #000000 8%); } .dots-container { top: calc(50% + 20vh); left: 50%; transform: translateX(-50%) scale(0.8); background-color: #ffffff00; } .dot.active { transform: scale(1.6); } .genre { top: calc(50% + 15vh); left: 50%; width: 100%; transform: translateX(-50%); } .info-container { top: calc(50% + 10vh); left: 50%; transform: translateX(-50%); width: 95%; } .button-container { top: calc(50% + 25vh); left: 50%; transform: translateX(-50%) scale(0.95); } .logo { position: absolute; top: 50%; left: 50%; max-height: 60%; max-width: 100%; width: auto; z-index: 5; filter: brightness(1.5); transform: translate(-50%, -50%); transition: filter 0.3s ease; } .logo-container { width: 75%; height: 25%; position: relative; display: flex; align-items: start; z-index: 5; top: 50%; left: 50%; transform: translate(-50%, -50%); } @media (max-width: 400px) { .button-container { gap: 10px; } .play-button, .trailer-button { padding: 8px 14px; } } } /*Landscape Mode Phones*/ @media only screen and (max-height: 767px) and (orientation: landscape) { #slides-container { height: 100%; } .homeSectionsContainer { top: 57vh; } .button-container { left: 3vw; transform: scale(0.85); } .dots-container { scale: 0.6; } .info-container { top: calc(50% + -10vh); } .plot-container { top: calc(50% + 6vh); } .genre { top: calc(50% + -1vh); } .logo-container { height: 30%; top: 10%; } .logo-container, .info-container, .genre, .plot-container { left: 5vw; } } @media only screen and (min-width: 2560px) { .button-container { top: calc(50% + 15vh); } .dots-container { top: calc(50% + 15vh); } } /* Video Modal Styles */ #video-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.9); z-index: 9999; display: flex; justify-content: center; align-items: center; } .modal-close-button { position: absolute; top: 20px; right: 20px; background: transparent; border: none; color: white; font-size: 2rem; cursor: pointer; z-index: 10000; } .video-modal-content { width: 80%; height: 80%; position: relative; max-width: 1280px; max-height: 720px; } #modal-yt-player, .video-modal-player { width: 100%; height: 100%; } .video-modal-player { object-fit: contain; } @media (orientation: portrait) { .video-modal-content { width: 95%; height: auto; aspect-ratio: 16/9; } } @media (orientation: landscape) { .video-modal-content { height: 95%; width: auto; aspect-ratio: 16/9; max-width: 95%; } } /* Video Backdrop Styles */ .video-backdrop { pointer-events: none; object-fit: cover; } .video-backdrop-default { width: 100%; height: 100%; } .video-backdrop-full { width: 100vw; height: 56.25vw; min-height: 100vh; min-width: 177.77vh; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } /* Slide Counter Styling */ .slide-counter { font-family: "Archivo Narrow", sans-serif; color: #fff; font-size: 1.2rem; font-weight: 600; letter-spacing: 1px; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.4); padding: 5px 16px; border-radius: 30px; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border: 1px solid rgba(255, 255, 255, 0.15); display: inline-flex; align-items: center; justify-content: center; min-width: 40px; text-align: center; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .dots-container .slide-counter { margin: 0; }