Updat CSS V1.0.0

This commit is contained in:
2025-09-19 14:33:13 +03:00
parent 48ca67c2d4
commit f811637519

622
edd.css
View File

@@ -23,116 +23,51 @@
* VARIABILE CSS GLOBALE * VARIABILE CSS GLOBALE
* ======================================== */ * ======================================== */
:root { :root {
/* Paleta de culori modernă și profesională */ /* Paleta de culori principală */
--primary-color: #6366f1; /* Indigo modern */ --primary-color: #00a4dc; /* Albastru Jellyfin */
--primary-light: #818cf8; /* Indigo deschis */ --secondary-color: #1e1e1e; /* Gri închis */
--primary-dark: #4f46e5; /* Indigo închis */ --accent-color: #ff6b35; /* Portocaliu accent */
--secondary-color: #1f2937; /* Gri închis modern */ --background-dark: #0f0f0f; /* Fundal foarte închis */
--accent-color: #f59e0b; /* Amber accent */ --background-medium: #1a1a1a; /* Fundal mediu */
--accent-secondary: #10b981; /* Emerald accent */ --background-light: #2a2a2a; /* Fundal deschis */
--text-primary: #ffffff; /* Text principal */
--text-secondary: #b3b3b3; /* Text secundar */
--border-color: #333333; /* Culoare borduri */
--success-color: #28a745; /* Verde pentru succes */
--warning-color: #ffc107; /* Galben pentru avertismente */
--error-color: #dc3545; /* Roșu pentru erori */
/* Fundaluri cu gradient modern */ /* Dimensiuni și spațiere */
--background-dark: #0f172a; /* Slate foarte închis */ --border-radius: 8px;
--background-medium: #1e293b; /* Slate mediu */ --border-radius-small: 4px;
--background-light: #334155; /* Slate deschis */ --border-radius-large: 12px;
--background-card: #1e293b; /* Fundal carduri */ --shadow-light: 0 2px 4px rgba(0,0,0,0.1);
--background-overlay: rgba(15, 23, 42, 0.95); /* Overlay cu transparență */ --shadow-medium: 0 4px 8px rgba(0,0,0,0.2);
--shadow-heavy: 0 8px 16px rgba(0,0,0,0.3);
/* Text cu contrast îmbunătățit */ /* Tranziții */
--text-primary: #f8fafc; /* Alb cald */ --transition-fast: 0.2s ease;
--text-secondary: #cbd5e1; /* Gri deschis */ --transition-medium: 0.3s ease;
--text-muted: #94a3b8; /* Gri mediu */ --transition-slow: 0.5s ease;
--border-color: #475569; /* Borduri subtile */
/* Culori de stare moderne */
--success-color: #10b981; /* Emerald */
--warning-color: #f59e0b; /* Amber */
--error-color: #ef4444; /* Red modern */
--info-color: #3b82f6; /* Blue modern */
/* Dimensiuni și spațiere moderne */
--border-radius: 12px;
--border-radius-small: 6px;
--border-radius-large: 16px;
--border-radius-xl: 24px;
/* Umbre moderne cu blur */
--shadow-light: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
--shadow-medium: 0 4px 6px rgba(0,0,0,0.07), 0 2px 4px rgba(0,0,0,0.06);
--shadow-heavy: 0 10px 15px rgba(0,0,0,0.1), 0 4px 6px rgba(0,0,0,0.05);
--shadow-xl: 0 20px 25px rgba(0,0,0,0.15), 0 10px 10px rgba(0,0,0,0.04);
/* Efecte de blur moderne */
--blur-light: blur(8px);
--blur-medium: blur(12px);
--blur-heavy: blur(16px);
--blur-xl: blur(24px);
/* Tranziții fluide */
--transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
--transition-medium: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
/* Gradienturi moderne */
--gradient-primary: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%);
--gradient-accent: linear-gradient(135deg, var(--accent-color) 0%, var(--accent-secondary) 100%);
--gradient-background: linear-gradient(135deg, var(--background-dark) 0%, var(--background-medium) 100%);
} }
/* ======================================== /* ========================================
* ELIMINĂ TOATE MODIFICĂRILE DE FUNDAL - LASĂ JELLYFIN SĂ GESTIONEZE * STILURI GENERALE PENTRU FUNDAL ȘI LAYOUT
* ======================================== */ * ======================================== */
/* NU modifica fundalul deloc - lasă Jellyfin să-l gestioneze */ /* Fundal principal al aplicației */
.backgroundContainer,
/* ======================================== .dialog,
* FORȚEAZĂ VIZIBILITATEA IMAGINILOR - REGULI PUTERNICE html {
* ======================================== */ background-color: var(--background-dark) !important;
color: var(--text-primary);
/* Toate imaginile trebuie să fie vizibile */
img,
.cardImage,
.cardImageContainer img,
.cardContent-button img,
.itemDetailImage img,
.listItemImage img,
.cardContent img,
.listItem img,
.cardScalable img,
.cardOverlayContainer img,
.listItemImageButton img,
.userImage,
.headerUserImage,
.headerUserButton img,
.lazy {
filter: none !important;
opacity: 1 !important;
visibility: visible !important;
display: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
max-width: 100% !important;
height: auto !important;
} }
/* Elimină orice overlay care ar putea ascunde imaginile */ /* Container principal pentru conținut */
.cardImageContainer::before, .backgroundContainer.withBackdrop,
.cardContent-button::before, .backdropContainer,
.cardOverlayContainer::before { .backgroundContainer {
display: none !important; background: linear-gradient(135deg, var(--background-dark) 0%, var(--background-medium) 100%) !important;
}
/* Asigură că containerele imaginilor nu au probleme */
.cardImageContainer,
.cardContent-button,
.cardScalable,
.cardOverlayContainer,
.listItemImageButton {
overflow: visible !important;
background: transparent !important;
filter: none !important;
backdrop-filter: none !important;
} }
/* Îmbunătățiri pentru scrolling */ /* Îmbunătățiri pentru scrolling */
@@ -165,25 +100,45 @@ img,
* HEADER ȘI NAVIGARE * HEADER ȘI NAVIGARE
* ======================================== */ * ======================================== */
/* Header - NU modifica fundalul, lasă Jellyfin să gestioneze */ /* Header principal - design transparent modern */
.skinHeader.focuscontainer-x.skinHeader-withBackground.skinHeader-blurred {
background: rgba(15, 15, 15, 0.95) !important;
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
box-shadow: var(--shadow-medium);
transition: all var(--transition-medium);
}
/* Butoane din header - design simplu */ .skinHeader.focuscontainer-x.skinHeader-withBackground.skinHeader-blurred.noHomeButtonHeader {
background: rgba(15, 15, 15, 0.95) !important;
backdrop-filter: blur(10px);
}
/* Butoane din header */
.headerButton { .headerButton {
color: var(--text-primary) !important;
transition: all var(--transition-fast); transition: all var(--transition-fast);
border-radius: var(--border-radius); border-radius: var(--border-radius-small);
margin: 0 6px; margin: 0 4px;
padding: 8px 12px !important;
} }
.headerButton:hover { .headerButton:hover {
background: var(--gradient-primary) !important; background-color: var(--primary-color) !important;
color: white !important; color: white !important;
transform: translateY(-2px) scale(1.05); transform: translateY(-1px);
box-shadow: var(--shadow-medium); box-shadow: var(--shadow-light);
border-color: var(--primary-light);
} }
/* Meniu lateral - NU modifica fundalul */ /* Meniu lateral (drawer) */
.mainDrawer {
background: var(--background-medium) !important;
border-right: 1px solid var(--border-color);
box-shadow: var(--shadow-heavy);
}
.mainDrawer-scrollContainer {
color: var(--text-primary) !important;
}
/* Opțiuni din meniul lateral */ /* Opțiuni din meniul lateral */
.navMenuOption { .navMenuOption {
@@ -237,105 +192,58 @@ img,
border-bottom: 3px solid var(--primary-color); border-bottom: 3px solid var(--primary-color);
} }
/* Butoane generale cu design modern */ /* Butoane generale */
.button-submit, .button-submit,
.raised.emby-button { .raised.emby-button {
background: var(--gradient-primary) !important; background: linear-gradient(135deg, var(--primary-color) 0%, var(--accent-color) 100%) !important;
color: white !important; color: white !important;
border: none !important; border: none !important;
border-radius: var(--border-radius-large) !important; border-radius: var(--border-radius) !important;
padding: 14px 28px !important; padding: 12px 24px !important;
font-weight: 600 !important; font-weight: 600 !important;
transition: all var(--transition-fast) !important; transition: all var(--transition-fast) !important;
box-shadow: var(--shadow-medium) !important; box-shadow: var(--shadow-light) !important;
text-transform: none; text-transform: uppercase;
letter-spacing: 0.3px; letter-spacing: 0.5px;
font-size: 0.95rem !important;
position: relative;
overflow: hidden;
}
.button-submit::before,
.raised.emby-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
transition: left var(--transition-medium);
}
.button-submit:hover::before,
.raised.emby-button:hover::before {
left: 100%;
} }
.button-submit:hover, .button-submit:hover,
.raised.emby-button:hover { .raised.emby-button:hover {
transform: translateY(-3px) scale(1.02) !important; transform: translateY(-2px) !important;
box-shadow: var(--shadow-heavy) !important; box-shadow: var(--shadow-medium) !important;
background: var(--gradient-accent) !important; background: linear-gradient(135deg, var(--accent-color) 0%, var(--primary-color) 100%) !important;
} }
/* ======================================== /* ========================================
* CARDURI ȘI ELEMENTE MEDIA * CARDURI ȘI ELEMENTE MEDIA
* ======================================== */ * ======================================== */
/* Carduri - design simplu fără modificări de fundal */ /* Carduri pentru filme, seriale, etc. */
.cardBox { .cardBox {
border-radius: var(--border-radius-large) !important; background: var(--background-medium) !important;
border: 1px solid var(--border-color) !important;
border-radius: var(--border-radius) !important;
transition: all var(--transition-medium) !important; transition: all var(--transition-medium) !important;
position: relative; box-shadow: var(--shadow-light) !important;
} }
/* Elimină overlay-ul care poate ascunde imaginile */
.cardBox:hover { .cardBox:hover {
transform: translateY(-6px) scale(1.03) !important; transform: translateY(-4px) scale(1.02) !important;
box-shadow: var(--shadow-xl) !important; box-shadow: var(--shadow-heavy) !important;
border-color: var(--primary-light) !important; border-color: var(--primary-color) !important;
background: var(--background-light) !important;
} }
/* Imagini din carduri - design îmbunătățit */ /* Imagini din carduri - colțuri rotunjite */
.cardContent-button, .cardContent-button,
.itemDetailImage, .itemDetailImage,
.cardImageContainer { .cardImageContainer {
border-radius: var(--border-radius-large) !important; border-radius: var(--border-radius) !important;
overflow: hidden !important; overflow: hidden !important;
transition: all var(--transition-medium) !important; transition: all var(--transition-medium) !important;
position: relative;
z-index: 2;
} }
.cardContent-button:hover { .cardContent-button:hover {
transform: scale(1.05) !important; transform: scale(1.05) !important;
box-shadow: var(--shadow-medium) !important;
}
/* Asigură vizibilitatea COMPLETĂ a imaginilor - FĂRĂ BLUR */
.cardImageContainer img,
.cardContent-button img,
.itemDetailImage img,
.cardImage,
.listItemImage img,
.lazy img {
filter: none !important;
opacity: 1 !important;
visibility: visible !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
transition: transform var(--transition-medium) !important;
}
.cardImageContainer:hover img,
.cardContent-button:hover img,
.listItemImage:hover img {
filter: none !important;
transform: scale(1.02) !important;
opacity: 1 !important;
} }
/* Text din carduri */ /* Text din carduri */
@@ -359,11 +267,12 @@ img,
box-shadow: var(--shadow-light) !important; box-shadow: var(--shadow-light) !important;
} }
/* Indicatori transparenți și eleganți - FĂRĂ BLUR */ /* Indicatori transparenți și eleganți */
.indicator { .indicator {
background: rgba(0, 0, 0, 0.7) !important; background: rgba(0, 0, 0, 0.7) !important;
color: white !important; color: white !important;
border-radius: var(--border-radius-small) !important; border-radius: var(--border-radius-small) !important;
backdrop-filter: blur(5px) !important;
} }
/* Indicatori pentru numărul de episoade */ /* Indicatori pentru numărul de episoade */
@@ -450,7 +359,37 @@ img,
* PAGINA DE LOGIN * PAGINA DE LOGIN
* ======================================== */ * ======================================== */
/* Login - NU modifica fundalul */ /* Container pentru pagina de login */
#loginPage {
background: linear-gradient(135deg, var(--background-dark) 0%, var(--background-medium) 100%);
background-size: cover;
position: relative;
}
/* Overlay pentru pagina de login */
#loginPage::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(15, 15, 15, 0.8);
backdrop-filter: blur(5px);
}
/* Formular de login - design minimalist */
#loginPage .readOnlyContent,
#loginPage form {
max-width: 400px !important;
background: rgba(26, 26, 26, 0.95) !important;
border-radius: var(--border-radius-large) !important;
padding: 40px !important;
box-shadow: var(--shadow-heavy) !important;
border: 1px solid var(--border-color) !important;
position: relative;
z-index: 1;
}
/* Titlu login */ /* Titlu login */
#loginPage h1 { #loginPage h1 {
@@ -476,7 +415,13 @@ img,
* PLAYER VIDEO ȘI CONTROALE * PLAYER VIDEO ȘI CONTROALE
* ======================================== */ * ======================================== */
/* Player - NU modifica fundalul */ /* Bara de progres video */
.nowPlayingBar {
background: rgba(26, 26, 26, 0.95) !important;
backdrop-filter: blur(10px) !important;
border-top: 1px solid var(--border-color) !important;
box-shadow: 0 -4px 8px rgba(0,0,0,0.3) !important;
}
/* Controale player */ /* Controale player */
.nowPlayingBarCenter { .nowPlayingBarCenter {
@@ -753,7 +698,19 @@ div.nextUpSection {
* TEMA ÎNTUNECATĂ ÎMBUNĂTĂȚITĂ * TEMA ÎNTUNECATĂ ÎMBUNĂTĂȚITĂ
* ======================================== */ * ======================================== */
/* Dialoguri - NU modifica fundalul */ /* Overlay pentru dialoguri */
.dialogBackdrop {
background: rgba(0, 0, 0, 0.8) !important;
backdrop-filter: blur(5px) !important;
}
/* Dialoguri */
.dialog {
background: var(--background-medium) !important;
border: 1px solid var(--border-color) !important;
border-radius: var(--border-radius-large) !important;
box-shadow: var(--shadow-heavy) !important;
}
/* Titluri în dialoguri */ /* Titluri în dialoguri */
.dialog h2, .dialog h2,
@@ -789,314 +746,21 @@ div.nextUpSection {
transition: all var(--transition-medium) !important; transition: all var(--transition-medium) !important;
} }
/* ========================================
* ÎMBUNĂTĂȚIRI FINALE PENTRU IMAGINI
* ======================================== */
/* ELIMINĂ COMPLET BLUR-UL - Asigură vizibilitatea maximă pentru toate imaginile */
.cardImage,
.cardImageContainer .cardImage,
.listItemImage,
.itemDetailImage,
.cardContent img,
.listItem img,
.cardImageContainer img,
.cardContent-button img,
.listItemImage img,
.itemDetailImage img,
.lazy,
img:not(.backdropImage):not(.backdrop):not(.itemBackdrop) {
filter: none !important;
opacity: 1 !important;
visibility: visible !important;
display: block !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
}
/* Hover effects pentru imagini - FĂRĂ FILTRE */
.cardImageContainer:hover .cardImage,
.listItemImage:hover,
.itemDetailImage:hover,
.cardImageContainer:hover img,
.cardContent-button:hover img {
filter: none !important;
transform: scale(1.02) !important;
opacity: 1 !important;
}
/* Îmbunătățiri pentru thumbnail-uri */
.listItemImageButton,
.cardContent-button {
position: relative;
overflow: hidden;
border-radius: var(--border-radius-large) !important;
}
.listItemImageButton::after,
.cardContent-button::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(16, 185, 129, 0.1) 100%);
opacity: 0;
transition: opacity var(--transition-fast);
}
.listItemImageButton:hover::after,
.cardContent-button:hover::after {
opacity: 1;
}
/* ========================================
* EFECTE SPECIALE PENTRU PROFESIONALISM
* ======================================== */
/* Animație subtilă pentru loading */
@keyframes shimmer {
0% { background-position: -200px 0; }
100% { background-position: calc(200px + 100%) 0; }
}
.lazy:not([src]) {
background: linear-gradient(90deg, var(--background-light) 0%, var(--background-medium) 50%, var(--background-light) 100%);
background-size: 200px 100%;
animation: shimmer 1.5s infinite;
}
/* ========================================
* ELIMINĂ COMPLET BLUR-UL DE PE IMAGINI - REGULI FOARTE PUTERNICE
* ======================================== */
/* TOATE imaginile - ZERO blur, ZERO filtre */
img,
.cardImage,
.cardImageContainer img,
.cardContent-button img,
.listItemImage img,
.itemDetailImage img,
.lazy img,
.userImage,
.headerUserImage,
.headerUserButton img,
.cardScalable img,
.cardOverlayContainer img,
.listItemImageButton img,
.cardContent img,
.listItem img,
.itemAction img,
.coveredImage,
.defaultCardBackground,
.lazy,
.cardContent-button,
.cardImageContainer,
.listItemImageButton,
.cardBox img,
.card img {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
opacity: 1 !important;
visibility: visible !important;
display: block !important;
background: none !important;
box-shadow: none !important;
}
/* ELIMINĂ BLUR-UL DE PE TOATE CONTAINERELE DE IMAGINI */
.cardImageContainer,
.cardContent-button,
.cardScalable,
.listItemImageButton,
.cardBox,
.card,
.cardContent,
.itemDetailImage,
.listItemImage {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
}
/* Elimină orice pseudo-elemente care ar putea ascunde imaginile */
.cardImageContainer::before,
.cardImageContainer::after,
.cardContent-button::before,
.cardContent-button::after,
.cardOverlayContainer::before,
.cardOverlayContainer::after,
.listItemImageButton::before,
.listItemImageButton::after {
display: none !important;
content: none !important;
}
/* Asigură că imaginile au dimensiuni corecte */
.cardImageContainer img,
.cardContent-button img,
.listItemImage img {
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
}
/* Elimină orice transformări care ar putea afecta imaginile */
.cardImageContainer,
.cardContent-button,
.cardScalable,
.listItemImageButton {
transform: none !important;
filter: none !important;
backdrop-filter: none !important;
}
/* ========================================
* REGULI ANTI-BLUR FOARTE SPECIFICE PENTRU JELLYFIN
* ======================================== */
/* Elimină blur-ul aplicat de Jellyfin pe imagini */
.cardContent-button.cardImageContainer.coveredImage.cardContent.cardContent-shadow.itemAction.lazy,
.cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.cardContent.cardContent-shadow.itemAction,
.listItemImage.listItemImage-large.itemAction.lazy,
.itemDetailImage,
.cardImage.lazy {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
}
/* Forțează eliminarea blur-ului pe toate clasele Jellyfin */
.lazy[style*="filter"],
.cardImageContainer[style*="filter"],
.cardContent-button[style*="filter"],
img[style*="filter"],
.cardImage[style*="filter"] {
filter: none !important;
}
/* Elimină blur-ul din stilurile inline */
*[style*="blur"] {
filter: none !important;
backdrop-filter: none !important;
}
/* Reguli pentru toate tipurile de carduri Jellyfin */
.portraitCard img,
.squareCard img,
.backdropCard img,
.bannerCard img,
.thumbCard img {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
}
/* Elimină blur-ul de pe cardurile cu hover */
.card-hoverable img,
.card-withuserdata img,
.overflowPortraitCard img,
.overflowSquareCard img,
.overflowBackdropCard img {
filter: none !important;
backdrop-filter: none !important;
}
/* CORECȚII SPECIFICE PENTRU IMAGINI DE PROFIL ȘI CARDURI */
.headerUserButton,
.headerUserButton img,
.userImage,
.headerUserImage,
.userImageContainer,
.userImageContainer img {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
opacity: 1 !important;
visibility: visible !important;
display: block !important;
}
/* Corecții pentru carduri - elimină orice blur */
.card,
.cardBox,
.cardContent,
.cardContent-button,
.cardImageContainer,
.cardScalable,
.cardOverlayContainer {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
}
/* Elimină blur-ul de pe toate elementele cu clasa lazy */
.lazy {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
opacity: 1 !important;
}
/* Îmbunătățiri pentru focus și accesibilitate */
*:focus-visible {
outline: 2px solid var(--primary-color) !important;
outline-offset: 2px !important;
border-radius: var(--border-radius-small) !important;
}
/* ========================================
* REGULĂ FINALĂ ANTI-BLUR - PRIORITATE MAXIMĂ
* ======================================== */
/* SUPRASCRIE ORICE BLUR DIN ORICE SURSĂ */
* img,
* .cardImage,
* .cardImageContainer,
* .cardContent-button,
* .lazy {
filter: none !important;
backdrop-filter: none !important;
-webkit-filter: none !important;
-webkit-backdrop-filter: none !important;
}
/* Elimină blur-ul chiar și din JavaScript sau stiluri inline */
img[style],
.cardImage[style],
.cardImageContainer[style],
.cardContent-button[style] {
filter: none !important;
backdrop-filter: none !important;
}
/* Mesaj final în CSS */ /* Mesaj final în CSS */
/* /*
* ======================================== * ========================================
* SFÂRȘITUL TEMEI PERSONALIZATE JELLYFIN * SFÂRȘITUL TEMEI PERSONALIZATE JELLYFIN
* ======================================== * ========================================
* *
* Această temă modernă oferă: * Această temă oferă:
* ✓ Design modern și profesional * ✓ Design modern și elegant
* ✓ Imagini COMPLET CLARE - ZERO blur * ✓ Animații fluide și responsive
* ✓ Fundal nativ Jellyfin păstrat
* ✓ Animații fluide și moderne
* ✓ Compatibilitate cu toate dispozitivele * ✓ Compatibilitate cu toate dispozitivele
* ✓ Îmbunătățiri pentru accesibilitate * ✓ Îmbunătățiri pentru accesibilitate
* ✓ Optimizări pentru performanță * ✓ Optimizări pentru performanță
* ✓ Paletă de culori contemporană
* *
* Pentru personalizări suplimentare, * Pentru suport sau personalizări suplimentare,
* modifică variabilele CSS din secțiunea :root * modifică variabilele CSS din secțiunea :root
* *
* Bucură-te de experiența îmbunătățită Jellyfin! * Bucură-te de experiența îmbunătățită Jellyfin!
* Versiune: 2.1 - Anti-Blur Edition
*/ */