Exceptions
Exception
Twig\Error\ RuntimeError
Show exception properties
Twig\Error\RuntimeError {#1640 -lineno: 1087 -columnno: null -rawMessage: "Neither the property "prenom" nor one of the methods "prenom()", "getprenom()", "isprenom()", "hasprenom()" or "__call()" exist and have public access in class "App\Entity\Professionel"." -source: Twig\Source {#1534 -code: """ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-5 w-full">\r\n <div class="bg-blue-950 text-white py-3.5 px-5 rounded-lg border border-blue-900 shadow-sm flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3">\r\n <h1 class="text-base sm:text-xl font-black tracking-wide text-white uppercase flex items-center gap-2"><span>{{ annonce.marques }} {{ annonce.modeles }} {{ annonce.year }}</span></h1><nav aria-label="Fil d'ariane" class="flex items-center gap-2 text-xs sm:text-sm font-semibold text-slate-300">\r\n <a href="{{ path('app_home') }}" class="flex items-center gap-1 hover:text-orange-400 transition-colors cursor-pointer">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house w-4 h-4 text-slate-300" aria-hidden="true">\r\n <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path>\r\n <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>\r\n </svg><span>Accueil</span>\r\n </a><span class="text-slate-500 font-bold">»</span><span class="text-slate-300">Détails Annonce</span><span class="text-slate-500 font-bold">»</span><span class="text-orange-400 font-bold">{{ annonce.marques }} {{ annonce.modeles }}</span>\r\n </nav>\r\n </div>\r\n </div>\r\n <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mt-3 mb-2 w-full">\r\n <div class="bg-white rounded-lg border border-slate-200 shadow-xs border-t-2 border-t-orange-500 px-5 py-3 flex flex-col md:flex-row items-center justify-between gap-3 text-xs">\r\n <div class="flex items-center gap-2">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sliders-vertical w-4 h-4 text-orange-500" aria-hidden="true">\r\n <path d="M10 8h4"></path>\r\n <path d="M12 21v-9"></path>\r\n <path d="M12 8V3"></path>\r\n <path d="M17 16h4"></path>\r\n <path d="M19 12V3"></path>\r\n <path d="M19 21v-5"></path>\r\n <path d="M3 14h4"></path>\r\n <path d="M5 10V3"></path>\r\n <path d="M5 21v-7"></path>\r\n </svg><span class="font-black tracking-wider text-blue-950 uppercase text-xs sm:text-sm">PANNEAU DE NAVIGATION</span>\r\n </div>\r\n <div class="flex flex-wrap items-center justify-center gap-4 sm:gap-6 font-bold text-slate-700">\r\n <button class="hover:text-orange-600 transition-colors cursor-pointer">Acheteur</button><button class="hover:text-orange-600 transition-colors cursor-pointer">Vendeur</button><button class="hover:text-orange-600 transition-colors cursor-pointer">Neuf</button><button class="hover:text-orange-600 transition-colors cursor-pointer">Occasion</button><button class="hover:text-orange-600 transition-colors cursor-pointer">Location</button><button class="hover:text-orange-700 transition-colors cursor-pointer text-orange-600 font-extrabold bg-orange-50 px-3 py-1 rounded-md border border-orange-200">Recherche Avancée</button>\r\n </div>\r\n </div>\r\n </div>\r\n <main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 w-full grow space-y-5">\r\n <div class="bg-white rounded-lg border border-slate-200 p-2 sm:px-3 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 shadow-xs">\r\n <div class="flex items-center gap-2.5">\r\n <div class="w-1.5 h-5 bg-orange-500 rounded-xs shrink-0"></div><span class="text-xs sm:text-sm font-extrabold text-blue-950">Publiée : <span class="font-semibold text-slate-700"> {{ annonce.createdAt|format_datetime('full', 'none', locale = 'fr') }}</span></span>\r\n </div>\r\n <div class="flex flex-col sm:flex-row items-center justify-between gap-2 py-2">\r\n <!-- Libellé -->\r\n <span class="text-xs font-extrabold text-slate-700">\r\n {{ 'Partager ce Véhicule'|trans }}:\r\n </span>\r\n \r\n <!-- Variables Twig -->\r\n {% set uri = app.request.uri %}\r\n {% set title = annonce.marques %}\r\n \r\n <!-- Conteneur des icônes -->\r\n <div class="flex flex-wrap items-center justify-center gap-2">\r\n \r\n <!-- Facebook -->\r\n <a\r\n href="http://www.facebook.com/sharer.php?u={{ uri }}"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-[#1877F2] hover:bg-[#166fe5] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Partager sur Facebook"\r\n aria-label="Partager sur Facebook"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- X (Twitter) -->\r\n <a\r\n href="http://twitter.com/share?url={{ uri }}&text={{ title }}"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-slate-900 hover:bg-blue-900 text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer border border-slate-700"\r\n title="Partager sur X (Twitter)"\r\n aria-label="Partager sur X (Twitter)"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- Instagram -->\r\n <a\r\n href="http://www.instagram.com/"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-linear-to-tr from-[#F58529] via-[#DD2A7B] to-[#8134AF] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Partager sur Instagram"\r\n aria-label="Partager sur Instagram"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- LinkedIn -->\r\n <a\r\n href="http://www.linkedin.com/shareArticle?url={{ uri }}&title={{ title }}"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-[#0A66C2] hover:bg-[#095196] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Partager sur LinkedIn"\r\n aria-label="Partager sur LinkedIn"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- Pinterest -->\r\n <a\r\n href="http://www.pinterest.com/pin/create/button/?url={{ uri }}&description={{ title }}"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-[#E60023] hover:bg-[#c9001f] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Partager sur Pinterest"\r\n aria-label="Partager sur Pinterest"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M12 0c-6.627 0-12 5.372-12 12 0 5.084 3.163 9.426 7.627 11.174-.105-.949-.2-2.405.042-3.441.218-.937 1.407-5.965 1.407-5.965s-.359-.719-.359-1.782c0-1.668.967-2.914 2.171-2.914 1.023 0 1.518.769 1.518 1.69 0 1.029-.655 2.568-.994 3.995-.283 1.194.599 2.169 1.777 2.169 2.133 0 3.772-2.249 3.772-5.495 0-2.873-2.064-4.882-5.012-4.882-3.414 0-5.418 2.561-5.418 5.207 0 1.031.397 2.138.893 2.738.098.119.112.224.083.345-.09.375-.291 1.199-.334 1.357-.056.208-.18.252-.415.153-1.546-.719-2.512-2.978-2.512-4.793 0-3.905 2.836-7.494 8.18-7.494 4.364 0 7.755 3.111 7.755 7.266 0 4.337-2.735 7.828-6.53 7.828-1.275 0-2.474-.663-2.884-1.448l-.786 3.003c-.285 1.096-1.055 2.47-1.572 3.313 1.144.354 2.361.547 3.626.547 6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- WhatsApp -->\r\n <a\r\n href="https://wa.me/?text={{ title }}%20{{ uri }}"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-[#25D366] hover:bg-[#20ba59] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Partager sur WhatsApp"\r\n aria-label="Partager sur WhatsApp"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M12.031 2C6.496 2 2 6.496 2 12.031c0 1.768.461 3.493 1.336 5.01L2 22l5.122-1.343a9.988 9.988 0 0 0 4.909 1.282h.004c5.535 0 10.031-4.496 10.031-10.031 0-2.68-1.043-5.2-2.936-7.094A9.99 9.99 0 0 0 12.031 2zm5.86 14.502c-.244.685-1.226 1.253-1.688 1.332-.462.079-1.066.113-1.724-.097-.399-.128-.915-.295-1.574-.582-2.774-1.206-4.577-4.004-4.717-4.189-.14-.185-1.134-1.509-1.134-2.879 0-1.37.718-2.043.974-2.323.256-.28.56-.35.748-.35.188 0 .375.002.539.01.173.01.405-.065.633.483.235.564.796 1.942.866 2.083.07.141.117.306.023.493-.094.187-.141.304-.28.468-.14.164-.294.366-.421.492-.141.14-.288.293-.124.575.164.282.729 1.202 1.564 1.947 1.074.958 1.977 1.256 2.259 1.396.282.14.446.117.61-.07.164-.187.704-.819.892-1.101.188-.282.376-.235.634-.141.258.094 1.643.774 1.925.915.282.14.469.211.54.329.07.117.07.68-.174 1.365z"></path>\r\n </svg>\r\n </a>\r\n \r\n <!-- YouTube -->\r\n <a\r\n href="https://www.youtube.com/"\r\n target="_blank"\r\n rel="noopener noreferrer"\r\n class="w-7 h-7 rounded-full bg-[#FF0000] hover:bg-[#d90000] text-white flex items-center justify-center hover:scale-110 active:scale-95 transition-all shadow-xs cursor-pointer"\r\n title="Vidéo YouTube"\r\n aria-label="Vidéo YouTube"\r\n >\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-3.5 h-3.5" aria-hidden="true" focusable="false">\r\n <path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"></path>\r\n </svg>\r\n </a>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div class="bg-white rounded-lg border border-slate-200 flex flex-col sm:flex-row items-start sm:items-center justify-between shadow-xs overflow-hidden">\r\n <div class="p-2 sm:p-3 flex items-center gap-2">\r\n <div class="w-1.5 h-8 bg-orange-500 rounded-xs shrink-0"></div><h2 class="text-xl sm:text-2xl md:text-3xl font-black text-blue-950 tracking-tight">{{ annonce.marques }} {{ annonce.modeles }} {{ annonce.year }}</h2>\r\n </div>\r\n <div class="w-full sm:w-auto bg-linear-to-r from-orange-500 to-amber-500 text-white font-black text-xl sm:text-2xl md:text-3xl py-3 px-6 sm:px-12 flex items-center justify-center sm:justify-end shadow-md sm:[clip-path:polygon(30px_0%,100%_0%,100%_100%,0%_100%)]">\r\n <span>{{ annonce.price|number_format(0, ',', ' ') }} {{ annonce.device }}</span>\r\n </div>\r\n </div>\r\n <div class="bg-white rounded-lg border border-slate-200 p-2.5 sm:p-3 shadow-xs">\r\n <div class="grid grid-cols-2 sm:grid-cols-4 md:grid-cols-7 gap-2 text-xs font-bold">\r\n \r\n <!-- 1. Mes Favoris -->\r\n <a\r\n href="#"\r\n data-toggle="modal"\r\n data-target="#favorisModal"\r\n class="addToFavoritesBtn p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-heart w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"></path>\r\n </svg>\r\n <span class="truncate">{{ 'Mes Favoris'|trans }}</span>\r\n </a>\r\n \r\n <!-- 2. Recommander -->\r\n <button\r\n type="button"\r\n data-toggle="modal"\r\n data-target="#exampleModal"\r\n data-id="{{ annonce.id }}"\r\n class="loadModalBtn p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mail w-4 h-4 text-blue-600 shrink-0" aria-hidden="true">\r\n <path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7"></path>\r\n <rect x="2" y="4" width="20" height="16" rx="2"></rect>\r\n </svg>\r\n <span class="truncate">{{ 'Recommander'|trans }}</span>\r\n </button>\r\n \r\n <!-- 3. Comparer (Conditionnel) -->\r\n {% if app.request.get('_route') is same as('app_show_annonce') %}\r\n <button\r\n type="button"\r\n data-id="{{ annonce.id }}"\r\n class="compare-btn1 p-2.5 rounded-md border transition-all flex items-center justify-center gap-1.5 cursor-pointer bg-white border-slate-200 hover:bg-slate-50 text-slate-700"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare w-4 h-4 text-blue-800 shrink-0" aria-hidden="true">\r\n <circle cx="18" cy="18" r="3"></circle>\r\n <circle cx="6" cy="6" r="3"></circle>\r\n <path d="M13 6h3a2 2 0 0 1 2 2v7"></path>\r\n <path d="M11 18H8a2 2 0 0 1-2-2V9"></path>\r\n </svg>\r\n <span class="truncate">{{ 'Comparer'|trans }}</span>\r\n </button>\r\n {% endif %}\r\n \r\n <!-- 4. Planifier un Essai / Visite -->\r\n <a\r\n href="#"\r\n data-toggle="modal"\r\n data-target="#exampleModal3"\r\n class="p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar w-4 h-4 text-amber-500 shrink-0" aria-hidden="true">\r\n <path d="M8 2v4"></path>\r\n <path d="M16 2v4"></path>\r\n <rect width="18" height="18" x="3" y="4" rx="2"></rect>\r\n <path d="M3 10h18"></path>\r\n </svg>\r\n <span class="truncate">{{ 'Planifier un Essai'|trans }}</span>\r\n </a>\r\n \r\n <!-- 5. Faire Une Offre -->\r\n <a\r\n href="#"\r\n data-toggle="modal"\r\n data-target="#exampleModal4"\r\n class="p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign w-4 h-4 text-emerald-600 shrink-0" aria-hidden="true">\r\n <line x1="12" x2="12" y1="2" y2="22"></line>\r\n <path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path>\r\n </svg>\r\n <span class="truncate">{{ 'Faire Une Offre'|trans }}</span>\r\n </a>\r\n \r\n <!-- 6. Doc PDF -->\r\n <a href="{{ annonce.brochureFile ? vich_uploader_asset(annonce, 'brochureFile') : '#' }}"\r\n {% if annonce.brochureFile %}download{% endif %}\r\n {% if not annonce.brochureFile %}title="{{ 'Pas de fichier pdf'|trans }}"{% endif %}\r\n class="p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer"\r\n >\r\n <div class="flex items-center gap-1 text-orange-600 shrink-0">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text w-4 h-4" aria-hidden="true">\r\n <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path>\r\n <path d="M14 2v4a2 2 0 0 0 2 2h4"></path>\r\n <path d="M10 9H8"></path>\r\n <path d="M16 13H8"></path>\r\n <path d="M16 17H8"></path>\r\n </svg>\r\n <span class="text-[9px] bg-orange-500 text-white font-black px-1 py-0.2 rounded-xs uppercase">PDF</span>\r\n </div>\r\n <span class="truncate">Doc PDF</span>\r\n </a>\r\n \r\n <!-- 7. Imprimer -->\r\n <button\r\n type="button"\r\n onclick="window.print()"\r\n class="p-2.5 rounded-md border border-slate-200 bg-white hover:bg-slate-50 text-slate-700 transition-all flex items-center justify-center gap-1.5 cursor-pointer col-span-2 sm:col-span-1"\r\n >\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-printer w-4 h-4 text-blue-700 shrink-0" aria-hidden="true">\r\n <path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path>\r\n <path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"></path>\r\n <rect x="6" y="14" width="12" height="8" rx="1"></rect>\r\n </svg>\r\n <span class="truncate">{{ 'Imprimer'|trans }}</span>\r\n </button>\r\n \r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 lg:grid-cols-12 gap-6 items-start">\r\n <div class="lg:col-span-8 space-y-6">\r\n {% set picture = annonce.pictures[0] %}\r\n {% if picture and picture.filename %}\r\n <div class="bg-white p-2.5 rounded-lg border border-slate-200 shadow-sm relative group">\r\n <div class="relative aspect-16/10 bg-slate-900 rounded-md overflow-hidden flex items-center justify-center max-h-200">\r\n <img id="main-car-image" alt="{{ annonce.marques }} {{ annonce.modeles }} {{ annonce.year }}" class="w-full h-full object-cover select-none transition-transform duration-300" src="{{ vich_uploader_asset(picture, 'imageFile') }}"/ loading="lazy">\r\n <button type="button" class="absolute left-3 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full bg-blue-950/80 hover:bg-orange-500 text-white flex items-center justify-center transition-all cursor-pointer shadow-md z-10" aria-label="Image précédente">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left w-6 h-6" aria-hidden="true">\r\n <path d="m15 18-6-6 6-6"></path>\r\n </svg>\r\n </button>\r\n <button type="button" class="absolute right-3 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full bg-blue-950/80 hover:bg-orange-500 text-white flex items-center justify-center transition-all cursor-pointer shadow-md z-10" aria-label="Image suivante">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right w-6 h-6" aria-hidden="true">\r\n <path d="m9 18 6-6-6-6"></path>\r\n </svg>\r\n </button>\r\n {% if annonce.videos %}\r\n <button type="button" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-blue-950/85 hover:bg-orange-600 text-white px-5 py-3 rounded-full flex items-center gap-3 shadow-2xl backdrop-blur-xs border-2 border-white/30 transition-all hover:scale-110 active:scale-95 group/play cursor-pointer z-10" title="Lancer la lecture de la vidéo">\r\n <div class="w-8 h-8 rounded-full bg-orange-500 group-hover/play:bg-white text-white group-hover/play:text-orange-600 flex items-center justify-center transition-colors shadow-md">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play w-4 h-4 fill-current translate-x-0.5" aria-hidden="true">\r\n <path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path>\r\n </svg>\r\n </div>\r\n <span class="font-black text-xs sm:text-sm uppercase tracking-wider pr-1">Lancer la vidéo</span>\r\n </button>\r\n \r\n <button type="button" class="absolute top-3 right-3 bg-blue-950/80 hover:bg-blue-900 text-white text-xs font-bold px-3 py-1.5 rounded-md flex items-center gap-1.5 transition-colors cursor-pointer z-10" id="btn-agrandir">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye w-4 h-4 text-orange-400" aria-hidden="true">\r\n <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path>\r\n <circle cx="12" cy="12" r="3"></circle>\r\n </svg><span>Agrandir</span>\r\n </button><button type="button" class="absolute bottom-3 left-3 z-10 bg-blue-950/85 hover:bg-orange-600 text-white px-3 py-1.5 rounded-md flex items-center gap-2 transition-all shadow-md backdrop-blur-xs border border-white/20 group/vid cursor-pointer hover:scale-105 active:scale-95" title="Regarder et faire jouer la vidéo du véhicule" aria-label="Faire jouer la vidéo du véhicule">\r\n <div class="w-5 h-5 rounded-full bg-orange-500 group-hover/vid:bg-white text-white group-hover/vid:text-orange-600 flex items-center justify-center transition-colors shadow-xs">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play w-2.5 h-2.5 fill-current translate-x-0.5" aria-hidden="true">\r\n <path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path>\r\n </svg>\r\n </div>\r\n <div class="flex items-center gap-1.5">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-video w-3.5 h-3.5 text-orange-400 group-hover/vid:text-white" aria-hidden="true">\r\n <path d="m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5"></path>\r\n <rect x="2" y="6" width="14" height="12" rx="2"></rect>\r\n </svg><span class="font-black text-xs tracking-wider uppercase">Vidéo HD</span>\r\n </div>\r\n </button>\r\n {% endif %}\r\n {% if annonce.pictures is defined and annonce.pictures|length > 0 %}\r\n <div class="absolute bottom-3 right-3 bg-blue-950/80 text-white text-xs font-bold px-3 py-1 rounded-md z-10">\r\n <span id="current-slide-index">1</span> / {{ annonce.pictures|length }}\r\n </div>\r\n {% endif %}\r\n {% endif %}\r\n </div>\r\n <div class="grid grid-cols-5 sm:grid-cols-10 gap-1.5 mt-2.5">\r\n {% if annonce.videos is defined and annonce.videos %}\r\n <button type="button" \r\n class="relative aspect-square rounded-sm overflow-hidden border-2 transition-all cursor-pointer flex flex-col items-center justify-center border-slate-200 bg-blue-950 text-white hover:bg-blue-900 btn-trigger-video" \r\n title="Faire jouer la vidéo">\r\n <div class="w-6 h-6 rounded-full bg-orange-500 text-white flex items-center justify-center shadow-xs">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play w-3 h-3 fill-current translate-x-0.5" aria-hidden="true">\r\n <path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path>\r\n </svg>\r\n </div>\r\n <span class="text-[10px] font-black uppercase mt-1 text-orange-400 tracking-wider">Vidéo</span>\r\n </button>\r\n {% endif %}\r\n {% if annonce.pictures is defined %}\r\n {% for key, picture in annonce.pictures %}\r\n {% if picture and picture.filename %}\r\n <button type="button" \r\n class="relative aspect-square rounded-sm overflow-hidden border-2 transition-all cursor-pointer {% if loop.first %}border-orange-500 ring-2 ring-orange-500/40{% else %}border-slate-200 opacity-75 hover:opacity-100{% endif %} thumb-item" \r\n data-imagenumber="{{ key }}">\r\n <img src="{{ vich_uploader_asset(picture, 'imageFile') }}" \r\n data-lazy="{{ vich_uploader_asset(picture, 'imageFile') }}"\r\n alt="{{ annonce.category|default('Miniature') }}" \r\n class="w-full h-full object-cover img-child"\r\n loading="lazy">\r\n </button>\r\n {% endif %}\r\n {% endfor %}\r\n {% endif %}\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-2 sm:grid-cols-5 gap-2.5 text-center">\r\n {# 1. Carrosserie #}\r\n <div class="bg-slate-100/90 hover:bg-white p-3 rounded-xl border border-slate-200 hover:border-orange-300 hover:shadow-lg hover:shadow-orange-500/10 flex flex-col items-center justify-between cursor-pointer transition-all duration-300 group select-none" tabindex="0">\r\n <div class="w-11 h-11 rounded-full bg-white group-hover:bg-linear-to-tr group-hover:from-orange-500 group-hover:to-amber-500 flex items-center justify-center shadow-xs mb-1.5 border border-slate-200 group-hover:border-orange-400 group-hover:scale-110 group-hover:rotate-6 transition-all duration-300">\r\n <img src="{{ asset('images/power-c_2.png') }}" \r\n alt="{{ 'Carrosserie'|trans }}" \r\n width="20" \r\n height="20" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-5 h-5 object-contain transition-transform duration-300">\r\n </div>\r\n <span class="text-[11px] font-bold text-slate-600 group-hover:text-slate-900 uppercase tracking-wider transition-colors">\r\n {{ 'Carrosserie'|trans }}\r\n </span>\r\n <span class="text-xs font-black text-blue-950 group-hover:text-orange-600 mt-1 transition-colors leading-tight">\r\n {{ annonce.carosseries|default('N/C') }}\r\n </span>\r\n </div>\r\n \r\n {# 2. État #}\r\n <div class="bg-slate-100/90 hover:bg-white p-3 rounded-xl border border-slate-200 hover:border-orange-300 hover:shadow-lg hover:shadow-orange-500/10 flex flex-col items-center justify-between cursor-pointer transition-all duration-300 group select-none" tabindex="0">\r\n <div class="w-11 h-11 rounded-full bg-white group-hover:bg-linear-to-tr group-hover:from-orange-500 group-hover:to-amber-500 flex items-center justify-center shadow-xs mb-1.5 border border-slate-200 group-hover:border-orange-400 group-hover:scale-110 group-hover:-rotate-6 transition-all duration-300">\r\n <img src="{{ asset('images/condion-s.png') }}" \r\n alt="{{ 'Etat'|trans }}" \r\n width="20" \r\n height="20" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-5 h-5 object-contain transition-transform duration-300">\r\n </div>\r\n <span class="text-[11px] font-bold text-slate-600 group-hover:text-slate-900 uppercase tracking-wider transition-colors">\r\n {{ 'Etat'|trans }}\r\n </span>\r\n <span class="text-xs font-black text-blue-950 group-hover:text-orange-600 mt-1 transition-colors leading-tight">\r\n {{ annonce.etats|default('N/C') }}\r\n </span>\r\n </div>\r\n \r\n {# 3. Kilométrage #}\r\n <div class="bg-slate-100/90 hover:bg-white p-3 rounded-xl border border-slate-200 hover:border-orange-300 hover:shadow-lg hover:shadow-orange-500/10 flex flex-col items-center justify-between cursor-pointer transition-all duration-300 group select-none" tabindex="0">\r\n <div class="w-11 h-11 rounded-full bg-white group-hover:bg-linear-to-tr group-hover:from-orange-500 group-hover:to-amber-500 flex items-center justify-center shadow-xs mb-1.5 border border-slate-200 group-hover:border-orange-400 group-hover:scale-110 group-hover:rotate-6 transition-all duration-300">\r\n <img src="{{ asset('images/milage-s.png') }}" \r\n alt="{{ 'Kilométrage'|trans }}" \r\n width="20" \r\n height="20" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-5 h-5 object-contain transition-transform duration-300">\r\n </div>\r\n <span class="text-[11px] font-bold text-slate-600 group-hover:text-slate-900 uppercase tracking-wider transition-colors">\r\n {{ 'Kilométrage'|trans }}\r\n </span>\r\n <span class="text-xs font-black text-blue-950 group-hover:text-orange-600 mt-1 transition-colors leading-tight">\r\n {% if annonce.kilometrage is defined and annonce.kilometrage %}\r\n {{ annonce.kilometrage|number_format(0, ',', ' ') }} KM\r\n {% else %}\r\n N/C\r\n {% endif %}\r\n </span>\r\n </div>\r\n \r\n {# 4. Carburant #}\r\n <div class="bg-slate-100/90 hover:bg-white p-3 rounded-xl border border-slate-200 hover:border-orange-300 hover:shadow-lg hover:shadow-orange-500/10 flex flex-col items-center justify-between cursor-pointer transition-all duration-300 group select-none" tabindex="0">\r\n <div class="w-11 h-11 rounded-full bg-white group-hover:bg-linear-to-tr group-hover:from-orange-500 group-hover:to-amber-500 flex items-center justify-center shadow-xs mb-1.5 border border-slate-200 group-hover:border-orange-400 group-hover:scale-110 group-hover:-rotate-6 transition-all duration-300">\r\n <img src="{{ asset('images/fuel-s.png') }}" \r\n alt="{{ 'Carburant'|trans }}" \r\n width="20" \r\n height="20" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-5 h-5 object-contain transition-transform duration-300">\r\n </div>\r\n <span class="text-[11px] font-bold text-slate-600 group-hover:text-slate-900 uppercase tracking-wider transition-colors">\r\n {{ 'Carburant'|trans }}\r\n </span>\r\n <span class="text-xs font-black text-blue-950 group-hover:text-orange-600 mt-1 transition-colors leading-tight">\r\n {{ annonce.carburants|default('N/C') }}\r\n </span>\r\n </div>\r\n \r\n {# 5. Transmission #}\r\n <div class="bg-slate-100/90 hover:bg-white p-3 rounded-xl border border-slate-200 hover:border-orange-300 hover:shadow-lg hover:shadow-orange-500/10 flex flex-col items-center justify-between col-span-2 sm:col-span-1 cursor-pointer transition-all duration-300 group select-none" tabindex="0">\r\n <div class="w-11 h-11 rounded-full bg-white group-hover:bg-linear-to-tr group-hover:from-orange-500 group-hover:to-amber-500 flex items-center justify-center shadow-xs mb-1.5 border border-slate-200 group-hover:border-orange-400 group-hover:scale-110 group-hover:rotate-6 transition-all duration-300">\r\n <img src="{{ asset('images/transmission-s.png') }}" \r\n alt="{{ 'Transmission'|trans }}" \r\n width="20" \r\n height="20" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-5 h-5 object-contain transition-transform duration-300">\r\n </div>\r\n <span class="text-[11px] font-bold text-slate-600 group-hover:text-slate-900 uppercase tracking-wider transition-colors">\r\n {{ 'Transmission'|trans }}\r\n </span>\r\n <span class="text-xs font-black text-blue-950 group-hover:text-orange-600 mt-1 transition-colors leading-tight">\r\n {% if annonce.transmission is defined and annonce.transmission %}\r\n {% if 'Vitesses' in annonce.transmission %}\r\n {{ annonce.transmission|replace({' Vitesses': '', ' ': ' V'})|nl2br }}\r\n {% else %}\r\n {{ annonce.transmission }}\r\n {% endif %}\r\n {% else %}\r\n N/C\r\n {% endif %}\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <div class="bg-white rounded-lg border border-slate-200 shadow-sm overflow-hidden">\r\n <div class="grid grid-cols-2 sm:grid-cols-5 border-b border-slate-200 bg-slate-100 text-xs font-bold text-slate-700" id="tabs-container">\r\n <button type="button" data-tab-target="#tab-presentation" class="tab-btn p-3.5 text-center transition-all border-r border-slate-200 cursor-pointer bg-blue-950 text-white font-black border-b-2 border-b-orange-500 shadow-xs">Présentation</button>\r\n <button type="button" data-tab-target="#tab-vue-ensemble" class="tab-btn p-3.5 text-center transition-all border-r border-slate-200 cursor-pointer hover:bg-orange-50 hover:text-orange-600 text-slate-700 bg-slate-50">Vue d'ensemble</button>\r\n <button type="button" data-tab-target="#tab-caracteristiques" class="tab-btn p-3.5 text-center transition-all border-r border-slate-200 cursor-pointer hover:bg-orange-50 hover:text-orange-600 text-slate-700 bg-slate-50">Caractéristiques et Options</button>\r\n <button type="button" data-tab-target="#tab-infos-generales" class="tab-btn p-3.5 text-center transition-all border-r border-slate-200 cursor-pointer hover:bg-orange-50 hover:text-orange-600 text-slate-700 bg-slate-50">Informations Générales</button>\r\n <button type="button" data-tab-target="#tab-emplacement" class="tab-btn p-3.5 text-center transition-all cursor-pointer col-span-2 sm:col-span-1 hover:bg-orange-50 hover:text-orange-600 text-slate-700 bg-slate-50">Emplacement</button>\r\n </div>\r\n <div class="p-6 space-y-6">\r\n <div class="text-center border-b border-slate-100 pb-3">\r\n <h3 class="text-xl sm:text-2xl font-black text-blue-950 uppercase tracking-tight">{{ annonce.marques }} {{ annonce.modeles }} {{ annonce.year }}</h3>\r\n </div>\r\n <div id="tab-presentation" class="tab-panel space-y-6 animate-in fade-in">\r\n <div class="p-4 bg-slate-50 border border-slate-200 rounded-md text-sm text-slate-800 leading-relaxed font-medium">{{ annonce.description }}</div>\r\n <div class="space-y-3">\r\n <h4 class="text-sm font-black text-blue-950 uppercase tracking-wide flex items-center gap-2">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles w-4 h-4 text-orange-500" aria-hidden="true">\r\n <path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"></path>\r\n <path d="M20 2v4"></path>\r\n <path d="M22 4h-4"></path>\r\n <circle cx="4" cy="20" r="2"></circle>\r\n </svg><span>Points forts du véhicule :</span>\r\n </h4><div class="grid grid-cols-1 sm:grid-cols-2 gap-2.5 text-xs text-slate-700">\r\n <div class="flex items-center gap-2 bg-slate-50 p-2.5 rounded-md border border-slate-200">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M20 6 9 17l-5-5"></path>\r\n </svg><span class="font-semibold">Modèle {{ annonce.marques }} {{ annonce.modeles }} ({{ annonce.year }})</span>\r\n </div>\r\n <div class="flex items-center gap-2 bg-slate-50 p-2.5 rounded-md border border-slate-200">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M20 6 9 17l-5-5"></path>\r\n </svg><span class="font-semibold">Transmission : {{ annonce.transmission }}</span>\r\n </div>\r\n <div class="flex items-center gap-2 bg-slate-50 p-2.5 rounded-md border border-slate-200">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M20 6 9 17l-5-5"></path>\r\n </svg><span class="font-semibold">Carburant : {{ annonce.carburants }}</span>\r\n </div>\r\n <div class="flex items-center gap-2 bg-slate-50 p-2.5 rounded-md border border-slate-200">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M20 6 9 17l-5-5"></path>\r\n </svg><span class="font-semibold">Kilométrage vérifié: {{ annonce.kilometrage }} KM</span>\r\n </div>\r\n <div class="flex items-center gap-2 bg-slate-50 p-2.5 rounded-md border border-slate-200">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check w-4 h-4 text-orange-500 shrink-0" aria-hidden="true">\r\n <path d="M20 6 9 17l-5-5"></path>\r\n </svg><span class="font-semibold">Climatisation d'origine et intérieur soigné</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id="tab-vue-ensemble" class="tab-panel hidden space-y-4 animate-in fade-in">\r\n <!-- ====== SPÉCIFICATIONS ===== -->\r\n <div class="border border-slate-200 rounded-sm overflow-hidden bg-white shadow-2xs">\r\n <div class="bg-slate-100/90 border-l-4 border-orange-500 px-3.5 py-2">\r\n <h4 class="font-black text-xs sm:text-sm text-blue-950 uppercase tracking-wide">\r\n {{ 'Spécifications'|trans }}\r\n </h4>\r\n </div>\r\n <div class="divide-y divide-slate-200 text-xs sm:text-sm">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Type de Véhicule'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.carosseries }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Marque'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.marques }}</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Modèle'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.modeles }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Année'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.year }}</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ "Numéro d'enregistrement"|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">\r\n {% if annonce.numeroEnregistrement %}\r\n {{ annonce.numeroEnregistrement }}\r\n {% else %}\r\n <span class="text-slate-400">---</span>\r\n {% endif %}\r\n </span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Châssis'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.numeroChassis }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- ====== DÉTAILS MÉCANIQUES ===== -->\r\n <div class="border border-slate-200 rounded-sm overflow-hidden bg-white shadow-2xs">\r\n <div class="bg-slate-100/90 border-l-4 border-orange-500 px-3.5 py-2">\r\n <h4 class="font-black text-xs sm:text-sm text-blue-950 uppercase tracking-wide">\r\n {{ 'Détails Mécaniques'|trans }}\r\n </h4>\r\n </div>\r\n <div class="divide-y divide-slate-200 text-xs sm:text-sm">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Cylindrée'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">\r\n {{ annonce.nbrcylindre }} {{ 'cylindres'|trans }}\r\n </span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Transmission'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.transmission }}</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Capacité du moteur'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">\r\n {{ annonce.moteur | number_format(0, ',', ' ') }}\r\n </span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Carburant'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.carburants }}</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Numéro de châssis'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.numeroChassis }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Accélération'|trans }} :</span>\r\n <span class="font-bold text-slate-400 text-right sm:text-left flex-1">---</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Kilométrage'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.kilometrage }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Emission CO2'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">\r\n {% if annonce.hasCO2 %}\r\n {{ annonce.hasCO2 }}\r\n {% else %}\r\n <span class="text-slate-400">---</span>\r\n {% endif %}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- ====== APPARENCE ET CONDITION ===== -->\r\n <div class="border border-slate-200 rounded-sm overflow-hidden bg-white shadow-2xs">\r\n <div class="bg-slate-100/90 border-l-4 border-orange-500 px-3.5 py-2">\r\n <h4 class="font-black text-xs sm:text-sm text-blue-950 uppercase tracking-wide">\r\n {{ 'Apparence et Condition'|trans }}\r\n </h4>\r\n </div>\r\n <div class="divide-y divide-slate-200 text-xs sm:text-sm">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Couleur extérieure'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.couleurExt }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Couleur intérieure'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.couleurInt }}</span>\r\n </div>\r\n </div>\r\n <div class="grid grid-cols-1 sm:grid-cols-1 divide-y divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Etat'|trans }} :</span>\r\n <span class="font-bold text-emerald-600 text-right sm:text-left flex-1">{{ annonce.etats }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- ====== PRIX ===== -->\r\n <div class="border border-slate-200 rounded-sm overflow-hidden bg-white shadow-2xs">\r\n <div class="bg-slate-100/90 border-l-4 border-orange-500 px-3.5 py-2">\r\n <h4 class="font-black text-xs sm:text-sm text-blue-950 uppercase tracking-wide">\r\n {{ 'Prix'|trans }}\r\n </h4>\r\n </div>\r\n <div class="p-3 sm:px-4 flex items-center justify-between sm:justify-start gap-4">\r\n <span class="text-slate-600 font-medium text-xs sm:text-sm w-44 shrink-0">{{ 'Prix'|trans }} :</span>\r\n <span class="font-black text-orange-600 text-base sm:text-lg tracking-tight">\r\n {{ annonce.price | number_format(0, ',', ' ') }} {{ annonce.device }}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <!-- ====== LOCALISATION ===== -->\r\n <div class="border border-slate-200 rounded-sm overflow-hidden bg-white shadow-2xs">\r\n <div class="bg-slate-100/90 border-l-4 border-orange-500 px-3.5 py-2">\r\n <h4 class="font-black text-xs sm:text-sm text-blue-950 uppercase tracking-wide">\r\n {{ 'Localisation'|trans }}\r\n </h4>\r\n </div>\r\n <div class="divide-y divide-slate-200 text-xs sm:text-sm">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 divide-y sm:divide-y-0 sm:divide-x divide-slate-200">\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Région'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.regions }}</span>\r\n </div>\r\n <div class="flex items-center justify-between p-2.5 sm:px-4 bg-white hover:bg-slate-50/50">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Ville'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.villes }}</span>\r\n </div>\r\n </div>\r\n <div class="p-2.5 sm:px-4 flex items-center justify-between sm:justify-start gap-4 bg-white">\r\n <span class="text-slate-600 font-medium w-44 shrink-0">{{ 'Commune'|trans }} :</span>\r\n <span class="font-bold text-blue-950 text-right sm:text-left flex-1">{{ annonce.communes }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id="tab-caracteristiques" class="tab-panel hidden space-y-3 animate-in fade-in">\r\n \r\n <div id="accordionSections" class="space-y-3">\r\n {% if annonce.category == 'auto' %}\r\n \r\n {% for section, items in {\r\n 'Carrosserie': annonce.carosserieEquip,\r\n 'Transmission': annonce.transmissionEquip,\r\n 'Intérieur': annonce.InterieurEquip,\r\n 'Extérieur': annonce.exterieurEquip,\r\n 'Électroniques': annonce.electroniqueEquip,\r\n 'Dispositif de sécurité': annonce.dispoSecurite\r\n } %}\r\n {% if items is defined and items is not empty %}\r\n <div class="border rounded-md overflow-hidden transition-all duration-200 bg-white shadow-2xs border-slate-200">\r\n <!-- BOUTON DE L'ACCORDÉON -->\r\n <button type="button" \r\n class="w-full flex items-center justify-between p-3.5 font-black text-xs sm:text-sm uppercase tracking-wide transition-all cursor-pointer select-none bg-blue-950 text-white"\r\n data-toggle="collapse" \r\n data-target="#collapseAuto{{ loop.index }}" \r\n aria-expanded="{% if loop.first %}true{% else %}false{% endif %}" \r\n aria-controls="collapseAuto{{ loop.index }}">\r\n <span class="flex items-center gap-2">\r\n <span class="w-2 h-2 rounded-full bg-orange-500"></span>\r\n <span>{{ section|trans }}</span>\r\n </span>\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down w-5 h-5 text-orange-400 transition-transform duration-200{% if loop.first %} rotate-180{% endif %}" aria-hidden="true">\r\n <path d="m6 9 6 6 6-6"></path>\r\n </svg>\r\n </button>\r\n \r\n <!-- CONTENU DE L'ACCORDÉON (Sans la classe 'collapse') -->\r\n <div id="collapseAuto{{ loop.index }}" class="accordion-content {% if not loop.first %}hidden{% endif %}" data-parent="#accordionSections">\r\n <div class="p-4 bg-slate-50/50 border-t border-slate-200">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-2.5">\r\n {% for item in items %}\r\n <div class="bg-white border border-slate-200 hover:border-orange-500 hover:bg-orange-50/30 text-slate-700 hover:text-blue-950 text-center py-2.5 px-3 rounded-sm font-semibold text-xs sm:text-sm shadow-2xs transition-all cursor-default">\r\n {{ item }}\r\n </div>\r\n {% endfor %}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {% endif %}\r\n {% endfor %}\r\n \r\n {% elseif annonce.category == 'moto' %}\r\n \r\n {% for section, items in {\r\n 'Extérieur': annonce.intMoto,\r\n 'Électroniques': annonce.electroMoto,\r\n 'Dispositif de sécurité': annonce.disposecMoto,\r\n 'Dispositif de confort': annonce.dispconfMoto\r\n } %}\r\n {% if items is defined and items is not empty %}\r\n <div class="border rounded-md overflow-hidden transition-all duration-200 bg-white shadow-2xs border-slate-200">\r\n <button type="button" \r\n class="w-full flex items-center justify-between p-3.5 font-black text-xs sm:text-sm uppercase tracking-wide transition-all cursor-pointer select-none bg-blue-950 text-white"\r\n data-toggle="collapse" \r\n data-target="#collapseMoto{{ loop.index }}" \r\n aria-expanded="{% if loop.first %}true{% else %}false{% endif %}" \r\n aria-controls="collapseMoto{{ loop.index }}">\r\n <span class="flex items-center gap-2">\r\n <span class="w-2 h-2 rounded-full bg-orange-500"></span>\r\n <span>{{ section|trans }}</span>\r\n </span>\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down w-5 h-5 text-orange-400 transition-transform duration-200{% if loop.first %} rotate-180{% endif %}" aria-hidden="true">\r\n <path d="m6 9 6 6 6-6"></path>\r\n </svg>\r\n </button>\r\n \r\n <div id="collapseMoto{{ loop.index }}" class="accordion-content {% if not loop.first %}hidden{% endif %}" data-parent="#accordionSections">\r\n <div class="p-4 bg-slate-50/50 border-t border-slate-200">\r\n <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-2.5">\r\n {% for item in items %}\r\n <div class="bg-white border border-slate-200 hover:border-orange-500 hover:bg-orange-50/30 text-slate-700 hover:text-blue-950 text-center py-2.5 px-3 rounded-sm font-semibold text-xs sm:text-sm shadow-2xs transition-all cursor-default">\r\n {{ item }}\r\n </div>\r\n {% endfor %}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n {% endif %}\r\n {% endfor %}\r\n \r\n {% endif %}\r\n </div>\r\n \r\n </div>\r\n <div id="tab-infos-generales" class="tab-panel hidden space-y-4 animate-in fade-in text-xs sm:text-sm text-slate-800">\r\n \r\n {# Spécifications Techniques #}\r\n {% if annonce.specificationtechniques is defined and annonce.specificationtechniques is not empty %}\r\n <div class="p-4 bg-slate-50 border border-slate-200 rounded-md space-y-3">\r\n <div class="flex items-center gap-2 font-bold text-blue-950 text-sm sm:text-base border-b border-slate-200 pb-2">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu w-5 h-5 text-orange-500" aria-hidden="true">\r\n <rect width="16" height="16" x="4" y="4" rx="2"></rect>\r\n <rect width="6" height="6" x="9" y="9" rx="1"></rect>\r\n <path d="M15 2v2"></path>\r\n <path d="M15 20v2"></path>\r\n <path d="M2 15h2"></path>\r\n <path d="M2 9h2"></path>\r\n <path d="M20 15h2"></path>\r\n <path d="M20 9h2"></path>\r\n <path d="M9 2v2"></path>\r\n <path d="M9 20v2"></path>\r\n </svg>\r\n <span>{{ 'Spécifications Techniques'|trans }}</span>\r\n </div>\r\n <div class="prose prose-slate max-w-none text-xs sm:text-sm leading-relaxed text-slate-700">\r\n {{ annonce.specificationtechniques | raw }}\r\n </div>\r\n </div>\r\n {% endif %}\r\n \r\n {# Informations Générales #}\r\n {% if annonce.infosgenerales is defined and annonce.infosgenerales is not empty %}\r\n <div class="p-4 bg-slate-50 border border-slate-200 rounded-md space-y-3">\r\n <div class="flex items-center gap-2 font-bold text-blue-950 text-sm sm:text-base border-b border-slate-200 pb-2">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check w-5 h-5 text-emerald-600" aria-hidden="true">\r\n <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path>\r\n <path d="m9 12 2 2 4-4"></path>\r\n </svg>\r\n <span>{{ 'Informations Générales'|trans }}</span>\r\n </div>\r\n <div class="prose prose-slate max-w-none text-xs sm:text-sm leading-relaxed text-slate-700">\r\n {{ annonce.infosgenerales | raw }}\r\n </div>\r\n </div>\r\n {% endif %}\r\n \r\n </div>\r\n <div id="tab-emplacement" class="tab-panel hidden space-y-4 animate-in fade-in"> \r\n {# Carte avec overlay d'adresse #}\r\n <div class="relative rounded-lg overflow-hidden border border-slate-300 shadow-md bg-slate-100">\r\n \r\n {# Badge d'adresse en surimpression #}\r\n <div class="absolute top-3 sm:top-4 left-3 sm:left-4 z-10 bg-white/95 backdrop-blur-xs px-3.5 py-2 rounded-md shadow-lg border border-slate-200 flex items-center gap-2 max-w-[90%] pointer-events-auto">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-map-pin w-4 h-4 sm:w-5 sm:h-5 text-red-600 fill-red-600 shrink-0" aria-hidden="true">\r\n <path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"></path>\r\n <circle cx="12" cy="10" r="3"></circle>\r\n </svg>\r\n <span class="text-xs sm:text-sm font-black text-slate-900 tracking-tight truncate">\r\n {{ annonce.address }}{% if annonce.communes %}, {{ annonce.communes }}{% endif %}{% if annonce.villes %}, {{ annonce.villes }}{% endif %}{% if annonce.regions %}, {{ annonce.regions }}{% endif %}\r\n </span>\r\n </div>\r\n \r\n {# Iframe Google Maps dynamique (Lat/Lon) #}\r\n {% if annonce.lat and annonce.lon %}\r\n <iframe src="https://maps.google.com/maps?q={{ annonce.lat }},{{ annonce.lon }}&hl=fr&z=15&output=embed" \r\n width="100%" \r\n height="450" \r\n allowfullscreen="" \r\n loading="lazy" \r\n referrerpolicy="no-referrer-when-downgrade" \r\n class="w-full h-[380px] sm:h-[460px] block border-0" \r\n title="Carte de localisation - {{ annonce.address }}">\r\n </iframe>\r\n {% else %}\r\n <iframe src="https://maps.google.com/maps?q={{ (annonce.address ~ ', ' ~ annonce.villes ~ ', ' ~ annonce.regions)|url_encode }}&hl=fr&z=14&output=embed" \r\n width="100%" \r\n height="450" \r\n allowfullscreen="" \r\n loading="lazy" \r\n referrerpolicy="no-referrer-when-downgrade" \r\n class="w-full h-95 sm:h-115 block border-0" \r\n title="Carte de localisation - {{ annonce.address }}">\r\n </iframe>\r\n {% endif %}\r\n </div>\r\n \r\n {# Carte de contact & Itinéraire #}\r\n <div class="p-4 sm:p-5 bg-linear-to-r from-blue-950 via-blue-900 to-slate-900 text-white rounded-lg border border-blue-800/80 shadow-md flex flex-col md:flex-row md:items-center justify-between gap-4">\r\n <div class="space-y-1">\r\n <div class="flex items-center gap-2">\r\n <div class="w-2.5 h-2.5 rounded-full bg-orange-500 animate-ping"></div>\r\n <h4 class="text-sm font-black text-white uppercase tracking-wider">Localisation & Visite sur Place</h4>\r\n </div>\r\n <p class="text-xs text-slate-300">\r\n <strong class="text-orange-400">Adresse :</strong> \r\n {{ annonce.address }}{% if annonce.communes %}, Commune de {{ annonce.communes }}{% endif %}{% if annonce.villes %}, {{ annonce.villes }}{% endif %}{% if annonce.regions %}, {{ annonce.regions }}{% endif %}\r\n </p>\r\n <p class="text-[11px] text-slate-400">Horaires : Du Lundi au Samedi de 08h30 à 19h00 • Dimanche sur rendez-vous</p>\r\n </div>\r\n \r\n <div class="flex flex-wrap items-center gap-2.5">\r\n <a href="{% if annonce.lat and annonce.lon %}https://maps.google.com/maps?daddr={{ annonce.lat }},{{ annonce.lon }}{% else %}https://maps.google.com/maps?daddr={{ (annonce.address ~ ', ' ~ annonce.villes)|url_encode }}{% endif %}" \r\n target="_blank" \r\n rel="noopener noreferrer" \r\n class="px-4 py-2.5 bg-orange-500 hover:bg-orange-600 text-white font-black text-xs uppercase tracking-wider rounded-md flex items-center gap-2 shadow-md transition-all cursor-pointer hover:scale-105 active:scale-95" \r\n title="Calculer l'itinéraire">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-navigation w-4 h-4" aria-hidden="true">\r\n <polygon points="3 11 22 2 13 21 11 13 3 11"></polygon>\r\n </svg>\r\n <span>Itinéraire Google Maps</span>\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link w-3.5 h-3.5 opacity-80" aria-hidden="true">\r\n <path d="M15 3h6v6"></path>\r\n <path d="M10 14 21 3"></path>\r\n <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>\r\n </svg>\r\n </a>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <section class="pt-2 space-y-4">\r\n {# En-tête de section avec navigation #}\r\n <div class="flex items-center justify-between">\r\n <div class="flex items-center gap-2">\r\n <div class="w-2.5 h-5 bg-orange-500 rounded-sm"></div>\r\n <h3 class="text-xl font-black text-orange-600 uppercase tracking-tight">\r\n {{ 'ANNONCES SIMILAIRES'|trans }}\r\n </h3>\r\n </div>\r\n <div class="flex items-center gap-1.5">\r\n <button type="button" \r\n class="w-8 h-8 rounded-md bg-blue-950 text-white hover:bg-orange-500 flex items-center justify-center transition-colors cursor-pointer shadow-sm" \r\n aria-label="{{ 'Précédent'|trans }}" \r\n title="{{ 'Annonces précédentes'|trans }}"\r\n data-carousel-prev>\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4" aria-hidden="true">\r\n <path d="m15 18-6-6 6-6"></path>\r\n </svg>\r\n </button>\r\n <button type="button" \r\n class="w-8 h-8 rounded-md bg-blue-950 text-white hover:bg-orange-500 flex items-center justify-center transition-colors cursor-pointer shadow-sm" \r\n aria-label="{{ 'Suivant'|trans }}" \r\n title="{{ 'Annonces suivantes'|trans }}"\r\n data-carousel-next>\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4" aria-hidden="true">\r\n <path d="m9 18 6-6-6-6"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n {# Grille des annonces similaires #}\r\n {% if annoncesSimilar is empty %}\r\n {% include "/annonce_by_category/noannonce.html.twig" %}\r\n {% else %}\r\n {% set current_route = app.request.attributes.get('_route')|trim %}\r\n \r\n <div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 w-full! similarads">\r\n {% for annonce in annoncesSimilar %}\r\n {% set vehicle_title = (annonce.marques|default('') ~ ' ' ~ annonce.modeles|default(''))|trim %}\r\n {% set vehicle_title = vehicle_title ? vehicle_title : 'Véhicule'|trans %}\r\n \r\n {% set target_url = (current_route == 'app_vitrines_show_annonce') \r\n ? path('app_vitrines_show_annonce', {'proSlug': annonce.user.slug, 'annuaireId': annuaire.id, 'id': annonce.id, 'slug': annonce.slug}) \r\n : path('app_show_annonce', {'_locale': app.request.locale, 'id': annonce.id, 'slug': annonce.slug}) \r\n %}\r\n \r\n <div class="bg-white rounded-2xl border border-slate-200 shadow-sm hover:shadow-xl transition-all duration-300 overflow-hidden flex flex-col justify-between group h-full">\r\n <div>\r\n {# Zone Image + Overlay Interactif au Hover #}\r\n <div class="relative h-48 overflow-hidden bg-slate-900 group/img">\r\n {# Image principale #}\r\n {% if annonce.pictures is defined and annonce.pictures|length > 0 %}\r\n {% set picture = annonce.pictures[0] %}\r\n <img src="{{ vich_uploader_asset(picture, 'imageFile') }}" \r\n alt="{{ vehicle_title }}" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500">\r\n {% else %}\r\n <img src="{{ asset('images/default-car.jpg') }}" \r\n alt="{{ vehicle_title }}" \r\n loading="lazy" \r\n decoding="async" \r\n class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500">\r\n {% endif %}\r\n \r\n {# Badge Compteur de Photos (toujours visible) #}\r\n <div class="absolute top-2.5 right-2.5 z-10 bg-blue-950/80 backdrop-blur-xs text-white text-[10px] font-bold px-2 py-1 rounded flex items-center gap-1 pointer-events-none">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-3 h-3 text-orange-400" aria-hidden="true">\r\n <path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"></path>\r\n <circle cx="12" cy="13" r="3"></circle>\r\n </svg>\r\n <span>{{ annonce.pictures|length|default(0) }} {{ 'photos'|trans }}</span>\r\n </div>\r\n \r\n {# Overlay Orange (Visible au hover) #}\r\n <div class="absolute inset-0 bg-orange-600/90 backdrop-blur-[2px] opacity-0 group-hover:opacity-100 transition-all duration-300 z-20 flex flex-col items-center justify-center gap-3 p-3">\r\n \r\n {# Boutons d'Action au Hover #}\r\n <div class="flex items-center gap-2">\r\n {# Bouton Détails #}\r\n <a href="{{ target_url }}" class="w-9 h-9 rounded-full bg-white text-orange-600 hover:bg-orange-700 hover:text-white shadow-lg flex items-center justify-center transition-all duration-200 hover:scale-110" title="{{ 'Voir détail'|trans }}">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4">\r\n <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path>\r\n <circle cx="12" cy="12" r="3"></circle>\r\n </svg>\r\n </a>\r\n \r\n {# Bouton Recommander / Partager #}\r\n <button type="button" data-target="#exampleModal" title="{{ 'Recommander à un ami'|trans }}" class="w-9 h-9 rounded-full bg-white text-orange-600 hover:bg-orange-700 hover:text-white shadow-lg flex items-center justify-center transition-all duration-200 hover:scale-110 compare_pgs loadModalBtn" data-id="{{ annonce.id }}">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4">\r\n <circle cx="18" cy="5" r="3"></circle>\r\n <circle cx="6" cy="12" r="3"></circle>\r\n <circle cx="18" cy="19" r="3"></circle>\r\n <line x1="8.59" x2="15.42" y1="13.51" y2="17.49"></line>\r\n <line x1="15.41" x2="8.59" y1="6.51" y2="10.49"></line>\r\n </svg>\r\n </button>\r\n \r\n {# Bouton Favoris #}\r\n <button type="button" data-target="#favorisModal" title="{{ 'Ajouter aux favoris'|trans }}" class="w-9 h-9 rounded-full bg-white text-orange-600 hover:bg-rose-500 hover:text-white shadow-lg flex items-center justify-center transition-all duration-200 hover:scale-110 addToFavoritesBtn compare_pgs" data-id="{{ annonce.id }}">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4">\r\n <path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"></path>\r\n </svg>\r\n </button>\r\n \r\n {# Bouton Comparateur #}\r\n {% if current_route != 'app_vitrines_show_annonce' %}\r\n <a href="{{ path('annonce_compares', {'_locale': app.request.locale, 'id': annonce.id}) }}" title="{{ 'Ajouter au comparateur'|trans }}" class="w-9 h-9 rounded-full bg-white text-orange-600 hover:bg-blue-900 hover:text-white shadow-lg flex items-center justify-center transition-all duration-200 hover:scale-110 compare_pgs compare-btn" data-id="{{ annonce.id }}" data-url="{{ path('annonce_compares', {'_locale': app.request.locale, 'id': annonce.id}) }}">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4">\r\n <circle cx="18" cy="18" r="3"></circle>\r\n <circle cx="6" cy="6" r="3"></circle>\r\n <path d="M13 6h3a2 2 0 0 1 2 2v7"></path>\r\n <path d="M11 18H8a2 2 0 0 1-2-2V9"></path>\r\n </svg>\r\n </a>\r\n {% endif %}\r\n </div>\r\n {# Badges d'informations (Année, Boîte, Km) affichés au hover dans l'overlay #}\r\n <div class="absolute bottom-2 flex flex-wrap items-center justify-center gap-1.5 text-[11px] font-bold">\r\n {% if annonce.year is defined and annonce.year %}\r\n <span class="px-2.5 py-1 rounded-md bg-white/20 text-white border border-white/30 shadow-xs">\r\n {{ annonce.year }}\r\n </span>\r\n {% endif %}\r\n {% if annonce.transmission is defined and annonce.transmission %}\r\n <span class="px-2.5 py-1 rounded-md bg-white/20 text-white border border-white/30 shadow-xs">\r\n {{ annonce.transmission|replace({'vitesses': 'V', 'vitesse': 'V', 'Vitesses': 'V', 'Vitesse': 'V'}) }}\r\n </span>\r\n {% endif %}\r\n {% if annonce.kilometrage is defined and annonce.kilometrage is not null %}\r\n <span class="px-2.5 py-1 rounded-md bg-white/20 text-white border border-white/30 shadow-xs">\r\n {{ annonce.kilometrage|number_format(0, ',', ' ') }} km\r\n </span>\r\n {% endif %}\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n {# Contenu principal sous l'image #}\r\n <div class="p-4">\r\n <h3 class="font-extrabold text-lg text-slate-900 group-hover:text-orange-600 transition-colors line-clamp-1 text-center">\r\n <a href="{{ target_url }}">\r\n {{ vehicle_title }}\r\n </a>\r\n </h3>\r\n </div>\r\n </div>\r\n \r\n {# Pied de carte : Prix du véhicule #}\r\n <div class="bg-orange-600 text-white text-center py-2.5 px-3 font-black text-sm tracking-wide shadow-inner flex items-center justify-center gap-2 group-hover:bg-orange-700 transition-colors">\r\n <span>\r\n {{ annonce.price|default(0)|number_format(0, ',', ' ') }} {{ annonce.device|default('F. CFA') }}\r\n </span>\r\n </div>\r\n </div>\r\n {% endfor %}\r\n </div>\r\n {% endif %}\r\n </section>\r\n </div>\r\n <div class="lg:col-span-4 space-y-6">\r\n <div class="bg-white rounded-lg border border-slate-200 shadow-sm overflow-hidden">\r\n <div class="bg-blue-950 text-white text-center py-3.5 px-4">\r\n <h3 class="font-black text-base sm:text-lg tracking-wider uppercase">CONTACTER LE VENDEUR</h3>\r\n </div>\r\n <div class="p-5 space-y-5">\r\n <div class="flex items-center gap-3.5 justify-center p-1">\r\n {# Avatar / Logo de l'annonceur #}\r\n {% if annonceur.typeCompte == 'Professionnel' %}\r\n <div class="w-14 h-14 rounded-full bg-blue-950 border-2 border-blue-900 p-0.5 flex flex-col items-center justify-center text-center shrink-0 shadow-md overflow-hidden">\r\n <img src="{{ vich_uploader_asset(annonceur, 'logoimage') }}" \r\n alt="{{ annonceur.nomProfessionel }}" \r\n class="w-full h-full object-cover rounded-full"\r\n loading="lazy">\r\n </div>\r\n {% endif %}\r\n {# Informations de l'annonceur #}\r\n <div class="space-y-1">\r\n {# Nom / Raison sociale #}\r\n <h4 class="text-lg font-black text-blue-950 leading-tight">\r\n {% if annonceur.typeCompte == 'Professionnel' %}\r\n {{ annonceur.nomProfessionel }}\r\n {% else %}\r\n {{ annonceur.prenom }} {{ annonceur.nom }}\r\n {% endif %}\r\n </h4>\r\n \r\n {# Statut & Badges #}\r\n <div class="flex items-center flex-wrap gap-2">\r\n {% if annonceur.typeCompte == 'Professionnel' %}\r\n <span class="text-[10px] text-slate-500 font-bold">{{ 'Vendeur'|trans }}</span>\r\n <span class="bg-orange-600 text-white text-[10px] font-extrabold px-2 py-0.5 rounded-xs uppercase tracking-wider">\r\n PRO\r\n </span>\r\n {% elseif annonceur.typeCompte == 'Particulier' %}\r\n {% if (annonceur.civility == 'Madame') or (annonceur.civility == 'Mademoiselle') %}\r\n <span class="text-[10px] text-slate-500 font-bold">{{ 'Vendeuse'|trans }}</span>\r\n <span class="bg-blue-900 text-white text-[10px] font-extrabold px-2 py-0.5 rounded-xs uppercase tracking-wider">\r\n {{ 'PARTICULIERE'|trans }}\r\n </span>\r\n {% else %}\r\n <span class="text-[10px] text-slate-500 font-bold">{{ 'Vendeur'|trans }}</span>\r\n <span class="bg-blue-900 text-white text-[10px] font-extrabold px-2 py-0.5 rounded-xs uppercase tracking-wider">\r\n {{ 'PARTICULIER'|trans }}\r\n </span>\r\n {% endif %}\r\n {% endif %}\r\n \r\n {# Badge WhatsApp (Optionnel) #}\r\n <span class="inline-flex items-center gap-1 text-[10px] text-emerald-700 font-bold bg-emerald-50 px-2 py-0.5 rounded border border-emerald-200">\r\n <span class="w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse"></span>\r\n {{ 'WhatsApp disponible'|trans }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="space-y-2.5">\r\n {# 1. BOUTON CONTACTER PAR MAIL #}\r\n <button type="button" \r\n id="ctmail" \r\n data-target="#contactSellbloc" \r\n data-id="{{ annonce.id }}" \r\n aria-expanded="false" \r\n aria-controls="contactSellbloc" \r\n class="w-full py-3 px-4 bg-orange-600 hover:bg-orange-700 active:scale-98 text-white font-black text-xs sm:text-sm uppercase tracking-wider rounded-lg transition-all flex items-center justify-center gap-2 shadow-xs cursor-pointer">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4" aria-hidden="true">\r\n <path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7"></path>\r\n <rect x="2" y="4" width="20" height="16" rx="2"></rect>\r\n </svg>\r\n <span>{{ 'CONTACTER PAR MAIL'|trans }}</span>\r\n </button>\r\n \r\n {# 2. BLOC FORMULAIRE DE CONTACT (Inclus dans l'accordéon #contactSellbloc) #}\r\n <div id="contactSellbloc" data-id="{{ annonce.id }}" class="hidden p-2 sm:p-3 bg-white border border-slate-200 rounded-xl shadow-xs space-y-3.5 animate-in fade-in zoom-in-95 duration-200">\r\n \r\n <div id="contactFeedback" class="hidden text-xs text-center font-bold p-3 rounded-lg"></div>\r\n </div>\r\n \r\n {# 3. BOUTON WHATSAPP #}\r\n {% if annonceur.tel is defined and annonceur.tel %}\r\n <a id="contact-seller-whatsapp-btn" \r\n href="https://api.whatsapp.com/send?phone={{ annonceur.tel|replace({' ': '', '+': ''}) }}&text={{ ('Bonjour, je vous contacte depuis la plateforme SN TopAuto au sujet de votre annonce : "' ~ annonce.marques ~ ' ' ~ annonce.modeles ~ '" (' ~ annonce.price|number_format(0, ',', ' ') ~ ' ' ~ annonce.device ~ '). Est-elle toujours disponible ?')|url_encode }}" \r\n target="_blank" \r\n rel="noopener noreferrer" \r\n class="w-full py-3 px-4 bg-emerald-600 hover:bg-emerald-700 active:scale-98 text-white font-black text-xs sm:text-sm uppercase tracking-wider rounded-lg transition-all flex items-center justify-center gap-2.5 shadow-xs cursor-pointer" \r\n title="Discuter sur WhatsApp">\r\n <svg viewBox="0 0 24 24" width="100%" height="100%" fill="currentColor" class="w-5 h-5 text-white shrink-0" aria-hidden="true">\r\n <path d="M12.031 2C6.496 2 2 6.496 2 12.031c0 1.768.461 3.493 1.336 5.01L2 22l5.122-1.343a9.988 9.988 0 0 0 4.909 1.282h.004c5.535 0 10.031-4.496 10.031-10.031 0-2.68-1.043-5.2-2.936-7.094A9.99 9.99 0 0 0 12.031 2zm5.86 14.502c-.244.685-1.226 1.253-1.688 1.332-.462.079-1.066.113-1.724-.097-.399-.128-.915-.295-1.574-.582-2.774-1.206-4.577-4.004-4.717-4.189-.14-.185-1.134-1.509-1.134-2.879 0-1.37.718-2.043.974-2.323.256-.28.56-.35.748-.35.188 0 .375.002.539.01.173.01.405-.065.633.483.235.564.796 1.942.866 2.083.07.141.117.306.023.493-.094.187-.141.304-.28.468-.14.164-.294.366-.421.492-.141.14-.288.293-.124.575.164.282.729 1.202 1.564 1.947 1.074.958 1.977 1.256 2.259 1.396.282.14.446.117.61-.07.164-.187.704-.819.892-1.101.188-.282.376-.235.634-.141.258.094 1.643.774 1.925.915.282.14.469.211.54.329.07.117.07.68-.174 1.365z"></path>\r\n </svg>\r\n <span>{{ 'CONTACTER SUR WHATSAPP'|trans }}</span>\r\n </a>\r\n {% endif %}\r\n \r\n {# 4. BOUTON VOIR LE TÉLÉPHONE #}\r\n {% if annonceur.tel is defined and annonceur.tel %}\r\n <button id="ctphone" \r\n type="button" \r\n data-phone="{{ annonceur.tel }}" \r\n data-id="{{ annonce.id }}"\r\n class="w-full py-3 px-4 bg-blue-950 hover:bg-blue-900 active:scale-98 text-white font-black text-xs sm:text-sm uppercase tracking-wider rounded-lg transition-all flex items-center justify-center gap-2 shadow-xs cursor-pointer" \r\n title="Afficher le numéro de téléphone">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4 text-orange-400" aria-hidden="true">\r\n <path d="M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384"></path>\r\n </svg>\r\n <span id="phone-label">{{ 'VOIR LE TÉLÉPHONE'|trans }}</span>\r\n </button>\r\n {% endif %}\r\n </div>\r\n <div class="text-center pt-1 space-y-1">\r\n <span class="text-xs font-black text-blue-950 block">Ou</span><span class="text-xs font-bold text-slate-700 block">Faites-vous rappeler par le vendeur</span>\r\n </div>\r\n <form class="space-y-3 pt-1">\r\n <div class="space-y-1">\r\n <label class="text-xs font-extrabold text-slate-800 block">Prénom et Nom</label><input required="" placeholder="Prénom et Nom*" class="w-full px-3 py-2 bg-slate-50 border border-slate-200 text-xs text-slate-900 rounded-md focus:bg-white focus:outline-none focus:border-orange-500" type="text" value=""/>\r\n </div>\r\n <div class="space-y-1">\r\n <label class="text-xs font-extrabold text-slate-800 block">Téléphone</label><input required="" placeholder="Votre téléphone(ex : +221 77 800 00 00) *" class="w-full px-3 py-2 bg-slate-50 border border-slate-200 text-xs text-slate-900 rounded-md focus:bg-white focus:outline-none focus:border-orange-500" type="tel" value=""/>\r\n </div><button type="submit" class="w-full py-3 px-4 bg-orange-500 hover:bg-orange-600 active:scale-98 text-white font-black text-xs uppercase tracking-wider rounded-md transition-all flex items-center justify-center gap-2 shadow-xs cursor-pointer">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send w-4 h-4" aria-hidden="true">\r\n <path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path>\r\n <path d="m21.854 2.147-10.94 10.939"></path>\r\n </svg><span>ENVOYER</span>\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n <div class="bg-blue-950 hover:bg-orange-500 text-white p-5 rounded-xl border border-blue-900 hover:border-orange-400 shadow-md hover:shadow-2xl hover:shadow-orange-500/30 space-y-4 text-center transition-all duration-300 group cursor-default relative overflow-hidden" style="transform: none;">\r\n <div class="absolute -top-12 -right-12 w-36 h-36 bg-white/10 rounded-full blur-xl opacity-0 group-hover:opacity-100 group-hover:scale-150 transition-all duration-500 pointer-events-none"></div><h4 class="text-sm font-black uppercase tracking-wider text-white flex items-center justify-center gap-2 drop-shadow-xs">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-fuel w-4 h-4 text-orange-400 group-hover:text-white group-hover:scale-125 group-hover:rotate-12 transition-all duration-300" aria-hidden="true">\r\n <path d="M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5"></path>\r\n <path d="M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16"></path>\r\n <path d="M2 21h13"></path>\r\n <path d="M3 9h11"></path>\r\n </svg>\r\n <span>Cote de consommation de carburant</span>\r\n </h4><div class="flex items-center justify-around py-3.5 border-y border-blue-900/80 group-hover:border-white/30 bg-blue-900/50 group-hover:bg-orange-600/30 rounded-xl px-2 transition-all duration-300">\r\n <div class="space-y-0.5 group-hover:translate-y-[-2px] transition-transform duration-300">\r\n <span class="text-xs font-black text-blue-200 group-hover:text-orange-100 uppercase tracking-wider block transition-colors duration-300">Ville</span><span class="text-2xl font-black text-orange-400 group-hover:text-white drop-shadow-sm transition-colors duration-300">{{ annonce.consommationville }}</span>\r\n </div>\r\n <div class="w-12 h-12 rounded-full border border-blue-800 group-hover:border-white/60 flex items-center justify-center text-orange-400 group-hover:text-orange-600 bg-blue-900/80 group-hover:bg-white shadow-md group-hover:scale-115 group-hover:rotate-12 transition-all duration-300">\r\n <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-fuel w-6 h-6" aria-hidden="true">\r\n <path d="M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5"></path>\r\n <path d="M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16"></path>\r\n <path d="M2 21h13"></path>\r\n <path d="M3 9h11"></path>\r\n </svg>\r\n </div>\r\n <div class="space-y-0.5 group-hover:translate-y-[-2px] transition-transform duration-300">\r\n <span class="text-xs font-black text-blue-200 group-hover:text-orange-100 uppercase tracking-wider block transition-colors duration-300">Autoroute</span><span class="text-2xl font-black text-orange-400 group-hover:text-white drop-shadow-sm transition-colors duration-300">{{ annonce.consommationRoute }}</span>\r\n </div>\r\n </div>\r\n <p class="text-[14px] text-blue-200 group-hover:text-orange-50 leading-relaxed text-center px-1 font-medium transition-colors duration-300">La cote réelle variera en fonction des options, des conditions de conduite, des habitudes de conduite et de l'état du véhicule.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </main>\r\n """ -name: "addannonce/details_annonce.html.twig" -path: "/var/www/clients/client0/web1/web/topautosntest/templates/addannonce/details_annonce.html.twig" } -phpFile: "/var/www/clients/client0/web1/web/topautosntest/vendor/twig/twig/src/Extension/CoreExtension.php" -phpLine: 1902 }
in
templates/addannonce/details_annonce.html.twig
(line 1087)
{# Nom / Raison sociale #}<h4 class="text-lg font-black text-blue-950 leading-tight">{% if annonceur.typeCompte == 'Professionnel' %}{{ annonceur.nomProfessionel }}{% else %}{{ annonceur.prenom }} {{ annonceur.nom }}{% endif %}</h4>{# Statut & Badges #}<div class="flex items-center flex-wrap gap-2">
in
var/cache/dev/twig/23/2340ccaa0af8966aa432edb5be9747f3.php
::
getAttribute
(line 1999)
yield "";} else {// line 1087yield " ";yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["annonceur"]) || array_key_exists("annonceur", $context) ? $context["annonceur"] : (function () { throw new RuntimeError('Variable "annonceur" does not exist.', 1087, $this->source); })()), "prenom", [], "any", false, false, false, 1087), "html", null, true);yield " ";yield (string) $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env, $this->source, (isset($context["annonceur"]) || array_key_exists("annonceur", $context) ? $context["annonceur"] : (function () { throw new RuntimeError('Variable "annonceur" does not exist.', 1087, $this->source); })()), "nom", [], "any", false, false, false, 1087), "html", null, true);yield "";}
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 411)
$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {$this->ensureSecurityChecked();yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
var/cache/dev/twig/70/70348ae47e5a9ad31b350dadae593b7c.php
->
yield
(line 181)
// line 28yield " ";yield from $this->load("include/navs/topnav.html.twig", 28)->unwrap()->yield($context);// line 29yield " ";yield from $this->load("addannonce/details_annonce.html.twig", 29)->unwrap()->yield($context);// line 30yield " </div>";// line 32
in
vendor/twig/twig/src/Template.php
->
block_body
(line 458)
}if (null !== $template) {try {$template->ensureSecurityChecked();yield from $template->$block($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($template->getSourceContext());}
in
var/cache/dev/twig/9b/9b9ff25ed5a550e31d4db030b58c07b1.php
->
yieldBlock
(line 105)
// line 20yield " </head><body>";// line 22yield from $this->unwrap()->yieldBlock('body', $context, $blocks);// line 24yield " ";yield from $this->unwrap()->yieldBlock('javascripts', $context, $blocks);// line 27yield " </body>
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 411)
$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {$this->ensureSecurityChecked();yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
var/cache/dev/twig/a5/a5da669e304189c85a9d9412e04755e1.php
->
yield
(line 55)
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "layout.html.twig"));$this->parent = $this->load("base.html.twig", 1);yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 411)
$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {$this->ensureSecurityChecked();yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
var/cache/dev/twig/70/70348ae47e5a9ad31b350dadae593b7c.php
->
yield
(line 57)
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "addannonce/show_annonce.html.twig"));$this->parent = $this->load("layout.html.twig", 1);yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
in
vendor/twig/twig/src/Template.php
->
doDisplay
(line 411)
$context += $this->env->getGlobals();$blocks = array_merge($this->blocks, $blocks);try {$this->ensureSecurityChecked();yield from $this->doDisplay($context, $blocks);} catch (Error $e) {if (!$e->getSourceContext()) {$e->setSourceContext($this->getSourceContext());}
in
vendor/twig/twig/src/Template.php
->
yield
(line 366)
return $this->blocks;}public function display(array $context, array $blocks = []): void{foreach ($this->yield($context, $blocks) as $data) {echo $data;}}public function render(array $context): string
in
vendor/twig/twig/src/Template.php
->
display
(line 381)
ob_start();} else {ob_start(static function () { return ''; });}try {$this->display($context);} catch (\Throwable $e) {while (ob_get_level() > $level) {ob_end_clean();}
in
vendor/twig/twig/src/TemplateWrapper.php
->
render
(line 51)
yield from $this->template->yieldBlock($name, $context);}public function render(array $context = []): string{return $this->template->render($context);}/*** @return void*/
in
vendor/twig/twig/src/Environment.php
->
render
(line 333)
* @throws SyntaxError When an error occurred during compilation* @throws RuntimeError When an error occurred during rendering*/public function render($name, array $context = []): string{return $this->load($name)->render($context);}/*** Displays a template.*
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
render
(line 452)
if (null !== $block) {return $this->container->get('twig')->load($view)->renderBlock($block, $parameters);}return $this->container->get('twig')->render($view, $parameters);}private function doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response{$content = $this->doRenderView($view, $block, $parameters, $method);
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
doRenderView
(line 457)
return $this->container->get('twig')->render($view, $parameters);}private function doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response{$content = $this->doRenderView($view, $block, $parameters, $method);$response ??= new Response();if (200 === $response->getStatusCode()) {foreach ($parameters as $v) {if ($v instanceof FormInterface && $v->isSubmitted() && !$v->isValid()) {
in
vendor/symfony/framework-bundle/Controller/AbstractController.php
->
doRender
(line 257)
* If an invalid form is found in the list of parameters, a 422 status code is returned.* Forms found in parameters are auto-cast to form views.*/protected function render(string $view, array $parameters = [], ?Response $response = null): Response{return $this->doRender($view, null, $parameters, $response, __FUNCTION__);}/*** Renders a block in a view.*
$annonceur = $this->userRepository->find($annonce->getUser()->getId());$annoncesSimilar = $this->annonceRepository->findByAnnonceSimilar($annonce->getCarosseries());return $this->render('addannonce/show_annonce.html.twig', ['annonce' => $annonce,'annoncesSimilar' => $annoncesSimilar,
in
vendor/symfony/http-kernel/HttpKernel.php
->
showAnnonce
(line 181)
$this->dispatcher->dispatch($event, KernelEvents::CONTROLLER_ARGUMENTS);$controller = $event->getController();$arguments = $event->getArguments();// call controller$response = $controller(...$arguments);// viewif (!$response instanceof Response) {$event = new ViewEvent($this, $request, $type, $response, $event);$this->dispatcher->dispatch($event, KernelEvents::VIEW);
in
vendor/symfony/http-kernel/HttpKernel.php
->
handleRaw
(line 76)
$request->headers->set('X-Php-Ob-Level', (string) ob_get_level());$this->requestStack->push($request);$response = null;try {return $response = $this->handleRaw($request, $type);} catch (\Throwable $e) {if ($e instanceof \Error && !$this->handleAllThrowables) {throw $e;}
in
vendor/symfony/http-kernel/Kernel.php
->
handle
(line 208)
if (!$this->handlingHttpCache) {$this->resetServices = true;}try {return $this->getHttpKernel()->handle($request, $type, $catch);} finally {--$this->requestStackSize;}}
in
vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php
->
handle
(line 35)
) {}public function run(): int{$response = $this->kernel->handle($this->request);if (Kernel::VERSION_ID >= 60400) {$response->send(false);if (\function_exists('fastcgi_finish_request') && !$this->debug) {
in
vendor/autoload_runtime.php
->
run
(line 29)
$app = $app(...$args);exit($runtime->getRunner($app)->run());
require_once('/var/www/clients/client0/web1/web/topautosntest/vendor/autoload_runtime.php')
in
public/index.php
(line 5)
<?phpuse App\Kernel;require_once dirname(__DIR__).'/vendor/autoload_runtime.php';return function (array $context) {return new Kernel($context['APP_ENV'] ?? 'prod',(bool) ($context['APP_DEBUG'] ?? false)
Logs
| Level | Channel | Message |
|---|---|---|
| INFO 02:40:04 | request |
Matched route "_profiler". {
"route": "_profiler",
"route_parameters": {
"_route": "_profiler",
"_controller": "web_profiler.controller.profiler::panelAction",
"token": "905ba2"
},
"request_uri": "https://topautosntest.sn-topauto.com/_profiler/905ba2?panel=exception&type=request",
"method": "GET"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener::configure"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::setDefaultLocale". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::setDefaultLocale"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::configureLogoutUrlGenerator". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::configureLogoutUrlGenerator"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Knp\\Bundle\\PaginatorBundle\\Subscriber\\SlidingPaginationSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Bundle\\FrameworkBundle\\DataCollector\\RouterDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsGrantedAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "ContainerODXbxK5\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "ContainerODXbxK5\\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::onControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener::configure"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::setDefaultLocale". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::setDefaultLocale"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::configureLogoutUrlGenerator". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::configureLogoutUrlGenerator"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Knp\\Bundle\\PaginatorBundle\\Subscriber\\SlidingPaginationSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Bundle\\FrameworkBundle\\DataCollector\\RouterDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsGrantedAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "ContainerODXbxK5\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "ContainerODXbxK5\\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::onControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\Security\\Http\\Firewall\\ContextListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\WebLink\EventListener\AddLinkHeaderListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\WebLink\\EventListener\\AddLinkHeaderListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\Security\\Http\\RememberMe\\ResponseListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::removeCspHeader". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::removeCspHeader"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Bundle\\WebProfilerBundle\\EventListener\\WebDebugToolbarListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener::onResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener::configure"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::setDefaultLocale". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::setDefaultLocale"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::configureLogoutUrlGenerator". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::configureLogoutUrlGenerator"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Knp\\Bundle\\PaginatorBundle\\Subscriber\\SlidingPaginationSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Bundle\\FrameworkBundle\\DataCollector\\RouterDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsGrantedAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "ContainerODXbxK5\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "ContainerODXbxK5\\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::onControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\Security\\Http\\Firewall\\ContextListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\WebLink\EventListener\AddLinkHeaderListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\WebLink\\EventListener\\AddLinkHeaderListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\Security\\Http\\RememberMe\\ResponseListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::removeCspHeader". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::removeCspHeader"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Bundle\\WebProfilerBundle\\EventListener\\WebDebugToolbarListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener::onResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelResponse". {
"event": "kernel.response",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelResponse"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelFinishRequest". {
"event": "kernel.finish_request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelFinishRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener::configure"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\SessionListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::setDefaultLocale". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::setDefaultLocale"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\AssetMapper\AssetMapperDevServerSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\AssetMapper\\AssetMapperDevServerSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\RouterListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::configureLogoutUrlGenerator". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::configureLogoutUrlGenerator"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest". {
"event": "kernel.request",
"listener": "Symfony\\Bundle\\SecurityBundle\\Debug\\TraceableFirewallListener::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest". {
"event": "kernel.request",
"listener": "Knp\\Bundle\\PaginatorBundle\\Subscriber\\SlidingPaginationSubscriber::onKernelRequest"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Bundle\\FrameworkBundle\\DataCollector\\RouterDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". {
"event": "kernel.controller",
"listener": "Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector::onKernelController"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\Security\\Http\\EventListener\\IsGrantedAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\CacheAttributeListener::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "ContainerODXbxK5\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "ContainerODXbxK5\\RequestPayloadValueResolverGhost3590451::onKernelControllerArguments"
}
|
| DEBUG 02:40:04 | event |
Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments". {
"event": "kernel.controller_arguments",
"listener": "Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::onControllerArguments"
}
|
Stack Trace
|
RuntimeError
|
|---|
Twig\Error\RuntimeError:
Neither the property "prenom" nor one of the methods "prenom()", "getprenom()", "isprenom()", "hasprenom()" or "__call()" exist and have public access in class "App\Entity\Professionel" in "addannonce/details_annonce.html.twig" at line 1087.
at templates/addannonce/details_annonce.html.twig:1087
at Twig\Extension\CoreExtension::getAttribute()
(var/cache/dev/twig/23/2340ccaa0af8966aa432edb5be9747f3.php:1999)
at __TwigTemplate_cbd584d1c2975eed8ed64c48b6d279c2->doDisplay()
(vendor/twig/twig/src/Template.php:411)
at Twig\Template->yield()
(var/cache/dev/twig/70/70348ae47e5a9ad31b350dadae593b7c.php:181)
at __TwigTemplate_6a47796dee31b7c27ccdcd97f1384cda->block_body()
(vendor/twig/twig/src/Template.php:458)
at Twig\Template->yieldBlock()
(var/cache/dev/twig/9b/9b9ff25ed5a550e31d4db030b58c07b1.php:105)
at __TwigTemplate_517dbc70fda6583a0a582ed1f030baba->doDisplay()
(vendor/twig/twig/src/Template.php:411)
at Twig\Template->yield()
(var/cache/dev/twig/a5/a5da669e304189c85a9d9412e04755e1.php:55)
at __TwigTemplate_29138719212615a57fa231cec4536a31->doDisplay()
(vendor/twig/twig/src/Template.php:411)
at Twig\Template->yield()
(var/cache/dev/twig/70/70348ae47e5a9ad31b350dadae593b7c.php:57)
at __TwigTemplate_6a47796dee31b7c27ccdcd97f1384cda->doDisplay()
(vendor/twig/twig/src/Template.php:411)
at Twig\Template->yield()
(vendor/twig/twig/src/Template.php:366)
at Twig\Template->display()
(vendor/twig/twig/src/Template.php:381)
at Twig\Template->render()
(vendor/twig/twig/src/TemplateWrapper.php:51)
at Twig\TemplateWrapper->render()
(vendor/twig/twig/src/Environment.php:333)
at Twig\Environment->render()
(vendor/symfony/framework-bundle/Controller/AbstractController.php:452)
at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRenderView()
(vendor/symfony/framework-bundle/Controller/AbstractController.php:457)
at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRender()
(vendor/symfony/framework-bundle/Controller/AbstractController.php:257)
at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->render()
(src/Controller/AddannonceController.php:116)
at App\Controller\AddannonceController->showAnnonce()
(vendor/symfony/http-kernel/HttpKernel.php:181)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
(vendor/symfony/http-kernel/HttpKernel.php:76)
at Symfony\Component\HttpKernel\HttpKernel->handle()
(vendor/symfony/http-kernel/Kernel.php:208)
at Symfony\Component\HttpKernel\Kernel->handle()
(vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
(vendor/autoload_runtime.php:29)
at require_once('/var/www/clients/client0/web1/web/topautosntest/vendor/autoload_runtime.php')
(public/index.php:5)
|