Implement clean porn cinema layout with header and sidebar navigation

- Fix HTML structure: move header inside body tag
- Style header to match mockup: slim purple gradient design
- Create right sidebar with Playlist/Search tabs
- Minimize Video Library section for clean appearance
- Add proper two-column grid layout
- Implement tab switching functionality
- Override conflicting body flex styles for cinema mode
This commit is contained in:
dilgenfritz 2025-10-30 21:11:57 -05:00
parent a2af9ba8f3
commit 1e89ee95aa
2 changed files with 437 additions and 181 deletions

View File

@ -10,6 +10,40 @@
<link href="https://fonts.googleapis.com/css2?family=Audiowide&display=swap" rel="stylesheet">
</head>
<body class="cinema-mode">
<!-- Cinema Header -->
<header class="cinema-header">
<div class="cinema-nav">
<h1>🎬 Porn Cinema</h1>
<div class="cinema-controls">
<button id="back-to-home" class="btn btn-secondary">🏠 Home</button>
<button id="settings-btn" class="btn btn-secondary">⚙️ Settings</button>
<button id="theater-mode" class="btn btn-secondary">🎭 Theater</button>
<button id="fullscreen-toggle" class="btn btn-secondary">⛶ Fullscreen</button>
</div>
</div>
</header>
<!-- Keyboard Shortcuts Help -->
<div class="shortcuts-help" id="shortcuts-help">
<div class="shortcuts-content">
<h3>🎹 One-Handed Controls</h3>
<div class="shortcuts-grid">
<div class="shortcut-item"><kbd>Space</kbd> Play/Pause</div>
<div class="shortcut-item"><kbd></kbd><kbd></kbd> Seek ±10s</div>
<div class="shortcut-item"><kbd></kbd><kbd></kbd> Volume ±10%</div>
<div class="shortcut-item"><kbd>F</kbd> Fullscreen</div>
<div class="shortcut-item"><kbd>M</kbd> Mute/Unmute</div>
<div class="shortcut-item"><kbd>1-4</kbd> Quality</div>
<div class="shortcut-item"><kbd>Enter</kbd> Add to Playlist</div>
<div class="shortcut-item"><kbd>N</kbd> Next Video</div>
<div class="shortcut-item"><kbd>P</kbd> Previous Video</div>
<div class="shortcut-item"><kbd>S</kbd> Shuffle Playlist</div>
<div class="shortcut-item"><kbd>Escape</kbd> Exit Fullscreen</div>
<div class="shortcut-item"><kbd>?</kbd> Toggle This Help</div>
</div>
</div>
</div>
<!-- Loading Overlay -->
<div id="cinema-loading" class="cinema-loading">
<div class="loading-content">
@ -19,175 +53,167 @@
</div>
</div>
<!-- Cinema Header -->
<header class="cinema-header">
<div class="cinema-nav">
<button id="back-to-home" class="btn btn-secondary">← Back to Home</button>
<h1>🎬 Porn Cinema</h1>
<div class="cinema-controls">
<button id="theater-mode" class="btn btn-secondary" title="Theater Mode (Dim UI)">🎭</button>
<button id="fullscreen-toggle" class="btn btn-secondary" title="Fullscreen (F)"></button>
</div>
</div>
<!-- Keyboard Shortcuts Help -->
<div class="shortcuts-help" id="shortcuts-help">
<div class="shortcuts-content">
<h3>🎹 One-Handed Controls</h3>
<div class="shortcuts-grid">
<div class="shortcut-item"><kbd>Space</kbd> Play/Pause</div>
<div class="shortcut-item"><kbd></kbd><kbd></kbd> Seek ±10s</div>
<div class="shortcut-item"><kbd></kbd><kbd></kbd> Volume ±10%</div>
<div class="shortcut-item"><kbd>F</kbd> Fullscreen</div>
<div class="shortcut-item"><kbd>M</kbd> Mute/Unmute</div>
<div class="shortcut-item"><kbd>1-4</kbd> Quality</div>
<div class="shortcut-item"><kbd>Enter</kbd> Add to Playlist</div>
<div class="shortcut-item"><kbd>N</kbd> Next Video</div>
<div class="shortcut-item"><kbd>P</kbd> Previous Video</div>
<div class="shortcut-item"><kbd>S</kbd> Shuffle Playlist</div>
<div class="shortcut-item"><kbd>Escape</kbd> Exit Fullscreen</div>
<div class="shortcut-item"><kbd>?</kbd> Toggle This Help</div>
</div>
</div>
</div>
</header>
<!-- Main Cinema Content -->
<main class="cinema-main">
<!-- Video Player Section -->
<section class="video-player-section">
<div class="video-container" id="video-container">
<video id="main-video-player" class="main-video" preload="metadata">
<source id="video-source" src="" type="video/mp4">
Your browser does not support the video tag.
</video>
<!-- Video Overlay Controls -->
<div class="video-overlay" id="video-overlay">
<div class="video-title" id="video-title">Select a video to begin</div>
<div class="video-info" id="video-info"></div>
<!-- Main Content Area -->
<div class="main-content-area">
<!-- Video Player Section -->
<section class="video-player-section">
<div class="video-container" id="video-container">
<video id="main-video-player" class="main-video" preload="metadata">
<source id="video-source" src="" type="video/mp4">
Your browser does not support the video tag.
</video>
<!-- Play Button Overlay -->
<div class="play-overlay" id="play-overlay">
<button class="play-button-large" id="play-button-large"></button>
</div>
<!-- Loading Spinner -->
<div class="video-loading" id="video-loading" style="display: none;">
<div class="loading-spinner"></div>
<p>Loading video...</p>
</div>
</div>
<!-- Custom Video Controls -->
<div class="video-controls" id="video-controls">
<div class="progress-container">
<div class="progress-bar" id="progress-bar">
<div class="progress-filled" id="progress-filled"></div>
<div class="progress-thumb" id="progress-thumb"></div>
<!-- Video Overlay Controls -->
<div class="video-overlay" id="video-overlay">
<div class="video-title" id="video-title">Select a video to begin</div>
<div class="video-info" id="video-info"></div>
<!-- Play Button Overlay -->
<div class="play-overlay" id="play-overlay">
<button class="play-button-large" id="play-button-large"></button>
</div>
<div class="time-display">
<span id="current-time">0:00</span>
<span class="time-separator">/</span>
<span id="total-time">0:00</span>
<!-- Loading Spinner -->
<div class="video-loading" id="video-loading" style="display: none;">
<div class="loading-spinner"></div>
<p>Loading video...</p>
</div>
</div>
<div class="controls-row">
<div class="controls-left">
<button id="play-pause-btn" class="control-btn"></button>
<button id="prev-video-btn" class="control-btn" title="Previous Video (P)"></button>
<button id="next-video-btn" class="control-btn" title="Next Video (N)"></button>
<div class="volume-control">
<button id="mute-btn" class="control-btn" title="Mute (M)">🔊</button>
<input type="range" id="volume-slider" class="volume-slider" min="0" max="100" value="70">
<span id="volume-percentage">70%</span>
<!-- Custom Video Controls -->
<div class="video-controls" id="video-controls">
<div class="progress-container">
<div class="progress-bar" id="progress-bar">
<div class="progress-filled" id="progress-filled"></div>
<div class="progress-thumb" id="progress-thumb"></div>
</div>
<div class="time-display">
<span id="current-time">0:00</span>
<span class="time-separator">/</span>
<span id="total-time">0:00</span>
</div>
</div>
<div class="controls-center">
<div class="quality-selector">
<select id="quality-select" class="quality-dropdown">
<option value="auto">Auto Quality</option>
<option value="1080p">1080p (1)</option>
<option value="720p">720p (2)</option>
<option value="480p">480p (3)</option>
<option value="360p">360p (4)</option>
</select>
<div class="controls-row">
<div class="controls-left">
<button id="play-pause-btn" class="control-btn"></button>
<button id="prev-video-btn" class="control-btn" title="Previous Video (P)"></button>
<button id="next-video-btn" class="control-btn" title="Next Video (N)"></button>
<div class="volume-control">
<button id="mute-btn" class="control-btn" title="Mute (M)">🔊</button>
<input type="range" id="volume-slider" class="volume-slider" min="0" max="100" value="70">
<span id="volume-percentage">70%</span>
</div>
</div>
<div class="speed-control">
<select id="speed-select" class="speed-dropdown">
<option value="0.5">0.5x</option>
<option value="0.75">0.75x</option>
<option value="1" selected>1x</option>
<option value="1.25">1.25x</option>
<option value="1.5">1.5x</option>
<option value="2">2x</option>
</select>
<div class="controls-center">
<div class="quality-selector">
<select id="quality-select" class="quality-dropdown">
<option value="auto">Auto Quality</option>
<option value="1080p">1080p (1)</option>
<option value="720p">720p (2)</option>
<option value="480p">480p (3)</option>
<option value="360p">360p (4)</option>
</select>
</div>
<div class="speed-control">
<select id="speed-select" class="speed-dropdown">
<option value="0.5">0.5x</option>
<option value="0.75">0.75x</option>
<option value="1" selected>1x</option>
<option value="1.25">1.25x</option>
<option value="1.5">1.5x</option>
<option value="2">2x</option>
</select>
</div>
</div>
<div class="controls-right">
<button id="add-to-playlist-btn" class="control-btn" title="Add to Playlist (Enter)"></button>
<button id="theater-mode-btn" class="control-btn" title="Theater Mode">🎭</button>
<button id="fullscreen-btn" class="control-btn" title="Fullscreen (F)"></button>
</div>
</div>
<div class="controls-right">
<button id="add-to-playlist-btn" class="control-btn" title="Add to Playlist (Enter)"></button>
<button id="theater-mode-btn" class="control-btn" title="Theater Mode">🎭</button>
<button id="fullscreen-btn" class="control-btn" title="Fullscreen (F)"></button>
</div>
</div>
</section>
<!-- Video Library Section -->
<section class="video-library-section">
<div class="library-header">
<h3><EFBFBD> Video Library</h3>
<div class="library-controls">
<div class="view-toggle">
<button id="grid-view-btn" class="view-btn active" title="Grid View"></button>
<button id="list-view-btn" class="view-btn" title="List View"></button>
</div>
<div class="sort-controls">
<select id="sort-select" class="sort-dropdown">
<option value="name">Sort by Name</option>
<option value="date">Sort by Date</option>
<option value="duration">Sort by Duration</option>
<option value="size">Sort by Size</option>
</select>
<button id="sort-direction" class="btn btn-mini" title="Sort Direction">↕️</button>
</div>
<div class="search-controls">
<input type="text" id="library-search" class="search-input" placeholder="Search videos...">
<button id="refresh-library" class="btn btn-mini" title="Refresh Library">🔄</button>
</div>
</div>
</div>
</div>
</section>
<div class="library-content" id="library-content">
<div class="library-loading">
<div class="loading-spinner"></div>
<p>Loading video library...</p>
</div>
</div>
</section>
</div>
<!-- Playlist Section -->
<section class="playlist-section" id="playlist-section">
<div class="playlist-header">
<h3>📝 Current Playlist</h3>
<div class="playlist-controls">
<button id="shuffle-playlist" class="btn btn-mini" title="Shuffle (S)">🔀</button>
<button id="clear-playlist" class="btn btn-mini btn-danger">🗑️ Clear</button>
<button id="save-playlist" class="btn btn-mini">💾 Save</button>
<button id="load-playlist" class="btn btn-mini">📁 Load</button>
</div>
<!-- Right Sidebar -->
<aside class="cinema-sidebar">
<!-- Sidebar Tabs -->
<div class="sidebar-tabs">
<button class="sidebar-tab active" id="playlist-tab">🎵 Playlist</button>
<button class="sidebar-tab" id="search-tab">🔍 Search</button>
</div>
<div class="playlist-content" id="playlist-content">
<div class="playlist-empty">
<p>Playlist is empty. Add videos by clicking or pressing Enter while a video is selected.</p>
</div>
</div>
</section>
<!-- Video Library Section -->
<section class="video-library-section">
<div class="library-header">
<h3>📁 Video Library</h3>
<div class="library-controls">
<div class="view-toggle">
<button id="grid-view-btn" class="view-btn active" title="Grid View"></button>
<button id="list-view-btn" class="view-btn" title="List View"></button>
<!-- Playlist Panel -->
<div class="sidebar-panel active" id="playlist-panel">
<div class="panel-header">
<h3>Current Playlist</h3>
<div class="playlist-controls">
<button id="shuffle-playlist" class="btn btn-mini" title="Shuffle (S)">🔀</button>
<button id="clear-playlist" class="btn btn-mini btn-danger">🗑️</button>
<button id="save-playlist" class="btn btn-mini">💾</button>
<button id="load-playlist" class="btn btn-mini">📁</button>
</div>
<div class="sort-controls">
<select id="sort-select" class="sort-dropdown">
<option value="name">Sort by Name</option>
<option value="date">Sort by Date</option>
<option value="duration">Sort by Duration</option>
<option value="size">Sort by Size</option>
</select>
<button id="sort-direction" class="btn btn-mini" title="Sort Direction">↕️</button>
</div>
<div class="search-controls">
<input type="text" id="library-search" class="search-input" placeholder="Search videos...">
<button id="refresh-library" class="btn btn-mini" title="Refresh Library">🔄</button>
</div>
<div class="playlist-content" id="playlist-content">
<div class="playlist-empty">
<p>Playlist is empty. Add videos by clicking or pressing Enter while a video is selected.</p>
</div>
</div>
</div>
<div class="library-content" id="library-content">
<div class="library-loading">
<div class="loading-spinner"></div>
<p>Loading video library...</p>
<!-- Search Panel -->
<div class="sidebar-panel" id="search-panel">
<div class="panel-header">
<h3>Search Videos</h3>
</div>
<div class="search-content">
<input type="text" class="search-input-sidebar" placeholder="Search your library...">
<div class="search-results" id="search-results">
<p>Enter search terms to find videos...</p>
</div>
</div>
</div>
</section>
</aside>
</main>
<!-- Scripts -->
@ -252,6 +278,27 @@
help.style.display = help.style.display === 'none' ? 'block' : 'none';
}
});
// Sidebar tab functionality
document.getElementById('playlist-tab').addEventListener('click', () => {
// Remove active from all tabs and panels
document.querySelectorAll('.sidebar-tab').forEach(tab => tab.classList.remove('active'));
document.querySelectorAll('.sidebar-panel').forEach(panel => panel.classList.remove('active'));
// Activate playlist tab and panel
document.getElementById('playlist-tab').classList.add('active');
document.getElementById('playlist-panel').classList.add('active');
});
document.getElementById('search-tab').addEventListener('click', () => {
// Remove active from all tabs and panels
document.querySelectorAll('.sidebar-tab').forEach(tab => tab.classList.remove('active'));
document.querySelectorAll('.sidebar-panel').forEach(panel => panel.classList.remove('active'));
// Activate search tab and panel
document.getElementById('search-tab').classList.add('active');
document.getElementById('search-panel').classList.add('active');
});
</script>
</body>
</html>

View File

@ -1,10 +1,15 @@
/* Porn Cinema Styles */
/* ===== CINEMA LAYOUT ===== */
.cinema-mode {
body.cinema-mode {
background: #000;
color: #fff;
overflow-x: hidden;
/* Override main body flex layout */
display: block !important;
align-items: unset !important;
justify-content: unset !important;
min-height: 100vh;
}
.cinema-loading {
@ -21,35 +26,70 @@
}
.cinema-header {
background: linear-gradient(135deg, #1a1a1a, #2d2d2d);
border-bottom: 2px solid #333;
padding: 15px 20px;
background: linear-gradient(135deg, #2a2a3a, #1e1e2e);
border-bottom: 1px solid #404050;
padding: 0;
position: sticky;
top: 0;
z-index: 1000;
width: 100%;
display: block !important;
flex-direction: row !important;
}
.cinema-nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1400px;
margin: 0 auto;
max-width: 100%;
margin: 0;
padding: 8px 20px;
height: 44px;
}
.cinema-nav h1 {
margin: 0;
font-size: 2rem;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.7);
background: linear-gradient(45deg, #ff6b9d, #c471ed, #12c2e9);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-size: 1.1rem;
font-weight: 600;
color: #ffffff;
display: flex;
align-items: center;
gap: 8px;
}
.cinema-controls {
display: flex;
gap: 10px;
gap: 6px;
}
/* Modern header button styling */
.cinema-header .btn {
padding: 6px 12px !important;
min-width: auto !important;
min-height: auto !important;
font-size: 0.85rem !important;
border-radius: 6px !important;
background: rgba(255, 255, 255, 0.1) !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
color: #ffffff !important;
transition: all 0.2s ease !important;
display: flex !important;
align-items: center !important;
gap: 6px !important;
font-weight: 500 !important;
}
.cinema-header .btn-secondary {
background: rgba(139, 99, 214, 0.15) !important;
border: 1px solid rgba(139, 99, 214, 0.3) !important;
color: #e0e0e0 !important;
}
.cinema-header .btn-secondary:hover {
background: rgba(139, 99, 214, 0.25) !important;
border-color: rgba(139, 99, 214, 0.5) !important;
transform: none !important;
box-shadow: 0 2px 8px rgba(139, 99, 214, 0.2) !important;
}
/* ===== KEYBOARD SHORTCUTS HELP ===== */
@ -100,21 +140,163 @@
/* ===== MAIN CINEMA LAYOUT ===== */
.cinema-main {
max-width: 1400px;
margin: 0 auto;
padding: 20px;
max-width: 100%;
margin: 0;
padding: 0;
display: grid;
grid-template-rows: auto auto 1fr;
gap: 20px;
min-height: calc(100vh - 120px);
grid-template-columns: 1fr 320px;
gap: 0;
min-height: calc(100vh - 52px);
}
/* ===== VIDEO PLAYER SECTION ===== */
/* ===== MAIN CONTENT AREA ===== */
.main-content-area {
padding: 20px;
overflow-y: auto;
}
/* ===== RIGHT SIDEBAR ===== */
.cinema-sidebar {
background: linear-gradient(180deg, #1e1e2e, #2a2a3a);
border-left: 1px solid #404050;
display: flex;
flex-direction: column;
overflow: hidden;
}
.sidebar-tabs {
display: flex;
border-bottom: 1px solid #404050;
background: rgba(0, 0, 0, 0.2);
}
.sidebar-tab {
flex: 1;
padding: 12px 8px;
background: transparent;
border: none;
color: #a0a0a0;
font-size: 0.9rem;
cursor: pointer;
transition: all 0.3s ease;
border-bottom: 3px solid transparent;
}
.sidebar-tab.active {
color: #ffffff;
background: rgba(139, 99, 214, 0.1);
border-bottom-color: #8b63d6;
}
.sidebar-tab:hover {
background: rgba(255, 255, 255, 0.05);
color: #ffffff;
}
.sidebar-panel {
flex: 1;
padding: 0;
display: none;
flex-direction: column;
overflow: hidden;
}
.sidebar-panel.active {
display: flex;
}
.panel-header {
padding: 16px;
border-bottom: 1px solid #404050;
background: rgba(0, 0, 0, 0.1);
}
.panel-header h3 {
margin: 0 0 10px 0;
color: #ffffff;
font-size: 1rem;
font-weight: 600;
}
.playlist-controls {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.playlist-controls .btn-mini {
padding: 4px 8px;
font-size: 0.75rem;
border-radius: 4px;
background: rgba(139, 99, 214, 0.15);
border: 1px solid rgba(139, 99, 214, 0.3);
color: #e0e0e0;
}
.playlist-controls .btn-mini:hover {
background: rgba(139, 99, 214, 0.25);
border-color: rgba(139, 99, 214, 0.5);
}
.playlist-controls .btn-danger {
background: rgba(220, 53, 69, 0.15);
border-color: rgba(220, 53, 69, 0.3);
}
.playlist-controls .btn-danger:hover {
background: rgba(220, 53, 69, 0.25);
border-color: rgba(220, 53, 69, 0.5);
}
/* Playlist content */
.playlist-content {
flex: 1;
padding: 16px;
overflow-y: auto;
}
.playlist-empty {
text-align: center;
color: #666;
padding: 30px 10px;
font-size: 0.9rem;
line-height: 1.4;
}
/* Search panel */
.search-content {
flex: 1;
padding: 16px;
display: flex;
flex-direction: column;
}
.search-input-sidebar {
width: 100%;
padding: 10px;
background: rgba(0, 0, 0, 0.3);
border: 1px solid #404050;
border-radius: 6px;
color: #ffffff;
font-size: 0.9rem;
margin-bottom: 16px;
}
.search-input-sidebar::placeholder {
color: #666;
}
.search-results {
flex: 1;
color: #a0a0a0;
font-size: 0.9rem;
}
.video-player-section {
background: #111;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
margin-bottom: 20px;
}
.video-container {
@ -429,9 +611,10 @@
/* ===== VIDEO LIBRARY SECTION ===== */
.video-library-section {
background: #1a1a1a;
border-radius: 10px;
padding: 20px;
background: rgba(26, 26, 26, 0.6);
border-radius: 8px;
padding: 12px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.library-header {
@ -439,21 +622,29 @@
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 15px;
margin-bottom: 20px;
border-bottom: 2px solid #333;
padding-bottom: 15px;
gap: 10px;
margin-bottom: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 8px;
}
.library-header h3 {
margin: 0;
color: #ff6b9d;
font-size: 0.95rem;
font-weight: 600;
}
.library-controls {
display: flex;
align-items: center;
gap: 8px;
}
.view-toggle {
display: flex;
border: 1px solid #444;
border-radius: 6px;
border-radius: 4px;
overflow: hidden;
}
@ -461,9 +652,10 @@
background: rgba(255, 255, 255, 0.1);
border: none;
color: #ccc;
padding: 8px 12px;
padding: 4px 8px;
cursor: pointer;
transition: all 0.3s ease;
font-size: 0.8rem;
}
.view-btn.active,
@ -475,44 +667,61 @@
.sort-controls {
display: flex;
align-items: center;
gap: 10px;
gap: 6px;
}
.sort-dropdown {
background: rgba(0, 0, 0, 0.7);
border: 1px solid #444;
color: #fff;
padding: 8px 12px;
border-radius: 6px;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.8rem;
}
.search-controls {
display: flex;
align-items: center;
gap: 10px;
gap: 6px;
}
.search-input {
background: rgba(0, 0, 0, 0.7);
border: 1px solid #444;
color: #fff;
padding: 8px 12px;
border-radius: 6px;
width: 200px;
padding: 4px 8px;
border-radius: 4px;
width: 140px;
font-size: 0.8rem;
}
.search-input::placeholder {
color: #666;
}
.btn-mini {
padding: 4px 6px;
font-size: 0.75rem;
border-radius: 3px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #ccc;
}
.btn-mini:hover {
background: rgba(255, 255, 255, 0.2);
color: #fff;
}
.library-content {
min-height: 200px;
min-height: 120px;
}
.library-loading {
text-align: center;
padding: 50px;
padding: 30px;
color: #666;
font-size: 0.9rem;
}
/* ===== LIBRARY GRID VIEW ===== */