Spaces:
Running
Running
<html lang="fr"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>CinéPilot - Plateforme Cinéma Automatique</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<style> | |
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700;900&display=swap'); | |
body { | |
font-family: 'Montserrat', sans-serif; | |
background-color: #0f172a; | |
} | |
.film-card { | |
transition: all 0.3s ease; | |
transform-origin: center; | |
} | |
.film-card:hover { | |
transform: scale(1.05) translateY(-5px); | |
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); | |
z-index: 10; | |
} | |
.hero-gradient { | |
background: linear-gradient(135deg, #1e3a8a 0%, #0f172a 100%); | |
} | |
.blur-load { | |
background-size: cover; | |
background-position: center; | |
} | |
.blur-load.loaded > img { | |
opacity: 1; | |
} | |
.blur-load > img { | |
opacity: 0; | |
transition: opacity 200ms ease-in-out; | |
} | |
.loading-spinner { | |
animation: spin 1s linear infinite; | |
} | |
@keyframes spin { | |
from { transform: rotate(0deg); } | |
to { transform: rotate(360deg); } | |
} | |
.marquee { | |
animation: marquee 20s linear infinite; | |
} | |
@keyframes marquee { | |
0% { transform: translateX(0); } | |
100% { transform: translateX(-50%); } | |
} | |
.fade-in { | |
animation: fadeIn 0.5s ease-in; | |
} | |
@keyframes fadeIn { | |
from { opacity: 0; } | |
to { opacity: 1; } | |
} | |
.glow { | |
box-shadow: 0 0 15px rgba(59, 130, 246, 0.5); | |
} | |
.section { | |
display: none; | |
} | |
.section.active { | |
display: block; | |
animation: fadeIn 0.5s ease-in; | |
} | |
</style> | |
</head> | |
<body class="text-gray-100"> | |
<!-- Header --> | |
<header class="bg-gray-900 border-b border-gray-800 sticky top-0 z-50"> | |
<div class="container mx-auto px-4 py-3 flex justify-between items-center"> | |
<div class="flex items-center space-x-2"> | |
<i class="fas fa-film text-3xl text-blue-500"></i> | |
<h1 class="text-2xl font-bold bg-gradient-to-r from-blue-400 to-blue-600 bg-clip-text text-transparent">CinéPilot</h1> | |
</div> | |
<div class="hidden md:flex space-x-6"> | |
<a href="#" class="nav-link hover:text-blue-400 transition" data-section="home">Accueil</a> | |
<a href="#" class="nav-link hover:text-blue-400 transition" data-section="movies">Films</a> | |
<a href="#" class="nav-link hover:text-blue-400 transition" data-section="series">Séries</a> | |
<a href="#" class="nav-link hover:text-blue-400 transition" data-section="new">Nouveautés</a> | |
<a href="#" class="nav-link hover:text-blue-400 transition" data-section="categories">Catégories</a> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<button class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-full font-medium transition" id="loginBtn"> | |
<i class="fas fa-user mr-2"></i>Connexion | |
</button> | |
<button class="text-xl" id="searchBtn"> | |
<i class="fas fa-search"></i> | |
</button> | |
</div> | |
</div> | |
</header> | |
<!-- Hero Section --> | |
<section class="hero-gradient py-16 section active" id="home"> | |
<div class="container mx-auto px-4"> | |
<div class="flex flex-col md:flex-row items-center"> | |
<div class="md:w-1/2 mb-8 md:mb-0"> | |
<h2 class="text-4xl md:text-5xl font-bold mb-4">78,954 films en streaming automatique</h2> | |
<p class="text-xl text-gray-300 mb-6">Découvrez notre immense catalogue de films mis à jour automatiquement chaque jour.</p> | |
<div class="flex space-x-4"> | |
<button class="bg-blue-600 hover:bg-blue-700 px-6 py-3 rounded-full font-bold text-lg transition glow"> | |
<i class="fas fa-play mr-2"></i>Commencer | |
</button> | |
<button class="bg-gray-800 hover:bg-gray-700 px-6 py-3 rounded-full font-bold text-lg transition"> | |
<i class="fas fa-info-circle mr-2"></i>En savoir plus | |
</button> | |
</div> | |
</div> | |
<div class="md:w-1/2 relative"> | |
<div class="relative aspect-video rounded-xl overflow-hidden border-4 border-white shadow-2xl"> | |
<img src="https://image.tmdb.org/t/p/original/8Vt6mWEReuy4Of61Lnj5Xj704m8.jpg" alt="Dune" class="w-full h-full object-cover"> | |
<div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4"> | |
<h3 class="text-xl font-bold">Dune: Partie Deux</h3> | |
<div class="flex items-center space-x-2 text-sm"> | |
<span class="bg-blue-600 px-2 py-1 rounded">HD</span> | |
<span>2024</span> | |
<span>•</span> | |
<span>2h 46min</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!-- Marquee --> | |
<div class="bg-gray-800 py-3"> | |
<div class="marquee whitespace-nowrap"> | |
<span class="text-lg font-bold text-blue-400 mr-12">NOUVEAUTÉS AJOUTÉES AUTOMATIQUEMENT •</span> | |
<span class="text-lg font-bold text-blue-400 mr-12">78,954 FILMS DISPONIBLES •</span> | |
<span class="text-lg font-bold text-blue-400 mr-12">SYSTÈME DE RECOMMANDATION INTELLIGENT •</span> | |
<span class="text-lg font-bold text-blue-400 mr-12">MISE À JOUR QUOTIDIENNE •</span> | |
</div> | |
</div> | |
<!-- Main Content --> | |
<main class="container mx-auto px-4 py-8"> | |
<!-- Movies Section --> | |
<section class="mb-12 section" id="movies"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Tous les films</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Voir plus <i class="fas fa-chevron-right ml-1"></i> | |
</a> | |
</div> | |
<div id="allMovies" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"> | |
<!-- Films will be loaded here --> | |
<div class="flex items-center justify-center py-12"> | |
<div class="loading-spinner text-blue-500 text-4xl"> | |
<i class="fas fa-spinner"></i> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!-- Series Section --> | |
<section class="mb-12 section" id="series"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Toutes les séries</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Voir plus <i class="fas fa-chevron-right ml-1"></i> | |
</a> | |
</div> | |
<div id="allSeries" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"> | |
<!-- Series will be loaded here --> | |
<div class="flex items-center justify-center py-12"> | |
<div class="loading-spinner text-blue-500 text-4xl"> | |
<i class="fas fa-spinner"></i> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!-- Featured Section --> | |
<section class="mb-12 section" id="new"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Nouveautés du jour</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Voir plus <i class="fas fa-chevron-right ml-1"></i> | |
</a> | |
</div> | |
<div id="newReleases" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"> | |
<!-- Films will be loaded here --> | |
<div class="flex items-center justify-center py-12"> | |
<div class="loading-spinner text-blue-500 text-4xl"> | |
<i class="fas fa-spinner"></i> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!-- Categories --> | |
<section class="mb-12 section" id="categories"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Catégories populaires</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Toutes les catégories <i class="fas fa-chevron-right ml-1"></i> | |
</a> | |
</div> | |
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4"> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="action"> | |
<i class="fas fa-bolt text-yellow-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Action</h3> | |
</a> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="romance"> | |
<i class="fas fa-heart text-red-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Romance</h3> | |
</a> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="horror"> | |
<i class="fas fa-ghost text-purple-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Horreur</h3> | |
</a> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="comedy"> | |
<i class="fas fa-laugh-squint text-green-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Comédie</h3> | |
</a> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="scifi"> | |
<i class="fas fa-rocket text-blue-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Science-fiction</h3> | |
</a> | |
<a href="#" class="category-link bg-gray-800 hover:bg-gray-700 rounded-lg p-4 text-center transition transform hover:scale-105" data-category="thriller"> | |
<i class="fas fa-user-secret text-gray-400 text-2xl mb-2"></i> | |
<h3 class="font-medium">Thriller</h3> | |
</a> | |
</div> | |
</section> | |
<!-- Trending Section --> | |
<section class="mb-12"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Tendances cette semaine</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Voir plus <i class="fas fa-chevron-right ml-1"></i> | |
</a> | |
</div> | |
<div id="trending" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"> | |
<!-- Films will be loaded here --> | |
<div class="flex items-center justify-center py-12"> | |
<div class="loading-spinner text-blue-500 text-4xl"> | |
<i class="fas fa-spinner"></i> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!-- Recommended Section --> | |
<section class="mb-12"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Recommandé pour vous</h2> | |
<a href="#" class="text-blue-400 hover:text-blue-300 flex items-center"> | |
Rafraîchir <i class="fas fa-sync-alt ml-1"></i> | |
</a> | |
</div> | |
<div id="recommended" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4"> | |
<!-- Films will be loaded here --> | |
<div class="flex items-center justify-center py-12"> | |
<div class="loading-spinner text-blue-500 text-4xl"> | |
<i class="fas fa-spinner"></i> | |
</div> | |
</div> | |
</div> | |
</section> | |
</main> | |
<!-- Footer --> | |
<footer class="bg-gray-900 border-t border-gray-800 py-12"> | |
<div class="container mx-auto px-4"> | |
<div class="grid grid-cols-1 md:grid-cols-4 gap-8"> | |
<div> | |
<div class="flex items-center space-x-2 mb-4"> | |
<i class="fas fa-film text-3xl text-blue-500"></i> | |
<h3 class="text-2xl font-bold">CinéPilot</h3> | |
</div> | |
<p class="text-gray-400">La plateforme de streaming automatique avec la plus grande collection de films.</p> | |
</div> | |
<div> | |
<h4 class="text-lg font-bold mb-4">Navigation</h4> | |
<ul class="space-y-2"> | |
<li><a href="#" class="nav-link text-gray-400 hover:text-blue-400 transition" data-section="home">Accueil</a></li> | |
<li><a href="#" class="nav-link text-gray-400 hover:text-blue-400 transition" data-section="movies">Films</a></li> | |
<li><a href="#" class="nav-link text-gray-400 hover:text-blue-400 transition" data-section="series">Séries</a></li> | |
<li><a href="#" class="nav-link text-gray-400 hover:text-blue-400 transition" data-section="new">Nouveautés</a></li> | |
</ul> | |
</div> | |
<div> | |
<h4 class="text-lg font-bold mb-4">Légal</h4> | |
<ul class="space-y-2"> | |
<li><a href="#" class="text-gray-400 hover:text-blue-400 transition">Conditions d'utilisation</a></li> | |
<li><a href="#" class="text-gray-400 hover:text-blue-400 transition">Politique de confidentialité</a></li> | |
<li><a href="#" class="text-gray-400 hover:text-blue-400 transition">DMCA</a></li> | |
</ul> | |
</div> | |
<div> | |
<h4 class="text-lg font-bold mb-4">Contact</h4> | |
<ul class="space-y-2"> | |
<li class="flex items-center space-x-2"> | |
<i class="fas fa-envelope text-blue-400"></i> | |
<span class="text-gray-400">contact@cinepilot.com</span> | |
</li> | |
<li class="flex items-center space-x-2"> | |
<i class="fas fa-phone text-blue-400"></i> | |
<span class="text-gray-400">+33 1 23 45 67 89</span> | |
</li> | |
</ul> | |
<div class="flex space-x-4 mt-4"> | |
<a href="#" class="bg-gray-800 hover:bg-gray-700 w-10 h-10 rounded-full flex items-center justify-center transition"> | |
<i class="fab fa-facebook-f"></i> | |
</a> | |
<a href="#" class="bg-gray-800 hover:bg-gray-700 w-10 h-10 rounded-full flex items-center justify-center transition"> | |
<i class="fab fa-twitter"></i> | |
</a> | |
<a href="#" class="bg-gray-800 hover:bg-gray-700 w-10 h-10 rounded-full flex items-center justify-center transition"> | |
<i class="fab fa-instagram"></i> | |
</a> | |
</div> | |
</div> | |
</div> | |
<div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-500"> | |
<p>© 2023 CinéPilot. Tous droits réservés. Système de pilotage automatique.</p> | |
</div> | |
</div> | |
</footer> | |
<!-- Film Modal --> | |
<div id="filmModal" class="fixed inset-0 bg-black bg-opacity-90 z-50 hidden overflow-y-auto"> | |
<div class="container mx-auto px-4 py-12"> | |
<div class="flex justify-end mb-4"> | |
<button id="closeModal" class="text-3xl text-gray-400 hover:text-white"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
<div id="modalContent" class="bg-gray-900 rounded-xl overflow-hidden"> | |
<!-- Content will be loaded here --> | |
</div> | |
</div> | |
</div> | |
<!-- Login Modal --> | |
<div id="loginModal" class="fixed inset-0 bg-black bg-opacity-90 z-50 hidden flex items-center justify-center"> | |
<div class="bg-gray-900 rounded-xl p-8 max-w-md w-full mx-4"> | |
<div class="flex justify-between items-center mb-6"> | |
<h2 class="text-2xl font-bold">Connexion</h2> | |
<button id="closeLoginModal" class="text-2xl text-gray-400 hover:text-white"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
<form id="loginForm"> | |
<div class="mb-4"> | |
<label for="email" class="block text-gray-300 mb-2">Email</label> | |
<input type="email" id="email" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
</div> | |
<div class="mb-6"> | |
<label for="password" class="block text-gray-300 mb-2">Mot de passe</label> | |
<input type="password" id="password" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
</div> | |
<button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 rounded-lg transition"> | |
Se connecter | |
</button> | |
<div class="mt-4 text-center"> | |
<a href="#" class="text-blue-400 hover:text-blue-300">Créer un compte</a> | |
</div> | |
</form> | |
</div> | |
</div> | |
<!-- Search Modal --> | |
<div id="searchModal" class="fixed inset-0 bg-black bg-opacity-90 z-50 hidden flex items-start justify-center pt-16"> | |
<div class="bg-gray-900 rounded-xl p-6 max-w-3xl w-full mx-4"> | |
<div class="flex justify-between items-center mb-6"> | |
<div class="relative w-full"> | |
<input type="text" placeholder="Rechercher des films, séries..." class="w-full bg-gray-800 border border-gray-700 rounded-full px-6 py-4 pl-12 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
<i class="fas fa-search absolute left-4 top-1/2 transform -translate-y-1/2 text-gray-400"></i> | |
</div> | |
<button id="closeSearchModal" class="ml-4 text-2xl text-gray-400 hover:text-white"> | |
<i class="fas fa-times"></i> | |
</button> | |
</div> | |
<div id="searchResults" class="max-h-96 overflow-y-auto"> | |
<div class="text-center py-8 text-gray-400"> | |
<i class="fas fa-search text-4xl mb-4"></i> | |
<p>Recherchez des films, séries ou catégories</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script> | |
// Film database with real movie posters from TMDB | |
const filmDatabase = { | |
totalFilms: 78954, | |
categories: [ | |
"Action", "Aventure", "Animation", "Comédie", "Crime", | |
"Documentaire", "Drame", "Familial", "Fantastique", "Histoire", | |
"Horreur", "Musique", "Mystère", "Romance", "Science-fiction", | |
"Thriller", "Guerre", "Western" | |
], | |
languages: ["Français", "Anglais", "Espagnol", "Allemand", "Italien", "Japonais"], | |
popularMovies: [ | |
{ | |
id: 1, | |
title: "Dune: Partie Deux", | |
year: 2024, | |
rating: "8.5", | |
duration: "2h 46min", | |
category: "Science-fiction", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/8Vt6mWEReuy4Of61Lnj5Xj704m8.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/8Vt6mWEReuy4Of61Lnj5Xj704m8.jpg", | |
description: "Paul Atreides s'unit avec Chani et les Fremen pour se venger des conspirateurs qui ont détruit sa famille. Alors qu'il est confronté à un choix entre l'amour de sa vie et le destin de l'univers, il doit empêcher un terrible futur que lui seul peut prévoir." | |
}, | |
{ | |
id: 2, | |
title: "Oppenheimer", | |
year: 2023, | |
rating: "8.3", | |
duration: "3h", | |
category: "Drame", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/8Gxv8gSFCU0XGDykEGv7zR1n2ua.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/8Gxv8gSFCU0XGDykEGv7zR1n2ua.jpg", | |
description: "L'histoire de J. Robert Oppenheimer, le scientifique qui a dirigé le projet Manhattan pour développer la bombe atomique pendant la Seconde Guerre mondiale." | |
}, | |
{ | |
id: 3, | |
title: "Barbie", | |
year: 2023, | |
rating: "7.0", | |
duration: "1h 54min", | |
category: "Comédie", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/iuFNMS8U5cb6xfzi51Dbkovj7vM.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/iuFNMS8U5cb6xfzi51Dbkovj7vM.jpg", | |
description: "Barbie vit dans un monde parfait jusqu'à ce qu'elle découvre des problèmes dans le monde réel. Elle part alors pour une aventure qui changera sa vie à jamais." | |
}, | |
{ | |
id: 4, | |
title: "Les Gardiens de la Galaxie Vol. 3", | |
year: 2023, | |
rating: "8.0", | |
duration: "2h 30min", | |
category: "Science-fiction", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/8hlyQ7qQC1VDqFm37sC8Tkq1Q2a.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/8hlyQ7qQC1VDqFm37sC8Tkq1Q2a.jpg", | |
description: "Peter Quill, toujours en deuil de la perte de Gamora, doit rassembler son équipe pour défendre l'univers et protéger l'un des leurs." | |
}, | |
{ | |
id: 5, | |
title: "John Wick 4", | |
year: 2023, | |
rating: "7.8", | |
duration: "2h 49min", | |
category: "Action", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/vZloFAK7NmvMGKE7VkF5UHaz0I.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/vZloFAK7NmvMGKE7VkF5UHaz0I.jpg", | |
description: "John Wick découvre un moyen de vaincre le Haut Conseil. Mais avant de pouvoir gagner sa liberté, Wick doit affronter un nouvel ennemi avec des alliances puissantes dans le monde entier." | |
}, | |
{ | |
id: 6, | |
title: "Super Mario Bros. le film", | |
year: 2023, | |
rating: "7.8", | |
duration: "1h 32min", | |
category: "Animation", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/8YFL5QQ7yNx77pKIgWXaXKprQmZ.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/8YFL5QQ7yNx77pKIgWXaXKprQmZ.jpg", | |
description: "Un plombier nommé Mario voyage à travers un labyrinthe souterrain avec son frère Luigi pour sauver une princesse capturée." | |
}, | |
{ | |
id: 7, | |
title: "Mission Impossible : Dead Reckoning Partie 1", | |
year: 2023, | |
rating: "7.7", | |
duration: "2h 43min", | |
category: "Action", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/NNxYkU70HPurnNCSiCjYAmacwm.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/NNxYkU70HPurnNCSiCjYAmacwm.jpg", | |
description: "Ethan Hunt et son équipe de l'IMF doivent retrouver une nouvelle arme terrifiante qui menace toute l'humanité avant qu'elle ne tombe entre de mauvaises mains." | |
}, | |
{ | |
id: 8, | |
title: "Avatar : La Voie de l'eau", | |
year: 2022, | |
rating: "7.6", | |
duration: "3h 12min", | |
category: "Science-fiction", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/jRXYjXNq0Cs2TcJjLkki24MLp7u.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/jRXYjXNq0Cs2TcJjLkki24MLp7u.jpg", | |
description: "Jake Sully et Ney'tiri forment une famille et font tout leur possible pour rester ensemble. Cependant, ils doivent quitter leur foyer et explorer les différentes régions de Pandora." | |
}, | |
{ | |
id: 9, | |
title: "Spider-Man: Across the Spider-Verse", | |
year: 2023, | |
rating: "8.6", | |
duration: "2h 20min", | |
category: "Animation", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/8Vt6mWEReuy4Of61Lnj5Xj704m8.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/8Vt6mWEReuy4Of61Lnj5Xj704m8.jpg", | |
description: "Miles Morales se lance dans une aventure épique à travers le multivers avec Gwen Stacy et une nouvelle équipe de Spider-People pour affronter un ennemi plus puissant que tout ce qu'ils ont connu." | |
}, | |
{ | |
id: 10, | |
title: "The Batman", | |
year: 2022, | |
rating: "7.7", | |
duration: "2h 56min", | |
category: "Action", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/seyWFgGItaxDVjtrZYhogY7AuR.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/seyWFgGItaxDVjtrZYhogY7AuR.jpg", | |
description: "Lorsqu'un tueur cible l'élite de Gotham avec une série de machinations sadiques, une piste d'indices énigmatiques lance le plus grand détective du monde dans une enquête dans les bas-fonds." | |
}, | |
{ | |
id: 11, | |
title: "Black Panther: Wakanda Forever", | |
year: 2022, | |
rating: "7.2", | |
duration: "2h 41min", | |
category: "Action", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/sv1xJUazXeYqALzczSZ3O6nkH75.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/sv1xJUazXeYqALzczSZ3O6nkH75.jpg", | |
description: "La reine Ramonda, Shuri, M'Baku, Okoye et les Dora Milaje luttent pour protéger leur nation des ingérences des puissances mondiales à la suite de la mort du king T'Challa." | |
}, | |
{ | |
id: 12, | |
title: "Top Gun: Maverick", | |
year: 2022, | |
rating: "8.3", | |
duration: "2h 10min", | |
category: "Action", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/jTswp6KyDYKtvC52GbHagrZbGvD.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/jTswp6KyDYKtvC52GbHagrZbGvD.jpg", | |
description: "Après plus de trente ans de service, Pete 'Maverick' Mitchell est de retour pour former les meilleurs pilotes de Top Gun pour une mission spéciale." | |
} | |
], | |
popularSeries: [ | |
{ | |
id: 101, | |
title: "Stranger Things", | |
year: 2016, | |
rating: "8.7", | |
seasons: 4, | |
category: "Science-fiction", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/49WJfeN0moxbXIIPmmaFsTExOnJ.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/49WJfeN0moxbXIIPmmaFsTExOnJ.jpg", | |
description: "À Hawkins, en 1983 dans l'Indiana. Lorsque Will Byers disparaît de son domicile, ses amis se lancent dans une recherche semée d'embûches pour le retrouver." | |
}, | |
{ | |
id: 102, | |
title: "The Last of Us", | |
year: 2023, | |
rating: "8.8", | |
seasons: 1, | |
category: "Drame", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/uKvVjHNqB5VmOrdxqAt2F7J78ED.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/uKvVjHNqB5VmOrdxqAt2F7J78ED.jpg", | |
description: "Vingt ans après la destruction de la civilisation moderne, Joel est chargé de sortir Ellie, une fille de 14 ans, d'une zone de quarantaine oppressive." | |
}, | |
{ | |
id: 103, | |
title: "The Mandalorian", | |
year: 2019, | |
rating: "8.5", | |
seasons: 3, | |
category: "Science-fiction", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/eU1i6eHXlzMOlEq0ku1Rzq7Y4wA.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/eU1i6eHXlzMOlEq0ku1Rzq7Y4wA.jpg", | |
description: "Après les aventures de Jango et Boba Fett, un autre guerrier émerge dans l'univers Star Wars. The Mandalorian se déroule après la chute de l'Empire et avant l'émergence du Premier Ordre." | |
}, | |
{ | |
id: 104, | |
title: "House of the Dragon", | |
year: 2022, | |
rating: "8.5", | |
seasons: 1, | |
category: "Fantastique", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/1X4h40fcB4WWUmIBK0auT4pfRWB.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/1X4h40fcB4WWUmIBK0auT4pfRWB.jpg", | |
description: "L'histoire de la maison Targaryen se déroulant 200 ans avant les événements de Game of Thrones." | |
}, | |
{ | |
id: 105, | |
title: "Breaking Bad", | |
year: 2008, | |
rating: "8.9", | |
seasons: 5, | |
category: "Drame", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/ggFHVNu6YYI5L9pCfOacjizRGt.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/ggFHVNu6YYI5L9pCfOacjizRGt.jpg", | |
description: "Walter White, un professeur de chimie surmené et sous-payé, est diagnostiqué d'un cancer du poumon en phase terminale. Pour assurer l'avenir financier de sa famille, il se lance dans la fabrication et la vente de méthamphétamine." | |
}, | |
{ | |
id: 106, | |
title: "Game of Thrones", | |
year: 2011, | |
rating: "8.4", | |
seasons: 8, | |
category: "Fantastique", | |
language: "Anglais", | |
poster: "https://image.tmdb.org/t/p/w500/7WUHnWGx5OO145IRxPDUkQSh4C7.jpg", | |
backdrop: "https://image.tmdb.org/t/p/original/7WUHnWGx5OO145IRxPDUkQSh4C7.jpg", | |
description: "Neuf familles nobles se battent pour le contrôle des terres de Westeros, tandis qu'un ancien ennemi revient après avoir été endormi pendant des milliers d'années." | |
} | |
], | |
getRandomFilms: function(count) { | |
const shuffled = [...this.popularMovies].sort(() => 0.5 - Math.random()); | |
return shuffled.slice(0, count); | |
}, | |
getTrendingFilms: function(count) { | |
return [...this.popularMovies] | |
.sort((a, b) => b.rating - a.rating) | |
.slice(0, count); | |
}, | |
getRecommendedFilms: function(count) { | |
return [...this.popularMovies] | |
.sort((a, b) => b.year - a.year) | |
.slice(0, count); | |
}, | |
getFilmsByCategory: function(category, count) { | |
return [...this.popularMovies] | |
.filter(film => film.category.toLowerCase().includes(category.toLowerCase())) | |
.slice(0, count); | |
}, | |
getAllFilms: function() { | |
return [...this.popularMovies]; | |
}, | |
getAllSeries: function() { | |
return [...this.popularSeries]; | |
} | |
}; | |
// DOM Elements | |
const sections = { | |
home: document.getElementById('home'), | |
movies: document.getElementById('movies'), | |
series: document.getElementById('series'), | |
new: document.getElementById('new'), | |
categories: document.getElementById('categories') | |
}; | |
const filmContainers = { | |
newReleases: document.getElementById('newReleases'), | |
trending: document.getElementById('trending'), | |
recommended: document.getElementById('recommended'), | |
allMovies: document.getElementById('allMovies'), | |
allSeries: document.getElementById('allSeries') | |
}; | |
const filmModal = document.getElementById('filmModal'); | |
const modalContent = document.getElementById('modalContent'); | |
const closeModal = document.getElementById('closeModal'); | |
const loginBtn = document.getElementById('loginBtn'); | |
const loginModal = document.getElementById('loginModal'); | |
const closeLoginModal = document.getElementById('closeLoginModal'); | |
const loginForm = document.getElementById('loginForm'); | |
const searchBtn = document.getElementById('searchBtn'); | |
const searchModal = document.getElementById('searchModal'); | |
const closeSearchModal = document.getElementById('closeSearchModal'); | |
const searchResults = document.getElementById('searchResults'); | |
// Navigation functions | |
function showSection(sectionId) { | |
// Hide all sections | |
Object.values(sections).forEach(section => { | |
section.classList.remove('active'); | |
}); | |
// Show the selected section | |
if (sections[sectionId]) { | |
sections[sectionId].classList.add('active'); | |
// Scroll to top | |
window.scrollTo({ | |
top: 0, | |
behavior: 'smooth' | |
}); | |
// Load specific content if needed | |
if (sectionId === 'movies') { | |
loadAllMovies(); | |
} else if (sectionId === 'series') { | |
loadAllSeries(); | |
} else if (sectionId === 'new') { | |
loadNewReleases(); | |
} else if (sectionId === 'categories') { | |
// Already loaded | |
} | |
} | |
} | |
// Load films | |
function loadFilms() { | |
// New releases | |
loadNewReleases(); | |
// Trending | |
loadTrending(); | |
// Recommended | |
loadRecommended(); | |
} | |
function loadNewReleases() { | |
const newReleases = filmDatabase.getRandomFilms(12); | |
renderFilms(newReleases, filmContainers.newReleases); | |
} | |
function loadTrending() { | |
const trending = filmDatabase.getTrendingFilms(12); | |
renderFilms(trending, filmContainers.trending); | |
} | |
function loadRecommended() { | |
const recommended = filmDatabase.getRecommendedFilms(12); | |
renderFilms(recommended, filmContainers.recommended); | |
} | |
function loadAllMovies() { | |
const allMovies = filmDatabase.getAllFilms(); | |
renderFilms(allMovies, filmContainers.allMovies); | |
} | |
function loadAllSeries() { | |
const allSeries = filmDatabase.getAllSeries(); | |
renderSeries(allSeries, filmContainers.allSeries); | |
} | |
function loadCategory(category) { | |
const films = filmDatabase.getFilmsByCategory(category, 12); | |
const container = document.createElement('div'); | |
container.id = `category-${category}`; | |
container.className = 'grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4'; | |
renderFilms(films, container); | |
// Show in categories section | |
sections.categories.innerHTML = ` | |
<div class="flex items-center mb-6"> | |
<button onclick="showSection('categories')" class="mr-4 text-blue-400 hover:text-blue-300"> | |
<i class="fas fa-arrow-left"></i> | |
</button> | |
<h2 class="text-2xl font-bold">Catégorie: ${category.charAt(0).toUpperCase() + category.slice(1)}</h2> | |
</div> | |
`; | |
sections.categories.appendChild(container); | |
} | |
// Render films | |
function renderFilms(films, container) { | |
container.innerHTML = ''; | |
films.forEach(film => { | |
const filmElement = document.createElement('div'); | |
filmElement.className = 'film-card'; | |
filmElement.innerHTML = ` | |
<div class="cursor-pointer" onclick="openFilmModal(${film.id})"> | |
<div class="relative aspect-[2/3] rounded-lg overflow-hidden mb-2"> | |
<div class="blur-load absolute inset-0 bg-gray-800 flex items-center justify-center"> | |
<img src="${film.poster}" alt="${film.title}" class="absolute inset-0 w-full h-full object-cover" loading="lazy"> | |
</div> | |
<div class="absolute top-2 left-2 bg-blue-600 text-white text-xs px-2 py-1 rounded">HD</div> | |
<div class="absolute bottom-2 right-2 bg-yellow-500 text-black text-xs px-2 py-1 rounded font-bold"> | |
${film.rating} <i class="fas fa-star"></i> | |
</div> | |
</div> | |
<h3 class="font-medium truncate">${film.title}</h3> | |
<div class="text-sm text-gray-400"> | |
<span>${film.year}</span> | |
<span>•</span> | |
<span>${film.category}</span> | |
</div> | |
</div> | |
`; | |
container.appendChild(filmElement); | |
// Lazy load images | |
const img = filmElement.querySelector('img'); | |
img.onload = function() { | |
filmElement.querySelector('.blur-load').classList.add('loaded'); | |
}; | |
}); | |
} | |
// Render series | |
function renderSeries(series, container) { | |
container.innerHTML = ''; | |
series.forEach(serie => { | |
const serieElement = document.createElement('div'); | |
serieElement.className = 'film-card'; | |
serieElement.innerHTML = ` | |
<div class="cursor-pointer" onclick="openFilmModal(${serie.id}, true)"> | |
<div class="relative aspect-[2/3] rounded-lg overflow-hidden mb-2"> | |
<div class="blur-load absolute inset-0 bg-gray-800 flex items-center justify-center"> | |
<img src="${serie.poster}" alt="${serie.title}" class="absolute inset-0 w-full h-full object-cover" loading="lazy"> | |
</div> | |
<div class="absolute top-2 left-2 bg-blue-600 text-white text-xs px-2 py-1 rounded">HD</div> | |
<div class="absolute bottom-2 right-2 bg-yellow-500 text-black text-xs px-2 py-1 rounded font-bold"> | |
${serie.rating} <i class="fas fa-star"></i> | |
</div> | |
</div> | |
<h3 class="font-medium truncate">${serie.title}</h3> | |
<div class="text-sm text-gray-400"> | |
<span>${serie.year}</span> | |
<span>•</span> | |
<span>${serie.seasons} saison${serie.seasons > 1 ? 's' : ''}</span> | |
</div> | |
</div> | |
`; | |
container.appendChild(serieElement); | |
// Lazy load images | |
const img = serieElement.querySelector('img'); | |
img.onload = function() { | |
serieElement.querySelector('.blur-load').classList.add('loaded'); | |
}; | |
}); | |
} | |
// Open film modal | |
window.openFilmModal = function(filmId, isSeries = false) { | |
// Find film/series in database | |
let item; | |
if (isSeries) { | |
item = filmDatabase.popularSeries.find(serie => serie.id === filmId); | |
} else { | |
item = filmDatabase.popularMovies.find(movie => movie.id === filmId); | |
} | |
if (!item) return; | |
modalContent.innerHTML = ` | |
<div class="flex flex-col md:flex-row"> | |
<div class="md:w-1/3"> | |
<div class="relative aspect-[2/3]"> | |
<img src="${item.poster}" alt="${item.title}" class="w-full h-full object-cover"> | |
</div> | |
</div> | |
<div class="md:w-2/3 p-6"> | |
<h2 class="text-3xl font-bold mb-2">${item.title} <span class="text-gray-400">(${item.year})</span></h2> | |
<div class="flex flex-wrap items-center gap-2 mb-4"> | |
<span class="bg-blue-600 text-white px-2 py-1 rounded text-sm">HD</span> | |
<span class="text-yellow-500 font-bold">${item.rating} <i class="fas fa-star"></i></span> | |
${isSeries ? | |
`<span>${item.seasons} saison${item.seasons > 1 ? 's' : ''}</span>` : | |
`<span>${item.duration}</span>` | |
} | |
<span>•</span> | |
<span>${item.category}</span> | |
<span>•</span> | |
<span>${item.language}</span> | |
</div> | |
<p class="text-gray-300 mb-6">${item.description}</p> | |
<div class="flex space-x-4"> | |
<button class="bg-blue-600 hover:bg-blue-700 px-6 py-3 rounded-full font-bold flex items-center"> | |
<i class="fas fa-play mr-2"></i> Regarder | |
</button> | |
<button class="bg-gray-800 hover:bg-gray-700 px-6 py-3 rounded-full font-bold flex items-center"> | |
<i class="fas fa-plus mr-2"></i> Ma liste | |
</button> | |
</div> | |
</div> | |
</div> | |
`; | |
filmModal.classList.remove('hidden'); | |
document.body.style.overflow = 'hidden'; | |
}; | |
// Close modal | |
closeModal.addEventListener('click', function() { | |
filmModal.classList.add('hidden'); | |
document.body.style.overflow = 'auto'; | |
}); | |
// Close modal when clicking outside | |
filmModal.addEventListener('click', function(e) { | |
if (e.target === filmModal) { | |
filmModal.classList.add('hidden'); | |
document.body.style.overflow = 'auto'; | |
} | |
}); | |
// Login modal | |
loginBtn.addEventListener('click', function() { | |
loginModal.classList.remove('hidden'); | |
document.body.style.overflow = 'hidden'; | |
}); | |
closeLoginModal.addEventListener('click', function() { | |
loginModal.classList.add('hidden'); | |
document.body.style.overflow = 'auto'; | |
}); | |
loginForm.addEventListener('submit', function(e) { | |
e.preventDefault(); | |
alert('Connexion en cours... (simulation)'); | |
loginModal.classList.add('hidden'); | |
document.body.style.overflow = 'auto'; | |
}); | |
// Search modal | |
searchBtn.addEventListener('click', function() { | |
searchModal.classList.remove('hidden'); | |
document.body.style.overflow = 'hidden'; | |
}); | |
closeSearchModal.addEventListener('click', function() { | |
searchModal.classList.add('hidden'); | |
document.body.style.overflow = 'auto'; | |
}); | |
// Navigation links | |
document.querySelectorAll('.nav-link').forEach(link => { | |
link.addEventListener('click', function(e) { | |
e.preventDefault(); | |
const section = this.getAttribute('data-section'); | |
showSection(section); | |
}); | |
}); | |
// Category links | |
document.querySelectorAll('.category-link').forEach(link => { | |
link.addEventListener('click', function(e) { | |
e.preventDefault(); | |
const category = this.getAttribute('data-category'); | |
loadCategory(category); | |
}); | |
}); | |
// Initialize | |
document.addEventListener('DOMContentLoaded', function() { | |
// Show home section by default | |
showSection('home'); | |
// Load all films | |
loadFilms(); | |
// Simulate automatic updates every 30 seconds | |
setInterval(() => { | |
// Rotate some films | |
const containers = [filmContainers.newReleases, filmContainers.trending, filmContainers.recommended]; | |
containers.forEach(container => { | |
const films = Array.from(container.children); | |
if (films.length > 6) { | |
// Remove first 2 and add 2 new ones | |
films[0].remove(); | |
films[1].remove(); | |
const newFilms = filmDatabase.getRandomFilms(2); | |
renderFilms(newFilms, container); | |
} | |
}); | |
}, 30000); | |
}); | |
// Display total films count in console | |
console.log(`%cCinéPilot - Base de données de ${filmDatabase.totalFilms.toLocaleString()} films`, | |
'color: #3b82f6; font-size: 16px; font-weight: bold;'); | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=docto41/cin-pilote" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |