Files
anime_downloader/static/css/video_modal.css

247 lines
5.7 KiB
CSS

/**
* Video Modal Component Styles
* Reusable video player modal for Anime Downloader
*/
/* Video Container */
.video-container {
position: relative;
overflow: hidden;
background: #000;
}
/* Zoom Button */
.video-zoom-btn {
position: absolute;
top: 15px;
right: 15px;
z-index: 10;
background: rgba(15, 23, 42, 0.6);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.15);
color: white;
width: 38px;
height: 38px;
border-radius: 10px;
opacity: 0;
transition: opacity 0.3s;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.video-container:hover .video-zoom-btn {
opacity: 1;
}
.video-zoom-btn.active {
background: #3b82f6;
border-color: transparent;
}
/* Episode Selector Row (Alist Style) */
.episode-selector-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 16px;
background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 41, 59, 0.95) 100%);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
/* Episode Dropdown */
.episode-dropdown-wrapper {
position: relative;
flex: 1;
}
.episode-dropdown {
width: 100%;
padding: 10px 40px 10px 14px;
background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
border: none;
border-radius: 8px;
color: white;
font-size: 14px;
font-weight: 600;
cursor: pointer;
appearance: none;
-webkit-appearance: none;
transition: all 0.2s ease;
box-shadow: 0 2px 8px rgba(37, 99, 235, 0.3);
}
.episode-dropdown:hover {
background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.5);
}
.episode-dropdown:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.4);
}
.episode-dropdown option {
background: #1e293b;
color: #f1f5f9;
padding: 10px;
}
.dropdown-arrow {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
width: 16px;
height: 16px;
color: white;
pointer-events: none;
}
/* Auto-Next Toggle Switch */
.auto-next-toggle {
display: flex;
align-items: center;
gap: 10px;
cursor: pointer;
user-select: none;
}
.auto-next-toggle input {
display: none;
}
.toggle-label {
font-size: 13px;
color: #94a3b8;
font-weight: 500;
transition: color 0.2s;
}
.auto-next-toggle input:checked ~ .toggle-label {
color: #f1f5f9;
}
.toggle-switch {
position: relative;
width: 44px;
height: 24px;
background: #334155;
border-radius: 12px;
transition: all 0.3s ease;
}
.toggle-switch::after {
content: '';
position: absolute;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
top: 2px;
left: 2px;
transition: all 0.3s ease;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.auto-next-toggle input:checked ~ .toggle-switch {
background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
}
.auto-next-toggle input:checked ~ .toggle-switch::after {
left: 22px;
}
/* External Players Section */
.external-players {
padding: 8px 16px;
background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 41, 59, 0.95) 100%);
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.external-players-grid {
display: flex;
flex-wrap: nowrap;
justify-content: center;
gap: 10px;
}
.ext-player-btn {
display: flex;
align-items: center;
justify-content: center;
padding: 8px;
background: rgba(59, 130, 246, 0.12);
border: 1px solid rgba(59, 130, 246, 0.25);
border-radius: 10px;
text-decoration: none;
transition: all 0.2s ease;
cursor: pointer;
}
.ext-player-btn:hover {
background: rgba(59, 130, 246, 0.3);
border-color: rgba(59, 130, 246, 0.5);
transform: translateY(-2px) scale(1.05);
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
}
.ext-player-btn img {
width: 28px;
height: 28px;
object-fit: contain;
}
/* Video.js Theme Overrides */
.video-js.vjs-theme-fantasy .vjs-big-play-button {
background: linear-gradient(135deg, rgba(59, 130, 246, 0.9) 0%, rgba(37, 99, 235, 0.9) 100%) !important;
border: none !important;
width: 90px !important;
height: 90px !important;
line-height: 90px !important;
border-radius: 50% !important;
box-shadow: 0 0 30px rgba(37, 99, 235, 0.6) !important;
transition: all 0.3s ease !important;
}
.video-js.vjs-theme-fantasy .vjs-big-play-button .vjs-icon-placeholder:before {
font-size: 60px !important;
line-height: 90px !important;
}
.video-js .vjs-control-bar {
background: rgba(15, 23, 42, 0.8) !important;
backdrop-filter: blur(10px) !important;
}
/* Mobile Responsive */
@media (max-width: 768px) {
#videoModal .modal-dialog {
width: 100% !important;
margin: 0 !important;
}
#videoModal .modal-content {
border-radius: 0 !important;
height: 100vh;
display: flex;
flex-direction: column;
}
#video-player {
max-height: 100vh !important;
height: 100% !important;
}
.video-container {
flex: 1;
display: flex;
align-items: center;
}
.playlist-controls {
padding-bottom: 25px; /* Mobile safe area */
}
.video-zoom-btn {
opacity: 0.8;
top: 10px;
right: 10px;
}
.episode-selector-row {
flex-direction: column;
align-items: stretch;
gap: 10px;
}
.auto-next-toggle {
justify-content: flex-end;
}
.external-players-grid {
gap: 4px;
}
.ext-player-btn {
padding: 4px;
}
.ext-player-btn img {
width: 20px;
height: 20px;
}
}