var/cache/dev/twig/37/37be602ffd8e6e877aaa4d44bda62878.php line 38

  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\SandboxExtension;
  6. use Twig\Markup;
  7. use Twig\Sandbox\SecurityError;
  8. use Twig\Sandbox\SecurityNotAllowedTagError;
  9. use Twig\Sandbox\SecurityNotAllowedFilterError;
  10. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  11. use Twig\Source;
  12. use Twig\Template;
  13. /* base.html.twig */
  14. class __TwigTemplate_834c1bd40aec829aca7976381836b2d4 extends \Twig\Template
  15. {
  16.     private $source;
  17.     private $macros = [];
  18.     public function __construct(Environment $env)
  19.     {
  20.         parent::__construct($env);
  21.         $this->source $this->getSourceContext();
  22.         $this->parent false;
  23.         $this->blocks = [
  24.             'meta' => [$this'block_meta'],
  25.             'title' => [$this'block_title'],
  26.             'stylesheets' => [$this'block_stylesheets'],
  27.             'body' => [$this'block_body'],
  28.             'javascripts' => [$this'block_javascripts'],
  29.         ];
  30.     }
  31.     protected function doDisplay(array $context, array $blocks = [])
  32.     {
  33.         $macros $this->macros;
  34.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  35.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""base.html.twig"));
  36.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  37.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""base.html.twig"));
  38.         // line 1
  39.         echo "<!DOCTYPE html>
  40. <html lang=\"fr\">
  41. <head>
  42.     <meta charset=\"UTF-8\">
  43.     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
  44.     ";
  45.         // line 6
  46.         $this->displayBlock('meta'$context$blocks);
  47.         // line 10
  48.         echo "    <title>";
  49.         $this->displayBlock('title'$context$blocks);
  50.         echo "</title>
  51.     
  52.     <!-- Tailwind CSS -->
  53.     <script src=\"https://cdn.tailwindcss.com\"></script>
  54.     
  55.     <!-- Configuration du thème -->
  56.     <script>
  57.         tailwind.config = {
  58.             theme: {
  59.                 extend: {
  60.                     colors: {
  61.                         primary: {
  62.                             50: '#eef2ff',
  63.                             100: '#e0e7ff',
  64.                             200: '#c7d2fe',
  65.                             300: '#a5b4fc',
  66.                             400: '#818cf8',
  67.                             500: '#6366f1',
  68.                             600: '#4f46e5',
  69.                             700: '#4338ca',
  70.                             800: '#3730a3',
  71.                             900: '#312e81',
  72.                         },
  73.                         secondary: {
  74.                             50: '#f5f3ff',
  75.                             100: '#ede9fe',
  76.                             200: '#ddd6fe',
  77.                             300: '#c4b5fd',
  78.                             400: '#a78bfa',
  79.                             500: '#8b5cf6',
  80.                             600: '#7c3aed',
  81.                             700: '#6d28d9',
  82.                             800: '#5b21b6',
  83.                             900: '#4c1d95',
  84.                         }
  85.                     },
  86.                     animation: {
  87.                         'scroll': 'scroll 30s linear infinite',
  88.                         'scroll-reverse': 'scroll 30s linear infinite reverse',
  89.                         'fade-in': 'fadeIn 0.5s ease-in-out',
  90.                         'slide-up': 'slideUp 0.6s ease-out',
  91.                     },
  92.                     keyframes: {
  93.                         scroll: {
  94.                             '0%': { transform: 'translateX(0)' },
  95.                             '100%': { transform: 'translateX(-50%)' }
  96.                         },
  97.                         fadeIn: {
  98.                             '0%': { opacity: '0' },
  99.                             '100%': { opacity: '1' }
  100.                         },
  101.                         slideUp: {
  102.                             '0%': { transform: 'translateY(20px)', opacity: '0' },
  103.                             '100%': { transform: 'translateY(0)', opacity: '1' }
  104.                         }
  105.                     }
  106.                 }
  107.             }
  108.         }
  109.     </script>
  110.     
  111.     <!-- Font Awesome -->
  112.     <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css\">
  113.     
  114.     <!-- Google Fonts -->
  115.     <link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">
  116.     
  117.     <style>
  118.         body { font-family: 'Plus Jakarta Sans', sans-serif; }
  119.         .gradient-text {
  120.             background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  121.             -webkit-background-clip: text;
  122.             -webkit-text-fill-color: transparent;
  123.         }
  124.         .hero-gradient {
  125.             background: radial-gradient(circle at top right, #667eea 0%, #764ba2 100%);
  126.         }
  127.         .card-hover {
  128.             transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  129.         }
  130.         .card-hover:hover {
  131.             transform: translateY(-8px) scale(1.02);
  132.             box-shadow: 0 20px 40px -15px rgba(102, 126, 234, 0.3);
  133.         }
  134.         .glass-effect {
  135.             background: rgba(255, 255, 255, 0.1);
  136.             backdrop-filter: blur(10px);
  137.             border: 1px solid rgba(255, 255, 255, 0.2);
  138.         }
  139.         @keyframes float {
  140.             0%, 100% { transform: translateY(0); }
  141.             50% { transform: translateY(-10px); }
  142.         }
  143.         .float { animation: float 6s ease-in-out infinite; }
  144.         html {
  145.             scroll-behavior: smooth;
  146.         }
  147.     </style>
  148.     
  149.     ";
  150.         // line 109
  151.         $this->displayBlock('stylesheets'$context$blocks);
  152.         // line 110
  153.         echo "</head>
  154. <body class=\"bg-gray-50 overflow-x-hidden\">
  155.     ";
  156.         // line 112
  157.         $this->loadTemplate("header.html.twig""base.html.twig"112)->display($context);
  158.         // line 113
  159.         echo "    
  160.     <main>
  161.         ";
  162.         // line 115
  163.         $this->displayBlock('body'$context$blocks);
  164.         // line 116
  165.         echo "    </main>
  166.     
  167.     ";
  168.         // line 118
  169.         $this->loadTemplate("footer.html.twig""base.html.twig"118)->display($context);
  170.         // line 119
  171.         echo "    
  172.     ";
  173.         // line 120
  174.         $this->displayBlock('javascripts'$context$blocks);
  175.         // line 184
  176.         echo "</body>
  177. </html>";
  178.         
  179.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  180.         
  181.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  182.     }
  183.     // line 6
  184.     public function block_meta($context, array $blocks = [])
  185.     {
  186.         $macros $this->macros;
  187.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  188.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""meta"));
  189.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  190.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""meta"));
  191.         // line 7
  192.         echo "    <meta name=\"author\" content=\"DAIP\"/>
  193.     <meta property=\"fb:app_id\" content=\"1604133883317306\" />
  194.     ";
  195.         
  196.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  197.         
  198.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  199.     }
  200.     // line 10
  201.     public function block_title($context, array $blocks = [])
  202.     {
  203.         $macros $this->macros;
  204.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  205.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  206.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  207.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  208.         echo "DAIP - Direction de l'Apprentissage et de l'Insertion Professionnelle";
  209.         
  210.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  211.         
  212.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  213.     }
  214.     // line 109
  215.     public function block_stylesheets($context, array $blocks = [])
  216.     {
  217.         $macros $this->macros;
  218.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  219.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  220.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  221.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheets"));
  222.         
  223.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  224.         
  225.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  226.     }
  227.     // line 115
  228.     public function block_body($context, array $blocks = [])
  229.     {
  230.         $macros $this->macros;
  231.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  232.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  233.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  234.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  235.         
  236.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  237.         
  238.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  239.     }
  240.     // line 120
  241.     public function block_javascripts($context, array $blocks = [])
  242.     {
  243.         $macros $this->macros;
  244.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  245.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  246.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  247.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascripts"));
  248.         // line 121
  249.         echo "    <!-- Alpine.js en premier (sans defer pour garantir l'ordre) -->
  250.     <script src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js\"></script>
  251.     
  252.     <!-- jQuery ensuite -->
  253.     <script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>
  254.     
  255.     <!-- Script personnalisé pour forcer la réinitialisation d'Alpine -->
  256.     <script>
  257.         document.addEventListener('DOMContentLoaded', function() {
  258.             console.log('DOM chargé, Alpine.js disponible:', typeof Alpine !== 'undefined');
  259.             
  260.             // Auto-disparition des messages flash
  261.             const flashMessages = document.querySelectorAll('[data-flash-message]');
  262.             flashMessages.forEach(function(message) {
  263.                 const delay = message.dataset.delay || 5000; // 5 secondes par défaut
  264.                 
  265.                 setTimeout(function() {
  266.                     // Ajouter une animation de fondu
  267.                     message.style.transition = 'opacity 0.5s ease-out, transform 0.3s ease-out';
  268.                     message.style.opacity = '0';
  269.                     message.style.transform = 'translateY(-10px)';
  270.                     
  271.                     // Supprimer l'élément après l'animation
  272.                     setTimeout(function() {
  273.                         message.remove();
  274.                     }, 500);
  275.                 }, delay);
  276.                 
  277.                 // Ajouter un bouton de fermeture manuelle
  278.                 const closeButton = document.createElement('button');
  279.                 closeButton.innerHTML = '×';
  280.                 closeButton.className = 'ml-4 text-gray-400 hover:text-gray-600 text-xl font-bold transition-colors';
  281.                 closeButton.style.cursor = 'pointer';
  282.                 closeButton.onclick = function() {
  283.                     message.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out';
  284.                     message.style.opacity = '0';
  285.                     message.style.transform = 'translateY(-10px)';
  286.                     setTimeout(function() {
  287.                         message.remove();
  288.                     }, 300);
  289.                 };
  290.                 
  291.                 // Ajouter le bouton au message
  292.                 const messageContent = message.querySelector('div');
  293.                 if (messageContent) {
  294.                     messageContent.appendChild(closeButton);
  295.                 }
  296.             });
  297.             
  298.             // Forcer la réinitialisation des composants Alpine si nécessaire
  299.             if (typeof Alpine !== 'undefined') {
  300.                 // Attendre un peu pour que tout soit bien chargé
  301.                 setTimeout(function() {
  302.                     // Réinitialiser les composants Alpine (optionnel)
  303.                     document.querySelectorAll('[x-data]').forEach(el => {
  304.                         Alpine.initTree(el);
  305.                     });
  306.                     console.log('Composants Alpine réinitialisés');
  307.                 }, 100);
  308.             }
  309.         });
  310.     </script>
  311.     ";
  312.         
  313.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  314.         
  315.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  316.     }
  317.     public function getTemplateName()
  318.     {
  319.         return "base.html.twig";
  320.     }
  321.     public function isTraitable()
  322.     {
  323.         return false;
  324.     }
  325.     public function getDebugInfo()
  326.     {
  327.         return array (  283 => 121,  273 => 120,  255 => 115,  237 => 109,  218 => 10,  206 => 7,  196 => 6,  185 => 184,  183 => 120,  180 => 119,  178 => 118,  174 => 116,  172 => 115,  168 => 113,  166 => 112,  162 => 110,  160 => 109,  57 => 10,  55 => 6,  48 => 1,);
  328.     }
  329.     public function getSourceContext()
  330.     {
  331.         return new Source("<!DOCTYPE html>
  332. <html lang=\"fr\">
  333. <head>
  334.     <meta charset=\"UTF-8\">
  335.     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
  336.     {% block meta %}
  337.     <meta name=\"author\" content=\"DAIP\"/>
  338.     <meta property=\"fb:app_id\" content=\"1604133883317306\" />
  339.     {% endblock %}
  340.     <title>{% block title %}DAIP - Direction de l'Apprentissage et de l'Insertion Professionnelle{% endblock %}</title>
  341.     
  342.     <!-- Tailwind CSS -->
  343.     <script src=\"https://cdn.tailwindcss.com\"></script>
  344.     
  345.     <!-- Configuration du thème -->
  346.     <script>
  347.         tailwind.config = {
  348.             theme: {
  349.                 extend: {
  350.                     colors: {
  351.                         primary: {
  352.                             50: '#eef2ff',
  353.                             100: '#e0e7ff',
  354.                             200: '#c7d2fe',
  355.                             300: '#a5b4fc',
  356.                             400: '#818cf8',
  357.                             500: '#6366f1',
  358.                             600: '#4f46e5',
  359.                             700: '#4338ca',
  360.                             800: '#3730a3',
  361.                             900: '#312e81',
  362.                         },
  363.                         secondary: {
  364.                             50: '#f5f3ff',
  365.                             100: '#ede9fe',
  366.                             200: '#ddd6fe',
  367.                             300: '#c4b5fd',
  368.                             400: '#a78bfa',
  369.                             500: '#8b5cf6',
  370.                             600: '#7c3aed',
  371.                             700: '#6d28d9',
  372.                             800: '#5b21b6',
  373.                             900: '#4c1d95',
  374.                         }
  375.                     },
  376.                     animation: {
  377.                         'scroll': 'scroll 30s linear infinite',
  378.                         'scroll-reverse': 'scroll 30s linear infinite reverse',
  379.                         'fade-in': 'fadeIn 0.5s ease-in-out',
  380.                         'slide-up': 'slideUp 0.6s ease-out',
  381.                     },
  382.                     keyframes: {
  383.                         scroll: {
  384.                             '0%': { transform: 'translateX(0)' },
  385.                             '100%': { transform: 'translateX(-50%)' }
  386.                         },
  387.                         fadeIn: {
  388.                             '0%': { opacity: '0' },
  389.                             '100%': { opacity: '1' }
  390.                         },
  391.                         slideUp: {
  392.                             '0%': { transform: 'translateY(20px)', opacity: '0' },
  393.                             '100%': { transform: 'translateY(0)', opacity: '1' }
  394.                         }
  395.                     }
  396.                 }
  397.             }
  398.         }
  399.     </script>
  400.     
  401.     <!-- Font Awesome -->
  402.     <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css\">
  403.     
  404.     <!-- Google Fonts -->
  405.     <link href=\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">
  406.     
  407.     <style>
  408.         body { font-family: 'Plus Jakarta Sans', sans-serif; }
  409.         .gradient-text {
  410.             background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  411.             -webkit-background-clip: text;
  412.             -webkit-text-fill-color: transparent;
  413.         }
  414.         .hero-gradient {
  415.             background: radial-gradient(circle at top right, #667eea 0%, #764ba2 100%);
  416.         }
  417.         .card-hover {
  418.             transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  419.         }
  420.         .card-hover:hover {
  421.             transform: translateY(-8px) scale(1.02);
  422.             box-shadow: 0 20px 40px -15px rgba(102, 126, 234, 0.3);
  423.         }
  424.         .glass-effect {
  425.             background: rgba(255, 255, 255, 0.1);
  426.             backdrop-filter: blur(10px);
  427.             border: 1px solid rgba(255, 255, 255, 0.2);
  428.         }
  429.         @keyframes float {
  430.             0%, 100% { transform: translateY(0); }
  431.             50% { transform: translateY(-10px); }
  432.         }
  433.         .float { animation: float 6s ease-in-out infinite; }
  434.         html {
  435.             scroll-behavior: smooth;
  436.         }
  437.     </style>
  438.     
  439.     {% block stylesheets %}{% endblock %}
  440. </head>
  441. <body class=\"bg-gray-50 overflow-x-hidden\">
  442.     {% include 'header.html.twig' %}
  443.     
  444.     <main>
  445.         {% block body %}{% endblock %}
  446.     </main>
  447.     
  448.     {% include 'footer.html.twig' %}
  449.     
  450.     {% block javascripts %}
  451.     <!-- Alpine.js en premier (sans defer pour garantir l'ordre) -->
  452.     <script src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js\"></script>
  453.     
  454.     <!-- jQuery ensuite -->
  455.     <script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>
  456.     
  457.     <!-- Script personnalisé pour forcer la réinitialisation d'Alpine -->
  458.     <script>
  459.         document.addEventListener('DOMContentLoaded', function() {
  460.             console.log('DOM chargé, Alpine.js disponible:', typeof Alpine !== 'undefined');
  461.             
  462.             // Auto-disparition des messages flash
  463.             const flashMessages = document.querySelectorAll('[data-flash-message]');
  464.             flashMessages.forEach(function(message) {
  465.                 const delay = message.dataset.delay || 5000; // 5 secondes par défaut
  466.                 
  467.                 setTimeout(function() {
  468.                     // Ajouter une animation de fondu
  469.                     message.style.transition = 'opacity 0.5s ease-out, transform 0.3s ease-out';
  470.                     message.style.opacity = '0';
  471.                     message.style.transform = 'translateY(-10px)';
  472.                     
  473.                     // Supprimer l'élément après l'animation
  474.                     setTimeout(function() {
  475.                         message.remove();
  476.                     }, 500);
  477.                 }, delay);
  478.                 
  479.                 // Ajouter un bouton de fermeture manuelle
  480.                 const closeButton = document.createElement('button');
  481.                 closeButton.innerHTML = '×';
  482.                 closeButton.className = 'ml-4 text-gray-400 hover:text-gray-600 text-xl font-bold transition-colors';
  483.                 closeButton.style.cursor = 'pointer';
  484.                 closeButton.onclick = function() {
  485.                     message.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out';
  486.                     message.style.opacity = '0';
  487.                     message.style.transform = 'translateY(-10px)';
  488.                     setTimeout(function() {
  489.                         message.remove();
  490.                     }, 300);
  491.                 };
  492.                 
  493.                 // Ajouter le bouton au message
  494.                 const messageContent = message.querySelector('div');
  495.                 if (messageContent) {
  496.                     messageContent.appendChild(closeButton);
  497.                 }
  498.             });
  499.             
  500.             // Forcer la réinitialisation des composants Alpine si nécessaire
  501.             if (typeof Alpine !== 'undefined') {
  502.                 // Attendre un peu pour que tout soit bien chargé
  503.                 setTimeout(function() {
  504.                     // Réinitialiser les composants Alpine (optionnel)
  505.                     document.querySelectorAll('[x-data]').forEach(el => {
  506.                         Alpine.initTree(el);
  507.                     });
  508.                     console.log('Composants Alpine réinitialisés');
  509.                 }, 100);
  510.             }
  511.         });
  512.     </script>
  513.     {% endblock %}
  514. </body>
  515. </html>""base.html.twig""/home/daip/temporaire/templates/base.html.twig");
  516.     }
  517. }