diff --git a/css/public.css b/css/public.css index d0180ed..3ca1bd3 100644 --- a/css/public.css +++ b/css/public.css @@ -1,24 +1,183 @@ -.footer { - .rf-label { display: none; } - .rf-star { font-size: 0.8rem; } - .rating-filter-btn { padding: 0.4rem 0.65rem; } +/* ══════════════════════════════════════════════════════════════ + public.css — Frontend Mon Cinéma + Design cinématographique sombre & doré + ═══════════════════════════════════════════════════════════════ */ + +/* --- VARIABLES DE DESIGN ET PALETTE SOMBRE --- */ +:root { + --background: #0a0a0a; + --surface: #1a1a1a; + --surface-card: #1e1e1e; + --surface-hover: #272727; + --border: #2e2e2e; + --border-hover: #444444; + --text: #ffffff; + --text-secondary: #e4e4e7; + --muted: #aaaab8; + --gold: #C9A84C; + --gold-glow: rgba(201, 168, 76, 0.2); + --gold-dim: rgba(201, 168, 76, 0.08); + --shadow-cinematic: 0 15px 35px rgba(0, 0, 0, 0.7); + --shadow-overlay: 0 30px 70px rgba(0, 0, 0, 0.9); +} + +/* --- RESET & BASE --- */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +.page { + display: none; +} + +.page.active { + display: block; +} + +body { + background-color: var(--background); + color: var(--text); + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif; + -webkit-font-smoothing: antialiased; + padding: 3rem 1rem; +} + +.site-wrap { + max-width: 1040px; + margin: 0 auto; } /* ══════════════════════════════════════════════════════════════ - AMÉLIORATIONS UI PUBLIQUE (Recherche, Pagination, Cartes) + EN-TÊTE & NAVIGATION ═══════════════════════════════════════════════════════════════ */ -/* Barre de recherche publique */ +.site-header { + text-align: center; + margin-bottom: 3.5rem; +} + +.site-title { + font-family: 'Playfair Display', Georgia, serif; + font-size: 3.2rem; + font-weight: 700; + letter-spacing: -0.03em; + margin-bottom: 0.6rem; +} + +.site-title span { + color: var(--gold); + text-shadow: 0 0 20px var(--gold-glow); +} + +.site-subtitle { + color: #c0c0cc; + font-size: 0.95rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +/* Navigation par onglets */ +.pub-tabs-container { + display: flex; + justify-content: center; + margin-bottom: 3rem; +} + +.pub-tabs { + background-color: var(--surface); + border: 1px solid var(--border); + padding: 0.4rem; + border-radius: 30px; + display: inline-flex; + gap: 0.4rem; +} + +.tab-btn { + background: none; + border: none; + color: #d4d4de; + font-family: 'DM Sans', sans-serif; + font-size: 0.9rem; + font-weight: 500; + cursor: pointer; + padding: 0.65rem 1.6rem; + border-radius: 25px; + display: flex; + align-items: center; + gap: 0.6rem; + transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); +} + +.tab-btn i { + font-size: 1.15rem; +} + +.tab-btn:hover { + color: var(--text); + background-color: var(--surface-hover); +} + +.tab-btn.active { + color: var(--background); + background-color: var(--gold); + font-weight: 600; + box-shadow: 0 4px 15px var(--gold-glow); +} + +/* ══════════════════════════════════════════════════════════════ + BARRE D'OUTILS & FILTRES + ═══════════════════════════════════════════════════════════════ */ + +.pub-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; + border-bottom: 1px solid var(--border); + padding-bottom: 1rem; +} + +.count { + font-size: 0.9rem; + color: #ccccd6; + font-weight: 500; +} + +.btn-admin-link { + color: #d4b05a !important; + text-decoration: none; + font-size: 0.8rem; + letter-spacing: 0.06em; + text-transform: uppercase; + display: inline-flex; + align-items: center; + gap: 0.5rem; + border: 1px solid rgba(201, 168, 76, 0.2); + padding: 0.5rem 1rem; + border-radius: 4px; + transition: all 0.25s ease; +} + +.btn-admin-link:hover { + background: var(--gold-dim); + border-color: var(--gold); +} + +/* Barre de recherche */ .pub-filters { display: flex; justify-content: center; margin-bottom: 2.5rem; } + .pub-search-box { position: relative; width: 100%; max-width: 480px; } + .pub-search-box input { width: 100%; padding: 0.85rem 1.2rem 0.85rem 3rem; @@ -30,15 +189,18 @@ font-size: 0.95rem; transition: all 0.25s; } + .pub-search-box input:focus { outline: none; border-color: var(--gold); box-shadow: 0 0 0 3px var(--gold-dim); background: var(--surface-card); } + .pub-search-box input::placeholder { color: var(--muted); } + .pub-search-box i { position: absolute; left: 1.2rem; @@ -48,120 +210,82 @@ font-size: 1.2rem; } -/* Pagination publique */ -.pub-pagination { +/* Filtre par notes (étoiles) */ +.rating-filter-bar { display: flex; - justify-content: center; align-items: center; - gap: 0.4rem; - margin-top: 3rem; - padding: 1rem 0; + justify-content: center; + gap: 1rem; + margin-bottom: 2rem; flex-wrap: wrap; } -.pub-pagination button { - background: var(--surface); - border: 1px solid var(--border); - color: var(--text-secondary); - min-width: 40px; - height: 40px; - border-radius: 10px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: all 0.25s; + +.rf-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #ccccda; font-weight: 500; - font-size: 0.9rem; - font-family: inherit; } -.pub-pagination button:hover:not(:disabled):not(.active) { + +.rf-buttons { + display: flex; + gap: 0.4rem; + flex-wrap: wrap; + justify-content: center; +} + +.rating-filter-btn { + background: #1e1e1e; + border: 1px solid #3a3a3a; + border-radius: 8px; + padding: 0.45rem 0.85rem; + cursor: pointer; + display: flex; + gap: 1px; + align-items: center; + transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); +} + +.rating-filter-btn:hover { border-color: var(--gold); - color: var(--gold); background: var(--gold-dim); } -.pub-pagination button.active { - background: var(--gold); - color: var(--background); + +.rating-filter-btn.active { border-color: var(--gold); - font-weight: 600; - box-shadow: 0 4px 12px var(--gold-glow); + background: var(--gold-dim); + box-shadow: 0 0 12px var(--gold-glow); } -.pub-pagination button:disabled { - opacity: 0.3; - cursor: not-allowed; -} -.pub-pagination-info { - color: var(--muted); + +.rf-star { font-size: 0.85rem; - margin: 0 1rem; - font-weight: 500; - letter-spacing: 0.03em; + color: #7a7a88; + transition: color 0.2s ease, text-shadow 0.2s ease; + line-height: 1; } -/* Amélioration des cartes */ -.card { - position: relative; -} -.card-streaming-badge { - position: absolute; - top: 10px; - right: 10px; - background: rgba(0, 0, 0, 0.75); - backdrop-filter: blur(8px); - color: var(--gold); - font-size: 0.7rem; - font-weight: 600; - padding: 0.25rem 0.6rem; - border-radius: 20px; - border: 1px solid rgba(201, 168, 76, 0.3); - z-index: 2; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 140px; -} -.card-physical-badge { - position: absolute; - top: 10px; - right: 10px; - background: rgba(0, 0, 0, 0.75); - backdrop-filter: blur(8px); - color: var(--muted); - font-size: 0.7rem; - font-weight: 600; - padding: 0.25rem 0.6rem; - border-radius: 20px; - border: 1px solid rgba(255, 255, 255, 0.1); - z-index: 2; -} -.card-rating-badge { - display: inline-block; - background: var(--surface); - border: 1px solid var(--border); - color: var(--gold); - font-size: 0.75rem; - font-weight: 600; - padding: 0.1rem 0.45rem; - border-radius: 5px; - margin-left: 0.4rem; - vertical-align: middle; -} -.card-director { - font-size: 0.78rem; - color: var(--muted); - margin-top: 0.2rem; - font-style: italic; +.rating-filter-btn:hover .rf-star, +.rating-filter-btn.active .rf-star { + color: #FFD700; + text-shadow: 0 0 6px rgba(255, 215, 0, 0.5); } -@media (max-width: 720px) { - .pub-search-box { max-width: 100%; } - .pub-pagination button { min-width: 36px; height: 36px; font-size: 0.85rem; } +.rating-filter-btn:not(.active):hover .rf-star:not(.filled) { + color: rgba(255, 215, 0, 0.35); } -/* ══════════════════════════════════════════════════════════════ - FILTRE PAR PLATEFORME DE STREAMING - ═══════════════════════════════════════════════════════════════ */ +.rating-filter-btn.active .rf-star.filled { + color: #FFD700; + text-shadow: 0 0 8px rgba(255, 215, 0, 0.6); +} +.rating-filter-btn.active .rf-star:not(.filled) { + color: #555560; + text-shadow: none; +} + +/* Filtre par plateforme de streaming */ .streaming-filter-bar { display: flex; align-items: center; @@ -202,11 +326,668 @@ box-shadow: 0 0 12px var(--gold-glow); } +/* ══════════════════════════════════════════════════════════════ + GRILLE PRINCIPALE ET CARTES + ═══════════════════════════════════════════════════════════════ */ + +.grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 2.5rem 1.8rem; + margin-top: 1rem; +} + +.card { + background: transparent; + cursor: pointer; + display: flex; + flex-direction: column; +} + +.card-poster-wrap { + width: 100%; + aspect-ratio: 2 / 3; + position: relative; + border-radius: 8px; + overflow: hidden; + background: #121212; + box-shadow: var(--shadow-cinematic); + border: 1px solid var(--border); + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); +} + +.card-poster { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1); +} + +.card-poster-wrap::after { + content: ''; + position: absolute; + top: 0; + left: -150%; + width: 120%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.08), transparent); + transform: skewX(-20deg); +} + +.card:hover .card-poster-wrap { + transform: translateY(-8px); + border-color: var(--border-hover); + box-shadow: 0 20px 30px rgba(0, 0, 0, 0.8); +} + +.card:hover .card-poster-wrap::after { + left: 150%; + transition: all 0.75s ease; +} + +.card:hover .card-poster { + transform: scale(1.05); +} + +.card:hover .card-title { + color: var(--gold); +} + +.card-poster-placeholder { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 1.2rem; + text-align: center; + background: linear-gradient(135deg, #181818, #0a0a0a); +} + +.card-poster-placeholder i { + font-size: 2.5rem; + color: var(--gold); + margin-bottom: 0.7rem; +} + +.card-body { + padding: 0.9rem 0 0 0; +} + +.card-title { + font-size: 0.95rem; + margin: 0 0 0.3rem 0; + font-weight: 600; + color: #ffffff; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + transition: color 0.25s ease; +} + +.card-meta { + font-size: 0.8rem; + color: #c4c4d0; + font-weight: 500; +} + +.card-stars { + color: #FFD700; + margin-top: 0.4rem; + font-size: 0.85rem; + letter-spacing: 1px; +} + +.card-stars .stars-muted { + color: #ffffff; + opacity: 0.45; +} + +.card-video-footer { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 0.5rem; +} + +.badge-format { + background: var(--gold-dim); + color: var(--gold); + font-size: 0.7rem; + font-weight: bold; + padding: 0.15rem 0.5rem; + border-radius: 3px; + border: 1px solid rgba(201, 168, 76, 0.2); + text-transform: uppercase; +} + +.video-length { + color: #a8a8b8; + font-size: 0.75rem; + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +/* Badges sur les cartes */ +.card-streaming-badge { + position: absolute; + top: 10px; + right: 10px; + background: rgba(0, 0, 0, 0.75); + backdrop-filter: blur(8px); + color: var(--gold); + font-size: 0.7rem; + font-weight: 600; + padding: 0.25rem 0.6rem; + border-radius: 20px; + border: 1px solid rgba(201, 168, 76, 0.3); + z-index: 2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 140px; +} + +.card-physical-badge { + position: absolute; + top: 10px; + right: 10px; + background: rgba(0, 0, 0, 0.75); + backdrop-filter: blur(8px); + color: var(--muted); + font-size: 0.7rem; + font-weight: 600; + padding: 0.25rem 0.6rem; + border-radius: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); + z-index: 2; +} + +.card-rating-badge { + display: inline-block; + background: var(--surface); + border: 1px solid var(--border); + color: var(--gold); + font-size: 0.75rem; + font-weight: 600; + padding: 0.1rem 0.45rem; + border-radius: 5px; + margin-left: 0.4rem; + vertical-align: middle; +} + +.card-director { + font-size: 0.78rem; + color: var(--muted); + margin-top: 0.2rem; + font-style: italic; +} + +/* ══════════════════════════════════════════════════════════════ + PAGINATION + ═══════════════════════════════════════════════════════════════ */ + +.pub-pagination { + display: flex; + justify-content: center; + align-items: center; + gap: 0.4rem; + margin-top: 3rem; + padding: 1rem 0; + flex-wrap: wrap; +} + +.pub-pagination button { + background: var(--surface); + border: 1px solid var(--border); + color: var(--text-secondary); + min-width: 40px; + height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.25s; + font-weight: 500; + font-size: 0.9rem; + font-family: inherit; +} + +.pub-pagination button:hover:not(:disabled):not(.active) { + border-color: var(--gold); + color: var(--gold); + background: var(--gold-dim); +} + +.pub-pagination button.active { + background: var(--gold); + color: var(--background); + border-color: var(--gold); + font-weight: 600; + box-shadow: 0 4px 12px var(--gold-glow); +} + +.pub-pagination button:disabled { + opacity: 0.3; + cursor: not-allowed; +} + +.pub-pagination-info { + color: var(--muted); + font-size: 0.85rem; + margin: 0 1rem; + font-weight: 500; + letter-spacing: 0.03em; +} + +/* ══════════════════════════════════════════════════════════════ + MODALE DE DÉTAIL (POP-UP PREMIUM) + ═══════════════════════════════════════════════════════════════ */ + +.detail-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(3, 3, 3, 0.85); + backdrop-filter: blur(25px); + -webkit-backdrop-filter: blur(25px); + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; + padding: 2rem 1rem; + opacity: 0; + pointer-events: none; + transition: opacity 0.4s cubic-bezier(0.16, 1, 0.3, 1); +} + +.detail-overlay.open { + opacity: 1; + pointer-events: all; +} + +.detail-modal { + background: #0f0f10; + border: 1px solid var(--border); + border-radius: 16px; + max-width: 840px; + width: 100%; + max-height: 85vh; + overflow-y: auto; + position: relative; + display: flex; + gap: 3.5rem; + padding: 3.5rem; + box-shadow: var(--shadow-overlay); + transform: scale(0.96) translateY(20px); + transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1); + scrollbar-width: thin; + scrollbar-color: var(--border) transparent; +} + +.detail-overlay.open .detail-modal { + transform: scale(1) translateY(0); +} + +.detail-modal.no-poster { + max-width: 620px; + display: block; +} + +/* Bouton Fermer */ +.modal-close { + position: absolute; + top: 1.5rem; + right: 1.5rem; + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border); + color: #d0d0da; + width: 38px; + height: 38px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.1rem; + cursor: pointer; + transition: all 0.25s ease; + z-index: 10; +} + +.modal-close:hover { + color: var(--text); + background: rgba(255, 255, 255, 0.08); + border-color: #444; + transform: scale(1.05); +} + +/* Colonne Image (Affiche) */ +.detail-poster { + flex: 0 0 240px; + width: 240px; + border-radius: 12px; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.05); + box-shadow: 0 20px 45px rgba(0, 0, 0, 0.8); + background: #141414; + align-self: flex-start; +} + +.detail-poster.poster-critique { + aspect-ratio: unset; +} + +.detail-poster.poster-critique img { + width: 100%; + height: auto; + display: block; +} + +.detail-poster.poster-video { + aspect-ratio: 2 / 3; + display: flex; + align-items: center; + justify-content: center; +} + +.detail-poster.poster-video img { + width: 100%; + height: 100%; + object-fit: contain; + display: block; +} + +/* Colonne Contenu */ +.detail-content { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; +} + +.detail-header-block { + margin-bottom: 1.8rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.04); + padding-bottom: 1.2rem; +} + +.detail-title { + font-family: 'Playfair Display', Georgia, serif; + font-size: 2.4rem; + font-weight: 700; + margin-bottom: 0.5rem; + line-height: 1.2; + color: var(--text); +} + +.detail-meta { + font-size: 0.95rem; + color: #d0d0da; + margin-bottom: 0.8rem; + font-weight: 500; + letter-spacing: 0.02em; +} + +/* Étoiles dans la pop-up */ +.detail-stars { + color: #FFD700; + font-size: 1.6rem; + letter-spacing: 0.12em; + margin-bottom: 1.2rem; + text-shadow: 0 0 12px rgba(255, 215, 0, 0.6), 0 0 20px rgba(255, 215, 0, 0.2); + display: inline-flex; + align-items: center; +} + +.detail-stars .stars-muted { + color: #ffffff; + opacity: 0.35; + text-shadow: none; +} + +/* Design de la critique */ +.pub-review-card { + position: relative; + background: linear-gradient(145deg, #151516, #111112); + border: 1px solid var(--border); + border-radius: 12px; + padding: 2.2rem 2rem 2rem 2rem; + margin-top: 0.5rem; + box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.03); +} + +.pub-review-quote-icon { + position: absolute; + top: -14px; + left: 24px; + background: #181819; + border: 1px solid var(--border); + color: var(--gold); + width: 30px; + height: 30px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.95rem; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.4); +} + +.pub-review-text { + font-family: 'DM Sans', sans-serif; + color: var(--text-secondary); + font-size: 1.05rem; + line-height: 1.8; + white-space: pre-wrap; +} + +/* Design interne : Vidéothèque */ +.pub-tech-badges { + display: flex; + flex-wrap: wrap; + gap: 0.6rem; + margin-bottom: 1.5rem; +} + +.tech-pill { + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border); + padding: 0.38rem 0.85rem; + border-radius: 6px; + font-size: 0.78rem; + font-weight: 600; + text-transform: uppercase; + color: #dddddd; + letter-spacing: 0.02em; + display: inline-flex; + align-items: center; + gap: 0.4rem; +} + +.tech-pill.format-gold { + background: var(--gold-dim); + border-color: rgba(201, 168, 76, 0.3); + color: var(--gold); +} + +.pub-tech-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; + background: #141415; + border: 1px solid var(--border); + padding: 1.1rem 1.3rem; + border-radius: 8px; + margin-bottom: 1.8rem; +} + +.tech-meta-item { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.tech-meta-label { + font-size: 0.75rem; + text-transform: uppercase; + color: #c0c0cc; + letter-spacing: 0.05em; + font-weight: 500; +} + +.tech-meta-value { + font-size: 0.9rem; + color: var(--text); + font-weight: 500; +} + +.pub-synopsis-box h4 { + color: var(--text); + margin-bottom: 0.6rem; + font-size: 0.85rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; +} + +.pub-synopsis-box p { + color: #e0e0e0; + font-size: 0.95rem; + line-height: 1.7; + white-space: pre-wrap; +} + +/* ══════════════════════════════════════════════════════════════ + FIN DE PAGE & ACCESSOIRES + ═══════════════════════════════════════════════════════════════ */ + +footer { + margin-top: 6rem; + border-top: 1px solid var(--border); + padding-top: 2rem; + text-align: center; + color: var(--muted); + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.06em; +} + +.empty-state { + text-align: center; + padding: 6rem 1rem; + color: var(--muted); +} + +.empty-state i { + font-size: 3.5rem; + color: #444450; + margin-bottom: 1.2rem; + display: block; +} + +/* ══════════════════════════════════════════════════════════════ + RESPONSIVE MOBILE + ═══════════════════════════════════════════════════════════════ */ + @media (max-width: 720px) { + body { + padding: 2rem 1rem; + } + + .site-title { + font-size: 2.6rem; + } + + .detail-overlay { + padding: 0; + } + + .detail-modal { + flex-direction: column; + gap: 1.5rem; + padding: 4.5rem 1.5rem 2.5rem 1.5rem; + max-height: 100vh; + height: 100vh; + border-radius: 0; + border: none; + } + + .detail-poster { + margin: 0 auto; + width: 170px; + flex: 0 0 auto; + } + + .detail-header-block { + text-align: center; + padding-bottom: 1.5rem; + } + + .detail-title { + font-size: 2rem; + } + + .detail-stars { + justify-content: center; + display: flex; + } + + .pub-review-card { + padding: 1.8rem 1.3rem; + } + + .pub-tech-grid { + grid-template-columns: 1fr; + gap: 0.9rem; + } + + .pub-tabs { + width: 100%; + justify-content: center; + } + + .tab-btn { + padding: 0.6rem 1.1rem; + font-size: 0.85rem; + } + + .pub-search-box { + max-width: 100%; + } + + .pub-pagination button { + min-width: 36px; + height: 36px; + font-size: 0.85rem; + } + + .rating-filter-bar { + gap: 0.7rem; + } + + .rf-label { + display: none; + } + + .rf-star { + font-size: 0.8rem; + } + + .rating-filter-btn { + padding: 0.4rem 0.65rem; + } + .streaming-filter-bar { gap: 0.5rem; padding: 0.8rem; } + .streaming-filter-btn { padding: 0.4rem 0.8rem; font-size: 0.8rem;