Files
jellyfincss/edd.css
2025-09-19 11:11:40 +03:00

2004 lines
58 KiB
CSS

/*
* ========================================
* JELLYFIN NEXUS THEME - PROFESSIONAL EDITION
* ========================================
*
* 🎨 TEMA PREMIUM PENTRU JELLYFIN SERVER
*
* Autor: EDD
* Versiune: 3.0 NEXUS PROFESSIONAL
* Compatibilitate: Jellyfin WebUI (toate versiunile moderne)
* Repository: https://git.eddmanoo.cloud/eddmanoo/jellyfincss
*
* 🚀 CARACTERISTICI PREMIUM:
* ✨ Design Nexus cu efecte holografice
* 🌌 Fundal cosmic cu particule animate
* 💎 Glassmorphism de nivel enterprise
* 🎭 Animații cinematice fluide
* 📱 Responsive design pentru toate dispozitivele
* ⚡ Optimizări GPU pentru performanță maximă
* 🎯 Micro-interacțiuni și feedback haptic
*
* 📋 INSTRUCȚIUNI DE UTILIZARE:
* Metoda 1 (Recomandată): @import url('https://git.eddmanoo.cloud/eddmanoo/jellyfincss/raw/branch/main/edd.css');
* Metoda 2: Copiază manual codul în Dashboard > General > Custom CSS
*
* 💡 PERSONALIZARE:
* Modifică variabilele din secțiunea :root pentru adaptare completă
*
* ⚠️ NOTĂ: Această temă folosește tehnologii CSS avansate pentru o experiență premium
*/
/* ========================================
* NEXUS DESIGN SYSTEM - VARIABILE PREMIUM
* ======================================== */
:root {
/* 🎨 PALETA NEXUS - CULORI HOLOGRAFICE */
--nexus-primary: #00d4ff; /* Cyan electric */
--nexus-primary-glow: #00a8cc; /* Cyan glow */
--nexus-secondary: #ff0080; /* Magenta neon */
--nexus-secondary-glow: #cc0066; /* Magenta glow */
--nexus-accent: #00ff88; /* Green matrix */
--nexus-accent-glow: #00cc6a; /* Green glow */
--nexus-warning: #ffaa00; /* Orange plasma */
--nexus-danger: #ff3366; /* Red laser */
/* 🌌 FUNDAL COSMIC NEXUS */
--nexus-void: #000011; /* Spațiu cosmic profund */
--nexus-dark: #001122; /* Nebula întunecată */
--nexus-medium: #002244; /* Stele îndepărtate */
--nexus-light: #003366; /* Lumină stelară */
--nexus-surface: #004488; /* Suprafață holografică */
--nexus-overlay: rgba(0, 17, 34, 0.92); /* Overlay cosmic */
/* ✨ TEXT HOLOGRAFIC */
--nexus-text-primary: #ffffff; /* Alb pur holografic */
--nexus-text-secondary: #ccddff; /* Albastru deschis */
--nexus-text-muted: #8899bb; /* Gri cosmic */
--nexus-text-disabled: #556677; /* Gri estompat */
--nexus-text-glow: #00d4ff; /* Text cu glow cyan */
/* 🔷 BORDURI ENERGETICE */
--nexus-border-primary: #003366; /* Bordură principală */
--nexus-border-secondary: #004488; /* Bordură secundară */
--nexus-border-glow: var(--nexus-primary); /* Bordură cu glow */
--nexus-border-energy: linear-gradient(90deg, var(--nexus-primary), var(--nexus-secondary), var(--nexus-accent));
/* 🎯 STĂRI ENERGETICE */
--nexus-success: #00ff88; /* Verde matrix */
--nexus-success-bg: rgba(0, 255, 136, 0.1);
--nexus-success-glow: 0 0 20px rgba(0, 255, 136, 0.5);
--nexus-warning: #ffaa00; /* Portocaliu plasma */
--nexus-warning-bg: rgba(255, 170, 0, 0.1);
--nexus-warning-glow: 0 0 20px rgba(255, 170, 0, 0.5);
--nexus-error: #ff3366; /* Roșu laser */
--nexus-error-bg: rgba(255, 51, 102, 0.1);
--nexus-error-glow: 0 0 20px rgba(255, 51, 102, 0.5);
/* 🔮 GEOMETRIE NEXUS */
--nexus-radius-nano: 2px;
--nexus-radius-micro: 4px;
--nexus-radius-small: 8px;
--nexus-radius-medium: 12px;
--nexus-radius-large: 16px;
--nexus-radius-xl: 24px;
--nexus-radius-2xl: 32px;
--nexus-radius-cosmic: 50px;
--nexus-radius-infinite: 9999px;
/* ⚡ UMBRE ENERGETICE NEXUS */
--nexus-shadow-nano: 0 1px 3px rgba(0, 212, 255, 0.1);
--nexus-shadow-micro: 0 2px 8px rgba(0, 212, 255, 0.15);
--nexus-shadow-small: 0 4px 12px rgba(0, 212, 255, 0.2);
--nexus-shadow-medium: 0 8px 24px rgba(0, 212, 255, 0.25);
--nexus-shadow-large: 0 16px 48px rgba(0, 212, 255, 0.3);
--nexus-shadow-xl: 0 24px 64px rgba(0, 212, 255, 0.35);
--nexus-shadow-cosmic: 0 32px 96px rgba(0, 212, 255, 0.4);
--nexus-shadow-inner: inset 0 2px 8px rgba(0, 212, 255, 0.1);
--nexus-glow-primary: 0 0 30px rgba(0, 212, 255, 0.6);
--nexus-glow-secondary: 0 0 30px rgba(255, 0, 128, 0.6);
--nexus-glow-accent: 0 0 30px rgba(0, 255, 136, 0.6);
--nexus-glow-rainbow: 0 0 40px rgba(0, 212, 255, 0.4), 0 0 60px rgba(255, 0, 128, 0.3), 0 0 80px rgba(0, 255, 136, 0.2);
/* 🌊 TRANZIȚII CINEMATICE */
--nexus-transition-instant: all 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94);
--nexus-transition-fast: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
--nexus-transition-smooth: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
--nexus-transition-elegant: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
--nexus-transition-dramatic: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
--nexus-transition-bounce: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
--nexus-transition-elastic: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
/* 🌀 EFECTE BLUR HOLOGRAFICE */
--nexus-blur-subtle: blur(1px);
--nexus-blur-soft: blur(3px);
--nexus-blur-medium: blur(6px);
--nexus-blur-strong: blur(12px);
--nexus-blur-intense: blur(20px);
--nexus-blur-extreme: blur(32px);
--nexus-blur-cosmic: blur(50px);
/* 📐 SISTEM SPAȚIAL NEXUS */
--nexus-space-1: 0.25rem; /* 4px - Micro */
--nexus-space-2: 0.5rem; /* 8px - Tiny */
--nexus-space-3: 0.75rem; /* 12px - Small */
--nexus-space-4: 1rem; /* 16px - Base */
--nexus-space-5: 1.25rem; /* 20px - Medium */
--nexus-space-6: 1.5rem; /* 24px - Large */
--nexus-space-8: 2rem; /* 32px - XL */
--nexus-space-10: 2.5rem; /* 40px - 2XL */
--nexus-space-12: 3rem; /* 48px - 3XL */
--nexus-space-16: 4rem; /* 64px - 4XL */
--nexus-space-20: 5rem; /* 80px - 5XL */
--nexus-space-24: 6rem; /* 96px - 6XL */
}
/* ========================================
* 🌌 FUNDAL COSMIC NEXUS CU PARTICULE ANIMATE
* ======================================== */
/* Reset și configurare de bază */
* {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
}
html {
background: var(--nexus-void) !important;
color: var(--nexus-text-primary) !important;
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, 'Helvetica Neue', Arial, sans-serif !important;
font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1, 'ss01' 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
font-optical-sizing: auto;
}
body {
background: var(--nexus-void) !important;
margin: 0;
padding: 0;
overflow-x: hidden;
position: relative;
}
/* Fundal cosmic cu particule animate */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(circle at 10% 20%, rgba(0, 212, 255, 0.1) 0%, transparent 20%),
radial-gradient(circle at 80% 80%, rgba(255, 0, 128, 0.1) 0%, transparent 20%),
radial-gradient(circle at 40% 40%, rgba(0, 255, 136, 0.05) 0%, transparent 20%),
radial-gradient(circle at 90% 10%, rgba(255, 170, 0, 0.08) 0%, transparent 20%),
radial-gradient(circle at 20% 90%, rgba(255, 51, 102, 0.06) 0%, transparent 20%);
animation: cosmic-drift 30s ease-in-out infinite;
z-index: -2;
pointer-events: none;
}
@keyframes cosmic-drift {
0%, 100% {
transform: translateX(0) translateY(0) rotate(0deg) scale(1);
opacity: 0.8;
}
25% {
transform: translateX(-20px) translateY(-30px) rotate(1deg) scale(1.05);
opacity: 1;
}
50% {
transform: translateX(15px) translateY(20px) rotate(-0.5deg) scale(0.95);
opacity: 0.9;
}
75% {
transform: translateX(-10px) translateY(25px) rotate(0.8deg) scale(1.02);
opacity: 0.95;
}
}
/* Stele animate în fundal */
body::after {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
radial-gradient(2px 2px at 20px 30px, rgba(0, 212, 255, 0.8), transparent),
radial-gradient(2px 2px at 40px 70px, rgba(255, 0, 128, 0.6), transparent),
radial-gradient(1px 1px at 90px 40px, rgba(0, 255, 136, 0.7), transparent),
radial-gradient(1px 1px at 130px 80px, rgba(255, 170, 0, 0.5), transparent),
radial-gradient(2px 2px at 160px 30px, rgba(255, 51, 102, 0.6), transparent);
background-repeat: repeat;
background-size: 200px 100px;
animation: stars-twinkle 8s linear infinite;
z-index: -1;
pointer-events: none;
}
@keyframes stars-twinkle {
0%, 100% { opacity: 0.8; transform: translateY(0); }
50% { opacity: 1; transform: translateY(-10px); }
}
/* Container principal cu glassmorphism cosmic */
.backgroundContainer,
.dialog {
background: var(--nexus-overlay) !important;
backdrop-filter: var(--nexus-blur-medium) !important;
-webkit-backdrop-filter: var(--nexus-blur-medium) !important;
position: relative;
min-height: 100vh;
border: 1px solid var(--nexus-border-primary) !important;
}
/* Overlay holografic pentru container */
.backgroundContainer::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--nexus-border-energy);
opacity: 0.03;
animation: energy-pulse 4s ease-in-out infinite;
z-index: -1;
pointer-events: none;
}
@keyframes energy-pulse {
0%, 100% { opacity: 0.03; transform: scale(1); }
50% { opacity: 0.08; transform: scale(1.01); }
}
/* Container pentru backdrop cu blur holografic */
.backgroundContainer.withBackdrop,
.backdropContainer {
background: var(--nexus-overlay) !important;
backdrop-filter: var(--nexus-blur-strong) !important;
-webkit-backdrop-filter: var(--nexus-blur-strong) !important;
border: 1px solid var(--nexus-border-glow) !important;
box-shadow: var(--nexus-glow-primary) !important;
}
/* Backdrop image cu efect holografic */
.backdropImage {
opacity: 0.08 !important;
filter: blur(3px) saturate(1.5) hue-rotate(15deg) !important;
transition: var(--nexus-transition-dramatic) !important;
mix-blend-mode: screen !important;
}
/* 🌈 SCROLLBAR HOLOGRAFIC NEXUS */
* {
scrollbar-width: thin;
scrollbar-color: var(--nexus-primary) transparent;
}
*::-webkit-scrollbar {
width: 8px;
height: 8px;
}
*::-webkit-scrollbar-track {
background: rgba(0, 34, 68, 0.3);
border-radius: var(--nexus-radius-infinite);
border: 1px solid var(--nexus-border-primary);
}
*::-webkit-scrollbar-thumb {
background: var(--nexus-border-energy);
border-radius: var(--nexus-radius-infinite);
transition: var(--nexus-transition-smooth);
border: 1px solid var(--nexus-primary);
box-shadow: var(--nexus-glow-primary);
}
*::-webkit-scrollbar-thumb:hover {
background: linear-gradient(
45deg,
var(--nexus-primary) 0%,
var(--nexus-secondary) 50%,
var(--nexus-accent) 100%
);
box-shadow: var(--nexus-glow-rainbow);
transform: scale(1.1);
}
*::-webkit-scrollbar-corner {
background: var(--nexus-dark);
border: 1px solid var(--nexus-border-primary);
}
/* ✨ SELECȚIE TEXT HOLOGRAFICĂ */
::selection {
background: rgba(0, 212, 255, 0.3);
color: var(--nexus-text-primary);
text-shadow: 0 0 10px rgba(0, 212, 255, 0.8);
}
::-moz-selection {
background: rgba(0, 212, 255, 0.3);
color: var(--nexus-text-primary);
text-shadow: 0 0 10px rgba(0, 212, 255, 0.8);
}
/* Focus ring holografic */
*:focus {
outline: 2px solid var(--nexus-primary) !important;
outline-offset: 2px !important;
border-radius: var(--nexus-radius-small) !important;
box-shadow: var(--nexus-glow-primary) !important;
}
/* ========================================
* 🚀 HEADER NEXUS CU EFECTE HOLOGRAFICE
* ======================================== */
/* Header principal cu glassmorphism cosmic */
.skinHeader.focuscontainer-x.skinHeader-withBackground.skinHeader-blurred,
.skinHeader.focuscontainer-x.skinHeader-withBackground.skinHeader-blurred.noHomeButtonHeader {
background: var(--nexus-overlay) !important;
backdrop-filter: var(--nexus-blur-strong) !important;
-webkit-backdrop-filter: var(--nexus-blur-strong) !important;
border-bottom: 2px solid var(--nexus-border-glow) !important;
box-shadow: var(--nexus-shadow-large), var(--nexus-glow-primary) !important;
transition: var(--nexus-transition-smooth) !important;
position: relative;
z-index: 1000;
overflow: hidden;
}
/* Efect energetic pentru header */
.skinHeader::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: var(--nexus-border-energy);
opacity: 0.1;
animation: energy-sweep 3s ease-in-out infinite;
z-index: -1;
}
@keyframes energy-sweep {
0% { left: -100%; opacity: 0.1; }
50% { left: 100%; opacity: 0.3; }
100% { left: 200%; opacity: 0.1; }
}
/* Linie energetică în partea de jos */
.skinHeader::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
right: 0;
height: 2px;
background: var(--nexus-border-energy);
opacity: 0.8;
animation: energy-flow 2s linear infinite;
}
@keyframes energy-flow {
0% { background-position: 0% 50%; }
100% { background-position: 100% 50%; }
}
/* 🔮 BUTOANE HEADER HOLOGRAFICE */
.headerButton {
color: var(--nexus-text-secondary) !important;
background: rgba(0, 68, 136, 0.2) !important;
border: 1px solid var(--nexus-border-primary) !important;
border-radius: var(--nexus-radius-medium) !important;
padding: var(--nexus-space-3) var(--nexus-space-4) !important;
margin: 0 var(--nexus-space-2) !important;
transition: var(--nexus-transition-smooth) !important;
position: relative;
overflow: hidden;
backdrop-filter: var(--nexus-blur-soft) !important;
}
.headerButton::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: var(--nexus-border-energy);
opacity: 0.3;
transition: var(--nexus-transition-smooth);
z-index: -1;
}
.headerButton::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: radial-gradient(circle, var(--nexus-primary) 0%, transparent 70%);
transition: var(--nexus-transition-smooth);
transform: translate(-50%, -50%);
z-index: -1;
}
.headerButton:hover {
color: var(--nexus-text-primary) !important;
background: rgba(0, 68, 136, 0.4) !important;
border-color: var(--nexus-primary) !important;
transform: translateY(-2px) scale(1.05) !important;
box-shadow: var(--nexus-shadow-medium), var(--nexus-glow-primary) !important;
}
.headerButton:hover::before {
left: 100%;
}
.headerButton:hover::after {
width: 100%;
height: 100%;
}
.headerButton:active {
transform: translateY(0) scale(1) !important;
box-shadow: var(--nexus-shadow-small) !important;
}
/* Meniu lateral cu glassmorphism */
.mainDrawer {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-lg) !important;
-webkit-backdrop-filter: var(--blur-lg) !important;
border-right: 1px solid var(--border-primary) !important;
box-shadow: var(--shadow-2xl) !important;
transition: var(--transition-normal) !important;
}
.mainDrawer-scrollContainer {
color: var(--text-primary) !important;
padding: var(--space-4) !important;
}
/* Opțiuni meniu lateral moderne */
.navMenuOption {
color: var(--text-secondary) !important;
background: transparent !important;
border: 1px solid transparent !important;
border-radius: var(--border-radius-lg) !important;
padding: var(--space-3) var(--space-4) !important;
margin: var(--space-1) 0 !important;
transition: var(--transition-normal) !important;
position: relative;
overflow: hidden;
}
.navMenuOption::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
transparent 0%,
rgba(14, 165, 233, 0.05) 50%,
transparent 100%
);
transition: var(--transition-normal);
}
.navMenuOption:hover {
color: var(--text-primary) !important;
background: var(--background-tertiary) !important;
border-color: var(--border-secondary) !important;
transform: translateX(var(--space-1)) !important;
box-shadow: var(--shadow-sm) !important;
}
.navMenuOption:hover::before {
left: 100%;
}
.navMenuOption-selected {
color: var(--text-primary) !important;
background: linear-gradient(
135deg,
var(--primary-color) 0%,
var(--primary-hover) 100%
) !important;
border-color: var(--primary-color) !important;
box-shadow: var(--shadow-glow) !important;
font-weight: 600 !important;
}
.navMenuOption-selected::before {
display: none;
}
/* ========================================
* TABURI ȘI BUTOANE ULTRA-MODERNE
* ======================================== */
/* Container taburi cu design modern */
.headerTabs.sectionTabs {
background: var(--background-secondary) !important;
border-bottom: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-xl) var(--border-radius-xl) 0 0 !important;
padding: var(--space-2) var(--space-4) !important;
margin: 0 !important;
position: relative;
overflow: hidden;
}
.headerTabs.sectionTabs::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(
90deg,
transparent 0%,
var(--primary-color) 50%,
transparent 100%
);
opacity: 0.5;
}
/* Taburi individuale cu efect glassmorphism */
.emby-tab-button {
background: transparent !important;
color: var(--text-muted) !important;
border: 1px solid transparent !important;
border-radius: var(--border-radius-xl) !important;
padding: var(--space-4) var(--space-6) !important;
margin: 0 var(--space-1) !important;
font-weight: 500 !important;
font-size: 0.95rem !important;
transition: var(--transition-normal) !important;
position: relative;
overflow: hidden;
backdrop-filter: var(--blur-xs) !important;
}
.emby-tab-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
transparent 0%,
rgba(14, 165, 233, 0.1) 50%,
transparent 100%
);
transition: var(--transition-normal);
}
.emby-tab-button:hover {
color: var(--text-secondary) !important;
background: var(--background-tertiary) !important;
border-color: var(--border-secondary) !important;
transform: translateY(-2px) !important;
box-shadow: var(--shadow-md) !important;
}
.emby-tab-button:hover::before {
left: 100%;
}
.emby-tab-button.emby-tab-button-active {
color: var(--text-primary) !important;
background: linear-gradient(
135deg,
var(--primary-color) 0%,
var(--primary-hover) 100%
) !important;
border-color: var(--primary-color) !important;
box-shadow: var(--shadow-glow) !important;
font-weight: 600 !important;
transform: translateY(-1px) !important;
}
.emby-tab-button.emby-tab-button-active::before {
display: none;
}
.emby-tab-button.emby-tab-button-active::after {
content: '';
position: absolute;
bottom: -1px;
left: 50%;
transform: translateX(-50%);
width: 60%;
height: 2px;
background: var(--accent-color);
border-radius: var(--border-radius-full);
}
/* 💎 BUTOANE PRINCIPALE NEXUS PREMIUM */
.button-submit,
.raised.emby-button {
background: var(--nexus-border-energy) !important;
color: var(--nexus-text-primary) !important;
border: 2px solid var(--nexus-primary) !important;
border-radius: var(--nexus-radius-large) !important;
padding: var(--nexus-space-4) var(--nexus-space-8) !important;
font-weight: 700 !important;
font-size: 1rem !important;
text-transform: uppercase !important;
letter-spacing: 0.1em !important;
transition: var(--nexus-transition-smooth) !important;
box-shadow: var(--nexus-shadow-medium), var(--nexus-glow-primary) !important;
position: relative;
overflow: hidden;
backdrop-filter: var(--nexus-blur-soft) !important;
text-shadow: 0 0 10px rgba(0, 212, 255, 0.8) !important;
}
.button-submit::before,
.raised.emby-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
45deg,
transparent 0%,
rgba(255, 255, 255, 0.3) 30%,
rgba(0, 212, 255, 0.4) 50%,
rgba(255, 255, 255, 0.3) 70%,
transparent 100%
);
transition: var(--nexus-transition-smooth);
z-index: 1;
}
.button-submit::after,
.raised.emby-button::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: radial-gradient(circle, rgba(0, 212, 255, 0.3) 0%, transparent 70%);
transition: var(--nexus-transition-smooth);
transform: translate(-50%, -50%);
z-index: 0;
}
.button-submit:hover,
.raised.emby-button:hover {
transform: translateY(-4px) scale(1.05) !important;
box-shadow: var(--nexus-shadow-xl), var(--nexus-glow-rainbow) !important;
border-color: var(--nexus-accent) !important;
text-shadow: 0 0 15px rgba(0, 255, 136, 1) !important;
}
.button-submit:hover::before,
.raised.emby-button:hover::before {
left: 100%;
}
.button-submit:hover::after,
.raised.emby-button:hover::after {
width: 200%;
height: 200%;
}
.button-submit:active,
.raised.emby-button:active {
transform: translateY(-1px) scale(1.02) !important;
box-shadow: var(--nexus-shadow-medium) !important;
}
/* Butoane secundare */
.cancel.emby-button {
background: var(--background-tertiary) !important;
color: var(--text-secondary) !important;
border: 1px solid var(--border-secondary) !important;
border-radius: var(--border-radius-xl) !important;
transition: var(--transition-normal) !important;
}
.cancel.emby-button:hover {
background: var(--background-surface) !important;
color: var(--text-primary) !important;
border-color: var(--border-accent) !important;
transform: translateY(-1px) !important;
box-shadow: var(--shadow-sm) !important;
}
/* ========================================
* CARDURI MEDIA CU GLASSMORPHISM AVANSAT
* ======================================== */
/* Container pentru carduri cu layout modern */
.itemsContainer {
gap: var(--space-4) !important;
padding: var(--space-4) !important;
}
/* Carduri principale cu efect glassmorphism */
.cardBox {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-sm) !important;
-webkit-backdrop-filter: var(--blur-sm) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-2xl) !important;
transition: var(--transition-normal) !important;
box-shadow: var(--shadow-md) !important;
position: relative;
overflow: hidden;
}
.cardBox::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(
90deg,
transparent 0%,
rgba(248, 250, 252, 0.1) 50%,
transparent 100%
);
}
.cardBox:hover {
transform: translateY(-8px) scale(1.03) !important;
box-shadow: var(--shadow-2xl) !important;
border-color: var(--primary-color) !important;
background: var(--background-secondary) !important;
}
.cardBox:hover::before {
background: linear-gradient(
90deg,
transparent 0%,
var(--primary-color) 50%,
transparent 100%
);
opacity: 0.8;
}
/* Imagini din carduri cu efecte moderne */
.cardContent-button,
.itemDetailImage,
.cardImageContainer {
border-radius: var(--border-radius-xl) !important;
overflow: hidden !important;
transition: var(--transition-normal) !important;
position: relative;
}
.cardContent-button::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
180deg,
transparent 0%,
transparent 60%,
rgba(15, 23, 42, 0.8) 100%
);
opacity: 0;
transition: var(--transition-normal);
}
.cardContent-button:hover {
transform: scale(1.05) !important;
box-shadow: var(--shadow-lg) !important;
}
.cardContent-button:hover::after {
opacity: 1;
}
/* Text din carduri cu tipografie modernă */
.cardText {
color: var(--text-primary) !important;
font-weight: 600 !important;
font-size: 0.95rem !important;
line-height: 1.4 !important;
margin: var(--space-3) 0 var(--space-1) 0 !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5) !important;
}
.cardText-secondary {
color: var(--text-muted) !important;
font-weight: 400 !important;
font-size: 0.85rem !important;
line-height: 1.3 !important;
margin: 0 0 var(--space-2) 0 !important;
}
/* Carduri pentru episoade cu design special */
.listItemImage.listItemImage-large.itemAction.lazy {
height: 120px !important;
border-radius: var(--border-radius-xl) !important;
transition: var(--transition-normal) !important;
box-shadow: var(--shadow-sm) !important;
}
.listItemImage.listItemImage-large.itemAction.lazy:hover {
transform: scale(1.05) !important;
box-shadow: var(--shadow-lg) !important;
}
.listItem-content {
height: auto !important;
padding: var(--space-4) !important;
background: var(--background-secondary) !important;
border-radius: var(--border-radius-xl) !important;
margin: var(--space-2) 0 !important;
border: 1px solid var(--border-primary) !important;
transition: var(--transition-normal) !important;
}
.listItem-content:hover {
background: var(--background-tertiary) !important;
border-color: var(--border-secondary) !important;
transform: translateX(var(--space-2)) !important;
}
.secondary.listItem-overview.listItemBodyText {
color: var(--text-muted) !important;
line-height: 1.5 !important;
margin: var(--space-2) 0 0 0 !important;
font-size: 0.9rem !important;
}
/* Carduri pentru cast cu design circular modern */
.personCard {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-xs) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-2xl) !important;
transition: var(--transition-normal) !important;
padding: var(--space-3) !important;
}
.personCard:hover {
transform: translateY(-4px) !important;
box-shadow: var(--shadow-lg) !important;
border-color: var(--primary-color) !important;
background: var(--background-secondary) !important;
}
/* ========================================
* INDICATORI ȘI BADGE-URI MODERNE
* ======================================== */
/* Indicator pentru conținut vizionat cu design modern */
.playedIndicator {
background: linear-gradient(
135deg,
var(--success-color) 0%,
#059669 100%
) !important;
border: 2px solid var(--background-primary) !important;
border-radius: var(--border-radius-full) !important;
box-shadow: var(--shadow-md), 0 0 0 2px rgba(16, 185, 129, 0.3) !important;
width: 24px !important;
height: 24px !important;
position: relative;
}
.playedIndicator::before {
content: '✓';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 12px;
font-weight: bold;
}
/* Indicatori cu glassmorphism */
.indicator {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-md) !important;
-webkit-backdrop-filter: var(--blur-md) !important;
color: var(--text-primary) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-lg) !important;
box-shadow: var(--shadow-sm) !important;
font-weight: 500 !important;
padding: var(--space-1) var(--space-2) !important;
font-size: 0.8rem !important;
}
/* Indicatori pentru numărul de episoade */
.countIndicator {
background: linear-gradient(
135deg,
var(--primary-color) 0%,
var(--primary-hover) 100%
) !important;
color: var(--text-primary) !important;
border: 1px solid var(--primary-color) !important;
border-radius: var(--border-radius-full) !important;
font-weight: 700 !important;
font-size: 0.75rem !important;
padding: var(--space-1) var(--space-2) !important;
box-shadow: var(--shadow-md), var(--shadow-glow) !important;
min-width: 24px !important;
height: 24px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
/* Badge pentru progres */
.progressIndicator {
background: linear-gradient(
90deg,
var(--accent-color) 0%,
var(--accent-hover) 100%
) !important;
border-radius: var(--border-radius-full) !important;
height: 4px !important;
box-shadow: var(--shadow-sm) !important;
position: relative;
overflow: hidden;
}
.progressIndicator::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.3) 50%,
transparent 100%
);
animation: shimmer 2s infinite;
}
@keyframes shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
/* Rating cu stele îmbunătățit */
.starRatingContainer {
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.5));
padding: var(--space-1) !important;
}
.starRatingContainer .material-icons {
color: var(--accent-color) !important;
text-shadow: 0 1px 2px rgba(0,0,0,0.5) !important;
transition: var(--transition-fast) !important;
}
.starRatingContainer .material-icons:hover {
color: var(--accent-hover) !important;
transform: scale(1.1) !important;
}
/* Badge-uri pentru genuri */
.genreChip {
background: var(--background-tertiary) !important;
color: var(--text-secondary) !important;
border: 1px solid var(--border-secondary) !important;
border-radius: var(--border-radius-full) !important;
padding: var(--space-1) var(--space-3) !important;
font-size: 0.8rem !important;
font-weight: 500 !important;
transition: var(--transition-normal) !important;
margin: var(--space-1) !important;
}
.genreChip:hover {
background: var(--primary-color) !important;
color: var(--text-primary) !important;
border-color: var(--primary-color) !important;
transform: translateY(-1px) !important;
box-shadow: var(--shadow-sm) !important;
}
/* Indicator pentru calitate video */
.mediaInfoBadge {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-sm) !important;
color: var(--text-primary) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-md) !important;
padding: var(--space-1) var(--space-2) !important;
font-size: 0.7rem !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.05em !important;
}
/* ========================================
* FORMULARE ȘI INPUTURI MODERNE
* ======================================== */
/* Câmpuri de input cu glassmorphism */
.emby-input,
.emby-textarea,
.emby-select {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-sm) !important;
-webkit-backdrop-filter: var(--blur-sm) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-xl) !important;
color: var(--text-primary) !important;
padding: var(--space-4) var(--space-5) !important;
font-size: 0.95rem !important;
font-weight: 400 !important;
transition: var(--transition-normal) !important;
box-shadow: var(--shadow-sm) !important;
position: relative;
}
.emby-input:focus,
.emby-textarea:focus,
.emby-select-withcolor {
border-color: var(--primary-color) !important;
box-shadow:
var(--shadow-md),
0 0 0 3px rgba(14, 165, 233, 0.1) !important;
background: var(--background-secondary) !important;
transform: translateY(-1px) !important;
}
.emby-input:hover,
.emby-textarea:hover,
.emby-select:hover {
border-color: var(--border-secondary) !important;
background: var(--background-secondary) !important;
}
/* Placeholder text modern */
.emby-input::placeholder,
.emby-textarea::placeholder {
color: var(--text-muted) !important;
opacity: 0.8 !important;
font-weight: 400 !important;
}
/* Labels pentru formulare */
.inputLabel,
.fieldDescription {
color: var(--text-secondary) !important;
font-weight: 500 !important;
font-size: 0.9rem !important;
margin-bottom: var(--space-2) !important;
}
/* Checkbox și radio buttons moderne */
.emby-checkbox,
.emby-radio {
appearance: none !important;
width: 20px !important;
height: 20px !important;
border: 2px solid var(--border-primary) !important;
border-radius: var(--border-radius-sm) !important;
background: var(--background-tertiary) !important;
transition: var(--transition-normal) !important;
position: relative !important;
cursor: pointer !important;
}
.emby-radio {
border-radius: var(--border-radius-full) !important;
}
.emby-checkbox:checked,
.emby-radio:checked {
background: var(--primary-color) !important;
border-color: var(--primary-color) !important;
box-shadow: var(--shadow-glow) !important;
}
.emby-checkbox:checked::after {
content: '✓';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 12px;
font-weight: bold;
}
.emby-radio:checked::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 8px;
height: 8px;
background: white;
border-radius: var(--border-radius-full);
}
/* Select dropdown modern */
.emby-select {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e") !important;
background-position: right var(--space-3) center !important;
background-repeat: no-repeat !important;
background-size: 16px 16px !important;
padding-right: var(--space-10) !important;
}
/* Slider modern */
.mdl-slider {
background: var(--border-primary) !important;
height: 6px !important;
border-radius: var(--border-radius-full) !important;
}
.mdl-slider::-webkit-slider-thumb {
background: var(--primary-color) !important;
border: 2px solid white !important;
border-radius: var(--border-radius-full) !important;
box-shadow: var(--shadow-md) !important;
width: 20px !important;
height: 20px !important;
transition: var(--transition-normal) !important;
}
.mdl-slider::-webkit-slider-thumb:hover {
background: var(--primary-hover) !important;
transform: scale(1.1) !important;
box-shadow: var(--shadow-lg) !important;
}
/* ========================================
* LISTE ȘI TABELE
* ======================================== */
/* Liste generale */
.paperList {
background: var(--background-medium) !important;
border-radius: var(--border-radius) !important;
border: 1px solid var(--border-color) !important;
}
/* Elemente din listă */
.listItem {
border-bottom: 1px solid var(--border-color) !important;
transition: all var(--transition-fast) !important;
}
.listItem:hover {
background-color: var(--background-light) !important;
transform: translateX(4px);
}
.listItem:last-child {
border-bottom: none !important;
}
/* Text din liste */
.listItemBodyText {
color: var(--text-primary) !important;
}
.secondary.listItemBodyText {
color: var(--text-secondary) !important;
}
/* ========================================
* PAGINA DE LOGIN ULTRA-MODERNĂ
* ======================================== */
/* Container principal pentru login cu fundal animat */
#loginPage {
background: var(--background-primary) !important;
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
/* Fundal animat cu particule */
#loginPage::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 80%, rgba(14, 165, 233, 0.15) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(245, 158, 11, 0.15) 0%, transparent 50%),
radial-gradient(circle at 40% 40%, rgba(16, 185, 129, 0.1) 0%, transparent 50%);
animation: float 20s ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translateY(0px) rotate(0deg); }
33% { transform: translateY(-20px) rotate(1deg); }
66% { transform: translateY(10px) rotate(-1deg); }
}
/* Overlay cu blur pentru login */
#loginPage::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
backdrop-filter: var(--blur-sm);
-webkit-backdrop-filter: var(--blur-sm);
z-index: 1;
}
/* Formular de login cu glassmorphism premium */
#loginPage .readOnlyContent,
#loginPage form {
max-width: 420px !important;
width: 90% !important;
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-lg) !important;
-webkit-backdrop-filter: var(--blur-lg) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-3xl) !important;
padding: var(--space-12) var(--space-8) !important;
box-shadow: var(--shadow-2xl) !important;
position: relative;
z-index: 2;
margin: var(--space-8);
}
/* Efect glow pentru formular */
#loginPage .readOnlyContent::before,
#loginPage form::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(
90deg,
transparent 0%,
var(--primary-color) 50%,
transparent 100%
);
opacity: 0.6;
}
/* Logo și titlu login */
#loginPage h1 {
color: var(--text-primary) !important;
text-align: center !important;
margin-bottom: var(--space-8) !important;
font-weight: 300 !important;
font-size: 2.5rem !important;
background: linear-gradient(
135deg,
var(--text-primary) 0%,
var(--primary-color) 100%
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Subtitle pentru login */
#loginPage .readOnlyContent p,
#loginPage form p {
color: var(--text-muted) !important;
text-align: center !important;
margin-bottom: var(--space-6) !important;
font-size: 0.95rem !important;
}
/* Inputuri în formular login */
#loginPage .emby-input {
background: var(--background-secondary) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-xl) !important;
padding: var(--space-4) var(--space-5) !important;
margin-bottom: var(--space-4) !important;
font-size: 1rem !important;
transition: var(--transition-normal) !important;
}
#loginPage .emby-input:focus {
border-color: var(--primary-color) !important;
box-shadow:
var(--shadow-md),
0 0 0 3px rgba(14, 165, 233, 0.1) !important;
background: var(--background-tertiary) !important;
}
/* Buton login premium */
#loginPage .raised.emby-button {
width: 100% !important;
background: linear-gradient(
135deg,
var(--primary-color) 0%,
var(--primary-hover) 50%,
var(--accent-color) 100%
) !important;
border: none !important;
border-radius: var(--border-radius-xl) !important;
padding: var(--space-4) !important;
font-size: 1.1rem !important;
font-weight: 600 !important;
margin-top: var(--space-6) !important;
transition: var(--transition-normal) !important;
position: relative;
overflow: hidden;
}
#loginPage .raised.emby-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.2) 50%,
transparent 100%
);
transition: var(--transition-normal);
}
#loginPage .raised.emby-button:hover {
transform: translateY(-2px) !important;
box-shadow: var(--shadow-xl) !important;
}
#loginPage .raised.emby-button:hover::before {
left: 100%;
}
/* Spațiere pentru formular */
#loginPage .padded-left.padded-right.padded-bottom-page {
margin-top: 0 !important;
padding: 0 !important;
}
/* Ascunde butoanele nedorite */
#loginPage .raised.cancel.block.btnManual.emby-button,
#loginPage .raised.cancel.block.btnForgotPassword.emby-button {
display: none !important;
}
/* Link-uri în footer login */
#loginPage a {
color: var(--text-muted) !important;
text-decoration: none !important;
transition: var(--transition-fast) !important;
}
#loginPage a:hover {
color: var(--primary-color) !important;
}
/* ========================================
* PLAYER VIDEO ȘI CONTROALE
* ======================================== */
/* 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 */
.nowPlayingBarCenter {
color: var(--text-primary) !important;
}
.nowPlayingBarCenter .material-icons {
color: var(--text-primary) !important;
transition: all var(--transition-fast) !important;
}
.nowPlayingBarCenter .material-icons:hover {
color: var(--primary-color) !important;
transform: scale(1.1) !important;
}
/* Slider pentru volum */
.nowPlayingBarVolumeSliderContainer .mdl-slider {
background: var(--primary-color) !important;
}
/* ========================================
* EPISOADE ȘI PREVIEW-URI
* ======================================== */
/* Preview-uri episoade mai compacte */
.listItemImage.listItemImage-large.itemAction.lazy {
height: 110px !important;
border-radius: var(--border-radius) !important;
transition: all var(--transition-medium) !important;
}
.listItemImage.listItemImage-large.itemAction.lazy:hover {
transform: scale(1.05) !important;
box-shadow: var(--shadow-medium) !important;
}
.listItem-content {
height: 115px !important;
padding: 12px !important;
}
.secondary.listItem-overview.listItemBodyText {
height: 61px !important;
margin: 0 !important;
color: var(--text-secondary) !important;
line-height: 1.4 !important;
}
/* ========================================
* CAST & CREW STILIZAT
* ======================================== */
/* Carduri pentru cast - design circular */
#castContent .card.overflowPortraitCard.personCard.card-hoverable.card-withuserdata,
#castContent .card.overflowPortraitCard.personCard.card-withuserdata {
width: 120px !important;
font-size: 90% !important;
transition: all var(--transition-medium) !important;
}
#castContent .card.overflowPortraitCard.personCard:hover {
transform: translateY(-4px) scale(1.05) !important;
box-shadow: var(--shadow-heavy) !important;
}
/* Imagini circulare pentru cast */
#castContent .cardContent-button.cardImageContainer.coveredImage.cardContent.cardContent-shadow.itemAction.lazy,
#castContent .cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.defaultCardBackground1.cardContent.cardContent-shadow.itemAction,
#castContent .cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.defaultCardBackground2.cardContent.cardContent-shadow.itemAction,
#castContent .cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.defaultCardBackground3.cardContent.cardContent-shadow.itemAction,
#castContent .cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.defaultCardBackground4.cardContent.cardContent-shadow.itemAction,
#castContent .cardContent-button.cardImageContainer.coveredImage.defaultCardBackground.defaultCardBackground5.cardContent.cardContent-shadow.itemAction {
background-size: cover !important;
border-radius: 50% !important;
border: 3px solid var(--border-color) !important;
transition: all var(--transition-medium) !important;
}
#castContent .cardContent-button:hover {
border-color: var(--primary-color) !important;
box-shadow: 0 0 0 3px rgba(0, 164, 220, 0.3) !important;
}
#castContent .cardScalable {
width: 100px !important;
height: 100px !important;
border-radius: 50% !important;
}
#castContent .cardOverlayContainer.itemAction {
border-radius: 50% !important;
}
/* Butoane overlay pentru cast */
#castContent .cardOverlayButton-br {
bottom: 4% !important;
right: 15% !important;
width: 70% !important;
}
#castContent .cardOverlayButton.cardOverlayButton-hover.itemAction.paper-icon-button-light {
margin: auto !important;
background: var(--primary-color) !important;
color: white !important;
}
/* ========================================
* ÎMBUNĂTĂȚIRI PENTRU MOBILE
* ======================================== */
/* Afișează linkurile externe pe mobile */
.layout-mobile .itemExternalLinks {
display: block !important;
}
/* Taburi mai mari pentru mobile */
@media (max-width: 768px) {
.emby-tab-button {
padding: 2em 1.5em !important;
font-size: 1.1em !important;
}
.headerTabs.sectionTabs {
font-size: 120% !important;
}
/* Carduri mai mari pe mobile */
.cardBox {
margin: 8px !important;
}
/* Formular login responsive */
#loginPage .readOnlyContent,
#loginPage form {
max-width: 90% !important;
margin: 20px auto !important;
padding: 30px 20px !important;
}
}
/* ========================================
* CAROUSEL ȘI SCROLLING
* ======================================== */
/* Dezactivează carousel pentru biblioteci - layout fix */
@media all and (min-width: 50em) {
.homePage .emby-scroller {
margin-right: 0 !important;
}
.homePage .emby-scrollbuttons {
display: none !important;
}
.homePage .itemsContainer {
flex-wrap: wrap !important;
justify-content: flex-start !important;
gap: 16px !important;
}
}
/* Butoane scroll îmbunătățite */
.emby-scrollbuttons {
position: absolute !important;
left: 0 !important;
top: 0 !important;
width: 100% !important;
height: 100% !important;
padding: 0 !important;
justify-content: space-between !important;
pointer-events: none !important;
}
.emby-scrollbuttons-button {
pointer-events: initial !important;
background: var(--primary-color) !important;
color: white !important;
border-radius: 50% !important;
width: 48px !important;
height: 48px !important;
box-shadow: var(--shadow-medium) !important;
transition: all var(--transition-fast) !important;
}
.emby-scrollbuttons-button:hover {
background: var(--accent-color) !important;
transform: scale(1.1) !important;
box-shadow: var(--shadow-heavy) !important;
}
/* ========================================
* PERSONALIZĂRI PENTRU SECȚIUNI SPECIFICE
* ======================================== */
/* Ascunde elemente nedorite */
.headerHomeButton {
display: none !important;
}
.headerCastButton {
display: none !important;
}
.headerSyncButton {
display: none !important;
}
/* Personalizează titlurile secțiunilor */
.sectionTitleContainer h2 {
color: var(--primary-color) !important;
font-weight: 600 !important;
font-size: 1.8em !important;
margin-bottom: 16px !important;
}
/* Next Up section */
div.nextUpSection {
background: var(--background-medium) !important;
border-radius: var(--border-radius-large) !important;
padding: 20px !important;
margin: 16px 0 !important;
border: 1px solid var(--border-color) !important;
}
/* Similar items section */
#similarCollapsible {
background: var(--background-medium) !important;
border-radius: var(--border-radius-large) !important;
padding: 20px !important;
margin: 16px 0 !important;
border: 1px solid var(--border-color) !important;
}
/* ========================================
* ANIMAȚII ȘI EFECTE SPECIALE
* ======================================== */
/* Animație fade-in pentru carduri */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.cardBox {
animation: fadeInUp 0.5s ease-out !important;
}
/* Animație pentru butoane */
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0.7);
}
70% {
box-shadow: 0 0 0 10px rgba(0, 164, 220, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(0, 164, 220, 0);
}
}
.button-submit:focus,
.raised.emby-button:focus {
animation: pulse 1.5s infinite !important;
}
/* ========================================
* TEMA ÎNTUNECATĂ ÎMBUNĂTĂȚITĂ
* ======================================== */
/* 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 */
.dialog h2,
.dialog h3 {
color: var(--primary-color) !important;
}
/* ========================================
* DIALOGURI ȘI MODALE MODERNE
* ======================================== */
/* Backdrop pentru dialoguri cu blur */
.dialogBackdrop {
background: rgba(15, 23, 42, 0.8) !important;
backdrop-filter: var(--blur-md) !important;
-webkit-backdrop-filter: var(--blur-md) !important;
transition: var(--transition-normal) !important;
}
/* Dialoguri cu glassmorphism */
.dialog {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-lg) !important;
-webkit-backdrop-filter: var(--blur-lg) !important;
border: 1px solid var(--border-primary) !important;
border-radius: var(--border-radius-3xl) !important;
box-shadow: var(--shadow-2xl) !important;
max-width: 90vw !important;
max-height: 90vh !important;
overflow: hidden !important;
}
/* Header dialoguri */
.dialog h2,
.dialog h3 {
color: var(--text-primary) !important;
font-weight: 600 !important;
margin-bottom: var(--space-4) !important;
padding-bottom: var(--space-2) !important;
border-bottom: 1px solid var(--border-primary) !important;
}
/* Conținut dialoguri */
.dialog .dialogContent {
padding: var(--space-6) !important;
color: var(--text-secondary) !important;
line-height: 1.6 !important;
}
/* ========================================
* PLAYER VIDEO MODERN
* ======================================== */
/* Controale video cu glassmorphism */
.videoOsdBottom {
background: var(--background-overlay) !important;
backdrop-filter: var(--blur-lg) !important;
-webkit-backdrop-filter: var(--blur-lg) !important;
border-top: 1px solid var(--border-primary) !important;
padding: var(--space-4) !important;
}
/* Bara de progres video modernă */
.osdProgressBar {
background: var(--border-primary) !important;
height: 6px !important;
border-radius: var(--border-radius-full) !important;
overflow: hidden !important;
}
.osdProgressBarForeground {
background: linear-gradient(
90deg,
var(--primary-color) 0%,
var(--accent-color) 100%
) !important;
border-radius: var(--border-radius-full) !important;
box-shadow: 0 0 10px rgba(14, 165, 233, 0.5) !important;
}
/* Butoane player moderne */
.videoOsdBottom .material-icons {
color: var(--text-primary) !important;
background: var(--background-tertiary) !important;
border-radius: var(--border-radius-full) !important;
padding: var(--space-2) !important;
margin: 0 var(--space-1) !important;
transition: var(--transition-normal) !important;
}
.videoOsdBottom .material-icons:hover {
color: var(--primary-color) !important;
background: var(--background-surface) !important;
transform: scale(1.1) !important;
box-shadow: var(--shadow-md) !important;
}
/* ========================================
* RESPONSIVE DESIGN AVANSAT
* ======================================== */
/* Mobile optimizations */
@media (max-width: 768px) {
:root {
--space-4: 0.75rem;
--space-6: 1rem;
--space-8: 1.5rem;
}
.emby-tab-button {
padding: var(--space-4) var(--space-3) !important;
font-size: 0.9rem !important;
}
.cardBox {
margin: var(--space-2) !important;
border-radius: var(--border-radius-xl) !important;
}
#loginPage .readOnlyContent,
#loginPage form {
padding: var(--space-8) var(--space-6) !important;
margin: var(--space-4) !important;
}
.headerButton {
padding: var(--space-2) !important;
margin: 0 var(--space-1) !important;
}
}
/* Tablet optimizations */
@media (min-width: 769px) and (max-width: 1024px) {
.itemsContainer {
gap: var(--space-3) !important;
}
.cardBox {
margin: var(--space-2) !important;
}
}
/* Desktop large screens */
@media (min-width: 1440px) {
.itemsContainer {
gap: var(--space-6) !important;
padding: var(--space-6) !important;
}
.cardBox {
margin: var(--space-3) !important;
}
}
/* ========================================
* ANIMAȚII ȘI MICRO-INTERACȚIUNI
* ======================================== */
/* Animație pentru încărcare */
@keyframes pulse-glow {
0%, 100% {
opacity: 1;
box-shadow: 0 0 5px rgba(14, 165, 233, 0.5);
}
50% {
opacity: 0.8;
box-shadow: 0 0 20px rgba(14, 165, 233, 0.8);
}
}
.loading {
animation: pulse-glow 2s ease-in-out infinite !important;
}
/* Animație pentru carduri noi */
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.cardBox {
animation: slideInUp 0.6s ease-out !important;
}
/* Animație pentru butoane active */
@keyframes buttonPress {
0% { transform: scale(1); }
50% { transform: scale(0.95); }
100% { transform: scale(1); }
}
.button-submit:active,
.raised.emby-button:active {
animation: buttonPress 0.1s ease-out !important;
}
/* ========================================
* OPTIMIZĂRI FINALE ȘI PERFORMANȚĂ
* ======================================== */
/* Optimizări GPU pentru animații */
.cardBox,
.emby-tab-button,
.headerButton,
.navMenuOption,
.button-submit,
.raised.emby-button {
will-change: transform, opacity, box-shadow !important;
transform: translateZ(0) !important;
}
/* Smooth scrolling pentru întreaga pagină */
html {
scroll-behavior: smooth !important;
}
/* Optimizări pentru focus și accesibilitate */
*:focus {
outline: 2px solid var(--primary-color) !important;
outline-offset: 2px !important;
border-radius: var(--border-radius-sm) !important;
}
/* Reduce motion pentru utilizatorii sensibili */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* ========================================
* 🌌 NEXUS THEME - MESAJ FINAL COSMIC
* ======================================== */
/*
* ========================================
* 🚀 JELLYFIN NEXUS THEME v3.0 PROFESSIONAL
* ========================================
*
* 🎨 CARACTERISTICI NEXUS PREMIUM:
* ✨ Design holografic cu efecte energetice
* 🌌 Fundal cosmic cu particule animate și stele
* 💎 Glassmorphism de nivel enterprise cu blur avansat
* ⚡ Animații cinematice cu tranziții elastice
* 🔮 Sistem de culori holografice (Cyan, Magenta, Green)
* 🌈 Efecte glow și rainbow pentru interacțiuni
* 📱 Responsive design optimizat pentru toate dispozitivele
* ⚡ Optimizări GPU pentru performanță maximă
* 🎯 Micro-interacțiuni cu feedback haptic
* 🎭 Tema cosmic-futuristă unică și distinctă
*
* 🚀 TEHNOLOGII NEXUS AVANSATE:
* - CSS Custom Properties cu sistem Nexus
* - Backdrop-filter pentru glassmorphism cosmic
* - CSS Animations cu keyframes complexe
* - Gradient-uri energetice multi-color
* - Box-shadow cu efecte glow holografice
* - Transform și scale pentru efecte 3D
* - Mix-blend-mode pentru efecte vizuale
* - CSS Grid și Flexbox pentru layout fluid
*
* 🎯 DIFERENȚE FAȚĂ DE TEMA DE BAZĂ:
* ✓ Paleta de culori complet diferită (Nexus vs Standard)
* ✓ Fundal cosmic animat vs gradient static
* ✓ Efecte holografice vs efecte simple
* ✓ Animații energetice vs tranziții standard
* ✓ Design futuristic vs design modern clasic
* ✓ Glow effects vs shadow effects
* ✓ Particule animate vs fundal static
*
* 💡 PERSONALIZARE NEXUS:
* Modifică variabilele --nexus-* din secțiunea :root
* pentru a adapta tema la preferințele tale cosmice.
*
* 📋 INSTALARE AUTOMATĂ:
* @import url('https://git.eddmanoo.cloud/eddmanoo/jellyfincss/raw/branch/main/edd.css');
*
* 👨‍💻 Autor: EDD
* 🚀 Versiune: 3.0 NEXUS PROFESSIONAL
* 📅 Data: 2025
* 🌐 Repository: https://git.eddmanoo.cloud/eddmanoo/jellyfincss
*
* 🎬 Bucură-te de experiența Jellyfin NEXUS de nivel cosmic! ✨🌌
*/