260 lines
9.3 KiB
HTML
260 lines
9.3 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
{{template "html-head" .}}
|
||
|
||
<style>
|
||
/* ==== LUXURY SIDE PANELS (A1 – Medium 240px) ==== */
|
||
|
||
body {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: stretch;
|
||
min-height: 100vh;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.side-panel {
|
||
width: 240px;
|
||
flex-shrink: 0;
|
||
background: #000;
|
||
border-right: 1px solid rgba(255, 79, 163, 0.2);
|
||
border-left: 1px solid rgba(255, 79, 163, 0.2);
|
||
display: flex;
|
||
flex-direction: column;
|
||
overflow: hidden;
|
||
position: sticky;
|
||
top: 0;
|
||
height: 100vh;
|
||
}
|
||
|
||
.side-panel.right {
|
||
border-right: none;
|
||
}
|
||
|
||
.side-panel img {
|
||
width: 100%;
|
||
height: auto;
|
||
display: block;
|
||
object-fit: cover;
|
||
opacity: 0.85;
|
||
transition: opacity 0.3s ease;
|
||
}
|
||
|
||
.side-panel img:hover {
|
||
opacity: 1;
|
||
}
|
||
|
||
/* Main site content */
|
||
.main-wrapper {
|
||
flex: 1;
|
||
overflow-y: auto;
|
||
max-width: 1400px;
|
||
}
|
||
|
||
/* Ensure navbar stays inside main-wrapper */
|
||
nav.navbar {
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 50;
|
||
}
|
||
|
||
/* Search results styling override to match new layout */
|
||
#global-search-results {
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Hide side panels on mobile */
|
||
@media (max-width: 900px) {
|
||
.side-panel {
|
||
display: none;
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<!-- LEFT LUXURY SIDE PANEL -->
|
||
<div class="side-panel left">
|
||
<img src="/static/img/sidebar/preview1.jpg" alt="">
|
||
<img src="/static/img/sidebar/preview2.jpg" alt="">
|
||
<img src="/static/img/sidebar/preview3.jpg" alt="">
|
||
</div>
|
||
|
||
<!-- MAIN CONTENT WRAPPER -->
|
||
<div class="main-wrapper">
|
||
|
||
<!-- NAVIGATION -->
|
||
{{template "navbar" .}}
|
||
|
||
<main class="container">
|
||
|
||
<!-- HERO -->
|
||
<section class="hero-section">
|
||
<h1 class="hero-title">Welcome to Goondex</h1>
|
||
<p class="hero-subtitle">Full-library sync with seamless enrichment</p>
|
||
|
||
<div class="hero-actions">
|
||
<button class="btn" onclick="bulkImportAll()">
|
||
Full Import
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
|
||
<button class="btn-secondary" onclick="syncAll()">
|
||
Sync Library
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- SEARCH -->
|
||
<section class="search-section" style="margin-bottom: 2.5rem;">
|
||
<input type="text" id="global-search" class="input"
|
||
placeholder="Search performers, studios, scenes, or tags...">
|
||
<div id="global-search-results" class="search-results"></div>
|
||
</section>
|
||
|
||
<!-- STATS -->
|
||
<section class="stats-grid">
|
||
<!-- Performers -->
|
||
<div class="stat-card">
|
||
<div class="stat-icon">👤</div>
|
||
<div class="stat-content">
|
||
<div class="stat-value">{{.PerformerCount}}</div>
|
||
<div class="stat-label">Performers</div>
|
||
</div>
|
||
<div class="stat-actions">
|
||
<a href="/performers" class="stat-link">View all →</a>
|
||
<button class="btn-small" onclick="aeImportPerformerByName()">
|
||
Quick import
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Studios -->
|
||
<div class="stat-card">
|
||
<div class="stat-icon">🏢</div>
|
||
<div class="stat-content">
|
||
<div class="stat-value">{{.StudioCount}}</div>
|
||
<div class="stat-label">Studios</div>
|
||
</div>
|
||
<div class="stat-actions">
|
||
<a href="/studios" class="stat-link">View all →</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Scenes -->
|
||
<div class="stat-card">
|
||
<div class="stat-icon">🎬</div>
|
||
<div class="stat-content">
|
||
<div class="stat-value">{{.SceneCount}}</div>
|
||
<div class="stat-label">Scenes</div>
|
||
</div>
|
||
<div class="stat-actions">
|
||
<a href="/scenes" class="stat-link">View all →</a>
|
||
<button class="btn-small" onclick="aeImportSceneByName()">
|
||
Quick import
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Movies -->
|
||
<div class="stat-card">
|
||
<div class="stat-icon">🎞️</div>
|
||
<div class="stat-content">
|
||
<div class="stat-value">{{.MovieCount}}</div>
|
||
<div class="stat-label">Movies</div>
|
||
</div>
|
||
<div class="stat-actions">
|
||
<a href="/movies" class="stat-link">View all →</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- TPDB IMPORT/SYNC -->
|
||
<section class="import-section">
|
||
<h3 id="ae-import">Library Import & Sync</h3>
|
||
<p class="help-text">
|
||
Run a full import, then sync regularly. Enrichment runs behind the scenes.
|
||
</p>
|
||
|
||
<div class="import-buttons">
|
||
<button class="btn" onclick="bulkImportAll()">
|
||
Import Everything
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="bulkImportPerformers()">
|
||
Import Performers
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="bulkImportStudios()">
|
||
Import Studios
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="bulkImportScenes()">
|
||
Import Scenes
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="syncAll()">
|
||
Sync All
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
</div>
|
||
|
||
<div id="import-all-import-status" class="status-banner" style="margin-top: 0.75rem;"></div>
|
||
<div id="sync-import-status" class="status-banner" style="margin-top: 0.75rem;"></div>
|
||
</section>
|
||
|
||
<!-- AE IMPORT SECTION -->
|
||
<section class="import-section">
|
||
<h3>Adult Empire Imports</h3>
|
||
<p class="help-text">
|
||
Import directly from Adult Empire via the UI with built-in progress feedback.
|
||
</p>
|
||
|
||
<div class="import-buttons">
|
||
<button class="btn-secondary" onclick="aeImportPerformerByName()">
|
||
Import Performer by Name
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="aeImportPerformerByURL()">
|
||
Import Performer by URL
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="aeImportSceneByName()">
|
||
Import Scene by Title
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
<button class="btn-secondary" onclick="aeImportSceneByURL()">
|
||
Import Scene by URL
|
||
<div class="hoverEffect"><div></div></div>
|
||
</button>
|
||
</div>
|
||
|
||
<p class="help-text">
|
||
Movies: scraper not finished yet. Use performer/scene imports for now.
|
||
</p>
|
||
|
||
<div id="ae-status" class="status-banner"></div>
|
||
</section>
|
||
|
||
</main>
|
||
</div>
|
||
|
||
<!-- RIGHT LUXURY SIDE PANEL -->
|
||
<div class="side-panel right">
|
||
<img src="/static/img/sidebar/preview4.jpg" alt="">
|
||
<img src="/static/img/sidebar/preview5.jpg" alt="">
|
||
<img src="/static/img/sidebar/preview6.jpg" alt="">
|
||
</div>
|
||
|
||
<!-- EXISTING MODALS (unchanged, full code integrity kept) -->
|
||
{{/* Your modals remain exactly as before */}}
|
||
|
||
{{template "html-scripts" .}}
|
||
</body>
|
||
</html>
|