<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>openresty</center>
</body>
</html>
{"id":2577,"date":"2025-11-20T14:42:38","date_gmt":"2025-11-20T14:42:38","guid":{"rendered":"https:\/\/jurec.org\/?page_id=2577"},"modified":"2025-12-22T20:46:24","modified_gmt":"2025-12-22T20:46:24","slug":"proces_fictif_competition","status":"publish","type":"page","link":"https:\/\/jurec.org\/?page_id=2577","title":{"rendered":"Proces_Fictif_Competition"},"content":{"rendered":"\n\n\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Admin &#8211; Proc\u00e8s Fictifs<\/title>\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0\/css\/all.min.css\" rel=\"stylesheet\">\n    <style>\n        :root {\n            --primary: #2e7d32;\n            --primary-light: #4caf50;\n            --primary-dark: #1b5e20;\n            --secondary: #2196f3;\n            --accent: #ff9800;\n            --dark: #1a1a1a;\n            --light: #f8f9fa;\n            --gray: #6c757d;\n            --success: #28a745;\n            --warning: #ffc107;\n            --danger: #dc3545;\n        }\n\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        }\n\n        body {\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            min-height: 100vh;\n        }\n\n        .admin-container {\n            display: flex;\n            min-height: 100vh;\n        }\n\n        \/* Sidebar *\/\n        .admin-sidebar {\n            width: 280px;\n            background: rgba(255, 255, 255, 0.95);\n            backdrop-filter: blur(10px);\n            border-right: 1px solid rgba(255, 255, 255, 0.2);\n            box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n        }\n\n        .sidebar-header {\n            padding: 30px 20px;\n            border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n        }\n\n        .sidebar-header h2 {\n            color: var(--primary);\n            font-size: 1.5rem;\n            font-weight: 700;\n        }\n\n        .sidebar-nav {\n            padding: 20px 0;\n        }\n\n        .nav-item {\n            padding: 15px 25px;\n            display: flex;\n            align-items: center;\n            color: var(--dark);\n            text-decoration: none;\n            transition: all 0.3s ease;\n            border-left: 4px solid transparent;\n            cursor: pointer;\n        }\n\n        .nav-item:hover {\n            background: rgba(46, 125, 50, 0.1);\n            border-left-color: var(--primary);\n            color: var(--primary);\n        }\n\n        .nav-item.active {\n            background: rgba(46, 125, 50, 0.15);\n            border-left-color: var(--primary);\n            color: var(--primary);\n            font-weight: 600;\n        }\n\n        .nav-item i {\n            margin-right: 12px;\n            font-size: 1.1rem;\n            width: 20px;\n            text-align: center;\n        }\n\n        \/* Main Content *\/\n        .admin-main {\n            flex: 1;\n            padding: 30px;\n            overflow-y: auto;\n        }\n\n        .admin-header {\n            background: rgba(255, 255, 255, 0.95);\n            backdrop-filter: blur(10px);\n            border-radius: 15px;\n            padding: 25px;\n            margin-bottom: 30px;\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n        }\n\n        .admin-header h1 {\n            color: var(--dark);\n            font-size: 2rem;\n            margin-bottom: 10px;\n        }\n\n        .admin-header p {\n            color: var(--gray);\n            font-size: 1.1rem;\n        }\n\n        \/* Sections *\/\n        .admin-section {\n            background: rgba(255, 255, 255, 0.95);\n            backdrop-filter: blur(10px);\n            border-radius: 15px;\n            padding: 30px;\n            margin-bottom: 30px;\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n            animation: slideUp 0.5s ease;\n        }\n\n        @keyframes slideUp {\n            from {\n                opacity: 0;\n                transform: translateY(30px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .section-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 25px;\n            padding-bottom: 15px;\n            border-bottom: 2px solid rgba(0, 0, 0, 0.1);\n        }\n\n        .section-header h3 {\n            color: var(--primary);\n            font-size: 1.4rem;\n            font-weight: 600;\n        }\n\n        \/* Form Styles *\/\n        .form-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n            gap: 20px;\n        }\n\n        .form-group {\n            margin-bottom: 20px;\n        }\n\n        .form-label {\n            display: block;\n            margin-bottom: 8px;\n            font-weight: 600;\n            color: var(--dark);\n        }\n\n        .form-control {\n            width: 100%;\n            padding: 12px 15px;\n            border: 2px solid #e9ecef;\n            border-radius: 8px;\n            font-size: 1rem;\n            transition: all 0.3s ease;\n        }\n\n        .form-control:focus {\n            border-color: var(--primary);\n            box-shadow: 0 0 0 3px rgba(46, 125, 50, 0.1);\n            outline: none;\n        }\n\n        textarea.form-control {\n            resize: vertical;\n            min-height: 100px;\n        }\n\n        \/* Participants Grid *\/\n        .participants-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n            gap: 25px;\n            margin-bottom: 20px;\n        }\n\n        .participant-card {\n            background: var(--light);\n            border-radius: 15px;\n            padding: 25px;\n            border: 2px solid transparent;\n            transition: all 0.3s ease;\n            position: relative;\n        }\n\n        .participant-card:hover {\n            transform: translateY(-5px);\n            border-color: var(--primary);\n            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);\n        }\n\n        .participant-logo {\n            width: 120px;\n            height: 120px;\n            border-radius: 50%;\n            background: var(--primary);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 20px;\n            font-size: 2.5rem;\n            color: white;\n            overflow: hidden;\n            border: 4px solid rgba(46, 125, 50, 0.2);\n        }\n\n        .participant-logo img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n        }\n\n        .participant-stats {\n            display: flex;\n            justify-content: space-around;\n            margin: 15px 0;\n            padding: 15px 0;\n            border-top: 1px solid #eee;\n            border-bottom: 1px solid #eee;\n        }\n\n        .stat {\n            text-align: center;\n        }\n\n        .stat-value {\n            font-size: 1.2rem;\n            font-weight: 700;\n            color: var(--primary);\n        }\n\n        .stat-label {\n            font-size: 0.8rem;\n            color: #666;\n            margin-top: 2px;\n        }\n\n        .participant-actions {\n            display: flex;\n            gap: 10px;\n            margin-top: 15px;\n        }\n\n        \/* Buttons *\/\n        .btn {\n            padding: 12px 25px;\n            border: none;\n            border-radius: 8px;\n            font-size: 1rem;\n            font-weight: 600;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .btn-primary {\n            background: var(--primary);\n            color: white;\n        }\n\n        .btn-primary:hover {\n            background: var(--primary-dark);\n            transform: translateY(-2px);\n            box-shadow: 0 5px 15px rgba(46, 125, 50, 0.3);\n        }\n\n        .btn-success {\n            background: var(--success);\n            color: white;\n        }\n\n        .btn-warning {\n            background: var(--warning);\n            color: var(--dark);\n        }\n\n        .btn-danger {\n            background: var(--danger);\n            color: white;\n        }\n\n        .btn-secondary {\n            background: var(--secondary);\n            color: white;\n        }\n\n        .btn-sm {\n            padding: 8px 15px;\n            font-size: 0.9rem;\n        }\n\n        \/* Results Management *\/\n        .match-controls {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n            gap: 25px;\n            margin-bottom: 30px;\n        }\n\n        .match-card {\n            background: var(--light);\n            border-radius: 15px;\n            padding: 20px;\n            border: 2px solid #e9ecef;\n        }\n\n        .match-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 15px;\n            padding-bottom: 10px;\n            border-bottom: 1px solid #dee2e6;\n        }\n\n        .match-title {\n            font-weight: 600;\n            color: var(--dark);\n            font-size: 1.1rem;\n        }\n\n        .match-theme {\n            background: var(--secondary);\n            color: white;\n            padding: 4px 10px;\n            border-radius: 12px;\n            font-size: 0.8rem;\n            margin-top: 5px;\n            display: inline-block;\n        }\n\n        .match-phase {\n            background: var(--primary);\n            color: white;\n            padding: 4px 10px;\n            border-radius: 12px;\n            font-size: 0.8rem;\n        }\n\n        .match-teams {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 15px;\n        }\n\n        .team-select {\n            flex: 1;\n            text-align: center;\n        }\n\n        .vs {\n            margin: 0 15px;\n            font-weight: 700;\n            color: var(--accent);\n        }\n\n        \/* Upload Area *\/\n        .upload-area {\n            border: 3px dashed var(--primary);\n            border-radius: 15px;\n            padding: 40px 20px;\n            text-align: center;\n            background: rgba(46, 125, 50, 0.05);\n            cursor: pointer;\n            transition: all 0.3s ease;\n            margin-bottom: 20px;\n        }\n\n        .upload-area:hover {\n            background: rgba(46, 125, 50, 0.1);\n            border-color: var(--primary-dark);\n        }\n\n        .upload-area i {\n            font-size: 3rem;\n            color: var(--primary);\n            margin-bottom: 15px;\n        }\n\n        .upload-area p {\n            color: var(--gray);\n            margin-bottom: 10px;\n        }\n\n        .upload-area input[type=\"file\"] {\n            display: none;\n        }\n\n        \/* Gallery Management *\/\n        .gallery-manager {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n            gap: 15px;\n            margin-top: 20px;\n        }\n\n        .gallery-item {\n            position: relative;\n            border-radius: 10px;\n            overflow: hidden;\n            height: 150px;\n            background: #f5f5f5;\n        }\n\n        .gallery-item img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.3s ease;\n        }\n\n        .gallery-item:hover img {\n            transform: scale(1.1);\n        }\n\n        .gallery-actions {\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            background: rgba(0, 0, 0, 0.7);\n            padding: 10px;\n            display: flex;\n            justify-content: space-around;\n            transform: translateY(100%);\n            transition: transform 0.3s ease;\n        }\n\n        .gallery-item:hover .gallery-actions {\n            transform: translateY(0);\n        }\n\n        \/* Modal *\/\n        .modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.5);\n            z-index: 1000;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .modal-content {\n            background: white;\n            border-radius: 15px;\n            padding: 30px;\n            width: 90%;\n            max-width: 500px;\n            max-height: 90vh;\n            overflow-y: auto;\n        }\n\n        \/* Tabs *\/\n        .tab-content {\n            display: none;\n        }\n\n        .tab-content.active {\n            display: block;\n            animation: fadeIn 0.5s ease;\n        }\n\n        @keyframes fadeIn {\n            from { opacity: 0; }\n            to { opacity: 1; }\n        }\n\n        \/* Responsive *\/\n        @media (max-width: 768px) {\n            .admin-container {\n                flex-direction: column;\n            }\n            \n            .admin-sidebar {\n                width: 100%;\n            }\n            \n            .form-grid {\n                grid-template-columns: 1fr;\n            }\n            \n            .participants-grid {\n                grid-template-columns: 1fr;\n            }\n            \n            .match-controls {\n                grid-template-columns: 1fr;\n            }\n            \n            .gallery-manager {\n                grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"admin-container\">\n        <!-- Sidebar -->\n        <div class=\"admin-sidebar\">\n            <div class=\"sidebar-header\">\n                <h2>\ud83c\udfdb\ufe0f PROC\u00c8S FICTIFS<\/h2>\n            <\/div>\n            <nav class=\"sidebar-nav\">\n                <div class=\"nav-item active\" data-tab=\"general\">\n                    <i class=\"fas fa-cog\"><\/i> Configuration G\u00e9n\u00e9rale\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"participants\">\n                    <i class=\"fas fa-users\"><\/i> Participants\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"calendar\">\n                    <i class=\"fas fa-calendar\"><\/i> Calendrier &#038; Th\u00e8mes\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"results\">\n                    <i class=\"fas fa-trophy\"><\/i> R\u00e9sultats\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"gallery\">\n                    <i class=\"fas fa-images\"><\/i> Galeries\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"general-gallery\">\n                    <i class=\"fas fa-photo-video\"><\/i> Galerie G\u00e9n\u00e9rale\n                <\/div>\n                <div class=\"nav-item\" data-tab=\"backup\">\n                    <i class=\"fas fa-database\"><\/i> Sauvegarde\n                <\/div>\n            <\/nav>\n        <\/div>\n\n        <!-- Main Content -->\n        <div class=\"admin-main\">\n            <div class=\"admin-header\">\n                <h1>Administration &#8211; Proc\u00e8s Fictifs<\/h1>\n                <p>G\u00e9rez manuellement votre comp\u00e9tition<\/p>\n            <\/div>\n\n            <!-- Competition Selector -->\n            <div class=\"admin-section\">\n                <div class=\"section-header\">\n                    <h3>\ud83c\udfc6 \u00c9dition Active<\/h3>\n                <\/div>\n                <div class=\"form-grid\">\n                    <div class=\"form-group\">\n                        <label class=\"form-label\">Comp\u00e9tition active<\/label>\n                        <select class=\"form-control\" id=\"competitionSelector\" onchange=\"switchCompetition()\">\n                            <option value=\"current\">PROC\u00c8S FICTIFS 2025<\/option>\n                            <option value=\"2024\">Archives 2024<\/option>\n                            <option value=\"2023\">Archives 2023<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <button class=\"btn btn-secondary\" onclick=\"exportData()\" style=\"width: 100%;\">\n                            <i class=\"fas fa-file-export\"><\/i> Exporter\n                        <\/button>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <button class=\"btn btn-primary\" onclick=\"createNewEdition()\" style=\"width: 100%;\">\n                            <i class=\"fas fa-plus\"><\/i> Nouvelle \u00c9dition\n                        <\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- General Configuration -->\n            <div id=\"general\" class=\"tab-content active\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83c\udff7\ufe0f Configuration G\u00e9n\u00e9rale<\/h3>\n                    <\/div>\n                    <div class=\"form-grid\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Nom de la comp\u00e9tition<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"competitionName\" value=\"PROC\u00c8S FICTIFS EN DROIT DE L'ENVIRONNEMENT\">\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Ann\u00e9e\/\u00c9dition<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"competitionYear\" value=\"2025\">\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Statut<\/label>\n                            <select class=\"form-control\" id=\"competitionStatus\">\n                                <option value=\"active\">\ud83d\udfe2 En cours<\/option>\n                                <option value=\"upcoming\">\ud83d\udfe1 \u00c0 venir<\/option>\n                                <option value=\"completed\" selected>\ud83d\udd35 Termin\u00e9<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Photo de couverture (URL)<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"coverPhoto\" placeholder=\"https:\/\/votresite.com\/wp-content\/uploads\/...\">\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Participants Management -->\n            <div id=\"participants\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83d\udc65 Gestion des Participants<\/h3>\n                        <div>\n                            <button class=\"btn btn-warning\" onclick=\"loadDefaultParticipants()\">\n                                <i class=\"fas fa-database\"><\/i> Charger par d\u00e9faut\n                            <\/button>\n                            <button class=\"btn btn-primary\" onclick=\"showAddParticipantModal()\">\n                                <i class=\"fas fa-plus\"><\/i> Nouveau Participant\n                            <\/button>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"form-group\">\n                        <label class=\"form-label\">Nombre maximum de participants<\/label>\n                        <input type=\"number\" class=\"form-control\" id=\"maxParticipants\" value=\"16\" min=\"2\" max=\"32\">\n                    <\/div>\n\n                    <div class=\"participants-grid\" id=\"participantsContainer\">\n                        <!-- Participants will be loaded here -->\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Calendar Management -->\n            <div id=\"calendar\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83d\udcc5 Calendrier des Phases &#038; Th\u00e8mes<\/h3>\n                    <\/div>\n\n                    <div class=\"form-grid\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Phase Pr\u00e9liminaire &#8211; Th\u00e8me<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"themePrelim\" placeholder=\"Ex: Responsabilit\u00e9 civile environnementale\" value=\"Responsabilit\u00e9 civile environnementale\">\n                            <input type=\"date\" class=\"form-control mt-2\" id=\"datePrelim\" value=\"2025-11-17\">\n                            <textarea class=\"form-control mt-2\" id=\"descPrelim\" placeholder=\"Description de la phase pr\u00e9liminaire...\" rows=\"3\">Phase de qualification &#8211; Groupes A \u00e0 D<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Quarts de Finale &#8211; Th\u00e8me<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"themeQuarters\" placeholder=\"Ex: Pollution industrielle\" value=\"Pollution industrielle\">\n                            <input type=\"date\" class=\"form-control mt-2\" id=\"dateQuarters\" value=\"2025-11-24\">\n                            <textarea class=\"form-control mt-2\" id=\"descQuarters\" placeholder=\"Description des quarts de finale...\" rows=\"3\">Phase \u00e9liminatoire &#8211; 8 \u00e9quipes<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Demi-Finales &#8211; Th\u00e8me<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"themeSemis\" placeholder=\"Ex: Protection des ressources hydriques\" value=\"Protection des ressources hydriques\">\n                            <input type=\"date\" class=\"form-control mt-2\" id=\"dateSemis\" value=\"2025-11-28\">\n                            <textarea class=\"form-control mt-2\" id=\"descSemis\" placeholder=\"Description des demi-finales...\" rows=\"3\">Finale \u00e0 quatre &#8211; Les meilleures s&rsquo;affrontent<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Finale &#8211; Th\u00e8me<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"themeFinal\" placeholder=\"Ex: Pollution par les mines\" value=\"Pollution par les mines\">\n                            <input type=\"date\" class=\"form-control mt-2\" id=\"dateFinal\" value=\"2025-12-02\">\n                            <textarea class=\"form-control mt-2\" id=\"descFinal\" placeholder=\"Description de la finale...\" rows=\"3\">PROC\u00c8S FICTIFS &#8211; GRANDE FINALE<\/textarea>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Results Management -->\n            <div id=\"results\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83c\udfc6 Gestion des R\u00e9sultats<\/h3>\n                        <button class=\"btn btn-success\" onclick=\"showSetResultsModal()\">\n                            <i class=\"fas fa-trophy\"><\/i> D\u00e9finir R\u00e9sultats\n                        <\/button>\n                    <\/div>\n                    \n                    <!-- Current Results Display -->\n                    <div class=\"participants-grid\" id=\"resultsContainer\">\n                        <!-- Results will be loaded here -->\n                    <\/div>\n                    \n                    <!-- Manual Match Results -->\n                    <div class=\"admin-section\" style=\"margin-top: 30px;\">\n                        <div class=\"section-header\">\n                            <h3>\u2694\ufe0f R\u00e9sultats des Matchs<\/h3>\n                            <button class=\"btn btn-primary\" onclick=\"showAddMatchResultModal()\">\n                                <i class=\"fas fa-plus\"><\/i> Ajouter un R\u00e9sultat\n                            <\/button>\n                        <\/div>\n                        \n                        <div class=\"match-controls\" id=\"matchResultsContainer\">\n                            <!-- Match results will be loaded here -->\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Gallery Management -->\n            <div id=\"gallery\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83d\uddbc\ufe0f Galeries des Phases<\/h3>\n                    <\/div>\n                    \n                    <!-- Upload Area -->\n                    <div class=\"upload-area\" onclick=\"document.getElementById('photoUpload').click()\">\n                        <i class=\"fas fa-cloud-upload-alt\"><\/i>\n                        <h4>Ajouter des photos<\/h4>\n                        <p>Cliquez pour s\u00e9lectionner des images<\/p>\n                        <input type=\"file\" id=\"photoUpload\" accept=\"image\/*\" multiple onchange=\"handlePhotoUpload(event)\">\n                    <\/div>\n\n                    <div class=\"form-grid\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Phase Pr\u00e9liminaire (17 Nov)<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"photoPrelim\" placeholder=\"URL - photo phase pr\u00e9liminaire\">\n                            <textarea class=\"form-control mt-2\" id=\"descGalleryPrelim\" placeholder=\"Description de la galerie...\" rows=\"3\">Photos des matchs pr\u00e9liminaires<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Quarts de Finale<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"photoQuarters\" placeholder=\"URL - photo quarts de finale\">\n                            <textarea class=\"form-control mt-2\" id=\"descGalleryQuarters\" placeholder=\"Description de la galerie...\" rows=\"3\">Photos des quarts de finale<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Demi-Finales<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"photoSemis\" placeholder=\"URL - photo demi-finales\">\n                            <textarea class=\"form-control mt-2\" id=\"descGallerySemis\" placeholder=\"Description de la galerie...\" rows=\"3\">Photos des demi-finales<\/textarea>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Finale (02 D\u00e9c)<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"photoFinal\" placeholder=\"URL - photo finale\">\n                            <textarea class=\"form-control mt-2\" id=\"descGalleryFinal\" placeholder=\"Description de la galerie...\" rows=\"3\">Photos de la grande finale<\/textarea>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- General Gallery -->\n            <div id=\"general-gallery\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83c\udfac Galerie G\u00e9n\u00e9rale &#8211; Archives<\/h3>\n                        <button class=\"btn btn-primary\" onclick=\"showAddGalleryItemModal()\">\n                            <i class=\"fas fa-plus\"><\/i> Ajouter un m\u00e9dia\n                        <\/button>\n                    <\/div>\n                    \n                    <!-- Form for adding media -->\n                    <div class=\"form-grid\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">URL du m\u00e9dia<\/label>\n                            <input type=\"url\" class=\"form-control\" id=\"galleryMediaUrl\" placeholder=\"https:\/\/...\">\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Titre du m\u00e9dia<\/label>\n                            <input type=\"text\" class=\"form-control\" id=\"galleryMediaTitle\" placeholder=\"Ex: Photo finale 2025\">\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Type de m\u00e9dia<\/label>\n                            <select class=\"form-control\" id=\"galleryMediaType\">\n                                <option value=\"photo\">Photo<\/option>\n                                <option value=\"video\">Vid\u00e9o<\/option>\n                                <option value=\"youtube\">YouTube<\/option>\n                                <option value=\"vimeo\">Vimeo<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\">Phase concern\u00e9e<\/label>\n                            <select class=\"form-control\" id=\"galleryMediaPhase\">\n                                <option value=\"general\">G\u00e9n\u00e9ral<\/option>\n                                <option value=\"prelim\">Pr\u00e9liminaires<\/option>\n                                <option value=\"quarters\">Quarts de finale<\/option>\n                                <option value=\"semis\">Demi-finales<\/option>\n                                <option value=\"final\">Finale<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <button class=\"btn btn-success\" onclick=\"addGalleryItem()\" style=\"width: 100%;\">\n                                <i class=\"fas fa-plus\"><\/i> Ajouter \u00e0 la galerie\n                            <\/button>\n                        <\/div>\n                    <\/div>\n\n                    <!-- Gallery Display -->\n                    <div class=\"gallery-manager\" id=\"generalGalleryContainer\">\n                        <!-- Gallery items will be loaded here -->\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Backup Management -->\n            <div id=\"backup\" class=\"tab-content\">\n                <div class=\"admin-section\">\n                    <div class=\"section-header\">\n                        <h3>\ud83d\udcbe Sauvegarde &#038; Restauration<\/h3>\n                    <\/div>\n                    <div class=\"form-grid\">\n                        <div class=\"form-group\">\n                            <button class=\"btn btn-success\" onclick=\"exportData()\" style=\"width: 100%;\">\n                                <i class=\"fas fa-file-export\"><\/i> Exporter toutes les donn\u00e9es\n                            <\/button>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <button class=\"btn btn-warning\" onclick=\"showImportModal()\" style=\"width: 100%;\">\n                                <i class=\"fas fa-file-import\"><\/i> Importer des donn\u00e9es\n                            <\/button>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <button class=\"btn btn-danger\" onclick=\"confirmReset()\" style=\"width: 100%;\">\n                                <i class=\"fas fa-trash\"><\/i> R\u00e9initialiser\n                            <\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Save Button -->\n            <div class=\"admin-section\">\n                <button class=\"btn btn-success\" onclick=\"saveAllData()\" style=\"width: 100%; padding: 15px; font-size: 1.1rem;\">\n                    <i class=\"fas fa-save\"><\/i> Sauvegarder toutes les modifications\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Modals -->\n    <div id=\"addParticipantModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\ud83d\udc64 Ajouter un Participant<\/h3>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Nom de l&rsquo;universit\u00e9<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"newParticipantName\" placeholder=\"Ex: Universit\u00e9 Protestante au Nord\">\n            <\/div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Description<\/label>\n                <textarea class=\"form-control\" id=\"newParticipantDesc\" placeholder=\"Description de l'universit\u00e9...\" rows=\"3\"><\/textarea>\n            <\/div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">URL du logo<\/label>\n                <input type=\"url\" class=\"form-control\" id=\"newParticipantLogo\" placeholder=\"https:\/\/...\">\n            <\/div>\n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-primary\" onclick=\"addNewParticipant()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-plus\"><\/i> Ajouter\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('addParticipantModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"editParticipantModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\u270f\ufe0f Modifier le Participant<\/h3>\n            <input type=\"hidden\" id=\"editParticipantIndex\">\n            <div class=\"form-group\">\n                <label class=\"form-label\">Nom de l&rsquo;universit\u00e9<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"editParticipantName\">\n            <\/div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Description<\/label>\n                <textarea class=\"form-control\" id=\"editParticipantDesc\" rows=\"3\"><\/textarea>\n            <\/div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">URL du logo<\/label>\n                <input type=\"url\" class=\"form-control\" id=\"editParticipantLogo\">\n            <\/div>\n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-success\" onclick=\"saveParticipantEdit()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-save\"><\/i> Sauvegarder\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('editParticipantModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"setResultsModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\ud83c\udfc6 D\u00e9finir les R\u00e9sultats Finaux<\/h3>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Vainqueur de la finale<\/label>\n                <select class=\"form-control\" id=\"finalWinner\">\n                    <option value=\"\">&#8212; S\u00e9lectionner le vainqueur &#8212;<\/option>\n                <\/select>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Score final<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"finalScore\" placeholder=\"Ex: 85-78\">\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Meilleur orateur<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"bestSpeaker\" placeholder=\"Nom du meilleur orateur\">\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Th\u00e8me de la finale<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"finalTheme\" placeholder=\"Th\u00e8me du proc\u00e8s fictif\">\n            <\/div>\n            \n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-success\" onclick=\"saveFinalResults()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-save\"><\/i> Enregistrer\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('setResultsModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"addMatchResultModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\u2694\ufe0f Ajouter un R\u00e9sultat de Match<\/h3>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Phase<\/label>\n                <select class=\"form-control\" id=\"matchPhase\">\n                    <option value=\"prelim\">Phase Pr\u00e9liminaire<\/option>\n                    <option value=\"quarters\">Quarts de Finale<\/option>\n                    <option value=\"semis\">Demi-Finales<\/option>\n                    <option value=\"final\">Finale<\/option>\n                <\/select>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Th\u00e8me du proc\u00e8s<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"matchTheme\" placeholder=\"Ex: Pollution industrielle\">\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">\u00c9quipe 1<\/label>\n                <select class=\"form-control\" id=\"matchTeam1\"><\/select>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">\u00c9quipe 2<\/label>\n                <select class=\"form-control\" id=\"matchTeam2\"><\/select>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Score<\/label>\n                <div style=\"display: flex; align-items: center; gap: 10px;\">\n                    <input type=\"number\" class=\"form-control\" id=\"matchScore1\" placeholder=\"0\" min=\"0\" style=\"text-align: center;\">\n                    <span style=\"font-weight: bold;\">&#8211;<\/span>\n                    <input type=\"number\" class=\"form-control\" id=\"matchScore2\" placeholder=\"0\" min=\"0\" style=\"text-align: center;\">\n                <\/div>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Date du match<\/label>\n                <input type=\"date\" class=\"form-control\" id=\"matchDate\">\n            <\/div>\n            \n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-success\" onclick=\"saveMatchResult()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-save\"><\/i> Enregistrer\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('addMatchResultModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"importModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\ud83d\udce5 Importer des donn\u00e9es<\/h3>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Fichier de sauvegarde<\/label>\n                <input type=\"file\" class=\"form-control\" id=\"importFile\" accept=\".json\">\n            <\/div>\n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-success\" onclick=\"importData()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-file-import\"><\/i> Importer\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('importModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"addGalleryItemModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h3 style=\"margin-bottom: 20px; color: var(--primary);\">\ud83d\uddbc\ufe0f Ajouter un m\u00e9dia \u00e0 la galerie<\/h3>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">URL du m\u00e9dia<\/label>\n                <input type=\"url\" class=\"form-control\" id=\"modalMediaUrl\" placeholder=\"https:\/\/...\">\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Titre du m\u00e9dia<\/label>\n                <input type=\"text\" class=\"form-control\" id=\"modalMediaTitle\" placeholder=\"Ex: C\u00e9r\u00e9monie d'ouverture 2025\">\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Type de m\u00e9dia<\/label>\n                <select class=\"form-control\" id=\"modalMediaType\">\n                    <option value=\"photo\">Photo<\/option>\n                    <option value=\"video\">Vid\u00e9o<\/option>\n                    <option value=\"youtube\">YouTube<\/option>\n                    <option value=\"vimeo\">Vimeo<\/option>\n                <\/select>\n            <\/div>\n            \n            <div class=\"form-group\">\n                <label class=\"form-label\">Phase concern\u00e9e<\/label>\n                <select class=\"form-control\" id=\"modalMediaPhase\">\n                    <option value=\"general\">G\u00e9n\u00e9ral<\/option>\n                    <option value=\"prelim\">Pr\u00e9liminaires<\/option>\n                    <option value=\"quarters\">Quarts de finale<\/option>\n                    <option value=\"semis\">Demi-finales<\/option>\n                    <option value=\"final\">Finale<\/option>\n                <\/select>\n            <\/div>\n            \n            <div style=\"display: flex; gap: 10px; margin-top: 20px;\">\n                <button class=\"btn btn-success\" onclick=\"addGalleryItemFromModal()\" style=\"flex: 1;\">\n                    <i class=\"fas fa-plus\"><\/i> Ajouter\n                <\/button>\n                <button class=\"btn btn-danger\" onclick=\"hideModal('addGalleryItemModal')\" style=\"flex: 1;\">\n                    <i class=\"fas fa-times\"><\/i> Annuler\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ ==================== DONN\u00c9ES INITIALES ====================\n        const STORAGE_KEYS = {\n            COMPETITION: 'proc\u00e8s_competition',\n            PARTICIPANTS: 'proc\u00e8s_participants',\n            MATCH_RESULTS: 'proc\u00e8s_match_results',\n            FINAL_RESULTS: 'proc\u00e8s_final_results',\n            GALLERY: 'proc\u00e8s_general_gallery'\n        };\n\n        \/\/ ==================== INITIALISATION ====================\n        document.addEventListener('DOMContentLoaded', function() {\n            \/\/ Navigation\n            document.querySelectorAll('.nav-item').forEach(item => {\n                item.addEventListener('click', function() {\n                    const tabId = this.getAttribute('data-tab');\n                    \n                    \/\/ Update active nav item\n                    document.querySelectorAll('.nav-item').forEach(nav => nav.classList.remove('active'));\n                    this.classList.add('active');\n                    \n                    \/\/ Show corresponding tab\n                    document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));\n                    document.getElementById(tabId).classList.add('active');\n                    \n                    \/\/ Load tab data\n                    loadTabData(tabId);\n                });\n            });\n\n            \/\/ Load default data\n            loadSavedData();\n            \n            \/\/ Initial load for active tab\n            loadTabData('general');\n        });\n\n        \/\/ ==================== FONCTIONS DE BASE ====================\n        function showModal(modalId) {\n            document.getElementById(modalId).style.display = 'flex';\n        }\n\n        function hideModal(modalId) {\n            document.getElementById(modalId).style.display = 'none';\n        }\n\n        function saveLocalStorage(key, data) {\n            try {\n                localStorage.setItem(key, JSON.stringify(data));\n                \/\/ Trigger storage event for other tabs\/windows\n                window.dispatchEvent(new Event('storage'));\n                return true;\n            } catch (error) {\n                console.error('Erreur de sauvegarde:', error);\n                alert('Erreur lors de la sauvegarde');\n                return false;\n            }\n        }\n\n        function getLocalStorage(key) {\n            try {\n                const data = localStorage.getItem(key);\n                return data ? JSON.parse(data) : null;\n            } catch (error) {\n                console.error('Erreur de lecture:', error);\n                return null;\n            }\n        }\n\n        \/\/ ==================== GESTION DES PARTICIPANTS ====================\n        function loadDefaultParticipants() {\n            const defaultParticipants = [\n                { \n                    name: \"UNIKIN\", \n                    description: \"Universit\u00e9 de Kinshasa\", \n                    logo: \"\", \n                    wins: 3, \n                    losses: 1, \n                    points: 10 \n                },\n                { \n                    name: \"UPC\", \n                    description: \"Universit\u00e9 Protestante au Congo\", \n                    logo: \"\", \n                    wins: 4, \n                    losses: 0, \n                    points: 12 \n                },\n                { \n                    name: \"UCC\", \n                    description: \"Universit\u00e9 Catholique du Congo\", \n                    logo: \"\", \n                    wins: 3, \n                    losses: 1, \n                    points: 10 \n                },\n                { \n                    name: \"USK\", \n                    description: \"Universit\u00e9 Simon Kimbangu\", \n                    logo: \"\", \n                    wins: 2, \n                    losses: 2, \n                    points: 6 \n                },\n                { \n                    name: \"ULK\", \n                    description: \"Universit\u00e9 Loyola du Congo\", \n                    logo: \"\", \n                    wins: 1, \n                    losses: 3, \n                    points: 3 \n                },\n                { \n                    name: \"UPN\", \n                    description: \"Universit\u00e9 Protestante au Nord\", \n                    logo: \"\", \n                    wins: 2, \n                    losses: 2, \n                    points: 6 \n                }\n            ];\n            \n            saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, defaultParticipants);\n            loadParticipants();\n            loadResults();\n            alert('\u2705 Participants par d\u00e9faut charg\u00e9s!');\n        }\n\n        function loadParticipants() {\n            const container = document.getElementById('participantsContainer');\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n\n            if (participants.length === 0) {\n                container.innerHTML = `\n                    <div style=\"grid-column: 1 \/ -1; text-align: center; padding: 40px; color: #666;\">\n                        <i class=\"fas fa-users\" style=\"font-size: 3rem; margin-bottom: 15px;\"><\/i>\n                        <h3 style=\"color: var(--dark); margin-bottom: 10px;\">Aucun participant<\/h3>\n                        <p>Ajoutez des participants pour commencer<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n\n            container.innerHTML = participants.map((participant, index) => `\n                <div class=\"participant-card\">\n                    <div class=\"participant-logo\">\n                        ${participant.logo ? \n                            `<img decoding=\"async\" src=\"${participant.logo}\" alt=\"${participant.name}\" onerror=\"this.parentElement.innerHTML='\ud83c\udfeb'\">` : \n                            '\ud83c\udfeb'\n                        }\n                    <\/div>\n                    <h4 style=\"text-align: center; color: var(--dark); margin-bottom: 10px;\">${participant.name}<\/h4>\n                    <p style=\"text-align: center; color: #666; font-size: 0.9rem; margin-bottom: 15px;\">\n                        ${participant.description || 'Aucune description'}\n                    <\/p>\n                    <div class=\"participant-stats\">\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.wins || 0}<\/div>\n                            <div class=\"stat-label\">Victoires<\/div>\n                        <\/div>\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.losses || 0}<\/div>\n                            <div class=\"stat-label\">D\u00e9faites<\/div>\n                        <\/div>\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.points || 0}<\/div>\n                            <div class=\"stat-label\">Points<\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"participant-actions\">\n                        <button class=\"btn btn-warning btn-sm\" onclick=\"showEditParticipantModal(${index})\" style=\"flex: 1;\">\n                            <i class=\"fas fa-edit\"><\/i> Modifier\n                        <\/button>\n                        <button class=\"btn btn-danger btn-sm\" onclick=\"removeParticipant(${index})\" style=\"flex: 1;\">\n                            <i class=\"fas fa-trash\"><\/i> Supprimer\n                        <\/button>\n                    <\/div>\n                <\/div>\n            `).join('');\n        }\n\n        function showAddParticipantModal() {\n            document.getElementById('newParticipantName').value = '';\n            document.getElementById('newParticipantDesc').value = '';\n            document.getElementById('newParticipantLogo').value = '';\n            showModal('addParticipantModal');\n        }\n\n        function addNewParticipant() {\n            const name = document.getElementById('newParticipantName').value;\n            const description = document.getElementById('newParticipantDesc').value;\n            const logo = document.getElementById('newParticipantLogo').value;\n\n            if (!name) {\n                alert('\u26a0\ufe0f Veuillez saisir le nom de l\\'universit\u00e9');\n                return;\n            }\n\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            \n            participants.push({ \n                name: name, \n                logo: logo, \n                description: description,\n                wins: 0,\n                losses: 0,\n                points: 0\n            });\n\n            saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, participants);\n            loadParticipants();\n            hideModal('addParticipantModal');\n            alert('\u2705 Participant ajout\u00e9!');\n        }\n\n        function showEditParticipantModal(index) {\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            const participant = participants[index];\n            \n            if (participant) {\n                document.getElementById('editParticipantIndex').value = index;\n                document.getElementById('editParticipantName').value = participant.name;\n                document.getElementById('editParticipantDesc').value = participant.description;\n                document.getElementById('editParticipantLogo').value = participant.logo || '';\n                showModal('editParticipantModal');\n            }\n        }\n\n        function saveParticipantEdit() {\n            const index = document.getElementById('editParticipantIndex').value;\n            const name = document.getElementById('editParticipantName').value;\n            const description = document.getElementById('editParticipantDesc').value;\n            const logo = document.getElementById('editParticipantLogo').value;\n\n            if (!name) {\n                alert('\u26a0\ufe0f Veuillez saisir le nom de l\\'universit\u00e9');\n                return;\n            }\n\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            participants[index] = { \n                ...participants[index],\n                name: name, \n                logo: logo, \n                description: description\n            };\n\n            saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, participants);\n            loadParticipants();\n            hideModal('editParticipantModal');\n            alert('\u2705 Participant modifi\u00e9!');\n        }\n\n        function removeParticipant(index) {\n            if (confirm('\u00cates-vous s\u00fbr de vouloir supprimer ce participant ?')) {\n                const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n                participants.splice(index, 1);\n                saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, participants);\n                loadParticipants();\n                loadResults();\n                alert('\u2705 Participant supprim\u00e9!');\n            }\n        }\n\n        \/\/ ==================== GESTION DES R\u00c9SULTATS ====================\n        function loadResults() {\n            const container = document.getElementById('resultsContainer');\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            \n            \/\/ Sort by points\n            const sortedParticipants = [...participants].sort((a, b) => (b.points || 0) - (a.points || 0));\n            \n            if (sortedParticipants.length === 0) {\n                container.innerHTML = `\n                    <div style=\"grid-column: 1 \/ -1; text-align: center; padding: 40px; color: #666;\">\n                        <i class=\"fas fa-trophy\" style=\"font-size: 3rem; margin-bottom: 15px;\"><\/i>\n                        <h3 style=\"color: var(--dark); margin-bottom: 10px;\">Aucun participant<\/h3>\n                        <p>Ajoutez des participants pour voir les r\u00e9sultats<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n\n            container.innerHTML = sortedParticipants.map((participant, index) => `\n                <div class=\"participant-card\">\n                    <div class=\"participant-logo\" style=\"${index < 3 ? 'border-color: gold;' : ''}\">\n                        ${participant.logo ? \n                            `<img decoding=\"async\" src=\"${participant.logo}\" alt=\"${participant.name}\" onerror=\"this.parentElement.innerHTML='${getMedalIcon(index)}'\">` : \n                            getMedalIcon(index)\n                        }\n                    <\/div>\n                    <h4 style=\"text-align: center; color: var(--dark); margin-bottom: 10px;\">\n                        ${index + 1}. ${participant.name}\n                    <\/h4>\n                    <div class=\"participant-stats\">\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.wins || 0}<\/div>\n                            <div class=\"stat-label\">Victoires<\/div>\n                        <\/div>\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.losses || 0}<\/div>\n                            <div class=\"stat-label\">D\u00e9faites<\/div>\n                        <\/div>\n                        <div class=\"stat\">\n                            <div class=\"stat-value\">${participant.points || 0}<\/div>\n                            <div class=\"stat-label\">Points<\/div>\n                        <\/div>\n                    <\/div>\n                    <div style=\"text-align: center; margin-top: 15px; color: #666; font-size: 0.9rem;\">\n                        ${getRankStatus(index)}\n                    <\/div>\n                <\/div>\n            `).join('');\n        }\n\n        function getMedalIcon(index) {\n            switch(index) {\n                case 0: return '\ud83e\udd47';\n                case 1: return '\ud83e\udd48';\n                case 2: return '\ud83e\udd49';\n                default: return '\ud83c\udfeb';\n            }\n        }\n\n        function getRankStatus(index) {\n            switch(index) {\n                case 0: return '\ud83c\udfc6 Champion';\n                case 1: return '\ud83e\udd48 Finaliste';\n                case 2: return '\ud83e\udd49 3\u00e8me Place';\n                default: return 'Participant';\n            }\n        }\n\n        function showSetResultsModal() {\n            const finalResults = getLocalStorage(STORAGE_KEYS.FINAL_RESULTS) || {};\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            \n            const select = document.getElementById('finalWinner');\n            select.innerHTML = '<option value=\"\">-- S\u00e9lectionner le vainqueur --<\/option>';\n            \n            participants.forEach(participant => {\n                select.innerHTML += `<option value=\"${participant.name}\" ${finalResults.winner === participant.name ? 'selected' : ''}>${participant.name}<\/option>`;\n            });\n            \n            document.getElementById('finalScore').value = finalResults.score || '';\n            document.getElementById('bestSpeaker').value = finalResults.bestSpeaker || '';\n            document.getElementById('finalTheme').value = finalResults.theme || '';\n            \n            showModal('setResultsModal');\n        }\n\n        function saveFinalResults() {\n            const winner = document.getElementById('finalWinner').value;\n            const score = document.getElementById('finalScore').value;\n            const bestSpeaker = document.getElementById('bestSpeaker').value;\n            const theme = document.getElementById('finalTheme').value;\n            \n            if (!winner) {\n                alert('\u26a0\ufe0f Veuillez s\u00e9lectionner un vainqueur');\n                return;\n            }\n            \n            if (!score) {\n                alert('\u26a0\ufe0f Veuillez entrer le score final');\n                return;\n            }\n            \n            const finalResults = {\n                winner: winner,\n                score: score,\n                bestSpeaker: bestSpeaker,\n                theme: theme,\n                date: new Date().toISOString().split('T')[0],\n                savedAt: new Date().toISOString()\n            };\n            \n            saveLocalStorage(STORAGE_KEYS.FINAL_RESULTS, finalResults);\n            \n            loadResults();\n            loadMatchResults();\n            hideModal('setResultsModal');\n            alert(`\u2705 R\u00e9sultats enregistr\u00e9s !\\nVainqueur: ${winner}\\nScore: ${score}`);\n        }\n\n        \/\/ ==================== GESTION DES MATCHS ====================\n        function loadMatchResults() {\n            const container = document.getElementById('matchResultsContainer');\n            const matchResults = getLocalStorage(STORAGE_KEYS.MATCH_RESULTS) || [];\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            \n            if (matchResults.length === 0) {\n                container.innerHTML = `\n                    <div style=\"grid-column: 1 \/ -1; text-align: center; padding: 40px; color: #666;\">\n                        <i class=\"fas fa-futbol\" style=\"font-size: 3rem; margin-bottom: 15px;\"><\/i>\n                        <h3 style=\"color: var(--dark); margin-bottom: 10px;\">Aucun r\u00e9sultat de match<\/h3>\n                        <p>Ajoutez des r\u00e9sultats de match manuellement<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n            \n            container.innerHTML = matchResults.map((match, index) => {\n                const phaseLabels = {\n                    'prelim': 'Phase Pr\u00e9liminaire',\n                    'quarters': 'Quarts de Finale',\n                    'semis': 'Demi-Finales',\n                    'final': 'Finale'\n                };\n                \n                const team1 = participants.find(p => p.name === match.team1) || { name: match.team1 };\n                const team2 = participants.find(p => p.name === match.team2) || { name: match.team2 };\n                \n                return `\n                    <div class=\"match-card\">\n                        <div class=\"match-header\">\n                            <div class=\"match-title\">Match ${index + 1}<\/div>\n                            <div class=\"match-phase\">${phaseLabels[match.phase] || match.phase}<\/div>\n                        <\/div>\n                        ${match.theme ? `<div class=\"match-theme\">${match.theme}<\/div>` : ''}\n                        <div class=\"match-teams\">\n                            <div class=\"team-select\">\n                                <strong>${team1.name}<\/strong>\n                                <div style=\"font-size: 0.9rem; color: #666;\">${team1.description || ''}<\/div>\n                            <\/div>\n                            <div class=\"vs\">VS<\/div>\n                            <div class=\"team-select\">\n                                <strong>${team2.name}<\/strong>\n                                <div style=\"font-size: 0.9rem; color: #666;\">${team2.description || ''}<\/div>\n                            <\/div>\n                        <\/div>\n                        <div style=\"text-align: center; margin: 15px 0;\">\n                            <div style=\"font-size: 2rem; font-weight: 700; color: var(--primary);\">\n                                ${match.score1 !== undefined ? match.score1 : '-'} - ${match.score2 !== undefined ? match.score2 : '-'}\n                            <\/div>\n                            <div style=\"margin-top: 5px; color: #666; font-size: 0.9rem;\">\n                                ${match.winner ? `Vainqueur: <strong>${match.winner}<\/strong>` : 'R\u00e9sultat en attente'}\n                            <\/div>\n                        <\/div>\n                        <div style=\"text-align: center; font-size: 0.8rem; color: #999;\">\n                            ${formatDateShort(match.date)}\n                        <\/div>\n                        <button class=\"btn btn-danger btn-sm\" onclick=\"deleteMatchResult(${index})\" style=\"width: 100%; margin-top: 10px;\">\n                            <i class=\"fas fa-trash\"><\/i> Supprimer\n                        <\/button>\n                    <\/div>\n                `;\n            }).join('');\n        }\n\n        function showAddMatchResultModal() {\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            const team1Select = document.getElementById('matchTeam1');\n            const team2Select = document.getElementById('matchTeam2');\n            \n            team1Select.innerHTML = '<option value=\"\">-- S\u00e9lectionner --<\/option>';\n            team2Select.innerHTML = '<option value=\"\">-- S\u00e9lectionner --<\/option>';\n            \n            participants.forEach(participant => {\n                const option = `<option value=\"${participant.name}\">${participant.name}<\/option>`;\n                team1Select.innerHTML += option;\n                team2Select.innerHTML += option;\n            });\n            \n            document.getElementById('matchScore1').value = '';\n            document.getElementById('matchScore2').value = '';\n            document.getElementById('matchDate').value = new Date().toISOString().split('T')[0];\n            document.getElementById('matchTheme').value = '';\n            \n            showModal('addMatchResultModal');\n        }\n\n        function saveMatchResult() {\n            const phase = document.getElementById('matchPhase').value;\n            const team1 = document.getElementById('matchTeam1').value;\n            const team2 = document.getElementById('matchTeam2').value;\n            const score1 = parseInt(document.getElementById('matchScore1').value) || 0;\n            const score2 = parseInt(document.getElementById('matchScore2').value) || 0;\n            const theme = document.getElementById('matchTheme').value;\n            const date = document.getElementById('matchDate').value;\n            \n            if (!team1 || !team2) {\n                alert('\u26a0\ufe0f Veuillez s\u00e9lectionner les deux \u00e9quipes');\n                return;\n            }\n            \n            if (team1 === team2) {\n                alert('\u26a0\ufe0f Les deux \u00e9quipes doivent \u00eatre diff\u00e9rentes');\n                return;\n            }\n            \n            \/\/ D\u00e9terminer le vainqueur\n            let winner = '';\n            if (score1 > score2) winner = team1;\n            else if (score2 > score1) winner = team2;\n            else winner = 'Match nul';\n            \n            \/\/ Mettre \u00e0 jour les statistiques des participants\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            \n            participants.forEach(p => {\n                if (p.name === team1) {\n                    if (winner === team1) {\n                        p.wins = (p.wins || 0) + 1;\n                        p.points = (p.points || 0) + 3;\n                    } else if (winner === team2) {\n                        p.losses = (p.losses || 0) + 1;\n                    } else if (winner === 'Match nul') {\n                        p.points = (p.points || 0) + 1;\n                    }\n                }\n                \n                if (p.name === team2) {\n                    if (winner === team2) {\n                        p.wins = (p.wins || 0) + 1;\n                        p.points = (p.points || 0) + 3;\n                    } else if (winner === team1) {\n                        p.losses = (p.losses || 0) + 1;\n                    } else if (winner === 'Match nul') {\n                        p.points = (p.points || 0) + 1;\n                    }\n                }\n            });\n            \n            saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, participants);\n            \n            \/\/ Sauvegarder le r\u00e9sultat du match\n            const matchResults = getLocalStorage(STORAGE_KEYS.MATCH_RESULTS) || [];\n            \n            matchResults.push({\n                id: 'match_' + Date.now(),\n                phase: phase,\n                team1: team1,\n                team2: team2,\n                score1: score1,\n                score2: score2,\n                winner: winner,\n                theme: theme,\n                date: date,\n                createdAt: new Date().toISOString()\n            });\n            \n            saveLocalStorage(STORAGE_KEYS.MATCH_RESULTS, matchResults);\n            \n            loadResults();\n            loadMatchResults();\n            hideModal('addMatchResultModal');\n            alert('\u2705 R\u00e9sultat de match enregistr\u00e9!');\n        }\n\n        function deleteMatchResult(index) {\n            if (confirm('\u00cates-vous s\u00fbr de vouloir supprimer ce r\u00e9sultat de match ?')) {\n                const matchResults = getLocalStorage(STORAGE_KEYS.MATCH_RESULTS) || [];\n                const match = matchResults[index];\n                \n                \/\/ Mettre \u00e0 jour les statistiques des participants (enlever les points)\n                const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n                \n                participants.forEach(p => {\n                    if (p.name === match.team1) {\n                        if (match.winner === match.team1) {\n                            p.wins = Math.max(0, (p.wins || 0) - 1);\n                            p.points = Math.max(0, (p.points || 0) - 3);\n                        } else if (match.winner === match.team2) {\n                            p.losses = Math.max(0, (p.losses || 0) - 1);\n                        } else if (match.winner === 'Match nul') {\n                            p.points = Math.max(0, (p.points || 0) - 1);\n                        }\n                    }\n                    \n                    if (p.name === match.team2) {\n                        if (match.winner === match.team2) {\n                            p.wins = Math.max(0, (p.wins || 0) - 1);\n                            p.points = Math.max(0, (p.points || 0) - 3);\n                        } else if (match.winner === match.team1) {\n                            p.losses = Math.max(0, (p.losses || 0) - 1);\n                        } else if (match.winner === 'Match nul') {\n                            p.points = Math.max(0, (p.points || 0) - 1);\n                        }\n                    }\n                });\n                \n                saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, participants);\n                matchResults.splice(index, 1);\n                saveLocalStorage(STORAGE_KEYS.MATCH_RESULTS, matchResults);\n                \n                loadResults();\n                loadMatchResults();\n                alert('\u2705 R\u00e9sultat de match supprim\u00e9!');\n            }\n        }\n\n        \/\/ ==================== GESTION DE LA GALERIE ====================\n        function loadGeneralGallery() {\n            const container = document.getElementById('generalGalleryContainer');\n            const galleryItems = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n            \n            if (galleryItems.length === 0) {\n                container.innerHTML = `\n                    <div style=\"grid-column: 1 \/ -1; text-align: center; padding: 40px; color: #666;\">\n                        <i class=\"fas fa-photo-video\" style=\"font-size: 3rem; margin-bottom: 15px;\"><\/i>\n                        <h3 style=\"color: var(--dark); margin-bottom: 10px;\">Galerie g\u00e9n\u00e9rale vide<\/h3>\n                        <p>Ajoutez des m\u00e9dias via le formulaire<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n            \n            container.innerHTML = galleryItems.map((item, index) => `\n                <div class=\"gallery-item\">\n                    ${item.type === 'photo' ? \n                        `<img decoding=\"async\" src=\"${item.url}\" alt=\"${item.title}\" onerror=\"this.src='data:image\/svg+xml;utf8,<svg xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" width=\\\"200\\\" height=\\\"150\\\" viewBox=\\\"0 0 200 150\\\"><rect width=\\\"200\\\" height=\\\"150\\\" fill=\\\"%23f0f0f0\\\"\/><text x=\\\"50%\\\" y=\\\"50%\\\" font-family=\\\"Arial\\\" font-size=\\\"14\\\" fill=\\\"%23666\\\" text-anchor=\\\"middle\\\" dy=\\\".3em\\\">Photo<\/text><\/svg>'\">` :\n                        `<div style=\"width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#2196f3;color:white;font-size:3rem;\">\n                            <i class=\"${item.type === 'youtube' ? 'fab fa-youtube' : 'fab fa-vimeo'}\"><\/i>\n                        <\/div>`\n                    }\n                    <div class=\"gallery-actions\">\n                        <button onclick=\"viewGalleryItem(${index})\" style=\"background:none;border:none;color:white;cursor:pointer;\">\n                            <i class=\"fas fa-eye\"><\/i>\n                        <\/button>\n                        <button onclick=\"deleteGalleryItem(${index})\" style=\"background:none;border:none;color:white;cursor:pointer;\">\n                            <i class=\"fas fa-trash\"><\/i>\n                        <\/button>\n                    <\/div>\n                    <div style=\"position:absolute;top:5px;left:5px;background:rgba(0,0,0,0.7);color:white;padding:2px 5px;border-radius:3px;font-size:0.7rem;\">\n                        ${item.phase || 'general'}\n                    <\/div>\n                <\/div>\n            `).join('');\n        }\n\n        function showAddGalleryItemModal() {\n            document.getElementById('modalMediaUrl').value = '';\n            document.getElementById('modalMediaTitle').value = '';\n            document.getElementById('modalMediaType').value = 'photo';\n            document.getElementById('modalMediaPhase').value = 'general';\n            showModal('addGalleryItemModal');\n        }\n\n        function addGalleryItem() {\n            const url = document.getElementById('galleryMediaUrl').value;\n            const title = document.getElementById('galleryMediaTitle').value;\n            const type = document.getElementById('galleryMediaType').value;\n            const phase = document.getElementById('galleryMediaPhase').value;\n            \n            if (!url) {\n                alert('\u26a0\ufe0f Veuillez entrer une URL pour le m\u00e9dia');\n                return;\n            }\n            \n            const galleryItems = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n            const newItem = {\n                id: 'gallery_' + Date.now(),\n                url: url,\n                title: title || 'M\u00e9dia sans titre',\n                type: type,\n                phase: phase,\n                addedAt: new Date().toISOString()\n            };\n            \n            galleryItems.push(newItem);\n            saveLocalStorage(STORAGE_KEYS.GALLERY, galleryItems);\n            \n            document.getElementById('galleryMediaUrl').value = '';\n            document.getElementById('galleryMediaTitle').value = '';\n            \n            loadGeneralGallery();\n            alert('\u2705 M\u00e9dia ajout\u00e9 \u00e0 la galerie g\u00e9n\u00e9rale!');\n        }\n\n        function addGalleryItemFromModal() {\n            const url = document.getElementById('modalMediaUrl').value;\n            const title = document.getElementById('modalMediaTitle').value;\n            const type = document.getElementById('modalMediaType').value;\n            const phase = document.getElementById('modalMediaPhase').value;\n            \n            if (!url) {\n                alert('\u26a0\ufe0f Veuillez entrer une URL pour le m\u00e9dia');\n                return;\n            }\n            \n            const galleryItems = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n            const newItem = {\n                id: 'gallery_' + Date.now(),\n                url: url,\n                title: title || 'M\u00e9dia sans titre',\n                type: type,\n                phase: phase,\n                addedAt: new Date().toISOString()\n            };\n            \n            galleryItems.push(newItem);\n            saveLocalStorage(STORAGE_KEYS.GALLERY, galleryItems);\n            \n            hideModal('addGalleryItemModal');\n            loadGeneralGallery();\n            alert('\u2705 M\u00e9dia ajout\u00e9 \u00e0 la galerie g\u00e9n\u00e9rale!');\n        }\n\n        function viewGalleryItem(index) {\n            const galleryItems = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n            const item = galleryItems[index];\n            \n            if (item) {\n                window.open(item.url, '_blank');\n            }\n        }\n\n        function deleteGalleryItem(index) {\n            if (confirm('Supprimer ce m\u00e9dia de la galerie g\u00e9n\u00e9rale ?')) {\n                const galleryItems = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n                galleryItems.splice(index, 1);\n                saveLocalStorage(STORAGE_KEYS.GALLERY, galleryItems);\n                loadGeneralGallery();\n                alert('\u2705 M\u00e9dia supprim\u00e9!');\n            }\n        }\n\n        \/\/ ==================== SAUVEGARDE DES DONN\u00c9ES ====================\n        function saveAllData() {\n            const competitionData = {\n                name: document.getElementById('competitionName').value,\n                year: document.getElementById('competitionYear').value,\n                status: document.getElementById('competitionStatus').value,\n                coverPhoto: document.getElementById('coverPhoto').value,\n                maxParticipants: document.getElementById('maxParticipants').value,\n                \n                themes: {\n                    prelim: document.getElementById('themePrelim').value,\n                    quarters: document.getElementById('themeQuarters').value,\n                    semis: document.getElementById('themeSemis').value,\n                    final: document.getElementById('themeFinal').value\n                },\n                dates: {\n                    prelim: document.getElementById('datePrelim').value,\n                    quarters: document.getElementById('dateQuarters').value,\n                    semis: document.getElementById('dateSemis').value,\n                    final: document.getElementById('dateFinal').value\n                },\n                descriptions: {\n                    prelim: document.getElementById('descPrelim').value,\n                    quarters: document.getElementById('descQuarters').value,\n                    semis: document.getElementById('descSemis').value,\n                    final: document.getElementById('descFinal').value\n                },\n                \n                gallery: {\n                    prelim: {\n                        photo: document.getElementById('photoPrelim').value,\n                        description: document.getElementById('descGalleryPrelim').value\n                    },\n                    quarters: {\n                        photo: document.getElementById('photoQuarters').value,\n                        description: document.getElementById('descGalleryQuarters').value\n                    },\n                    semis: {\n                        photo: document.getElementById('photoSemis').value,\n                        description: document.getElementById('descGallerySemis').value\n                    },\n                    final: {\n                        photo: document.getElementById('photoFinal').value,\n                        description: document.getElementById('descGalleryFinal').value\n                    }\n                },\n                \n                lastUpdate: new Date().toISOString()\n            };\n\n            saveLocalStorage(STORAGE_KEYS.COMPETITION, competitionData);\n            \n            const btn = event.target;\n            const originalText = btn.innerHTML;\n            btn.innerHTML = '<i class=\"fas fa-check\"><\/i> Sauvegard\u00e9 !';\n            btn.style.background = 'var(--success)';\n            \n            setTimeout(() => {\n                btn.innerHTML = originalText;\n                btn.style.background = '';\n            }, 2000);\n\n            alert('\u2705 Toutes les donn\u00e9es ont \u00e9t\u00e9 sauvegard\u00e9es!');\n        }\n\n        function loadSavedData() {\n            const savedData = getLocalStorage(STORAGE_KEYS.COMPETITION);\n            if (savedData) {\n                document.getElementById('competitionName').value = savedData.name || 'PROC\u00c8S FICTIFS EN DROIT DE L\\'ENVIRONNEMENT';\n                document.getElementById('competitionYear').value = savedData.year || '2025';\n                document.getElementById('competitionStatus').value = savedData.status || 'completed';\n                document.getElementById('coverPhoto').value = savedData.coverPhoto || '';\n                document.getElementById('maxParticipants').value = savedData.maxParticipants || 16;\n\n                if (savedData.themes) {\n                    document.getElementById('themePrelim').value = savedData.themes.prelim || '';\n                    document.getElementById('themeQuarters').value = savedData.themes.quarters || '';\n                    document.getElementById('themeSemis').value = savedData.themes.semis || '';\n                    document.getElementById('themeFinal').value = savedData.themes.final || '';\n                }\n\n                if (savedData.dates) {\n                    document.getElementById('datePrelim').value = savedData.dates.prelim || '';\n                    document.getElementById('dateQuarters').value = savedData.dates.quarters || '';\n                    document.getElementById('dateSemis').value = savedData.dates.semis || '';\n                    document.getElementById('dateFinal').value = savedData.dates.final || '';\n                }\n\n                if (savedData.descriptions) {\n                    document.getElementById('descPrelim').value = savedData.descriptions.prelim || '';\n                    document.getElementById('descQuarters').value = savedData.descriptions.quarters || '';\n                    document.getElementById('descSemis').value = savedData.descriptions.semis || '';\n                    document.getElementById('descFinal').value = savedData.descriptions.final || '';\n                }\n\n                if (savedData.gallery) {\n                    document.getElementById('photoPrelim').value = savedData.gallery.prelim?.photo || '';\n                    document.getElementById('photoQuarters').value = savedData.gallery.quarters?.photo || '';\n                    document.getElementById('photoSemis').value = savedData.gallery.semis?.photo || '';\n                    document.getElementById('photoFinal').value = savedData.gallery.final?.photo || '';\n                    \n                    document.getElementById('descGalleryPrelim').value = savedData.gallery.prelim?.description || '';\n                    document.getElementById('descGalleryQuarters').value = savedData.gallery.quarters?.description || '';\n                    document.getElementById('descGallerySemis').value = savedData.gallery.semis?.description || '';\n                    document.getElementById('descGalleryFinal').value = savedData.gallery.final?.description || '';\n                }\n            }\n        }\n\n        function loadTabData(tabId) {\n            switch(tabId) {\n                case 'participants':\n                    loadParticipants();\n                    break;\n                case 'results':\n                    loadResults();\n                    loadMatchResults();\n                    break;\n                case 'general-gallery':\n                    loadGeneralGallery();\n                    break;\n            }\n        }\n\n        \/\/ ==================== IMPORT\/EXPORT ====================\n        function exportData() {\n            const allData = {\n                competition: getLocalStorage(STORAGE_KEYS.COMPETITION),\n                participants: getLocalStorage(STORAGE_KEYS.PARTICIPANTS),\n                matchResults: getLocalStorage(STORAGE_KEYS.MATCH_RESULTS),\n                finalResults: getLocalStorage(STORAGE_KEYS.FINAL_RESULTS),\n                gallery: getLocalStorage(STORAGE_KEYS.GALLERY),\n                exportDate: new Date().toISOString()\n            };\n\n            const dataStr = JSON.stringify(allData, null, 2);\n            const dataBlob = new Blob([dataStr], { type: 'application\/json' });\n            const url = URL.createObjectURL(dataBlob);\n            const link = document.createElement('a');\n            link.href = url;\n            link.download = `proc\u00e8s-fictifs-${document.getElementById('competitionYear').value}-${new Date().toISOString().split('T')[0]}.json`;\n            link.click();\n            URL.revokeObjectURL(url);\n            \n            alert('\u2705 Donn\u00e9es export\u00e9es!');\n        }\n\n        function showImportModal() {\n            showModal('importModal');\n        }\n\n        function importData() {\n            const fileInput = document.getElementById('importFile');\n            const file = fileInput.files[0];\n\n            if (!file) {\n                alert('Veuillez s\u00e9lectionner un fichier');\n                return;\n            }\n\n            const reader = new FileReader();\n            reader.onload = function(e) {\n                try {\n                    const importedData = JSON.parse(e.target.result);\n                    \n                    if (importedData.competition) {\n                        saveLocalStorage(STORAGE_KEYS.COMPETITION, importedData.competition);\n                    }\n                    if (importedData.participants) {\n                        saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, importedData.participants);\n                    }\n                    if (importedData.matchResults) {\n                        saveLocalStorage(STORAGE_KEYS.MATCH_RESULTS, importedData.matchResults);\n                    }\n                    if (importedData.finalResults) {\n                        saveLocalStorage(STORAGE_KEYS.FINAL_RESULTS, importedData.finalResults);\n                    }\n                    if (importedData.gallery) {\n                        saveLocalStorage(STORAGE_KEYS.GALLERY, importedData.gallery);\n                    }\n                    \n                    hideModal('importModal');\n                    loadSavedData();\n                    loadParticipants();\n                    loadResults();\n                    loadMatchResults();\n                    loadGeneralGallery();\n                    alert('\u2705 Donn\u00e9es import\u00e9es!');\n                } catch (error) {\n                    alert('\u274c Erreur lors de l\\'importation: ' + error.message);\n                }\n            };\n            reader.readAsText(file);\n        }\n\n        function confirmReset() {\n            if (confirm('ATTENTION: R\u00e9initialiser toutes les donn\u00e9es ?')) {\n                localStorage.clear();\n                loadSavedData();\n                loadParticipants();\n                loadResults();\n                loadMatchResults();\n                loadGeneralGallery();\n                alert('\u2705 Donn\u00e9es r\u00e9initialis\u00e9es!');\n            }\n        }\n\n        \/\/ ==================== UTILITAIRES ====================\n        function formatDateShort(dateString) {\n            if (!dateString) return '';\n            const date = new Date(dateString);\n            return date.toLocaleDateString('fr-FR', {\n                day: 'numeric',\n                month: 'short'\n            });\n        }\n\n        function handlePhotoUpload(event) {\n            const files = event.target.files;\n            alert(`${files.length} photo(s) s\u00e9lectionn\u00e9e(s). Dans un environnement WordPress r\u00e9el, ces images seraient upload\u00e9es vers votre biblioth\u00e8que m\u00e9dia.`);\n        }\n\n        function createNewEdition() {\n            const currentYear = document.getElementById('competitionYear').value;\n            const newYear = prompt('Entrez l\\'ann\u00e9e de la nouvelle \u00e9dition:', parseInt(currentYear) + 1);\n            \n            if (newYear && confirm(`Cr\u00e9er une nouvelle \u00e9dition pour ${newYear} ?`)) {\n                document.getElementById('competitionYear').value = newYear;\n                document.getElementById('competitionStatus').value = 'upcoming';\n                \n                \/\/ R\u00e9initialiser les participants\n                const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n                const newParticipants = participants.map(p => ({\n                    ...p,\n                    wins: 0,\n                    losses: 0,\n                    points: 0\n                }));\n                saveLocalStorage(STORAGE_KEYS.PARTICIPANTS, newParticipants);\n                \n                \/\/ R\u00e9initialiser les r\u00e9sultats\n                saveLocalStorage(STORAGE_KEYS.MATCH_RESULTS, []);\n                saveLocalStorage(STORAGE_KEYS.FINAL_RESULTS, {});\n                \n                \/\/ Mettre \u00e0 jour les dates\n                const nextYear = parseInt(newYear);\n                document.getElementById('datePrelim').value = `${nextYear}-11-17`;\n                document.getElementById('dateQuarters').value = `${nextYear}-11-24`;\n                document.getElementById('dateSemis').value = `${nextYear}-11-28`;\n                document.getElementById('dateFinal').value = `${nextYear}-12-02`;\n                \n                saveAllData();\n                \n                loadParticipants();\n                loadResults();\n                loadMatchResults();\n                loadGeneralGallery();\n                \n                alert(`\u2705 Nouvelle \u00e9dition ${newYear} cr\u00e9\u00e9e !`);\n            }\n        }\n\n        function switchCompetition() {\n            const selected = document.getElementById('competitionSelector').value;\n            if (selected === 'current') {\n                loadSavedData();\n            } else {\n                alert(`Chargement de l'archive ${selected}...`);\n            }\n        }\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Phases de la Comp\u00e9tition &#8211; Proc\u00e8s Fictifs<\/title>\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0\/css\/all.min.css\" rel=\"stylesheet\">\n    <style>\n        :root {\n            --primary: #2e7d32;\n            --primary-light: #4caf50;\n            --primary-dark: #1b5e20;\n            --secondary: #2196f3;\n            --accent: #ff9800;\n            --dark: #1a1a1a;\n            --light: #f8f9fa;\n            --gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n        }\n\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        }\n\n        body {\n            background: var(--gradient);\n            min-height: 100vh;\n            padding: 20px;\n        }\n\n        .phases-system {\n            max-width: 1200px;\n            margin: 0 auto;\n            background: white;\n            border-radius: 20px;\n            overflow: hidden;\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n        }\n\n        .phases-header {\n            background: linear-gradient(135deg, #1b5e20, #2e7d32);\n            color: white;\n            padding: 25px;\n            text-align: center;\n        }\n\n        .phases-header h1 {\n            font-size: 2.2rem;\n            margin-bottom: 10px;\n        }\n\n        \/* Status Indicator *\/\n        .data-status {\n            margin: 15px 0;\n            padding: 10px;\n            border-radius: 10px;\n            font-size: 0.9rem;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 10px;\n        }\n\n        .status-loading {\n            background: rgba(255, 193, 7, 0.2);\n            color: #ff9800;\n        }\n\n        .status-success {\n            background: rgba(76, 175, 80, 0.2);\n            color: #4caf50;\n        }\n\n        .status-error {\n            background: rgba(244, 67, 54, 0.2);\n            color: #f44336;\n        }\n\n        .phases-nav {\n            display: flex;\n            justify-content: center;\n            gap: 10px;\n            margin-top: 20px;\n            flex-wrap: wrap;\n        }\n\n        .phase-nav-btn {\n            background: rgba(255, 255, 255, 0.1);\n            border: 2px solid rgba(255, 255, 255, 0.3);\n            color: white;\n            padding: 12px 24px;\n            border-radius: 50px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .phase-nav-btn:hover {\n            background: rgba(255, 255, 255, 0.2);\n            transform: translateY(-2px);\n        }\n\n        .phase-nav-btn.active {\n            background: white;\n            color: var(--primary);\n            border-color: white;\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);\n        }\n\n        .phase-nav-btn.completed {\n            background: rgba(76, 175, 80, 0.3);\n            border-color: #4caf50;\n        }\n\n        .phase-nav-btn.current {\n            background: rgba(255, 152, 0, 0.3);\n            border-color: #ff9800;\n            animation: pulse 2s infinite;\n        }\n\n        @keyframes pulse {\n            0% { box-shadow: 0 0 0 0 rgba(255, 152, 0, 0.4); }\n            70% { box-shadow: 0 0 0 10px rgba(255, 152, 0, 0); }\n            100% { box-shadow: 0 0 0 0 rgba(255, 152, 0, 0); }\n        }\n\n        .phases-content {\n            padding: 30px;\n            min-height: 500px;\n        }\n\n        .phase-content {\n            display: none;\n            animation: fadeIn 0.5s ease;\n        }\n\n        .phase-content.active {\n            display: block;\n        }\n\n        @keyframes fadeIn {\n            from { opacity: 0; transform: translateY(10px); }\n            to { opacity: 1; transform: translateY(0); }\n        }\n\n        .phase-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 30px;\n            padding-bottom: 15px;\n            border-bottom: 3px solid var(--primary-light);\n        }\n\n        .phase-title-section {\n            display: flex;\n            align-items: center;\n            gap: 15px;\n        }\n\n        .phase-icon {\n            font-size: 2.5rem;\n        }\n\n        .phase-info h2 {\n            color: var(--primary);\n            font-size: 1.8rem;\n            margin-bottom: 5px;\n        }\n\n        .phase-date {\n            color: #666;\n            font-size: 1rem;\n        }\n\n        .phase-theme-display {\n            background: var(--secondary);\n            color: white;\n            padding: 5px 15px;\n            border-radius: 20px;\n            font-size: 0.9rem;\n            margin-top: 5px;\n            display: inline-block;\n        }\n\n        .phase-status {\n            padding: 8px 20px;\n            border-radius: 50px;\n            font-weight: 600;\n            font-size: 0.9rem;\n        }\n\n        .status-completed {\n            background: #e8f5e8;\n            color: #2e7d32;\n        }\n\n        .status-current {\n            background: #fff3e0;\n            color: #ff9800;\n        }\n\n        .status-upcoming {\n            background: #e3f2fd;\n            color: #2196f3;\n        }\n\n        \/* Phase Content *\/\n        .phase-description {\n            background: var(--light);\n            padding: 20px;\n            border-radius: 12px;\n            margin-bottom: 30px;\n            border-left: 4px solid var(--primary);\n        }\n\n        .rencontres-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n            gap: 25px;\n            margin-bottom: 40px;\n        }\n\n        .rencontre-card {\n            background: white;\n            border-radius: 15px;\n            overflow: hidden;\n            box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);\n            transition: all 0.3s ease;\n            position: relative;\n        }\n\n        .rencontre-card:hover {\n            transform: translateY(-5px);\n            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.15);\n        }\n\n        .rencontre-card.prelim {\n            border-top: 5px solid #4caf50;\n        }\n\n        .rencontre-card.quarters {\n            border-top: 5px solid #2196f3;\n        }\n\n        .rencontre-card.semis {\n            border-top: 5px solid #ff9800;\n        }\n\n        .rencontre-card.final {\n            border-top: 5px solid #f44336;\n        }\n\n        .rencontre-header {\n            padding: 20px;\n            background: var(--light);\n            border-bottom: 1px solid #e9ecef;\n        }\n\n        .rencontre-match-id {\n            font-size: 0.9rem;\n            color: #666;\n            margin-bottom: 5px;\n        }\n\n        .rencontre-title {\n            font-size: 1.2rem;\n            font-weight: 600;\n            color: var(--dark);\n        }\n\n        .rencontre-theme {\n            font-size: 0.9rem;\n            color: #666;\n            background: #f0f0f0;\n            padding: 3px 8px;\n            border-radius: 4px;\n            display: inline-block;\n            margin-top: 5px;\n        }\n\n        .rencontre-content {\n            padding: 20px;\n        }\n\n        .rencontre-teams {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 15px;\n        }\n\n        .team {\n            text-align: center;\n            flex: 1;\n        }\n\n        .team-name {\n            font-weight: 600;\n            font-size: 1.1rem;\n            color: var(--dark);\n        }\n\n        .team-score {\n            font-size: 1.8rem;\n            font-weight: 700;\n            color: var(--primary);\n            margin-top: 5px;\n        }\n\n        .vs {\n            font-size: 1.5rem;\n            font-weight: 700;\n            color: var(--accent);\n            margin: 0 15px;\n        }\n\n        .rencontre-result {\n            text-align: center;\n            margin-top: 15px;\n            padding: 10px;\n            border-radius: 8px;\n            font-weight: 600;\n        }\n\n        .winner {\n            color: #2e7d32;\n            background: #e8f5e8;\n            border: 2px solid #4caf50;\n        }\n\n        .draw {\n            color: #ff9800;\n            background: #fff3e0;\n            border: 2px solid #ff9800;\n        }\n\n        .pending {\n            color: #666;\n            background: #f5f5f5;\n            border: 2px dashed #ddd;\n        }\n\n        .rencontre-info {\n            display: flex;\n            justify-content: space-between;\n            margin-top: 15px;\n            padding-top: 15px;\n            border-top: 1px solid #eee;\n            font-size: 0.9rem;\n            color: #666;\n        }\n\n        .rencontre-date {\n            display: flex;\n            align-items: center;\n            gap: 5px;\n        }\n\n        .rencontre-location {\n            display: flex;\n            align-items: center;\n            gap: 5px;\n        }\n\n        \/* Phase Media *\/\n        .phase-media {\n            margin-top: 40px;\n        }\n\n        .media-section {\n            margin-top: 20px;\n        }\n\n        .media-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n            gap: 15px;\n            margin-top: 15px;\n        }\n\n        .media-item {\n            background: white;\n            border-radius: 10px;\n            overflow: hidden;\n            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n            transition: transform 0.3s ease;\n        }\n\n        .media-item:hover {\n            transform: scale(1.03);\n        }\n\n        .media-preview {\n            height: 150px;\n            background: #f5f5f5;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: hidden;\n        }\n\n        .media-preview img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n        }\n\n        .media-caption {\n            padding: 10px;\n            font-size: 0.9rem;\n            color: #666;\n            text-align: center;\n        }\n\n        \/* Quick Gallery *\/\n        .quick-gallery {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n            gap: 10px;\n            margin-top: 20px;\n        }\n\n        .quick-gallery-item {\n            border-radius: 8px;\n            overflow: hidden;\n            height: 120px;\n            cursor: pointer;\n        }\n\n        .quick-gallery-item img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.3s ease;\n        }\n\n        .quick-gallery-item:hover img {\n            transform: scale(1.1);\n        }\n\n        \/* Empty State *\/\n        .empty-state {\n            text-align: center;\n            padding: 60px 20px;\n            color: #666;\n            background: #f8f9fa;\n            border-radius: 15px;\n            margin: 20px 0;\n        }\n\n        .empty-state i {\n            font-size: 4rem;\n            margin-bottom: 20px;\n            color: #ccc;\n        }\n\n        .empty-state h3 {\n            color: var(--dark);\n            margin-bottom: 10px;\n        }\n\n        \/* Progress Bar *\/\n        .phase-progress {\n            width: 100%;\n            height: 8px;\n            background: #e9ecef;\n            border-radius: 4px;\n            margin: 20px 0 30px;\n            overflow: hidden;\n        }\n\n        .progress-fill {\n            height: 100%;\n            background: var(--primary);\n            border-radius: 4px;\n            transition: width 0.5s ease;\n        }\n\n        \/* Responsive *\/\n        @media (max-width: 768px) {\n            .phases-nav {\n                flex-direction: column;\n                align-items: stretch;\n            }\n            \n            .phase-nav-btn {\n                justify-content: center;\n            }\n            \n            .rencontres-grid {\n                grid-template-columns: 1fr;\n            }\n            \n            .rencontre-teams {\n                flex-direction: column;\n                gap: 15px;\n            }\n            \n            .vs {\n                margin: 10px 0;\n            }\n            \n            .media-grid {\n                grid-template-columns: 1fr;\n            }\n            \n            .phase-header {\n                flex-direction: column;\n                gap: 15px;\n                align-items: flex-start;\n            }\n            \n            .quick-gallery {\n                grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"phases-system\">\n        <div class=\"phases-header\">\n            <h1>\ud83d\udcca PHASES DE LA COMP\u00c9TITION<\/h1>\n            \n            <!-- Data Status Indicator -->\n            <div id=\"dataStatus\" class=\"data-status status-loading\">\n                <i class=\"fas fa-sync-alt fa-spin\"><\/i>\n                <span>Chargement des donn\u00e9es&#8230;<\/span>\n            <\/div>\n            \n            <div id=\"competition-title\" class=\"competition-title\">\n                <p>Proc\u00e8s Fictifs en Droit de l&rsquo;Environnement<\/p>\n            <\/div>\n            \n            <div class=\"phases-nav\">\n                <button class=\"phase-nav-btn\" data-phase=\"prelim\">\n                    <i class=\"fas fa-flag\"><\/i> Pr\u00e9liminaires\n                <\/button>\n                <button class=\"phase-nav-btn\" data-phase=\"quarters\">\n                    <i class=\"fas fa-bolt\"><\/i> Quarts de Finale\n                <\/button>\n                <button class=\"phase-nav-btn\" data-phase=\"semis\">\n                    <i class=\"fas fa-fire\"><\/i> Demi-Finales\n                <\/button>\n                <button class=\"phase-nav-btn\" data-phase=\"final\">\n                    <i class=\"fas fa-trophy\"><\/i> Finale\n                <\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"phases-content\">\n            <!-- Phase Pr\u00e9liminaire -->\n            <div id=\"phase-prelim\" class=\"phase-content\">\n                <div class=\"phase-header\">\n                    <div class=\"phase-title-section\">\n                        <div class=\"phase-icon\">\ud83c\udfaf<\/div>\n                        <div class=\"phase-info\">\n                            <h2>Phase Pr\u00e9liminaire<\/h2>\n                            <div class=\"phase-date\" id=\"prelim-date\">Date \u00e0 d\u00e9finir<\/div>\n                            <div class=\"phase-theme-display\" id=\"prelim-theme\">Th\u00e8me \u00e0 d\u00e9finir<\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"phase-status status-upcoming\">\u00c0 Venir<\/div>\n                <\/div>\n\n                <div class=\"phase-description\">\n                    <h3 id=\"prelim-description\">Phase de qualification<\/h3>\n                    <p>Chaque universit\u00e9 s&rsquo;affronte dans son groupe. Les meilleures \u00e9quipes se qualifient pour la phase suivante.<\/p>\n                <\/div>\n\n                <div class=\"phase-progress\">\n                    <div class=\"progress-fill\" id=\"prelim-progress\"><\/div>\n                <\/div>\n\n                <div id=\"prelim-matches\" class=\"rencontres-grid\">\n                    <!-- Les matchs pr\u00e9liminaires seront charg\u00e9s ici -->\n                <\/div>\n\n                <div class=\"phase-media\" id=\"prelim-media\">\n                    <!-- Les m\u00e9dias pr\u00e9liminaires seront charg\u00e9s ici -->\n                <\/div>\n            <\/div>\n\n            <!-- Quarts de Finale -->\n            <div id=\"phase-quarters\" class=\"phase-content\">\n                <div class=\"phase-header\">\n                    <div class=\"phase-title-section\">\n                        <div class=\"phase-icon\">\u26a1<\/div>\n                        <div class=\"phase-info\">\n                            <h2>Quarts de Finale<\/h2>\n                            <div class=\"phase-date\" id=\"quarters-date\">Date \u00e0 d\u00e9finir<\/div>\n                            <div class=\"phase-theme-display\" id=\"quarters-theme\">Th\u00e8me \u00e0 d\u00e9finir<\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"phase-status status-upcoming\">\u00c0 Venir<\/div>\n                <\/div>\n\n                <div class=\"phase-description\">\n                    <h3 id=\"quarters-description\">Phase \u00e9liminatoire<\/h3>\n                    <p>Les \u00e9quipes qualifi\u00e9es s&rsquo;affrontent en matchs directs. Les vainqueurs acc\u00e8dent aux demi-finales.<\/p>\n                <\/div>\n\n                <div class=\"phase-progress\">\n                    <div class=\"progress-fill\" id=\"quarters-progress\"><\/div>\n                <\/div>\n\n                <div id=\"quarters-matches\" class=\"rencontres-grid\">\n                    <!-- Les quarts de finale seront charg\u00e9s ici -->\n                <\/div>\n\n                <div class=\"phase-media\" id=\"quarters-media\">\n                    <!-- Les m\u00e9dias des quarts seront charg\u00e9s ici -->\n                <\/div>\n            <\/div>\n\n            <!-- Demi-Finales -->\n            <div id=\"phase-semis\" class=\"phase-content\">\n                <div class=\"phase-header\">\n                    <div class=\"phase-title-section\">\n                        <div class=\"phase-icon\">\ud83d\udd25<\/div>\n                        <div class=\"phase-info\">\n                            <h2>Demi-Finales<\/h2>\n                            <div class=\"phase-date\" id=\"semis-date\">Date \u00e0 d\u00e9finir<\/div>\n                            <div class=\"phase-theme-display\" id=\"semis-theme\">Th\u00e8me \u00e0 d\u00e9finir<\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"phase-status status-upcoming\">\u00c0 Venir<\/div>\n                <\/div>\n\n                <div class=\"phase-description\">\n                    <h3 id=\"semis-description\">Finale \u00e0 quatre<\/h3>\n                    <p>Les 4 meilleures \u00e9quipes se disputent une place en finale.<\/p>\n                <\/div>\n\n                <div class=\"phase-progress\">\n                    <div class=\"progress-fill\" id=\"semis-progress\"><\/div>\n                <\/div>\n\n                <div id=\"semis-matches\" class=\"rencontres-grid\">\n                    <!-- Les demi-finales seront charg\u00e9es ici -->\n                <\/div>\n\n                <div class=\"phase-media\" id=\"semis-media\">\n                    <!-- Les m\u00e9dias des demis seront charg\u00e9s ici -->\n                <\/div>\n            <\/div>\n\n            <!-- Finale -->\n            <div id=\"phase-final\" class=\"phase-content\">\n                <div class=\"phase-header\">\n                    <div class=\"phase-title-section\">\n                        <div class=\"phase-icon\">\ud83c\udfc6<\/div>\n                        <div class=\"phase-info\">\n                            <h2>Grande Finale<\/h2>\n                            <div class=\"phase-date\" id=\"final-date\">Date \u00e0 d\u00e9finir<\/div>\n                            <div class=\"phase-theme-display\" id=\"final-theme\">Th\u00e8me \u00e0 d\u00e9finir<\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"phase-status status-upcoming\">\u00c0 Venir<\/div>\n                <\/div>\n\n                <div class=\"phase-description\">\n                    <h3 id=\"final-description\">Le Clash Ultime<\/h3>\n                    <p>Les deux meilleures \u00e9quipes s&rsquo;affrontent pour le titre de champion.<\/p>\n                <\/div>\n\n                <div class=\"phase-progress\">\n                    <div class=\"progress-fill\" id=\"final-progress\"><\/div>\n                <\/div>\n\n                <div id=\"final-matches\" class=\"rencontres-grid\">\n                    <!-- La finale sera charg\u00e9e ici -->\n                <\/div>\n\n                <div class=\"phase-media\" id=\"final-media\">\n                    <!-- Les m\u00e9dias de la finale seront charg\u00e9s ici -->\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ ==================== CONFIGURATION ====================\n        const STORAGE_KEYS = {\n            COMPETITION: 'proc\u00e8s_competition',\n            PARTICIPANTS: 'proc\u00e8s_participants',\n            MATCH_RESULTS: 'proc\u00e8s_match_results',\n            FINAL_RESULTS: 'proc\u00e8s_final_results',\n            GALLERY: 'proc\u00e8s_general_gallery'\n        };\n\n        \/\/ Configuration par d\u00e9faut des phases\n        let phasesConfig = {\n            prelim: {\n                title: \"Phase Pr\u00e9liminaire\",\n                icon: \"\ud83c\udfaf\",\n                date: \"Date \u00e0 d\u00e9finir\",\n                theme: \"Th\u00e8me \u00e0 d\u00e9finir\",\n                description: \"Phase de qualification\",\n                status: \"upcoming\"\n            },\n            quarters: {\n                title: \"Quarts de Finale\",\n                icon: \"\u26a1\",\n                date: \"Date \u00e0 d\u00e9finir\",\n                theme: \"Th\u00e8me \u00e0 d\u00e9finir\",\n                description: \"Phase \u00e9liminatoire\",\n                status: \"upcoming\"\n            },\n            semis: {\n                title: \"Demi-Finales\",\n                icon: \"\ud83d\udd25\",\n                date: \"Date \u00e0 d\u00e9finir\",\n                theme: \"Th\u00e8me \u00e0 d\u00e9finir\",\n                description: \"Finale \u00e0 quatre\",\n                status: \"upcoming\"\n            },\n            final: {\n                title: \"Grande Finale\",\n                icon: \"\ud83c\udfc6\",\n                date: \"Date \u00e0 d\u00e9finir\",\n                theme: \"Th\u00e8me \u00e0 d\u00e9finir\",\n                description: \"Le Clash Ultime\",\n                status: \"upcoming\"\n            }\n        };\n\n        \/\/ ==================== FONCTIONS DE BASE ====================\n        function updateDataStatus(status, message) {\n            const statusDiv = document.getElementById('dataStatus');\n            statusDiv.className = `data-status status-${status}`;\n            \n            let icon = '';\n            switch(status) {\n                case 'loading':\n                    icon = '<i class=\"fas fa-sync-alt fa-spin\"><\/i>';\n                    break;\n                case 'success':\n                    icon = '<i class=\"fas fa-check-circle\"><\/i>';\n                    break;\n                case 'error':\n                    icon = '<i class=\"fas fa-exclamation-triangle\"><\/i>';\n                    break;\n            }\n            \n            statusDiv.innerHTML = `${icon} <span>${message}<\/span>`;\n        }\n\n        function getLocalStorage(key) {\n            try {\n                const data = localStorage.getItem(key);\n                return data ? JSON.parse(data) : null;\n            } catch (error) {\n                console.error(`Erreur de lecture (${key}):`, error);\n                return null;\n            }\n        }\n\n        function setLocalStorage(key, data) {\n            try {\n                localStorage.setItem(key, JSON.stringify(data));\n                return true;\n            } catch (error) {\n                console.error(`Erreur d'\u00e9criture (${key}):`, error);\n                return false;\n            }\n        }\n\n        \/\/ ==================== SYNCHRONISATION DES DONN\u00c9ES ====================\n        async function loadDataFromServer() {\n            updateDataStatus('loading', 'Chargement des donn\u00e9es...');\n            \n            try {\n                \/\/ Dans un vrai syst\u00e8me WordPress, on ferait un appel AJAX\n                \/\/ Pour l'instant, on simule avec le localStorage\n                \n                \/\/ Essayer de r\u00e9cup\u00e9rer les donn\u00e9es depuis le serveur (simul\u00e9)\n                const serverData = await simulateServerRequest();\n                \n                if (serverData) {\n                    \/\/ Sauvegarder dans le localStorage local\n                    Object.keys(serverData).forEach(key => {\n                        setLocalStorage(key, serverData[key]);\n                    });\n                    \n                    updateDataStatus('success', 'Donn\u00e9es charg\u00e9es avec succ\u00e8s');\n                    return true;\n                } else {\n                    \/\/ Si pas de donn\u00e9es serveur, utiliser le localStorage local\n                    const localData = loadLocalData();\n                    if (localData) {\n                        updateDataStatus('success', 'Donn\u00e9es locales charg\u00e9es');\n                        return true;\n                    } else {\n                        updateDataStatus('error', 'Aucune donn\u00e9e disponible');\n                        return false;\n                    }\n                }\n            } catch (error) {\n                console.error('Erreur de chargement:', error);\n                updateDataStatus('error', 'Erreur de chargement');\n                return false;\n            }\n        }\n\n        function loadLocalData() {\n            \/\/ V\u00e9rifier si des donn\u00e9es existent dans le localStorage\n            const hasData = Object.values(STORAGE_KEYS).some(key => {\n                return getLocalStorage(key) !== null;\n            });\n            \n            return hasData;\n        }\n\n        async function simulateServerRequest() {\n            \/\/ Simulation d'une requ\u00eate serveur\n            return new Promise(resolve => {\n                setTimeout(() => {\n                    \/\/ Dans la vraie version, on ferait un fetch() vers une API WordPress\n                    \/\/ Pour l'instant, on retourne null pour simuler l'absence de serveur\n                    resolve(null);\n                }, 1000);\n            });\n        }\n\n        \/\/ ==================== CHARGEMENT DES DONN\u00c9ES ====================\n        function loadCompetitionData() {\n            \/\/ Charger toutes les donn\u00e9es du Bloc 1\n            const competitionData = getLocalStorage(STORAGE_KEYS.COMPETITION);\n            const matchResults = getLocalStorage(STORAGE_KEYS.MATCH_RESULTS) || [];\n            const participants = getLocalStorage(STORAGE_KEYS.PARTICIPANTS) || [];\n            const finalResults = getLocalStorage(STORAGE_KEYS.FINAL_RESULTS) || {};\n            const gallery = getLocalStorage(STORAGE_KEYS.GALLERY) || [];\n            \n            \/\/ Mettre \u00e0 jour la configuration avec les donn\u00e9es du Bloc 1\n            updatePhasesConfig(competitionData, finalResults);\n            \n            \/\/ Charger les donn\u00e9es dans toutes les phases\n            ['prelim', 'quarters', 'semis', 'final'].forEach(phaseId => {\n                const phaseMatches = matchResults.filter(match => match.phase === phaseId);\n                loadPhaseMatches(phaseId, phaseMatches, participants);\n                loadPhaseMedia(phaseId, competitionData, gallery);\n                updatePhaseProgress(phaseId, phaseMatches);\n                updateNavButtons(phaseId, phaseMatches);\n            });\n            \n            \/\/ Mettre \u00e0 jour les boutons de navigation\n            updateNavButtonsFromConfig();\n            \n            \/\/ Mettre \u00e0 jour le titre de la comp\u00e9tition\n            if (competitionData && competitionData.name && competitionData.year) {\n                document.getElementById('competition-title').innerHTML = `\n                    <p>${competitionData.name} - \u00c9dition ${competitionData.year}<\/p>\n                `;\n            }\n        }\n\n        \/\/ Mettre \u00e0 jour la configuration des phases depuis le Bloc 1\n        function updatePhasesConfig(competitionData, finalResults) {\n            if (!competitionData) return;\n            \n            \/\/ Mettre \u00e0 jour les th\u00e8mes\n            if (competitionData.themes) {\n                phasesConfig.prelim.theme = competitionData.themes.prelim || phasesConfig.prelim.theme;\n                phasesConfig.quarters.theme = competitionData.themes.quarters || phasesConfig.quarters.theme;\n                phasesConfig.semis.theme = competitionData.themes.semis || phasesConfig.semis.theme;\n                phasesConfig.final.theme = competitionData.themes.final || phasesConfig.final.theme;\n            }\n            \n            \/\/ Mettre \u00e0 jour les dates\n            if (competitionData.dates) {\n                phasesConfig.prelim.date = formatDateForDisplay(competitionData.dates.prelim) || phasesConfig.prelim.date;\n                phasesConfig.quarters.date = formatDateForDisplay(competitionData.dates.quarters) || phasesConfig.quarters.date;\n                phasesConfig.semis.date = formatDateForDisplay(competitionData.dates.semis) || phasesConfig.semis.date;\n                phasesConfig.final.date = formatDateForDisplay(competitionData.dates.final) || phasesConfig.final.date;\n            }\n            \n            \/\/ Mettre \u00e0 jour les descriptions\n            if (competitionData.descriptions) {\n                phasesConfig.prelim.description = competitionData.descriptions.prelim || phasesConfig.prelim.description;\n                phasesConfig.quarters.description = competitionData.descriptions.quarters || phasesConfig.quarters.description;\n                phasesConfig.semis.description = competitionData.descriptions.semis || phasesConfig.semis.description;\n                phasesConfig.final.description = competitionData.descriptions.final || phasesConfig.final.description;\n            }\n            \n            \/\/ Mettre \u00e0 jour le statut si la finale est termin\u00e9e\n            if (finalResults.winner) {\n                phasesConfig.final.status = 'completed';\n                phasesConfig.final.theme = finalResults.theme || phasesConfig.final.theme;\n            }\n            \n            \/\/ Mettre \u00e0 jour le statut g\u00e9n\u00e9ral de la comp\u00e9tition\n            if (competitionData.status === 'completed') {\n                phasesConfig.final.status = 'completed';\n                phasesConfig.semis.status = 'completed';\n                phasesConfig.quarters.status = 'completed';\n                phasesConfig.prelim.status = 'completed';\n            } else if (competitionData.status === 'active') {\n                phasesConfig.final.status = 'current';\n            }\n            \n            \/\/ Mettre \u00e0 jour les \u00e9l\u00e9ments d'affichage\n            updatePhaseDisplayElements();\n            \n            \/\/ Mettre \u00e0 jour les boutons de navigation\n            updateNavButtonsFromConfig();\n        }\n\n        \/\/ Mettre \u00e0 jour les \u00e9l\u00e9ments d'affichage\n        function updatePhaseDisplayElements() {\n            \/\/ Mettre \u00e0 jour les dates\n            document.getElementById('prelim-date').textContent = phasesConfig.prelim.date;\n            document.getElementById('quarters-date').textContent = phasesConfig.quarters.date;\n            document.getElementById('semis-date').textContent = phasesConfig.semis.date;\n            document.getElementById('final-date').textContent = phasesConfig.final.date;\n            \n            \/\/ Mettre \u00e0 jour les th\u00e8mes\n            document.getElementById('prelim-theme').textContent = phasesConfig.prelim.theme;\n            document.getElementById('quarters-theme').textContent = phasesConfig.quarters.theme;\n            document.getElementById('semis-theme').textContent = phasesConfig.semis.theme;\n            document.getElementById('final-theme').textContent = phasesConfig.final.theme;\n            \n            \/\/ Mettre \u00e0 jour les descriptions\n            document.getElementById('prelim-description').textContent = phasesConfig.prelim.description;\n            document.getElementById('quarters-description').textContent = phasesConfig.quarters.description;\n            document.getElementById('semis-description').textContent = phasesConfig.semis.description;\n            document.getElementById('final-description').textContent = phasesConfig.final.description;\n        }\n\n        \/\/ Mettre \u00e0 jour l'en-t\u00eate de la phase\n        function updatePhaseHeader(phaseId, phaseConfig) {\n            const phaseElement = document.getElementById(`phase-${phaseId}`);\n            if (!phaseElement) return;\n            \n            const statusMap = {\n                'completed': 'Termin\u00e9e',\n                'current': 'En Cours',\n                'upcoming': '\u00c0 Venir'\n            };\n            \n            const statusElement = phaseElement.querySelector('.phase-status');\n            if (statusElement) {\n                statusElement.className = `phase-status status-${phaseConfig.status}`;\n                statusElement.textContent = statusMap[phaseConfig.status] || phaseConfig.status;\n            }\n        }\n\n        \/\/ ==================== GESTION DES PHASES ====================\n        \/\/ Navigation entre phases\n        document.querySelectorAll('.phase-nav-btn').forEach(btn => {\n            btn.addEventListener('click', function() {\n                const phaseId = this.getAttribute('data-phase');\n                showPhase(phaseId);\n            });\n        });\n\n        \/\/ Afficher une phase sp\u00e9cifique\n        function showPhase(phaseId) {\n            \/\/ Mettre \u00e0 jour les boutons de navigation\n            document.querySelectorAll('.phase-nav-btn').forEach(btn => {\n                btn.classList.remove('active');\n                if (btn.getAttribute('data-phase') === phaseId) {\n                    btn.classList.add('active');\n                }\n            });\n\n            \/\/ Afficher le contenu de la phase\n            document.querySelectorAll('.phase-content').forEach(content => {\n                content.classList.remove('active');\n            });\n            document.getElementById(`phase-${phaseId}`).classList.add('active');\n\n            \/\/ Mettre \u00e0 jour l'en-t\u00eate de la phase\n            const phaseConfig = phasesConfig[phaseId];\n            updatePhaseHeader(phaseId, phaseConfig);\n        }\n\n        \/\/ Charger les matchs d'une phase\n        function loadPhaseMatches(phaseId, matches, participants) {\n            const container = document.getElementById(`${phaseId}-matches`);\n            if (!container) return;\n\n            if (matches.length === 0) {\n                container.innerHTML = `\n                    <div class=\"empty-state\">\n                        <i class=\"fas fa-futbol\"><\/i>\n                        <h3>Aucun match enregistr\u00e9 pour cette phase<\/h3>\n                        <p>Les rencontres seront affich\u00e9es ici une fois programm\u00e9es dans le panneau d'administration<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n\n            let html = '';\n            matches.forEach((match, index) => {\n                const team1Data = participants.find(p => p.name === match.team1) || { name: match.team1 };\n                const team2Data = participants.find(p => p.name === match.team2) || { name: match.team2 };\n\n                \/\/ D\u00e9terminer le r\u00e9sultat\n                let resultClass = 'pending';\n                let resultText = '\u00c0 venir';\n\n                if (match.winner === 'Match nul') {\n                    resultClass = 'draw';\n                    resultText = 'Match nul';\n                } else if (match.winner === match.team1) {\n                    resultClass = 'winner';\n                    resultText = `${match.team1} vainqueur`;\n                } else if (match.winner === match.team2) {\n                    resultClass = 'winner';\n                    resultText = `${match.team2} vainqueur`;\n                } else if (match.score1 !== undefined && match.score2 !== undefined) {\n                    resultText = 'R\u00e9sultats en attente de validation';\n                }\n\n                html += `\n                    <div class=\"rencontre-card ${phaseId}\">\n                        <div class=\"rencontre-header\">\n                            <div class=\"rencontre-match-id\">Match ${index + 1}<\/div>\n                            <div class=\"rencontre-title\">${match.group ? `Groupe ${match.group}` : 'Affrontement direct'}<\/div>\n                            ${match.theme ? `<div class=\"rencontre-theme\">${match.theme}<\/div>` : ''}\n                        <\/div>\n                        \n                        <div class=\"rencontre-content\">\n                            <div class=\"rencontre-teams\">\n                                <div class=\"team\">\n                                    <div class=\"team-name\">${team1Data.name}<\/div>\n                                    <div class=\"team-score\">${match.score1 !== undefined ? match.score1 : '-'}<\/div>\n                                    <div style=\"font-size: 0.8rem; color: #666; margin-top: 2px;\">\n                                        ${team1Data.description || ''}\n                                    <\/div>\n                                <\/div>\n                                \n                                <div class=\"vs\">VS<\/div>\n                                \n                                <div class=\"team\">\n                                    <div class=\"team-name\">${team2Data.name}<\/div>\n                                    <div class=\"team-score\">${match.score2 !== undefined ? match.score2 : '-'}<\/div>\n                                    <div style=\"font-size: 0.8rem; color: #666; margin-top: 2px;\">\n                                        ${team2Data.description || ''}\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            \n                            <div class=\"rencontre-result ${resultClass}\">\n                                ${resultText}\n                            <\/div>\n                            \n                            <div class=\"rencontre-info\">\n                                <div class=\"rencontre-date\">\n                                    <i class=\"fas fa-calendar\"><\/i>\n                                    ${formatDate(match.date)}\n                                <\/div>\n                                <div class=\"rencontre-location\">\n                                    <i class=\"fas fa-map-marker-alt\"><\/i>\n                                    ${match.location || 'Universit\u00e9 de Kinshasa'}\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                `;\n            });\n\n            container.innerHTML = html;\n        }\n\n        \/\/ Charger les m\u00e9dias d'une phase\n        function loadPhaseMedia(phaseId, competitionData, gallery) {\n            const container = document.getElementById(`${phaseId}-media`);\n            if (!container) return;\n\n            const phaseGallery = competitionData?.gallery?.[phaseId];\n            \n            \/\/ Filtrer les photos par phase\n            const phasePhotos = gallery.filter(photo => \n                photo.phase === phaseId || \n                (phaseId === 'final' && photo.title?.toLowerCase().includes('finale')) ||\n                (phaseId === 'prelim' && photo.title?.toLowerCase().includes('pr\u00e9liminaire'))\n            ).slice(0, 6); \/\/ Limiter \u00e0 6 photos\n\n            if (phasePhotos.length === 0 && !phaseGallery) {\n                container.innerHTML = `\n                    <div class=\"media-section\">\n                        <h3><i class=\"fas fa-images\"><\/i> Galerie de la phase<\/h3>\n                        <div class=\"empty-state\" style=\"margin-top: 15px; padding: 30px;\">\n                            <i class=\"fas fa-camera\"><\/i>\n                            <p>Aucune photo disponible pour cette phase<\/p>\n                            <p style=\"font-size: 0.9rem; margin-top: 10px;\">Ajoutez des photos via le panneau d'administration<\/p>\n                        <\/div>\n                    <\/div>\n                `;\n                return;\n            }\n\n            let html = `\n                <div class=\"media-section\">\n                    <h3><i class=\"fas fa-images\"><\/i> Galerie de la phase<\/h3>\n            `;\n\n            \/\/ Ajouter la photo principale de la phase\n            if (phaseGallery?.photo) {\n                html += `\n                    <div class=\"media-item\" style=\"grid-column: 1 \/ -1;\">\n                        <div class=\"media-preview\" style=\"height: 200px;\">\n                            <img decoding=\"async\" src=\"${phaseGallery.photo}\" alt=\"${phaseGallery.description || 'Photo officielle'}\"\n                                 onerror=\"this.onerror=null; this.parentElement.innerHTML='<div style=\\\"display:flex;align-items:center;justify-content:center;height:100%;color:#666;\\\"><i class=\\\"fas fa-image\\\" style=\\\"font-size:3rem;\\\"><\/i><\/div>'\">\n                        <\/div>\n                        <div class=\"media-caption\">\n                            <strong>${phaseGallery.description || 'Photo officielle de la phase'}<\/strong>\n                            <br>\n                            <small>${phasesConfig[phaseId].date}<\/small>\n                        <\/div>\n                    <\/div>\n                `;\n            }\n\n            \/\/ Ajouter les autres photos en galerie rapide\n            if (phasePhotos.length > 0) {\n                html += `\n                    <div style=\"margin-top: 20px;\">\n                        <h4>Photos suppl\u00e9mentaires<\/h4>\n                        <div class=\"quick-gallery\">\n                `;\n                \n                phasePhotos.forEach(photo => {\n                    html += `\n                        <div class=\"quick-gallery-item\" onclick=\"viewFullImage('${photo.url}')\">\n                            <img decoding=\"async\" src=\"${photo.url}\" alt=\"${photo.title || 'Photo'}\"\n                                 onerror=\"this.onerror=null; this.src='data:image\/svg+xml;utf8,<svg xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\" width=\\\"150\\\" height=\\\"120\\\" viewBox=\\\"0 0 150 120\\\"><rect width=\\\"150\\\" height=\\\"120\\\" fill=\\\"%23f0f0f0\\\"\/><text x=\\\"50%\\\" y=\\\"50%\\\" font-family=\\\"Arial\\\" font-size=\\\"14\\\" fill=\\\"%23666\\\" text-anchor=\\\"middle\\\" dy=\\\".3em\\\">Photo<\/text><\/svg>'\">\n                        <\/div>\n                    `;\n                });\n                \n                html += `\n                        <\/div>\n                    <\/div>\n                `;\n            }\n\n            html += `\n                <\/div>\n            `;\n\n            container.innerHTML = html;\n        }\n\n        \/\/ Mettre \u00e0 jour la barre de progression\n        function updatePhaseProgress(phaseId, matches) {\n            const progressBar = document.getElementById(`${phaseId}-progress`);\n            if (!progressBar || matches.length === 0) {\n                if (progressBar) progressBar.style.width = '0%';\n                return;\n            }\n\n            const completedMatches = matches.filter(match => \n                match.winner || (match.score1 !== undefined && match.score2 !== undefined)\n            ).length;\n            \n            const progress = (completedMatches \/ matches.length) * 100;\n            progressBar.style.width = `${progress}%`;\n        }\n\n        \/\/ Mettre \u00e0 jour les boutons de navigation\n        function updateNavButtons(phaseId, matches) {\n            const btn = document.querySelector(`.phase-nav-btn[data-phase=\"${phaseId}\"]`);\n            if (!btn) return;\n\n            btn.classList.remove('completed', 'current');\n            \n            if (matches.length > 0) {\n                const completedMatches = matches.filter(match => \n                    match.winner || (match.score1 !== undefined && match.score2 !== undefined)\n                ).length;\n                \n                if (completedMatches === matches.length) {\n                    btn.classList.add('completed');\n                } else if (completedMatches > 0) {\n                    btn.classList.add('current');\n                }\n            }\n        }\n\n        function updateNavButtonsFromConfig() {\n            \/\/ Mettre \u00e0 jour le statut des boutons de navigation\n            Object.keys(phasesConfig).forEach(phaseId => {\n                const config = phasesConfig[phaseId];\n                const btn = document.querySelector(`.phase-nav-btn[data-phase=\"${phaseId}\"]`);\n                \n                if (btn) {\n                    btn.classList.remove('completed', 'current', 'upcoming');\n                    \n                    if (config.status === 'completed') {\n                        btn.classList.add('completed');\n                    } else if (config.status === 'current') {\n                        btn.classList.add('current');\n                    }\n                }\n            });\n        }\n\n        \/\/ ==================== UTILITAIRES ====================\n        function formatDate(dateString) {\n            if (!dateString) return '';\n            try {\n                const date = new Date(dateString);\n                return date.toLocaleDateString('fr-FR', {\n                    day: 'numeric',\n                    month: 'short'\n                });\n            } catch {\n                return dateString;\n            }\n        }\n\n        function formatDateForDisplay(dateString) {\n            if (!dateString) return '';\n            try {\n                const date = new Date(dateString);\n                return date.toLocaleDateString('fr-FR', {\n                    day: 'numeric',\n                    month: 'long',\n                    year: 'numeric'\n                });\n            } catch {\n                return dateString;\n            }\n        }\n\n        function viewFullImage(url) {\n            window.open(url, '_blank');\n        }\n\n        \/\/ Rafra\u00eechir les donn\u00e9es\n        function refreshData() {\n            loadDataFromServer().then(success => {\n                if (success) {\n                    loadCompetitionData();\n                }\n            });\n        }\n\n        \/\/ ==================== INITIALISATION ====================\n        document.addEventListener('DOMContentLoaded', async function() {\n            \/\/ Charger les donn\u00e9es\n            await loadDataFromServer();\n            \n            \/\/ Charger les donn\u00e9es de la comp\u00e9tition\n            loadCompetitionData();\n            \n            \/\/ Afficher la premi\u00e8re phase par d\u00e9faut\n            showPhase('prelim');\n            \n            \/\/ Navigation entre phases\n            document.querySelectorAll('.phase-nav-btn').forEach(btn => {\n                btn.addEventListener('click', function() {\n                    const phaseId = this.getAttribute('data-phase');\n                    showPhase(phaseId);\n                });\n            });\n            \n            \/\/ \u00c9couter les changements dans le localStorage\n            window.addEventListener('storage', function(e) {\n                if (e.key && Object.values(STORAGE_KEYS).includes(e.key)) {\n                    console.log(`Donn\u00e9es mises \u00e0 jour: ${e.key}`);\n                    refreshData();\n                }\n            });\n            \n            \/\/ Rafra\u00eechir toutes les 5 secondes\n            setInterval(refreshData, 5000);\n        });\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-x-large-font-size\">Archives 1ere Editions Proc\u00e8s Fictifs<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-3 is-cropped uag-masonry uagb-block-6dfa2cf9 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2750\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.28-1024x683.jpeg\" alt=\"\" class=\"wp-image-2750\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.28-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.28-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.28-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.28.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2756\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.09-1024x683.jpeg\" alt=\"\" class=\"wp-image-2756\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.09-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.09-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.09-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.09.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-rounded\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2761\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.13-1-1024x683.jpeg\" alt=\"\" class=\"wp-image-2761\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.13-1-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.13-1-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.13-1-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.13-1.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2752\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.04-1024x683.jpeg\" alt=\"\" class=\"wp-image-2752\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.04-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.04-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.04-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.04.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2754\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.07-1024x683.jpeg\" alt=\"\" class=\"wp-image-2754\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.07-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.07-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.07-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.07.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2759\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1024x683.jpeg\" alt=\"\" class=\"wp-image-2759\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2753\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.05-1024x683.jpeg\" alt=\"\" class=\"wp-image-2753\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.05-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.05-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.05-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.05.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2758\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1-1024x683.jpeg\" alt=\"\" class=\"wp-image-2758\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.11-1.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2757\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.10-1024x683.jpeg\" alt=\"\" class=\"wp-image-2757\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.10-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.10-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.10-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.10.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2760\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.12-1024x683.jpeg\" alt=\"\" class=\"wp-image-2760\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.12-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.12-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.12-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.12.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2745\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.24-1024x683.jpeg\" alt=\"\" class=\"wp-image-2745\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.24-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.24-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.24-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.24.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"2751\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.03-1024x683.jpeg\" alt=\"\" class=\"wp-image-2751\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.03-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.03-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.03-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.03.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"464\" style=\"aspect-ratio: 832 \/ 464;\" width=\"832\" controls src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Video-2025-12-08-at-15.52.32.mp4\"><\/video><\/figure>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\">\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"1024\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.23-1-682x1024.jpeg\" alt=\"\" class=\"wp-image-2520\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.23-1-682x1024.jpeg 682w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.23-1-200x300.jpeg 200w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.23-1.jpeg 719w\" sizes=\"auto, (max-width: 682px) 100vw, 682px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.28-1024x683.jpeg\" alt=\"\" class=\"wp-image-2531\" style=\"aspect-ratio:3\/4;object-fit:cover\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.28-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.28-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.28-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.28.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.25-1024x682.jpeg\" alt=\"\" class=\"wp-image-2526\" style=\"aspect-ratio:9\/16;object-fit:cover\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.25-1024x682.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.25-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.25-768x511.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.25.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.19-1-1024x683.jpeg\" alt=\"\" class=\"wp-image-2512\" style=\"aspect-ratio:9\/16;object-fit:cover\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.19-1-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.19-1-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.19-1-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.19-1.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:150px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:45%\">\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.23-1024x683.jpeg\" alt=\"\" class=\"wp-image-2744\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.23-1024x683.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.23-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.23-768x512.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/12\/WhatsApp-Image-2025-12-08-at-15.50.23.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.22-1-1024x682.jpeg\" alt=\"\" class=\"wp-image-2518\" srcset=\"https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.22-1-1024x682.jpeg 1024w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.22-1-300x200.jpeg 300w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.22-1-768x511.jpeg 768w, https:\/\/jurec.org\/wp-content\/uploads\/2025\/11\/WhatsApp-Image-2025-11-20-at-09.58.22-1.jpeg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-5fe70569 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-c9d9efcb uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-icon-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M256 64C256 99.35 227.3 128 192 128C156.7 128 128 99.35 128 64C128 28.65 156.7 0 192 0C227.3 0 256 28.65 256 64zM155.7 170.2C167.3 173.1 179.6 176 192.2 176C232.1 176 269.3 155.8 291 122.4L309.2 94.54C318.8 79.73 338.6 75.54 353.5 85.18C368.3 94.82 372.5 114.6 362.8 129.5L344.7 157.3C326.4 185.4 301.2 207.3 272 221.6V480C272 497.7 257.7 512 240 512C222.3 512 208 497.7 208 480V384H176V480C176 497.7 161.7 512 144 512C126.3 512 112 497.7 112 480V221.4C83.63 207.4 58.94 186.1 40.87 158.1L21.37 129.8C11.57 115 15.54 95.18 30.25 85.37C44.95 75.57 64.82 79.54 74.62 94.25L94.12 123.5C108.5 145 129.2 160.9 152.9 169.3C153.9 169.5 154.8 169.8 155.7 170.2V170.2z\"><\/path><\/svg><\/div><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title-prefix\">JURISTES POUR L&rsquo;ENVIRONNEMENT AU CONGO<\/h2><h3 class=\"uagb-ifb-title\">Participez \u00e0 Nos Forums et Discussions<\/h3><\/div><p class=\"uagb-ifb-desc\">Inscrivez vous aujourd&rsquo;hui pour avoir acc\u00e8s a nos publications, discussions, \u00e9change et partage.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/jurec.org\/account\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" ><span class=\"uagb-inline-editing\">Rejoignez Nous<\/span><\/a><\/div><\/div><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Archives 1ere Editions Proc\u00e8s Fictifs<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2577","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/pages\/2577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jurec.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2577"}],"version-history":[{"count":53,"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/pages\/2577\/revisions"}],"predecessor-version":[{"id":2852,"href":"https:\/\/jurec.org\/index.php?rest_route=\/wp\/v2\/pages\/2577\/revisions\/2852"}],"wp:attachment":[{"href":"https:\/\/jurec.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}