diff --git a/slideshowpure.css b/slideshowpure.css
index 49394a3..6089fc8 100644
--- a/slideshowpure.css
+++ b/slideshowpure.css
@@ -1,67 +1,49 @@
-/*
- * Jellyfin Slideshow by M0RPH3US v6.1.0
- */
-
:root {
-
--slideshow-height: 100vh;
-
--slideshow-content-top: 65vh;
-
--slideshow-dots-reserve: max(2.5vh, 1.75rem);
-
--slideshow-gutter: 4vw;
--slideshow-font: "Archivo Narrow", "Noto Sans", sans-serif;
-
--plate: rgb(28 30 34);
--plate-accent: rgb(150 156 166);
-
--slideshow-bottom-fade: linear-gradient(
to top,
#fff0 2%,
rgb(0 0 0 / 0.5) 6%,
#000 8%
);
-
--slideshow-video-side-fade: linear-gradient(
to right,
transparent 10%,
black 30%
);
}
-
.backdrop.animate {
animation:
frostedGlass 1.2s cubic-bezier(0.4, 0, 0.2, 1),
kenBurnsZoomIn 12s 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, 1);
}
-
to {
transform: scale3d(1.1, 1.1, 1);
}
}
-
.bar-loading {
z-index: 99999999 !important;
position: fixed;
@@ -78,11 +60,9 @@
overflow: hidden;
will-change: opacity;
}
-
.bar-loading.hide {
opacity: 0;
}
-
.loader-content {
position: relative;
display: flex;
@@ -92,7 +72,6 @@
width: 250px;
height: auto;
}
-
.bar-loading h1 {
width: 250px;
margin: 0 auto;
@@ -101,7 +80,6 @@
justify-content: center;
align-items: center;
}
-
.bar-loading h1 div {
width: 250px;
max-height: 250px;
@@ -110,7 +88,6 @@
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
-
.progress-container {
width: 200px;
height: 6px;
@@ -118,21 +95,18 @@
align-items: center;
position: relative;
}
-
.progress-bar {
height: 5px;
- background: white;
+ background: #fff;
border-radius: 2px;
transition: width 0.2s ease-in-out;
}
-
.progress-gap {
width: 6px;
height: 5px;
- background: transparent;
+ background: #fff0;
flex-shrink: 0;
}
-
.unfilled-bar {
height: 5px;
background: #686868;
@@ -140,11 +114,9 @@
flex-grow: 1;
transition: width 0.2s ease-in-out;
}
-
.bar-loading .splashLogo {
height: 12%;
}
-
.video-container {
position: absolute;
inset: 0;
@@ -154,20 +126,15 @@
overflow: hidden;
opacity: 0;
transition: opacity 0.5s ease-in-out;
-
mask-image: var(--slideshow-video-side-fade), var(--slideshow-bottom-fade);
-
- -webkit-mask-image: var(--slideshow-video-side-fade),
- var(--slideshow-bottom-fade);
-
+ -webkit-mask-image:
+ var(--slideshow-video-side-fade), var(--slideshow-bottom-fade);
mask-composite: intersect;
-webkit-mask-composite: source-in;
}
-
.video-container.active {
opacity: 1;
}
-
.video-player {
position: absolute;
top: 50%;
@@ -178,7 +145,6 @@
min-width: 177.78cqh;
min-height: 100cqh;
}
-
.video-player iframe,
.video-player .local-trailer {
width: 100%;
@@ -186,33 +152,28 @@
pointer-events: none;
border: 0;
}
-
.video-player .local-trailer {
object-fit: cover;
display: block;
background: #000;
}
-
.volume-toggle {
position: absolute;
top: 5rem;
right: 3.5rem;
cursor: pointer;
- color: white;
+ color: #fff;
z-index: 10;
opacity: 0.3;
transition: opacity 0.3s ease;
- text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
+ text-shadow: 1px 1px 3px rgb(0 0 0 / 0.8);
}
-
.volume-toggle:hover {
opacity: 0.9;
}
-
.volume-toggle i {
font-size: 1.5rem;
}
-
@media (max-width: 1599px) {
.volume-toggle {
top: 8rem;
@@ -221,7 +182,6 @@
font-size: 2rem;
}
}
-
.backdrop.low-quality {
filter: blur(0.5px);
transform: scale(1.01);
@@ -229,7 +189,6 @@
filter 0.3s ease-in-out,
transform 0.3s ease-in-out;
}
-
.backdrop.high-quality {
filter: blur(0);
transform: scale(1);
@@ -237,26 +196,21 @@
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;
-
margin-top: calc(
- var(--slideshow-content-top) - var(--slideshow-page-offset, 0px)
+ var(--slideshow-content-top) - var(--slideshow-page-offset, 0)
);
z-index: 6;
}
-
#slides-container {
position: absolute;
top: 0;
@@ -265,7 +219,6 @@
height: var(--slideshow-height);
overflow: hidden;
}
-
.arrow {
position: absolute;
top: 50%;
@@ -288,71 +241,59 @@
background-color 0.2s ease;
-webkit-tap-highlight-color: #fff0;
}
-
.arrow i {
font-size: 2rem;
}
-
.arrow:hover {
background: rgb(0 0 0 / 0.7);
}
-
#slides-container:hover .arrow,
#slides-container:focus-within .arrow {
opacity: 1;
visibility: visible;
}
-
.left-arrow {
left: 20px;
}
-
.right-arrow {
right: 20px;
}
-
.pause-button {
position: absolute;
top: 5rem;
right: 0.8rem;
cursor: pointer;
- color: white;
+ color: #fff;
z-index: 10;
opacity: 0.3;
transition: opacity 0.3s ease;
- text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
+ text-shadow: 1px 1px 3px rgb(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;
}
}
-
.dots-container {
position: absolute;
right: 3%;
bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) +
- var(--slideshow-dots-reserve)
+ var(--slideshow-height) -
+ var(--slideshow-content-top)+var(--slideshow-dots-reserve)
);
z-index: 5;
display: flex;
@@ -362,7 +303,6 @@
height: auto;
transition: opacity 0.3s ease-in-out;
}
-
.dot {
display: inline-block;
width: 0.5em;
@@ -375,12 +315,10 @@
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;
@@ -392,13 +330,11 @@
z-index: 0;
pointer-events: none;
}
-
.slide.active {
opacity: 1;
z-index: 1;
pointer-events: auto;
}
-
.backdrop-container {
position: absolute;
top: 0%;
@@ -408,7 +344,6 @@
mask-image: var(--slideshow-bottom-fade);
-webkit-mask-image: var(--slideshow-bottom-fade);
}
-
.backdrop {
right: 0;
width: 100%;
@@ -424,46 +359,40 @@
opacity 0.45s ease-in-out;
will-change: width;
}
-
.backdrop.with-video {
width: 40%;
- mask-image: var(--slideshow-bottom-fade),
+ mask-image:
+ var(--slideshow-bottom-fade),
linear-gradient(to right, black 30%, transparent 85%);
-
- -webkit-mask-image: var(--slideshow-bottom-fade),
+ -webkit-mask-image:
+ var(--slideshow-bottom-fade),
linear-gradient(to right, black 30%, transparent 85%);
-
mask-composite: intersect;
-webkit-mask-composite: source-in;
}
-
.backdrop {
background-size: cover;
background-position: center 20%;
background-repeat: no-repeat;
}
-
.backdrop.awaiting-image {
opacity: 0;
}
-
.backdrop.image-failed {
opacity: 0 !important;
}
-
.backdrop-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
- background-color: rgba(0, 0, 0, 0.2);
+ background-color: rgb(0 0 0 / 0.2);
border-radius: 5px;
z-index: 4;
mask-image: var(--slideshow-bottom-fade);
-webkit-mask-image: var(--slideshow-bottom-fade);
}
-
.gradient-overlay {
position: absolute;
top: 0;
@@ -472,21 +401,20 @@
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%
+ rgb(29 29 29 / 0.65) 10%,
+ rgb(29 29 29 / 0.35) 30%,
+ #fff0 100%
);
z-index: 4;
mask-image: var(--slideshow-bottom-fade);
-webkit-mask-image: var(--slideshow-bottom-fade);
}
-
.slide-content {
position: absolute;
left: var(--slideshow-gutter);
bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) +
- var(--slideshow-dots-reserve)
+ var(--slideshow-height) -
+ var(--slideshow-content-top)+var(--slideshow-dots-reserve)
);
width: min(46%, 46rem);
display: flex;
@@ -495,29 +423,24 @@
gap: 0.9rem;
z-index: 5;
color: #fff;
-
max-height: calc(var(--slideshow-content-top) - 5vh);
overflow: hidden;
}
-
.logo-container {
display: flex;
align-items: flex-end;
width: 100%;
height: 22vh;
-
flex: 0 1 auto;
min-height: 0;
margin-bottom: 0.4rem;
}
-
.info-container,
.genre,
.plot-container,
.button-container {
flex: 0 0 auto;
}
-
.logo {
max-height: 100%;
max-width: 100%;
@@ -528,18 +451,15 @@
filter: brightness(1.5);
font-size: 4rem;
}
-
.plot-container {
width: 100%;
box-sizing: border-box;
transition: width 0.5s ease-in-out;
}
-
.slide-content:has(~ .video-container.active) .plot-container,
.plot-container.with-video {
width: 90%;
}
-
.plot {
display: -webkit-box;
line-clamp: 3;
@@ -548,7 +468,17 @@
overflow: hidden;
margin: 0;
}
-
+.poster-container,
+.tagline,
+.action-label {
+ display: none;
+}
+.poster-container .poster {
+ display: block;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
.genre {
display: flex;
gap: 5px;
@@ -557,21 +487,18 @@
font-family: var(--slideshow-font);
flex-wrap: wrap;
}
-
.button-container {
display: flex;
align-items: center;
gap: 15px;
margin-top: 0.4rem;
}
-
.play-button {
display: inline-flex;
flex-direction: row;
align-items: center;
justify-content: center;
height: 50px;
-
padding-top: 0;
padding-bottom: 0;
border: none;
@@ -589,11 +516,9 @@
-webkit-tap-highlight-color: #fff0;
border-radius: 8px;
}
-
.play-button:hover {
background: rgb(255 255 255 / 0.85);
}
-
.detail-button,
.favorite-button {
display: inline-flex;
@@ -615,38 +540,31 @@
color 0.2s ease;
-webkit-tap-highlight-color: #fff0;
}
-
.detail-button:hover,
.favorite-button:hover {
background: rgb(0 0 0 / 0.7);
border-color: rgb(255 255 255 / 0.7);
}
-
.favorite-button.favorited {
color: #ff4d4d;
border-color: rgb(255 77 77 / 0.6);
}
-
.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,
@@ -657,7 +575,6 @@
color: inherit;
vertical-align: middle;
}
-
.play-button:focus-visible,
.detail-button:focus-visible,
.favorite-button:focus-visible,
@@ -667,7 +584,6 @@
outline: 3px solid #fff;
outline-offset: 3px;
}
-
.info-container {
display: flex;
align-items: center;
@@ -675,7 +591,6 @@
flex-wrap: wrap;
font-weight: 500;
}
-
.misc-info {
font-family: var(--slideshow-font);
display: flex;
@@ -683,7 +598,6 @@
flex-wrap: wrap;
gap: 10px;
}
-
.runTime {
font-family: "Archivo Narrow", sans-serif;
display: flex;
@@ -693,7 +607,6 @@
flex-wrap: wrap;
font-weight: 500;
}
-
.community-rating-star {
color: #f2b01e;
font-size: 1.4em;
@@ -701,12 +614,10 @@
margin-right: 0.125em;
width: auto !important;
}
-
.star-rating-container {
display: flex;
align-items: center;
}
-
.critic-rating {
-webkit-align-items: center;
align-items: center;
@@ -714,7 +625,6 @@
min-height: 1.2em;
gap: 0.25em;
}
-
.age-rating {
display: flex;
align-items: center;
@@ -726,7 +636,6 @@
white-space: nowrap;
padding: 0 0.5em;
}
-
.date {
font-family: "Archivo Narrow", sans-serif;
font-weight: 500;
@@ -736,39 +645,32 @@
align-content: center;
justify-content: center;
}
-
.separator-icon {
font-size: 10px;
color: rgb(255 255 255 / 0.55);
}
-
.featured-content {
display: none;
}
-
@media only screen and (max-width: 767px) and (orientation: portrait) {
.plot-container {
display: none;
}
-
.backdrop-container {
position: absolute;
right: 0%;
width: 100%;
height: 100%;
}
-
.video-container,
.arrow,
.volume-toggle {
display: none !important;
}
-
.backdrop.with-video {
width: 100% !important;
mask-image: none !important;
}
-
.backdrop {
position: absolute;
top: 0;
@@ -791,7 +693,6 @@
#000000 8%
);
}
-
.gradient-overlay {
position: absolute;
top: 0;
@@ -814,104 +715,82 @@
#000000 8%
);
}
-
.slide-content {
left: 50%;
right: auto;
transform: translateX(-50%);
- bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) + 7vh
- );
+ bottom: calc(var(--slideshow-height) - var(--slideshow-content-top)+7vh);
width: 92%;
align-items: center;
text-align: center;
}
-
.logo-container {
height: 20vh;
justify-content: center;
align-items: center;
}
-
.logo {
object-position: center;
}
-
.genre,
.info-container,
.misc-info {
justify-content: center;
}
-
.button-container {
justify-content: center;
transform: scale(0.95);
}
-
.dots-container {
top: auto;
- bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) + 1.5vh
- );
+ bottom: calc(var(--slideshow-height) - var(--slideshow-content-top)+1.5vh);
left: 50%;
right: auto;
transform: translateX(-50%) scale(0.8);
- background-color: #ffffff00;
+ background-color: #fff0;
}
-
.dot.active {
transform: scale(1.6);
}
}
-
@media only screen and (max-width: 1024px) and (max-height: 767px) and (orientation: landscape) {
:root {
-
--slideshow-content-top: 68vh;
--slideshow-gutter: 5vw;
}
-
.slide-content {
gap: 0.35rem;
}
-
.logo-container {
height: 13vh;
margin-bottom: 0.15rem;
}
-
.plot {
-webkit-line-clamp: 1;
line-clamp: 1;
}
-
.button-container {
transform: scale(0.8);
transform-origin: left center;
margin-top: 0;
}
-
.dots-container {
transform: scale(0.6);
}
}
-
@media only screen and (min-width: 2560px) {
.slide-content {
gap: 1.2rem;
}
-
.logo-container {
height: 26vh;
}
}
-
@media (prefers-reduced-motion: reduce) {
.backdrop.animate,
.logo.animate {
animation: none !important;
}
-
.slide,
.backdrop,
.dot,
@@ -929,21 +808,15 @@
transition: none !important;
}
}
-
#slides-container.layout-plate {
--slideshow-gutter: clamp(1.25rem, 3.4vw, 4.5rem);
-
--plate-width: clamp(19rem, 32vw, 34rem);
-
--plate-fade: clamp(3rem, 9vw, 11rem);
-
--plate-text: clamp(0.82rem, 0.62rem + 0.5vw, 1.05rem);
--plate-logo-height: clamp(4.5rem, 13vh, 11rem);
--plate-control: clamp(2.5rem, 2.1rem + 1.1vw, 3.25rem);
-
--plate-focal: 68%;
}
-
#slides-container.layout-plate .plate {
position: absolute;
inset: 0 auto 0 0;
@@ -960,68 +833,56 @@
-webkit-mask-image: var(--slideshow-bottom-fade);
transition: background 0.6s ease-in-out;
}
-
#slides-container.layout-plate .slide-content {
width: calc(var(--plate-width) - var(--slideshow-gutter) * 2);
gap: clamp(0.5rem, 1.4vh, 1.1rem);
font-size: var(--plate-text);
}
-
#slides-container.layout-plate .logo-container {
height: var(--plate-logo-height);
}
-
#slides-container.layout-plate .backdrop {
object-position: var(--plate-focal, 68%) 22%;
}
-
#slides-container.layout-plate .info-container,
#slides-container.layout-plate .misc-info,
#slides-container.layout-plate .genre,
#slides-container.layout-plate .plot {
font-size: var(--plate-text);
}
-
#slides-container.layout-plate .plot {
color: rgb(255 255 255 / 0.76);
}
-
#slides-container.layout-plate .separator-icon {
color: var(--plate-accent);
opacity: 0.8;
}
-
#slides-container.layout-plate .gradient-overlay {
background: linear-gradient(
130deg,
rgb(29 29 29 / 0.25) 10%,
rgb(29 29 29 / 0.12) 34%,
- rgb(29 29 29 / 0) 100%
+ #fff0 100%
);
}
-
#slides-container.layout-plate .video-container.active {
left: var(--plate-width);
}
-
#slides-container.layout-plate .backdrop.with-video {
width: 100%;
opacity: 0;
mask-image: var(--slideshow-bottom-fade);
-webkit-mask-image: var(--slideshow-bottom-fade);
}
-
#slides-container.layout-plate .plot-container.with-video {
width: 100%;
}
-
#slides-container.layout-plate .dots-container {
left: var(--slideshow-gutter);
right: auto;
bottom: calc(var(--slideshow-height) - var(--slideshow-content-top) - 2.2vh);
gap: 0;
}
-
#slides-container.layout-plate .dot {
width: 0.4rem;
height: 0.4rem;
@@ -1032,7 +893,6 @@
width 0.45s cubic-bezier(0.4, 0, 0.2, 1),
background-color 0.45s ease-in-out;
}
-
#slides-container.layout-plate .dot.active {
width: 1.5rem;
height: 0.4rem;
@@ -1040,24 +900,20 @@
background-color: #fff;
transform: none;
}
-
#slides-container.layout-plate .play-button,
#slides-container.layout-plate .detail-button,
#slides-container.layout-plate .favorite-button {
height: var(--plate-control);
}
-
#slides-container.layout-plate .detail-button,
#slides-container.layout-plate .favorite-button {
width: var(--plate-control);
border-color: rgb(255 255 255 / 0.28);
}
-
#slides-container.layout-plate .detail-button:hover,
#slides-container.layout-plate .favorite-button:hover {
border-color: var(--plate-accent);
}
-
.layout-tv #slides-container.layout-plate {
--slideshow-gutter: 5vw;
--plate-width: clamp(26rem, 34vw, 44rem);
@@ -1065,26 +921,21 @@
--plate-logo-height: clamp(8rem, 17vh, 15rem);
--plate-control: clamp(4rem, 4.5vw, 5.25rem);
}
-
.layout-tv #slides-container.layout-plate .slide-content {
gap: clamp(1rem, 2vh, 1.9rem);
bottom: calc(var(--slideshow-height) - var(--slideshow-content-top) + 5vh);
}
-
.layout-tv #slides-container.layout-plate .dots-container {
bottom: calc(var(--slideshow-height) - var(--slideshow-content-top) + 0.6vh);
}
-
.layout-tv #slides-container.layout-plate .dot {
width: 0.75rem;
height: 0.75rem;
}
-
.layout-tv #slides-container.layout-plate .dot.active {
width: 2.75rem;
height: 0.75rem;
}
-
.layout-tv #slides-container.layout-plate .play-button:focus-visible,
.layout-tv #slides-container.layout-plate .detail-button:focus-visible,
.layout-tv #slides-container.layout-plate .favorite-button:focus-visible {
@@ -1093,7 +944,6 @@
0 0 0 0.35rem rgb(255 255 255 / 0.95),
0 0 0 0.7rem rgb(0 0 0 / 0.6);
}
-
@media (max-width: 1100px) and (orientation: landscape) {
#slides-container.layout-plate {
--plate-width: clamp(17rem, 42vw, 26rem);
@@ -1101,18 +951,14 @@
--plate-logo-height: clamp(3.5rem, 15vh, 7rem);
}
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-plate {
--plate-fade: 20vh;
-
--plate-focal: 50%;
}
-
#slides-container.layout-plate .backdrop {
object-position: var(--plate-focal) 16%;
}
-
#slides-container.layout-plate .plate {
inset: auto 0 0 0;
width: auto;
@@ -1124,7 +970,6 @@
transparent 100%
);
}
-
#slides-container.layout-plate .slide-content {
left: var(--slideshow-gutter);
right: var(--slideshow-gutter);
@@ -1133,51 +978,41 @@
align-items: flex-start;
text-align: left;
}
-
#slides-container.layout-plate .logo-container {
justify-content: flex-start;
}
-
#slides-container.layout-plate .logo {
object-position: left bottom;
}
-
#slides-container.layout-plate .genre,
#slides-container.layout-plate .info-container,
#slides-container.layout-plate .misc-info,
#slides-container.layout-plate .button-container {
justify-content: flex-start;
}
-
#slides-container.layout-plate .button-container {
transform: none;
}
-
#slides-container.layout-plate .play-button {
flex: 1 1 auto;
}
-
#slides-container.layout-plate .dots-container {
left: var(--slideshow-gutter);
right: auto;
transform: none;
}
}
-
#slides-container.layout-plate .slide-content {
-
top: auto;
bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) +
- var(--slideshow-dots-reserve)
+ var(--slideshow-height) -
+ var(--slideshow-content-top)+var(--slideshow-dots-reserve)
);
-
max-height: calc(
var(--slideshow-rows-top, var(--slideshow-content-top)) - 3.5rem - 3vh
);
gap: clamp(0.7rem, 1.9vh, 1.6rem);
}
-
#slides-container.layout-plate .plate-eyebrow {
font-family: "IBM Plex Mono", ui-monospace, "Archivo Narrow", monospace;
font-size: clamp(0.6rem, 0.5rem + 0.24vw, 0.78rem);
@@ -1187,18 +1022,15 @@
flex: 0 0 auto;
font-variant-numeric: tabular-nums;
}
-
#slides-container.layout-plate .plot-container {
width: 100%;
}
-
#slides-container.layout-plate .plot {
-webkit-line-clamp: 3;
line-clamp: 3;
color: rgb(255 255 255 / 0.72);
line-height: 1.55;
}
-
#slides-container.layout-plate .plate-specs {
display: flex;
flex-direction: column;
@@ -1208,7 +1040,6 @@
min-height: 0;
overflow: hidden;
}
-
#slides-container.layout-plate .spec-row {
display: flex;
align-items: baseline;
@@ -1216,15 +1047,14 @@
gap: 1rem;
padding-bottom: clamp(0.3rem, 0.7vh, 0.55rem);
margin-bottom: clamp(0.3rem, 0.7vh, 0.55rem);
- border-bottom: 1px solid color-mix(in srgb, var(--plate-accent) 30%, transparent);
+ border-bottom: 1px solid
+ color-mix(in srgb, var(--plate-accent) 30%, transparent);
}
-
#slides-container.layout-plate .spec-row.is-last {
border-bottom: 0;
margin-bottom: 0;
padding-bottom: 0;
}
-
#slides-container.layout-plate .spec-label {
font-family: "IBM Plex Mono", ui-monospace, "Archivo Narrow", monospace;
font-size: clamp(0.58rem, 0.48rem + 0.22vw, 0.74rem);
@@ -1234,7 +1064,6 @@
margin: 0;
white-space: nowrap;
}
-
#slides-container.layout-plate .spec-value {
font-family: var(--slideshow-font);
font-size: var(--plate-text);
@@ -1247,17 +1076,14 @@
text-overflow: ellipsis;
white-space: nowrap;
}
-
#slides-container.layout-plate .button-container {
flex: 0 0 auto;
margin-top: clamp(0.2rem, 1vh, 0.7rem);
}
-
#slides-container.layout-plate .dots-container {
top: auto;
bottom: calc(var(--slideshow-height) - var(--slideshow-content-top) + 1.5vh);
}
-
.layout-tv #slides-container.layout-plate .slide-content {
top: clamp(5rem, 15vh, 11rem);
bottom: auto;
@@ -1265,28 +1091,23 @@
var(--slideshow-content-top) - clamp(5rem, 15vh, 11rem) - 6vh
);
}
-
.layout-tv #slides-container.layout-plate .plate-eyebrow {
font-size: clamp(1rem, 1vw, 1.3rem);
}
-
.layout-tv #slides-container.layout-plate .spec-label {
font-size: clamp(0.95rem, 0.95vw, 1.2rem);
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-plate .slide-content {
top: auto;
bottom: calc(var(--slideshow-height) - var(--slideshow-content-top) + 7vh);
max-height: none;
}
-
#slides-container.layout-plate .plate-specs {
flex-direction: row;
flex-wrap: wrap;
gap: 0 1.1rem;
}
-
#slides-container.layout-plate .spec-row {
border-bottom: 0;
padding-bottom: 0;
@@ -1294,95 +1115,75 @@
gap: 0.4rem;
justify-content: flex-start;
}
-
#slides-container.layout-plate .plot {
-webkit-line-clamp: 2;
line-clamp: 2;
}
}
-
:root.sspure-plate {
--slideshow-content-top: 74vh;
}
-
#slides-container.layout-plate .logo-container {
flex: 0 1 auto;
min-height: 3.5rem;
}
-
#slides-container.layout-plate .plot-container {
flex: 0 1 auto;
min-height: 0;
overflow: hidden;
}
-
#slides-container.layout-plate {
--plate-logo-height: clamp(5rem, 17vh, 13rem);
}
-
#slides-container.layout-plate .plate {
mask-image: none;
-webkit-mask-image: none;
}
-
.layout-tv #slides-container.layout-plate {
--plate-logo-height: clamp(9rem, 20vh, 17rem);
}
-
@media (max-width: 1100px) and (orientation: landscape) {
#slides-container.layout-plate {
--plate-logo-height: clamp(3.5rem, 16vh, 7rem);
}
-
#slides-container.layout-plate .plot-container {
display: none;
}
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-plate {
--plate-logo-height: clamp(4.5rem, 12vh, 8rem);
}
-
#slides-container.layout-plate .plate {
mask-image: var(--slideshow-bottom-fade);
-webkit-mask-image: var(--slideshow-bottom-fade);
}
}
-
#slides-container.layout-plate .backdrop.with-video {
opacity: 1;
width: 100%;
}
-
#slides-container.layout-plate .slide:has(.video-container.active) .backdrop {
opacity: 0;
}
-
#slides-container.layout-plate .dots-container {
top: auto;
bottom: calc(
- 100% - var(--slideshow-content-top) + var(--slideshow-page-offset, 0px) +
- 3vh
+ 100% - var(--slideshow-content-top)+var(--slideshow-page-offset, 0)+3vh
);
}
-
.layout-tv #slides-container.layout-plate .dots-container {
bottom: calc(
- 100% - var(--slideshow-content-top) + var(--slideshow-page-offset, 0px) +
- 4vh
+ 100% - var(--slideshow-content-top)+var(--slideshow-page-offset, 0)+4vh
);
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-plate .dots-container {
bottom: calc(
- 100% - var(--slideshow-content-top) + var(--slideshow-page-offset, 0px) +
- 2vh
+ 100% - var(--slideshow-content-top)+var(--slideshow-page-offset, 0)+2vh
);
}
}
-
#slides-container.layout-marquee {
--slideshow-gutter: clamp(1.25rem, 3.6vw, 4.5rem);
--mq-logo-height: clamp(4.5rem, 15vh, 12rem);
@@ -1390,17 +1191,14 @@
--mq-spec: clamp(0.62rem, 0.5rem + 0.32vw, 0.82rem);
--mq-rule-width: clamp(16rem, 32vw, 34rem);
}
-
#slides-container.layout-marquee .slide-content {
width: min(52%, 50rem);
gap: clamp(0.55rem, 1.5vh, 1.15rem);
}
-
#slides-container.layout-marquee .logo-container {
height: var(--mq-logo-height);
flex: 0 0 auto;
}
-
#slides-container.layout-marquee .spec-rail {
position: relative;
width: var(--mq-rule-width);
@@ -1410,14 +1208,12 @@
flex: 0 0 auto;
margin-top: 0.35rem;
}
-
#slides-container.layout-marquee .spec-progress {
position: absolute;
inset: 0 auto 0 0;
width: 0;
background: #fff;
}
-
#slides-container.layout-marquee .spec-line {
display: flex;
align-items: center;
@@ -1431,22 +1227,18 @@
font-variant-numeric: tabular-nums;
flex: 0 0 auto;
}
-
#slides-container.layout-marquee .spec-item {
padding: 0 0.85em;
}
-
#slides-container.layout-marquee .spec-item:first-child {
padding-left: 0;
}
-
#slides-container.layout-marquee .spec-divider {
width: 1px;
height: 0.95em;
background: rgb(255 255 255 / 0.3);
flex: 0 0 auto;
}
-
#slides-container.layout-marquee .spec-cert {
margin-left: 0.85em;
border: 1px solid rgb(255 255 255 / 0.5);
@@ -1455,42 +1247,35 @@
font-weight: 600;
letter-spacing: 0.06em;
}
-
#slides-container.layout-marquee .plot {
-webkit-line-clamp: 2;
line-clamp: 2;
color: rgb(255 255 255 / 0.74);
}
-
#slides-container.layout-marquee .plot-container {
width: 100%;
flex: 0 1 auto;
min-height: 0;
overflow: hidden;
}
-
#slides-container.layout-marquee .button-container {
flex: 0 0 auto;
margin-top: clamp(0.2rem, 0.9vh, 0.6rem);
}
-
#slides-container.layout-marquee .play-button,
#slides-container.layout-marquee .detail-button,
#slides-container.layout-marquee .favorite-button {
height: var(--mq-control);
}
-
#slides-container.layout-marquee .detail-button,
#slides-container.layout-marquee .favorite-button {
width: var(--mq-control);
}
-
#slides-container.layout-marquee .dots-container {
left: var(--slideshow-gutter);
right: auto;
gap: 0;
}
-
#slides-container.layout-marquee .dot {
width: 0.4rem;
height: 0.4rem;
@@ -1501,7 +1286,6 @@
width 0.45s cubic-bezier(0.4, 0, 0.2, 1),
background-color 0.45s ease-in-out;
}
-
#slides-container.layout-marquee .dot.active {
width: 1.5rem;
height: 0.4rem;
@@ -1509,7 +1293,6 @@
background-color: #fff;
transform: none;
}
-
.layout-tv #slides-container.layout-marquee {
--slideshow-gutter: 5vw;
--mq-logo-height: clamp(9rem, 20vh, 17rem);
@@ -1517,21 +1300,17 @@
--mq-spec: clamp(1.1rem, 1.1vw, 1.4rem);
--mq-rule-width: clamp(28rem, 42vw, 52rem);
}
-
.layout-tv #slides-container.layout-marquee .spec-rail {
height: 2px;
}
-
.layout-tv #slides-container.layout-marquee .dot {
width: 0.75rem;
height: 0.75rem;
}
-
.layout-tv #slides-container.layout-marquee .dot.active {
width: 2.75rem;
height: 0.75rem;
}
-
.layout-tv #slides-container.layout-marquee .play-button:focus-visible,
.layout-tv #slides-container.layout-marquee .detail-button:focus-visible,
.layout-tv #slides-container.layout-marquee .favorite-button:focus-visible {
@@ -1540,27 +1319,22 @@
0 0 0 0.35rem rgb(255 255 255 / 0.95),
0 0 0 0.7rem rgb(0 0 0 / 0.6);
}
-
@media (max-width: 1100px) and (orientation: landscape) {
#slides-container.layout-marquee {
--mq-logo-height: clamp(3.5rem, 16vh, 7rem);
--mq-rule-width: clamp(14rem, 42vw, 22rem);
}
-
#slides-container.layout-marquee .plot-container {
display: none;
}
-
#slides-container.layout-marquee .slide-content {
width: min(62%, 34rem);
}
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-marquee {
--mq-logo-height: clamp(4rem, 11vh, 7rem);
}
-
#slides-container.layout-marquee .slide-content {
left: var(--slideshow-gutter);
right: var(--slideshow-gutter);
@@ -1574,61 +1348,50 @@
align-items: stretch;
text-align: left;
}
-
#slides-container.layout-marquee .logo-container {
justify-content: flex-start;
}
-
#slides-container.layout-marquee .logo {
object-position: left center;
}
-
#slides-container.layout-marquee .spec-rail {
width: 100%;
}
-
#slides-container.layout-marquee .spec-line {
letter-spacing: 0.09em;
font-size: clamp(0.6rem, 2.4vw, 0.72rem);
}
-
#slides-container.layout-marquee .plot {
-webkit-line-clamp: 2;
line-clamp: 2;
}
-
#slides-container.layout-marquee .button-container {
justify-content: flex-start;
transform: none;
}
-
#slides-container.layout-marquee .play-button {
flex: 1 1 auto;
}
-
#slides-container.layout-marquee .dots-container {
left: 50%;
right: auto;
transform: translateX(-50%);
}
}
-
#slides-container.layout-marquee .slide-content {
top: auto;
bottom: calc(
- var(--slideshow-height) - var(--slideshow-content-top) +
- var(--slideshow-dots-reserve)
+ var(--slideshow-height) -
+ var(--slideshow-content-top)+var(--slideshow-dots-reserve)
);
max-height: calc(
var(--slideshow-rows-top, var(--slideshow-content-top)) - 8vh
);
}
-
#slides-container.layout-marquee .play-button,
#slides-container.layout-plate .play-button {
border-radius: 999px;
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-marquee .detail-button,
#slides-container.layout-marquee .favorite-button,
@@ -1636,104 +1399,86 @@
#slides-container.layout-plate .favorite-button {
flex: 0 0 auto;
}
-
#slides-container.layout-marquee .button-container,
#slides-container.layout-plate .button-container {
width: 100%;
}
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-marquee .slide-content {
transform: none;
}
}
-
@media (max-width: 359px) and (orientation: portrait) {
#slides-container.layout-marquee .plot-container,
#slides-container.layout-plate .plot-container {
display: none;
}
}
-
@media (max-width: 767px) and (orientation: portrait) {
#slides-container.layout-marquee .plot-container,
#slides-container.layout-plate .plot-container {
display: block;
}
-
#slides-container.layout-marquee .plot,
#slides-container.layout-plate .plot {
-webkit-line-clamp: 2;
line-clamp: 2;
}
}
-
@media (max-width: 359px) and (orientation: portrait) {
#slides-container.layout-marquee .plot-container,
#slides-container.layout-plate .plot-container {
display: none;
}
}
-
#slides-container.layout-marquee .spec-line {
min-height: 1.62em;
align-items: center;
}
-
#slides-container.layout-marquee .spec-line {
min-height: 0;
}
-
#slides-container.layout-marquee .spec-item,
#slides-container.layout-marquee .spec-cert {
padding-top: 0.1em;
padding-bottom: 0.1em;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
+ border-top: 1px solid #fff0;
+ border-bottom: 1px solid #fff0;
line-height: 1.2;
}
-
#slides-container.layout-marquee .spec-cert {
border-color: rgb(255 255 255 / 0.5);
}
-
#slides-container.layout-marquee .spec-item + .spec-item,
#slides-container.layout-marquee .spec-item + .spec-cert {
border-left: 1px solid rgb(255 255 255 / 0.3);
}
-
#slides-container.layout-marquee .spec-divider {
display: none;
}
-
#slides-container.layout-marquee .spec-item .community-rating-star {
font-size: 1.25em;
color: #f2b01e;
margin-right: 0.3em;
vertical-align: -0.22em;
}
-
#slides-container.layout-marquee .spec-item svg {
height: 1.15em;
width: auto;
margin-right: 0.3em;
vertical-align: -0.22em;
}
-
#slides-container.layout-marquee .spec-critics,
#slides-container.layout-marquee .spec-rating {
display: inline-flex;
align-items: center;
}
-
@media (max-width: 767px) and (orientation: portrait) {
-
#slides-container.layout-marquee .spec-line {
flex-wrap: nowrap;
overflow: hidden;
}
-
#slides-container.layout-marquee .spec-genre {
min-width: 0;
overflow: hidden;
@@ -1743,7 +1488,6 @@
line-height: 1.7;
}
}
-
#slides-container.layout-marquee .spec-item,
#slides-container.layout-marquee .spec-cert {
display: inline-flex;
@@ -1751,16 +1495,13 @@
height: 1.7em;
box-sizing: border-box;
}
-
#slides-container.layout-marquee .spec-line {
align-items: center;
}
-
#slides-container.layout-marquee .spec-item + .spec-cert {
position: relative;
border-left-color: rgb(255 255 255 / 0.5);
}
-
#slides-container.layout-marquee .spec-item + .spec-cert::before {
content: "";
position: absolute;
@@ -1770,40 +1511,31 @@
width: 1px;
background: rgb(255 255 255 / 0.3);
}
-
@media (max-width: 767px) and (orientation: portrait) {
-
:root.sspure-marquee,
:root.sspure-plate {
-
--slideshow-height: 66vh;
--slideshow-content-top: 54vh;
}
-
#slides-container.layout-marquee .backdrop {
object-position: center 28%;
}
}
-
@media (min-width: 768px) and (max-height: 700px) {
#slides-container.layout-plate .plot-container {
display: none;
}
-
#slides-container.layout-plate {
--plate-logo-height: clamp(3.5rem, 11vh, 7rem);
}
-
#slides-container.layout-plate .slide-content {
gap: clamp(0.4rem, 1vh, 0.7rem);
}
}
-
#slides-container.layout-plate .spec-row.is-placeholder {
visibility: hidden;
- border-bottom-color: transparent;
+ border-bottom-color: #fff0;
}
-
#slides-container .arrow {
width: 2.25rem;
height: 2.25rem;
@@ -1817,86 +1549,70 @@
background-color 0.2s ease,
border-color 0.2s ease;
}
-
#slides-container .arrow i {
font-size: 1.25rem;
}
-
#slides-container .arrow:hover {
background: rgb(10 12 18 / 0.72);
border-color: rgb(255 255 255 / 0.6);
}
-
#slides-container .left-arrow {
left: auto;
right: calc(var(--slideshow-gutter) + 2.25rem + 0.5rem);
}
-
#slides-container .right-arrow {
right: var(--slideshow-gutter);
}
-
#slides-container.layout-plate .arrow,
#slides-container.layout-marquee .arrow {
top: auto;
bottom: 3.5vh;
transform: none;
}
-
.layout-tv #slides-container .arrow {
width: 3.5rem;
height: 3.5rem;
}
-
.layout-tv #slides-container .arrow i {
font-size: 2rem;
}
-
.layout-tv #slides-container .left-arrow {
right: calc(var(--slideshow-gutter) + 3.5rem + 0.75rem);
}
-
.ss-settings-toggle {
position: absolute;
top: 5rem;
right: 6.2rem;
cursor: pointer;
- color: white;
+ color: #fff;
z-index: 10;
opacity: 0.3;
transition: opacity 0.3s ease;
- text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
+ text-shadow: 1px 1px 3px rgb(0 0 0 / 0.8);
}
-
.ss-settings-toggle:hover,
.ss-settings-toggle:focus-visible {
opacity: 0.9;
}
-
.ss-settings-toggle i {
font-size: 1.5rem;
}
-
@media (max-width: 1599px) {
.ss-settings-toggle {
top: 8rem;
}
-
.ss-settings-toggle i {
font-size: 2rem;
}
}
-
@media (max-width: 767px) {
.ss-settings-toggle {
right: 3.5rem;
}
-
.ss-settings-toggle i {
font-size: 2.5rem;
}
}
-
.ss-settings {
position: fixed;
top: 4.5rem;
@@ -1914,7 +1630,6 @@
box-shadow: 0 1.5rem 3rem rgb(0 0 0 / 0.5);
color: #fff;
font-family: "Archivo Narrow", "Noto Sans", sans-serif;
-
opacity: 0;
visibility: hidden;
transform: translateY(-0.5rem);
@@ -1923,13 +1638,11 @@
visibility 0.2s ease,
transform 0.2s ease;
}
-
.ss-settings.is-open {
opacity: 1;
visibility: visible;
transform: none;
}
-
.ss-settings-head {
display: flex;
align-items: center;
@@ -1938,7 +1651,6 @@
padding: 0.9rem 0.7rem 0.9rem 1.1rem;
border-bottom: 1px solid rgb(255 255 255 / 0.1);
}
-
.ss-settings-head h2 {
margin: 0;
font-size: 0.72rem;
@@ -1947,7 +1659,6 @@
text-transform: uppercase;
color: rgb(255 255 255 / 0.72);
}
-
.ss-settings-close {
display: flex;
align-items: center;
@@ -1957,27 +1668,23 @@
padding: 0;
border: 0;
border-radius: 50%;
- background: transparent;
+ background: #fff0;
color: rgb(255 255 255 / 0.6);
cursor: pointer;
}
-
.ss-settings-close:hover {
background: rgb(255 255 255 / 0.1);
color: #fff;
}
-
.ss-settings-close i {
font-size: 1.15rem;
}
-
.ss-settings-body {
padding: 0.35rem 1.1rem 0.6rem;
overflow-y: auto;
display: flex;
flex-direction: column;
}
-
.ss-set-row {
display: flex;
align-items: center;
@@ -1986,26 +1693,21 @@
padding: 0.72rem 0;
border-bottom: 1px solid rgb(255 255 255 / 0.07);
}
-
.ss-set-row:last-child {
border-bottom: 0;
}
-
.ss-set-row.is-stacked {
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
}
-
.ss-set-row.is-inactive {
opacity: 0.4;
}
-
.ss-set-label {
font-size: 0.88rem;
color: rgb(255 255 255 / 0.9);
}
-
.ss-set-value {
margin-left: auto;
font-family: "IBM Plex Mono", ui-monospace, monospace;
@@ -2013,14 +1715,12 @@
font-variant-numeric: tabular-nums;
color: rgb(255 255 255 / 0.55);
}
-
.ss-set-note {
flex-basis: 100%;
font-size: 0.68rem;
letter-spacing: 0.04em;
color: rgb(255 255 255 / 0.42);
}
-
.ss-choice {
display: grid;
grid-auto-flow: column;
@@ -2030,12 +1730,11 @@
border-radius: 0.55rem;
background: rgb(255 255 255 / 0.07);
}
-
.ss-choice-btn {
padding: 0.4rem 0.3rem;
border: 0;
border-radius: 0.4rem;
- background: transparent;
+ background: #fff0;
color: rgb(255 255 255 / 0.62);
font-family: inherit;
font-size: 0.8rem;
@@ -2044,17 +1743,53 @@
background-color 0.18s ease,
color 0.18s ease;
}
-
.ss-choice-btn:hover:not(:disabled):not(.is-active) {
color: #fff;
}
-
.ss-choice-btn.is-active {
background: #fff;
color: #10131a;
font-weight: 600;
}
-
+.ss-multi {
+ display: flex;
+ flex-direction: column;
+ gap: 0.1rem;
+ max-height: 9rem;
+ overflow-y: auto;
+ padding: 0.2rem;
+ border-radius: 0.55rem;
+ background: rgb(255 255 255 / 0.07);
+}
+.ss-multi-item {
+ display: flex;
+ align-items: center;
+ gap: 0.55rem;
+ padding: 0.35rem 0.45rem;
+ border-radius: 0.4rem;
+ color: rgb(255 255 255 / 0.72);
+ font-size: 0.8rem;
+ cursor: pointer;
+ transition:
+ background-color 0.18s ease,
+ color 0.18s ease;
+}
+.ss-multi-item:hover:not(:has(.ss-multi-box:disabled)) {
+ background: rgb(255 255 255 / 0.06);
+ color: #fff;
+}
+.ss-multi-item:has(.ss-multi-box:disabled) {
+ cursor: default;
+ opacity: 0.5;
+}
+.ss-multi-box {
+ flex: none;
+ width: 0.95rem;
+ height: 0.95rem;
+ margin: 0;
+ accent-color: #fff;
+ cursor: inherit;
+}
.ss-switch {
appearance: none;
-webkit-appearance: none;
@@ -2068,7 +1803,6 @@
cursor: pointer;
transition: background-color 0.2s ease;
}
-
.ss-switch::after {
content: "";
position: absolute;
@@ -2080,38 +1814,32 @@
background: #fff;
transition: transform 0.2s ease;
}
-
.ss-switch:checked {
background: #2f81f7;
}
-
.ss-switch:checked::after {
transform: translateX(1.05rem);
}
-
.ss-range {
flex: 0 0 8rem;
accent-color: #2f81f7;
cursor: pointer;
}
-
.ss-settings input:disabled,
.ss-settings button:disabled {
cursor: not-allowed;
opacity: 0.45;
}
-
.ss-settings-foot {
padding: 0.7rem 1.1rem 0.9rem;
border-top: 1px solid rgb(255 255 255 / 0.1);
}
-
.ss-settings-reset {
width: 100%;
padding: 0.55rem;
border: 1px solid rgb(255 255 255 / 0.2);
border-radius: 0.5rem;
- background: transparent;
+ background: #fff0;
color: rgb(255 255 255 / 0.75);
font-family: inherit;
font-size: 0.8rem;
@@ -2120,17 +1848,14 @@
background-color 0.18s ease,
color 0.18s ease;
}
-
.ss-settings-reset:hover {
background: rgb(255 255 255 / 0.1);
color: #fff;
}
-
.ss-settings :focus-visible {
outline: 2px solid #fff;
outline-offset: 2px;
}
-
@media (max-width: 767px) {
.ss-settings {
top: auto;
@@ -2143,7 +1868,6 @@
transform: translateY(1rem);
}
}
-
@media (prefers-reduced-motion: reduce) {
.ss-settings,
.ss-switch,
@@ -2152,7 +1876,6 @@
transition: none;
}
}
-
@media (hover: hover) {
#slides-container .ss-chrome {
opacity: 0;
@@ -2161,7 +1884,6 @@
opacity 0.25s ease,
visibility 0.25s ease;
}
-
#slides-container:hover .ss-chrome,
#slides-container:focus-within .ss-chrome,
#slides-container.is-paused .ss-chrome,
@@ -2169,14 +1891,12 @@
opacity: 0.3;
visibility: visible;
}
-
#slides-container .ss-chrome:hover,
#slides-container .ss-chrome:focus-visible {
opacity: 0.9;
visibility: visible;
}
}
-
@media (prefers-reduced-motion: reduce) {
#slides-container .ss-chrome {
transition: none;
diff --git a/slideshowpure.js b/slideshowpure.js
index da71a68..0919ec9 100644
--- a/slideshowpure.js
+++ b/slideshowpure.js
@@ -1,7 +1,3 @@
-/*
- * Jellyfin Slideshow by M0RPH3US v6.1.0
- */
-
const CONFIG = {
IMAGE_SVG: {
freshTomato:
@@ -9,45 +5,23 @@ const CONFIG = {
rottenTomato:
'',
},
- // ms each slide is shown before advancing. 12000 = 12s.
shuffleInterval: 12000,
- // ms between retries when waiting on Jellyfin. 250-1000.
retryInterval: 500,
- // px of horizontal travel before a swipe counts. Lower = twitchier.
minSwipeDistance: 50,
- // ms between checks for the app being ready (loading screen only).
loadingCheckInterval: 100,
- // legacy character cap for the synopsis. The CSS line-clamp does the real work.
maxPlotLength: 360,
- // how many titles to pull from the library. Items without logo art are dropped after this.
maxItems: 50,
-
- // movies per run when quotas are on. 0 = off (or none, if maxSeries > 0).
maxMovies: 0,
- // series per run when quotas are on. 0 = off (or none, if maxMovies > 0).
maxSeries: 0,
-
- // library display names the bar may draw from, e.g. ["Movies","4K Movies"]. Empty = all.
libraries: [],
-
- // library display names allowed to autoplay trailers. Empty = wherever trailers are otherwise enabled.
trailerLibraries: [],
- // slides built ahead of the current one. 1 = next only; >1 also builds the previous.
preloadCount: 1,
-
- // upper bound on pagination dots. Fewer titles than this show one dot each.
maxDots: 5,
-
- // leading slides that must include every item type present. 0 = off (plain proportional shuffle).
mixTypesInFirst: 3,
- // ms of the crossfade between slides. Must match the CSS transition.
fadeTransitionDuration: 500,
- // true|false. Ken Burns zoom and blur-in on the backdrop and logo.
- slideAnimationEnabled: true,
- // true|false. Master switch for trailer playback, local and YouTube.
- enableTrailers: true,
-
- // name fragments that demote a trailer (sign language, vertical crops, etc).
+ slideAnimationEnabled: !0,
+ enableTrailers: !0,
+ allowTrailersOnTouch: !1,
trailerAlternateCutTerms: [
"sign language",
"asl trailer",
@@ -56,81 +30,34 @@ const CONFIG = {
"described audio",
"vertical",
],
-
- // true|false. Mirror the slide onto Jellyfin's page backdrop. Intrusive: it deletes Jellyfin's own backdrop layers while active.
- syncPageBackdrop: false,
- // ms to wait for the YouTube iframe API before giving up and carrying on.
+ syncPageBackdrop: !1,
youtubeApiLoadTimeoutMs: 8000,
-
- // ms the backdrop is shown before the trailer starts. 0 = immediately.
trailerStartDelayMs: 3500,
-
- // ms to wait for playback to actually begin before resuming the slideshow. Guards a silent failure.
trailerPlaybackWatchdogMs: 4000,
- // 0-100. Volume once unmuted. Trailers always start muted.
trailerVolume: 50,
-
- // px. At or below this width the layout is swipe-only: no arrows, no trailer, no volume.
touchLayoutMaxWidth: 767,
-
- // true|false. Black overlay hiding the app until the slideshow is ready. Not needed since the early start.
- showLoadingScreen: false,
-
- // ms before the overlay lifts regardless. Prevents a permanent black screen.
+ showLoadingScreen: !1,
loadingScreenTimeoutMs: 10000,
-
- // ms to wait for a signed-in user before giving up entirely.
authWaitTimeoutMs: 30000,
-
- // ms between sign-in checks during the first moments. Cheap, so it is tight.
authFastPollIntervalMs: 30,
- // ms of fast polling before backing off to retryInterval.
authFastPollWindowMs: 8000,
-
- // true|false. Start from Jellyfin's stored credentials instead of waiting for window.ApiClient (~2.4s earlier).
- earlyStartFromStoredCredentials: true,
-
- // true|false. Paint a blurred approximation of the backdrop while the real image loads. Costs no request.
- useBlurHashPlaceholder: true,
-
- // "marquee" | "plate" | "classic". marquee = spec line + progress rule, panel on phone. plate = type on a tinted panel. classic = the original.
+ earlyStartFromStoredCredentials: !0,
+ useBlurHashPlaceholder: !0,
layout: "marquee",
-
- // 0-1. Plate layout only. Target lightness of the panel. 0.035 holds white text near 12:1.
plateLuminance: 0.035,
- // 0-1. Plate layout only. Lightness of the accent taken from the artwork.
plateAccentLuminance: 0.42,
-
- // CSS colour. Plate panel when an item has no BlurHash to derive from.
plateFallback: "rgb(28 30 34)",
- // CSS colour. Accent when an item has no BlurHash.
plateAccentFallback: "rgb(150 156 166)",
-
- // max rows in the plate layout's spec table. Fields are added in priority order.
plateSpecRows: 4,
-
- // true|false. Prefer a trailer file on the server over the YouTube embed. Avoids embed blocks and autoplay refusals.
- preferLocalTrailers: true,
-
- // true|false. Hold the rotation while the pointer is over the stage. Resumes mid-period, does not restart.
- pauseOnHover: true,
-
- // true|false. Keep the shuffled order and position for the browser session, so returning to home resumes.
- rememberOrderForSession: true,
-
- // true|false. Skip trailers when the browser reports a metered connection.
- respectDataSaver: true,
-
- // true|false. Also time Jellyfin's own rows for comparison. Costs a body-wide observer; read marks via performance.getEntriesByType('mark').
- measureStartup: false,
-
- // true|false. Look up trailer intros via sponsor.ajay.app. Sends the video id to a third party, so off by default.
- enableSponsorBlock: false,
+ preferLocalTrailers: !0,
+ pauseOnHover: !0,
+ rememberOrderForSession: !0,
+ respectDataSaver: !0,
+ measureStartup: !1,
+ enableSponsorBlock: !1,
};
-
const STORED_CONFIG_KEY = "mediabar.config";
const STORED_CONFIG_VERSION = 1;
-
const CONFIG_RULES = {
shuffleInterval: [2000, 600000],
retryInterval: [50, 10000],
@@ -160,7 +87,6 @@ const CONFIG_RULES = {
plateFallback: "colour",
plateAccentFallback: "colour",
};
-
const STRUCTURAL_CONFIG_KEYS = new Set([
"layout",
"maxItems",
@@ -178,84 +104,71 @@ const STRUCTURAL_CONFIG_KEYS = new Set([
"libraries",
"trailerLibraries",
]);
-
const lockedConfigKeys = new Set();
-
const validateConfigValue = (key, value) => {
const current = CONFIG[key];
const rule = CONFIG_RULES[key];
-
if (typeof current === "boolean") {
if (typeof value === "boolean") return value;
-
- if (value === "true" || value === "1") return true;
- if (value === "false" || value === "0") return false;
+ if (value === "true" || value === "1") return !0;
+ if (value === "false" || value === "0") return !1;
return null;
}
-
if (typeof current === "number") {
const parsed = typeof value === "number" ? value : Number(value);
if (!Number.isFinite(parsed)) return null;
if (!Array.isArray(rule)) return parsed;
return Math.min(rule[1], Math.max(rule[0], parsed));
}
-
if (typeof current === "string") {
const text = String(value);
if (Array.isArray(rule)) return rule.includes(text) ? text : null;
-
if (rule === "colour") {
return window.CSS?.supports("color", text) ? text : null;
}
return text;
}
-
if (Array.isArray(current)) {
return Array.isArray(value) ? value.map(String) : null;
}
-
return null;
};
-
const applyImageSvgOverrides = (svgs) => {
- if (!svgs || typeof svgs !== "object") return false;
-
- let changed = false;
+ if (!svgs || typeof svgs !== "object") return !1;
+ let changed = !1;
for (const [rawKey, value] of Object.entries(svgs)) {
const key = rawKey.charAt(0).toLowerCase() + rawKey.slice(1);
if (!(key in CONFIG.IMAGE_SVG)) continue;
if (typeof value !== "string" || !/^\s*