templates/index/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}Accueil - Journal Officiel de l'Union des Comores{% endblock %}
  3. {% block body %}
  4. <!-- Hero Section avec effet de parallaxe -->
  5. <section class="relative bg-gradient-to-br from-[#006633] via-[#007a3d] to-[#008844] text-white overflow-hidden">
  6. <div class="absolute inset-0 opacity-20">
  7. <div class="absolute top-20 left-10 w-64 h-64 bg-[#00aa55] rounded-full blur-3xl"></div>
  8. <div class="absolute bottom-20 right-10 w-96 h-96 bg-[#00aa55] rounded-full blur-3xl"></div>
  9. </div>
  10. <div class="container mx-auto px-4 py-16 md:py-24 relative z-10">
  11. <div class="max-w-5xl mx-auto text-center">
  12. <!-- Badge officiel -->
  13. <div class="inline-flex items-center bg-white/10 backdrop-blur-sm rounded-full px-4 md:px-5 py-1.5 md:py-2 mb-6 md:mb-8 border border-white/20">
  14. <span class="relative flex h-2 w-2 mr-2">
  15. <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"></span>
  16. <span class="relative inline-flex rounded-full h-2 w-2 bg-green-500"></span>
  17. </span>
  18. <span class="text-xs md:text-sm font-medium">Portail officiel de l'Union des Comores</span>
  19. </div>
  20. <h1 class="text-3xl md:text-5xl lg:text-7xl font-bold mb-4 md:mb-6 leading-tight">
  21. Journal Officiel
  22. <span class="block text-transparent bg-clip-text bg-gradient-to-r from-green-200 to-emerald-200 text-2xl md:text-4xl lg:text-5xl">
  23. de l'Union des Comores
  24. </span>
  25. </h1>
  26. <p class="text-base md:text-xl text-green-100 mb-8 md:mb-10 max-w-3xl mx-auto leading-relaxed hidden sm:block">
  27. La plateforme officielle de publication et de consultation des textes juridiques,
  28. des actes administratifs et des annonces légales de la République.
  29. </p>
  30. <!-- Barre de recherche professionnelle -->
  31. <div class="max-w-3xl mx-auto">
  32. <form action="{{ path('app_search') }}" method="GET" class="relative">
  33. <div class="relative">
  34. <i class="fas fa-search absolute left-4 md:left-5 top-1/2 transform -translate-y-1/2 text-gray-400 text-base md:text-lg"></i>
  35. <input type="text"
  36. name="q"
  37. placeholder="Rechercher une loi, un décret, un arrêté..."
  38. class="w-full pl-10 md:pl-14 pr-36 md:pr-44 py-3 md:py-5 text-gray-800 text-sm md:text-lg rounded-full border-none shadow-2xl focus:outline-none focus:ring-4 focus:ring-[#006633]/50 focus:shadow-xl transition-all duration-300"
  39. value="{{ app.request.query.get('q') }}">
  40. <div class="absolute right-1 md:right-2 top-1/2 transform -translate-y-1/2 flex gap-1">
  41. <select name="type" class="hidden sm:block px-2 md:px-3 py-1.5 md:py-2 text-gray-700 text-xs md:text-sm rounded-full border border-gray-200 focus:outline-none focus:ring-2 focus:ring-[#006633] bg-white">
  42. <option value="">Tous</option>
  43. <option value="loi">Lois</option>
  44. <option value="decret">Décrets</option>
  45. <option value="arrete">Arrêtés</option>
  46. <option value="annonce">Annonces</option>
  47. </select>
  48. <button type="submit" class="bg-gradient-to-r from-[#006633] to-[#008844] text-white px-3 md:px-5 py-1.5 md:py-2 rounded-full font-semibold hover:from-[#004d26] hover:to-[#006633] transition-all duration-300 shadow-md hover:shadow-lg text-sm md:text-base">
  49. <i class="fas fa-search md:mr-1"></i>
  50. <span class="hidden md:inline">OK</span>
  51. </button>
  52. </div>
  53. </div>
  54. </form>
  55. </div>
  56. <!-- Liens rapides - BOUTONS VERTS PROFESSIONNELS -->
  57. <div class="mt-8 md:mt-10 flex flex-wrap justify-center gap-3 md:gap-4">
  58. <a href="{{ path('app_journal_officiel') }}" class="bg-gradient-to-r from-[#006633] to-[#008844] hover:from-[#004d26] hover:to-[#006633] transition-all duration-300 px-5 md:px-6 py-2.5 md:py-3 rounded-full font-semibold text-white shadow-lg hover:shadow-xl flex items-center gap-2 text-sm md:text-base">
  59. <i class="fas fa-newspaper text-sm md:text-base"></i>
  60. Derniers numéros
  61. </a>
  62. <a href="{{ path('app_munganyo') }}" class="bg-gradient-to-r from-[#006633] to-[#008844] hover:from-[#004d26] hover:to-[#006633] transition-all duration-300 px-5 md:px-6 py-2.5 md:py-3 rounded-full font-semibold text-white shadow-lg hover:shadow-xl flex items-center gap-2 text-sm md:text-base">
  63. <i class="fas fa-file-alt text-sm md:text-base"></i>
  64. Actes exécutifs
  65. </a>
  66. <a href="{{ path('app_publications') }}" class="bg-gradient-to-r from-[#006633] to-[#008844] hover:from-[#004d26] hover:to-[#006633] transition-all duration-300 px-5 md:px-6 py-2.5 md:py-3 rounded-full font-semibold text-white shadow-lg hover:shadow-xl flex items-center gap-2 text-sm md:text-base">
  67. <i class="fas fa-bullhorn text-sm md:text-base"></i>
  68. Publier une annonce
  69. </a>
  70. </div>
  71. <!-- Informations supplémentaires professionnelles -->
  72. </div>
  73. </div>
  74. <!-- Vague décorative -->
  75. <div class="absolute bottom-0 left-0 right-0">
  76. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320" class="w-full">
  77. <path fill="#f3f4f6" fill-opacity="1" d="M0,96L48,112C96,128,192,160,288,160C384,160,480,128,576,122.7C672,117,768,139,864,154.7C960,171,1056,181,1152,170.7C1248,160,1344,128,1392,112L1440,96L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path>
  78. </svg>
  79. </div>
  80. </section>
  81. <!-- Section Statistiques -->
  82. <section class="py-12 md:py-16 bg-gray-50">
  83. <div class="container mx-auto px-4">
  84. <div class="grid grid-cols-2 md:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-8">
  85. <div class="bg-white rounded-2xl shadow-lg p-4 md:p-6 text-center transform hover:-translate-y-2 transition-all duration-300">
  86. <div class="w-12 h-12 md:w-16 md:h-16 bg-[#006633]/10 rounded-full flex items-center justify-center mx-auto mb-2 md:mb-4">
  87. <i class="fas fa-file-alt text-xl md:text-2xl text-[#006633]"></i>
  88. </div>
  89. <div class="text-2xl md:text-4xl font-bold text-gray-800 mb-1 md:mb-2">12,5K</div>
  90. <div class="text-gray-600 font-medium text-xs md:text-base">Actes publiés</div>
  91. <div class="text-xs text-gray-400 mt-1 hidden md:block">Lois, décrets, arrêtés</div>
  92. </div>
  93. <div class="bg-white rounded-2xl shadow-lg p-4 md:p-6 text-center transform hover:-translate-y-2 transition-all duration-300">
  94. <div class="w-12 h-12 md:w-16 md:h-16 bg-[#006633]/10 rounded-full flex items-center justify-center mx-auto mb-2 md:mb-4">
  95. <i class="fas fa-calendar-alt text-xl md:text-2xl text-[#006633]"></i>
  96. </div>
  97. <div class="text-2xl md:text-4xl font-bold text-gray-800 mb-1 md:mb-2">245</div>
  98. <div class="text-gray-600 font-medium text-xs md:text-base">Numéros JO</div>
  99. <div class="text-xs text-gray-400 mt-1 hidden md:block">Depuis 1975</div>
  100. </div>
  101. <div class="bg-white rounded-2xl shadow-lg p-4 md:p-6 text-center transform hover:-translate-y-2 transition-all duration-300">
  102. <div class="w-12 h-12 md:w-16 md:h-16 bg-[#006633]/10 rounded-full flex items-center justify-center mx-auto mb-2 md:mb-4">
  103. <i class="fas fa-users text-xl md:text-2xl text-[#006633]"></i>
  104. </div>
  105. <div class="text-2xl md:text-4xl font-bold text-gray-800 mb-1 md:mb-2">1,3K</div>
  106. <div class="text-gray-600 font-medium text-xs md:text-base">Abonnés actifs</div>
  107. <div class="text-xs text-gray-400 mt-1 hidden md:block">Institutions & particuliers</div>
  108. </div>
  109. <div class="bg-white rounded-2xl shadow-lg p-4 md:p-6 text-center transform hover:-translate-y-2 transition-all duration-300">
  110. <div class="w-12 h-12 md:w-16 md:h-16 bg-[#006633]/10 rounded-full flex items-center justify-center mx-auto mb-2 md:mb-4">
  111. <i class="fas fa-chart-line text-xl md:text-2xl text-[#006633]"></i>
  112. </div>
  113. <div class="text-2xl md:text-4xl font-bold text-gray-800 mb-1 md:mb-2">45K</div>
  114. <div class="text-gray-600 font-medium text-xs md:text-base">Consultations/mois</div>
  115. <div class="text-xs text-gray-400 mt-1 hidden md:block">+23% vs mois dernier</div>
  116. </div>
  117. </div>
  118. </div>
  119. </section>
  120. <!-- Derniers numéros du Journal Officiel -->
  121. <section class="py-12 md:py-20">
  122. <div class="container mx-auto px-4">
  123. <div class="text-center mb-8 md:mb-12">
  124. <h2 class="text-2xl md:text-4xl font-bold text-gray-800 mb-4">Derniers numéros publiés</h2>
  125. <div class="w-24 h-1 bg-gradient-to-r from-[#006633] to-[#008844] mx-auto rounded-full"></div>
  126. <p class="text-gray-600 mt-4 max-w-2xl mx-auto text-sm md:text-base hidden md:block">
  127. Consultez les dernières éditions du Journal Officiel avec tous les actes et annonces officielles
  128. </p>
  129. </div>
  130. <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-6">
  131. <!-- Carte JO 1 -->
  132. <div class="group bg-white rounded-2xl shadow-lg overflow-hidden transform hover:-translate-y-2 transition-all duration-300" data-jo-number="JO 2026-015" data-jo-date="01 Mars 2026" data-jo-pdf="pdfs/JO_2026_015.pdf">
  133. <div class="bg-gradient-to-r from-[#006633] to-[#008844] p-4 md:p-5">
  134. <div class="flex justify-between items-start text-white">
  135. <div>
  136. <i class="fas fa-gavel text-2xl md:text-3xl opacity-80"></i>
  137. <div class="text-xl md:text-3xl font-bold mt-2 md:mt-3">JO 2026-015</div>
  138. </div>
  139. <div class="text-right">
  140. <div class="text-xs md:text-sm">01 Mars 2026</div>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="p-4 md:p-5">
  145. <div class="space-y-2 mb-3 md:mb-4">
  146. <div class="flex justify-between text-xs md:text-sm">
  147. <span class="text-gray-500"><i class="fas fa-file-alt mr-1"></i> Actes publiés</span>
  148. <span class="font-semibold text-gray-700">12 actes</span>
  149. </div>
  150. <div class="flex justify-between text-xs md:text-sm hidden sm:flex">
  151. <span class="text-gray-500"><i class="fas fa-building mr-1"></i> Institutions</span>
  152. <span class="font-semibold text-gray-700">5 émetteurs</span>
  153. </div>
  154. <div class="flex justify-between text-xs md:text-sm hidden sm:flex">
  155. <span class="text-gray-500"><i class="fas fa-eye mr-1"></i> Consultations</span>
  156. <span class="font-semibold text-gray-700">1,234 vues</span>
  157. </div>
  158. </div>
  159. <div class="flex space-x-2">
  160. <a href="#" class="flex-1 text-center bg-[#006633] text-white px-2 md:px-3 py-2 rounded-xl hover:bg-[#004d26] transition text-xs md:text-sm font-medium btn-consulter">
  161. <i class="fas fa-eye mr-1"></i> Consulter
  162. </a>
  163. <a href="#" class="flex-1 text-center bg-gray-200 text-gray-700 px-2 md:px-3 py-2 rounded-xl hover:bg-gray-300 transition text-xs md:text-sm font-medium btn-pdf">
  164. <i class="fas fa-download mr-1"></i> PDF
  165. </a>
  166. </div>
  167. </div>
  168. </div>
  169. <!-- Carte JO 2 -->
  170. <div class="group bg-white rounded-2xl shadow-lg overflow-hidden transform hover:-translate-y-2 transition-all duration-300" data-jo-number="JO 2026-014" data-jo-date="25 Fév 2026" data-jo-pdf="pdfs/JO_2026_014.pdf">
  171. <div class="bg-gradient-to-r from-[#006633] to-[#008844] p-4 md:p-5">
  172. <div class="flex justify-between items-start text-white">
  173. <div>
  174. <i class="fas fa-gavel text-2xl md:text-3xl opacity-80"></i>
  175. <div class="text-xl md:text-3xl font-bold mt-2 md:mt-3">JO 2026-014</div>
  176. </div>
  177. <div class="text-right">
  178. <div class="text-xs md:text-sm">25 Fév 2026</div>
  179. </div>
  180. </div>
  181. </div>
  182. <div class="p-4 md:p-5">
  183. <div class="space-y-2 mb-3 md:mb-4">
  184. <div class="flex justify-between text-xs md:text-sm">
  185. <span class="text-gray-500"><i class="fas fa-file-alt mr-1"></i> Actes publiés</span>
  186. <span class="font-semibold text-gray-700">8 actes</span>
  187. </div>
  188. <div class="flex justify-between text-xs md:text-sm hidden sm:flex">
  189. <span class="text-gray-500"><i class="fas fa-building mr-1"></i> Institutions</span>
  190. <span class="font-semibold text-gray-700">4 émetteurs</span>
  191. </div>
  192. </div>
  193. <div class="flex space-x-2">
  194. <a href="#" class="flex-1 text-center bg-[#006633] text-white px-2 md:px-3 py-2 rounded-xl hover:bg-[#004d26] transition text-xs md:text-sm font-medium btn-consulter">
  195. <i class="fas fa-eye mr-1"></i> Consulter
  196. </a>
  197. <a href="#" class="flex-1 text-center bg-gray-200 text-gray-700 px-2 md:px-3 py-2 rounded-xl hover:bg-gray-300 transition text-xs md:text-sm font-medium btn-pdf">
  198. <i class="fas fa-download mr-1"></i> PDF
  199. </a>
  200. </div>
  201. </div>
  202. </div>
  203. <!-- Carte JO 3 -->
  204. <div class="group bg-white rounded-2xl shadow-lg overflow-hidden transform hover:-translate-y-2 transition-all duration-300" data-jo-number="JO 2026-013" data-jo-date="20 Fév 2026" data-jo-pdf="pdfs/JO_2026_013.pdf">
  205. <div class="bg-gradient-to-r from-[#006633] to-[#008844] p-4 md:p-5">
  206. <div class="flex justify-between items-start text-white">
  207. <div>
  208. <i class="fas fa-gavel text-2xl md:text-3xl opacity-80"></i>
  209. <div class="text-xl md:text-3xl font-bold mt-2 md:mt-3">JO 2026-013</div>
  210. </div>
  211. <div class="text-right">
  212. <div class="text-xs md:text-sm">20 Fév 2026</div>
  213. </div>
  214. </div>
  215. </div>
  216. <div class="p-4 md:p-5">
  217. <div class="space-y-2 mb-3 md:mb-4">
  218. <div class="flex justify-between text-xs md:text-sm">
  219. <span class="text-gray-500"><i class="fas fa-file-alt mr-1"></i> Actes publiés</span>
  220. <span class="font-semibold text-gray-700">15 actes</span>
  221. </div>
  222. <div class="flex justify-between text-xs md:text-sm hidden sm:flex">
  223. <span class="text-gray-500"><i class="fas fa-building mr-1"></i> Institutions</span>
  224. <span class="font-semibold text-gray-700">6 émetteurs</span>
  225. </div>
  226. </div>
  227. <div class="flex space-x-2">
  228. <a href="#" class="flex-1 text-center bg-[#006633] text-white px-2 md:px-3 py-2 rounded-xl hover:bg-[#004d26] transition text-xs md:text-sm font-medium btn-consulter">
  229. <i class="fas fa-eye mr-1"></i> Consulter
  230. </a>
  231. <a href="#" class="flex-1 text-center bg-gray-200 text-gray-700 px-2 md:px-3 py-2 rounded-xl hover:bg-gray-300 transition text-xs md:text-sm font-medium btn-pdf">
  232. <i class="fas fa-download mr-1"></i> PDF
  233. </a>
  234. </div>
  235. </div>
  236. </div>
  237. <!-- Carte JO 4 -->
  238. <div class="group bg-white rounded-2xl shadow-lg overflow-hidden transform hover:-translate-y-2 transition-all duration-300" data-jo-number="JO 2026-012" data-jo-date="15 Fév 2026" data-jo-pdf="pdfs/JO_2026_012.pdf">
  239. <div class="bg-gradient-to-r from-[#006633] to-[#008844] p-4 md:p-5">
  240. <div class="flex justify-between items-start text-white">
  241. <div>
  242. <i class="fas fa-gavel text-2xl md:text-3xl opacity-80"></i>
  243. <div class="text-xl md:text-3xl font-bold mt-2 md:mt-3">JO 2026-012</div>
  244. </div>
  245. <div class="text-right">
  246. <div class="text-xs md:text-sm">15 Fév 2026</div>
  247. </div>
  248. </div>
  249. </div>
  250. <div class="p-4 md:p-5">
  251. <div class="space-y-2 mb-3 md:mb-4">
  252. <div class="flex justify-between text-xs md:text-sm">
  253. <span class="text-gray-500"><i class="fas fa-file-alt mr-1"></i> Actes publiés</span>
  254. <span class="font-semibold text-gray-700">10 actes</span>
  255. </div>
  256. <div class="flex justify-between text-xs md:text-sm hidden sm:flex">
  257. <span class="text-gray-500"><i class="fas fa-building mr-1"></i> Institutions</span>
  258. <span class="font-semibold text-gray-700">3 émetteurs</span>
  259. </div>
  260. </div>
  261. <div class="flex space-x-2">
  262. <a href="#" class="flex-1 text-center bg-[#006633] text-white px-2 md:px-3 py-2 rounded-xl hover:bg-[#004d26] transition text-xs md:text-sm font-medium btn-consulter">
  263. <i class="fas fa-eye mr-1"></i> Consulter
  264. </a>
  265. <a href="#" class="flex-1 text-center bg-gray-200 text-gray-700 px-2 md:px-3 py-2 rounded-xl hover:bg-gray-300 transition text-xs md:text-sm font-medium btn-pdf">
  266. <i class="fas fa-download mr-1"></i> PDF
  267. </a>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. <div class="text-center mt-8 md:mt-10">
  273. <a href="{{ path('app_journal_officiel') }}" class="inline-flex items-center text-[#006633] font-semibold hover:text-[#004d26] transition group text-sm md:text-base">
  274. Voir tous les numéros
  275. <i class="fas fa-arrow-right ml-2 group-hover:translate-x-1 transition-transform"></i>
  276. </a>
  277. </div>
  278. </div>
  279. </section>
  280. <!-- Accès rapide par catégories -->
  281. <section class="py-12 md:py-20 bg-gradient-to-br from-gray-50 to-gray-100">
  282. <div class="container mx-auto px-4">
  283. <div class="text-center mb-8 md:mb-12">
  284. <h2 class="text-2xl md:text-4xl font-bold text-gray-800 mb-4">Accès par thématique</h2>
  285. <div class="w-24 h-1 bg-gradient-to-r from-[#006633] to-[#008844] mx-auto rounded-full"></div>
  286. <p class="text-gray-600 mt-4 text-sm md:text-base">Retrouvez rapidement les informations selon vos besoins</p>
  287. </div>
  288. <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6">
  289. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  290. <div class="flex items-start space-x-3 md:space-x-4">
  291. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  292. <i class="fas fa-chart-line text-xl md:text-2xl text-[#006633]"></i>
  293. </div>
  294. <div class="flex-1">
  295. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Appels d'offres</h3>
  296. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Marchés publics, consultations, délégations</p>
  297. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  298. Voir les annonces
  299. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  300. </a>
  301. </div>
  302. </div>
  303. </div>
  304. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  305. <div class="flex items-start space-x-3 md:space-x-4">
  306. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  307. <i class="fas fa-home text-xl md:text-2xl text-[#006633]"></i>
  308. </div>
  309. <div class="flex-1">
  310. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Actes fonciers</h3>
  311. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Réquisitions foncières, transactions immobilières</p>
  312. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  313. Voir les actes
  314. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  315. </a>
  316. </div>
  317. </div>
  318. </div>
  319. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  320. <div class="flex items-start space-x-3 md:space-x-4">
  321. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  322. <i class="fas fa-building text-xl md:text-2xl text-[#006633]"></i>
  323. </div>
  324. <div class="flex-1">
  325. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Actes de sociétés</h3>
  326. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Création, modification, dissolution RCCM/OHADA</p>
  327. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  328. Voir les actes
  329. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  330. </a>
  331. </div>
  332. </div>
  333. </div>
  334. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  335. <div class="flex items-start space-x-3 md:space-x-4">
  336. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  337. <i class="fas fa-handshake text-xl md:text-2xl text-[#006633]"></i>
  338. </div>
  339. <div class="flex-1">
  340. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Associations</h3>
  341. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Récépissés de déclaration, modifications statuts</p>
  342. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  343. Voir les récépissés
  344. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  345. </a>
  346. </div>
  347. </div>
  348. </div>
  349. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  350. <div class="flex items-start space-x-3 md:space-x-4">
  351. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  352. <i class="fas fa-gavel text-xl md:text-2xl text-[#006633]"></i>
  353. </div>
  354. <div class="flex-1">
  355. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Ventes aux enchères</h3>
  356. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Biens immobiliers, mobiliers, véhicules admin</p>
  357. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  358. Voir les enchères
  359. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  360. </a>
  361. </div>
  362. </div>
  363. </div>
  364. <div class="group bg-white rounded-2xl shadow-lg p-4 md:p-6 hover:shadow-xl transition-all transform hover:-translate-y-1">
  365. <div class="flex items-start space-x-3 md:space-x-4">
  366. <div class="w-12 h-12 md:w-14 md:h-14 bg-[#006633]/10 rounded-xl flex items-center justify-center group-hover:bg-[#006633]/20 transition">
  367. <i class="fas fa-balance-scale text-xl md:text-2xl text-[#006633]"></i>
  368. </div>
  369. <div class="flex-1">
  370. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-1 md:mb-2">Textes réglementaires</h3>
  371. <p class="text-gray-600 text-xs md:text-sm mb-2 md:mb-3">Lois, décrets, arrêtés, circulaires en vigueur</p>
  372. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center group-hover:text-[#004d26]">
  373. Voir les textes
  374. <i class="fas fa-chevron-right ml-1 text-xs"></i>
  375. </a>
  376. </div>
  377. </div>
  378. </div>
  379. </div>
  380. </div>
  381. </section>
  382. <!-- Section Munganyo -->
  383. <section class="py-12 md:py-20 bg-white">
  384. <div class="container mx-auto px-4">
  385. <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 md:gap-12 items-center">
  386. <div>
  387. <div class="inline-flex items-center bg-[#006633]/10 rounded-full px-3 md:px-4 py-1.5 md:py-2 mb-4 md:mb-6">
  388. <i class="fas fa-file-alt text-[#006633] mr-1 md:mr-2 text-sm md:text-base"></i>
  389. <span class="text-xs md:text-sm font-medium text-[#006633]">Munganyo</span>
  390. </div>
  391. <h2 class="text-2xl md:text-4xl font-bold text-gray-800 mb-3 md:mb-4">Derniers actes exécutifs</h2>
  392. <p class="text-gray-600 mb-4 md:mb-6 leading-relaxed text-sm md:text-base">
  393. Accédez rapidement aux derniers décrets et arrêtés publiés.
  394. La plateforme Munganyo centralise tous les actes exécutifs en vigueur.
  395. </p>
  396. <ul class="space-y-2 md:space-y-3 mb-6 md:mb-8">
  397. <li class="flex items-center text-gray-600 text-sm md:text-base">
  398. <i class="fas fa-check-circle text-[#006633] mr-2 md:mr-3 text-sm md:text-base"></i>
  399. Décrets présidentiels et gouvernementaux
  400. </li>
  401. <li class="flex items-center text-gray-600 text-sm md:text-base">
  402. <i class="fas fa-check-circle text-[#006633] mr-2 md:mr-3 text-sm md:text-base"></i>
  403. Arrêtés interministériels et ministériels
  404. </li>
  405. <li class="flex items-center text-gray-600 text-sm md:text-base">
  406. <i class="fas fa-check-circle text-[#006633] mr-2 md:mr-3 text-sm md:text-base"></i>
  407. Circulaires et instructions officielles
  408. </li>
  409. </ul>
  410. <a href="{{ path('app_munganyo') }}" class="inline-flex items-center bg-gradient-to-r from-[#006633] to-[#008844] text-white px-5 md:px-6 py-2.5 md:py-3 rounded-xl font-semibold hover:from-[#004d26] hover:to-[#006633] transition shadow-lg text-sm md:text-base">
  411. Accéder à Munganyo
  412. <i class="fas fa-arrow-right ml-2"></i>
  413. </a>
  414. </div>
  415. <div class="bg-gradient-to-br from-gray-50 to-gray-100 rounded-2xl p-4 md:p-6 shadow-lg">
  416. <h3 class="text-lg md:text-xl font-bold text-gray-800 mb-3 md:mb-4">Derniers décrets publiés</h3>
  417. <div class="space-y-3 md:space-y-4">
  418. <div class="bg-white rounded-xl p-3 md:p-4 hover:shadow-md transition cursor-pointer" data-acte-ref="Décret n°2026-045/PR">
  419. <div class="flex items-start justify-between">
  420. <div class="flex-1">
  421. <span class="inline-block px-2 py-0.5 md:py-1 text-xs font-semibold bg-[#006633]/10 text-[#006633] rounded mb-1 md:mb-2">Décret</span>
  422. <h4 class="font-semibold text-gray-800 mb-0.5 md:mb-1 text-sm md:text-base">Décret n°2026-045/PR</h4>
  423. <p class="text-xs md:text-sm text-gray-600">Portant nomination des membres du gouvernement</p>
  424. <p class="text-xs text-gray-400 mt-1 md:mt-2">Publié le 01 mars 2026</p>
  425. </div>
  426. <i class="fas fa-chevron-right text-gray-400 text-xs md:text-sm"></i>
  427. </div>
  428. </div>
  429. <div class="bg-white rounded-xl p-3 md:p-4 hover:shadow-md transition cursor-pointer" data-acte-ref="Arrêté n°2026-089/MF">
  430. <div class="flex items-start justify-between">
  431. <div class="flex-1">
  432. <span class="inline-block px-2 py-0.5 md:py-1 text-xs font-semibold bg-[#006633]/10 text-[#006633] rounded mb-1 md:mb-2">Arrêté</span>
  433. <h4 class="font-semibold text-gray-800 mb-0.5 md:mb-1 text-sm md:text-base">Arrêté n°2026-089/MF</h4>
  434. <p class="text-xs md:text-sm text-gray-600">Fixant les modalités de paiement des impôts 2026</p>
  435. <p class="text-xs text-gray-400 mt-1 md:mt-2">Publié le 25 février 2026</p>
  436. </div>
  437. <i class="fas fa-chevron-right text-gray-400 text-xs md:text-sm"></i>
  438. </div>
  439. </div>
  440. <div class="bg-white rounded-xl p-3 md:p-4 hover:shadow-md transition cursor-pointer" data-acte-ref="Décret n°2026-044/PR">
  441. <div class="flex items-start justify-between">
  442. <div class="flex-1">
  443. <span class="inline-block px-2 py-0.5 md:py-1 text-xs font-semibold bg-[#006633]/10 text-[#006633] rounded mb-1 md:mb-2">Décret</span>
  444. <h4 class="font-semibold text-gray-800 mb-0.5 md:mb-1 text-sm md:text-base">Décret n°2026-044/PR</h4>
  445. <p class="text-xs md:text-sm text-gray-600">Portant création de l'Agence Nationale du Numérique</p>
  446. <p class="text-xs text-gray-400 mt-1 md:mt-2">Publié le 20 février 2026</p>
  447. </div>
  448. <i class="fas fa-chevron-right text-gray-400 text-xs md:text-sm"></i>
  449. </div>
  450. </div>
  451. </div>
  452. </div>
  453. </div>
  454. </div>
  455. </section>
  456. <!-- Section Barème des tarifs -->
  457. <section class="py-12 md:py-20 bg-gray-50">
  458. <div class="container mx-auto px-4">
  459. <div class="text-center mb-8 md:mb-12">
  460. <h2 class="text-2xl md:text-4xl font-bold text-gray-800 mb-4">Barème des publications</h2>
  461. <div class="w-24 h-1 bg-gradient-to-r from-[#006633] to-[#008844] mx-auto rounded-full"></div>
  462. <p class="text-gray-600 mt-4 max-w-2xl mx-auto text-sm md:text-base">
  463. Tarifs progressifs selon le type d'annonce et le nombre de caractères
  464. </p>
  465. </div>
  466. <div class="max-w-4xl mx-auto">
  467. <div class="bg-white rounded-2xl shadow-xl overflow-hidden">
  468. <div class="overflow-x-auto">
  469. <table class="w-full min-w-[500px]">
  470. <thead>
  471. <tr class="bg-gradient-to-r from-[#006633] to-[#008844] text-white">
  472. <th class="px-4 md:px-6 py-3 md:py-4 text-left font-semibold text-sm md:text-base">Type d'annonce</th>
  473. <th class="px-4 md:px-6 py-3 md:py-4 text-left font-semibold text-sm md:text-base">Tarif de base</th>
  474. <th class="px-4 md:px-6 py-3 md:py-4 text-left font-semibold text-sm md:text-base">Tarif par tranche</th>
  475. </tr>
  476. </thead>
  477. <tbody class="divide-y divide-gray-200">
  478. <tr class="hover:bg-gray-50 transition">
  479. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-gray-800 text-sm md:text-base">Marchés publics & DAO</td>
  480. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">25 000 KMF</td>
  481. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">+5 000 KMF / 500 caractères</td>
  482. </tr>
  483. <tr class="hover:bg-gray-50 transition">
  484. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-gray-800 text-sm md:text-base">Actes fonciers & réquisitions</td>
  485. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">15 000 KMF</td>
  486. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">+3 000 KMF / 300 caractères</td>
  487. </tr>
  488. <tr class="hover:bg-gray-50 transition">
  489. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-gray-800 text-sm md:text-base">Actes de sociétés (RCCM/OHADA)</td>
  490. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">20 000 KMF</td>
  491. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">+4 000 KMF / 400 caractères</td>
  492. </tr>
  493. <tr class="hover:bg-gray-50 transition">
  494. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-gray-800 text-sm md:text-base">Ventes aux enchères publiques</td>
  495. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">18 000 KMF</td>
  496. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">+3 500 KMF / 300 caractères</td>
  497. </tr>
  498. <tr class="hover:bg-gray-50 transition">
  499. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-gray-800 text-sm md:text-base">Récépissés d'associations</td>
  500. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">12 000 KMF</td>
  501. <td class="px-4 md:px-6 py-3 md:py-4 text-gray-600 text-sm md:text-base">+2 000 KMF / 200 caractères</td>
  502. </tr>
  503. <tr class="bg-[#006633]/5">
  504. <td class="px-4 md:px-6 py-3 md:py-4 font-medium text-[#006633] text-sm md:text-base">⚠️ Réduction 1ère année</td>
  505. <td class="px-4 md:px-6 py-3 md:py-4 text-[#006633] font-semibold text-sm md:text-base" colspan="2">-20% sur tous les tarifs pour la première année</td>
  506. </tr>
  507. </tbody>
  508. </table>
  509. </div>
  510. </div>
  511. <div class="mt-6 md:mt-8 text-center">
  512. <a href="{{ path('app_publications') }}" class="inline-flex items-center bg-gradient-to-r from-[#006633] to-[#008844] text-white px-6 md:px-8 py-3 md:py-4 rounded-xl font-semibold hover:from-[#004d26] hover:to-[#006633] transition shadow-lg text-sm md:text-base">
  513. <i class="fas fa-cloud-upload-alt mr-2"></i>
  514. Publier une annonce maintenant
  515. </a>
  516. <p class="text-xs md:text-sm text-gray-500 mt-3 md:mt-4">
  517. <i class="fas fa-shield-alt mr-1"></i> Publication certifiée avec valeur légale opposable
  518. </p>
  519. </div>
  520. </div>
  521. </div>
  522. </section>
  523. <!-- Section Avantages abonnement -->
  524. <section class="py-12 md:py-20 bg-gradient-to-br from-[#006633] to-[#008844] text-white">
  525. <div class="container mx-auto px-4">
  526. <div class="text-center mb-8 md:mb-12">
  527. <h2 class="text-2xl md:text-4xl font-bold mb-3 md:mb-4">Pourquoi s'abonner ?</h2>
  528. <div class="w-24 h-1 bg-white mx-auto rounded-full"></div>
  529. <p class="text-green-100 mt-4 max-w-2xl mx-auto text-sm md:text-base">
  530. Accédez à tous les contenus et bénéficiez de fonctionnalités exclusives
  531. </p>
  532. </div>
  533. <div class="grid grid-cols-1 md:grid-cols-3 gap-6 md:gap-8">
  534. <div class="bg-white/10 backdrop-blur-sm rounded-2xl p-5 md:p-6 text-center transform hover:scale-105 transition-all">
  535. <div class="w-14 h-14 md:w-16 md:h-16 bg-white/20 rounded-full flex items-center justify-center mx-auto mb-3 md:mb-4">
  536. <i class="fas fa-search text-xl md:text-2xl"></i>
  537. </div>
  538. <h3 class="text-lg md:text-xl font-bold mb-2 md:mb-3">Recherche avancée</h3>
  539. <p class="text-green-100 text-xs md:text-sm">Moteur de recherche enrichi par IA avec OCR dans le contenu des actes</p>
  540. </div>
  541. <div class="bg-white/10 backdrop-blur-sm rounded-2xl p-5 md:p-6 text-center transform hover:scale-105 transition-all">
  542. <div class="w-14 h-14 md:w-16 md:h-16 bg-white/20 rounded-full flex items-center justify-center mx-auto mb-3 md:mb-4">
  543. <i class="fas fa-archive text-xl md:text-2xl"></i>
  544. </div>
  545. <h3 class="text-lg md:text-xl font-bold mb-2 md:mb-3">Archives complètes</h3>
  546. <p class="text-green-100 text-xs md:text-sm">Accès à tous les textes archivés depuis 1975 avec version PDF/A</p>
  547. </div>
  548. <div class="bg-white/10 backdrop-blur-sm rounded-2xl p-5 md:p-6 text-center transform hover:scale-105 transition-all">
  549. <div class="w-14 h-14 md:w-16 md:h-16 bg-white/20 rounded-full flex items-center justify-center mx-auto mb-3 md:mb-4">
  550. <i class="fas fa-bell text-xl md:text-2xl"></i>
  551. </div>
  552. <h3 class="text-lg md:text-xl font-bold mb-2 md:mb-3">Alertes personnalisées</h3>
  553. <p class="text-green-100 text-xs md:text-sm">Notifications par email des nouvelles publications selon vos thèmes</p>
  554. </div>
  555. </div>
  556. <div class="mt-8 md:mt-10 bg-white/5 rounded-2xl p-5 md:p-6 max-w-2xl mx-auto">
  557. <div class="grid grid-cols-1 md:grid-cols-2 gap-5 md:gap-6">
  558. <div class="text-center">
  559. <div class="text-xl md:text-2xl font-bold">Standard</div>
  560. <div class="text-2xl md:text-3xl font-bold mt-2">50 000 KMF<span class="text-base font-normal">/an</span></div>
  561. <div class="text-green-200 text-xs md:text-sm mt-1 line-through">62 500 KMF</div>
  562. <div class="text-green-300 text-xs md:text-sm">-20% la première année</div>
  563. <ul class="mt-3 md:mt-4 space-y-1 md:space-y-2 text-left text-xs md:text-sm">
  564. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Accès numéros complets PDF</li>
  565. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Moteur de recherche par filtres</li>
  566. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Textes isolés moins de 5 ans</li>
  567. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Notifications veille</li>
  568. </ul>
  569. </div>
  570. <div class="text-center border-t md:border-t-0 md:border-l border-white/20 pt-4 md:pt-0 md:pl-6">
  571. <div class="text-xl md:text-2xl font-bold text-yellow-300">Premium</div>
  572. <div class="text-2xl md:text-3xl font-bold mt-2">90 000 KMF<span class="text-base font-normal">/an</span></div>
  573. <div class="text-green-200 text-xs md:text-sm mt-1 line-through">112 500 KMF</div>
  574. <div class="text-green-300 text-xs md:text-sm">-20% la première année</div>
  575. <ul class="mt-3 md:mt-4 space-y-1 md:space-y-2 text-left text-xs md:text-sm">
  576. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Tout Standard +</li>
  577. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Textes isolés plus de 5 ans</li>
  578. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Réquisitions foncières</li>
  579. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Moteur Ibunas.IA enrichi</li>
  580. <li class="flex items-center"><i class="fas fa-check-circle text-green-400 mr-2 w-3 md:w-4"></i> Alertes personnalisées</li>
  581. </ul>
  582. </div>
  583. </div>
  584. <div class="text-center mt-5 md:mt-6">
  585. <a href="" class="inline-flex items-center bg-white text-[#006633] px-6 md:px-8 py-2.5 md:py-3 rounded-xl font-bold hover:bg-gray-100 transition shadow-lg text-sm md:text-base">
  586. Voir les offres d'abonnement
  587. <i class="fas fa-arrow-right ml-2"></i>
  588. </a>
  589. </div>
  590. </div>
  591. </div>
  592. </section>
  593. <!-- Section Actualités juridiques -->
  594. <section class="py-12 md:py-20 bg-gray-50">
  595. <div class="container mx-auto px-4">
  596. <div class="text-center mb-8 md:mb-12">
  597. <h2 class="text-2xl md:text-4xl font-bold text-gray-800 mb-4">Actualités juridiques</h2>
  598. <div class="w-24 h-1 bg-gradient-to-r from-[#006633] to-[#008844] mx-auto rounded-full"></div>
  599. <p class="text-gray-600 mt-4 text-sm md:text-base">Restez informé des dernières évolutions législatives et réglementaires</p>
  600. </div>
  601. <div class="grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-8">
  602. <div class="flex bg-white rounded-2xl overflow-hidden hover:shadow-lg transition">
  603. <div class="w-24 md:w-32 bg-gradient-to-br from-[#006633] to-[#008844] flex items-center justify-center">
  604. <i class="fas fa-gavel text-white text-2xl md:text-4xl"></i>
  605. </div>
  606. <div class="flex-1 p-4 md:p-5">
  607. <div class="text-xs md:text-sm text-[#006633] mb-1 md:mb-2">Nouvelle loi</div>
  608. <h3 class="font-bold text-gray-800 mb-1 md:mb-2 text-sm md:text-base">Loi sur la modernisation du Journal Officiel</h3>
  609. <p class="text-gray-600 text-xs md:text-sm">Publication numérique obligatoire, valeur légale renforcée...</p>
  610. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center mt-2 md:mt-3">Lire la suite <i class="fas fa-arrow-right ml-1"></i></a>
  611. </div>
  612. </div>
  613. <div class="flex bg-white rounded-2xl overflow-hidden hover:shadow-lg transition">
  614. <div class="w-24 md:w-32 bg-gradient-to-br from-[#006633] to-[#008844] flex items-center justify-center">
  615. <i class="fas fa-chart-line text-white text-2xl md:text-4xl"></i>
  616. </div>
  617. <div class="flex-1 p-4 md:p-5">
  618. <div class="text-xs md:text-sm text-[#006633] mb-1 md:mb-2">Réforme fiscale</div>
  619. <h3 class="font-bold text-gray-800 mb-1 md:mb-2 text-sm md:text-base">Nouveau code général des impôts 2026</h3>
  620. <p class="text-gray-600 text-xs md:text-sm">Modifications des taux et nouvelles exonérations...</p>
  621. <a href="#" class="text-[#006633] text-xs md:text-sm font-medium inline-flex items-center mt-2 md:mt-3">Lire la suite <i class="fas fa-arrow-right ml-1"></i></a>
  622. </div>
  623. </div>
  624. </div>
  625. </div>
  626. </section>
  627. <!-- Section Newsletter -->
  628. <section class="py-12 md:py-16 bg-gradient-to-r from-[#006633] to-[#008844] text-white">
  629. <div class="container mx-auto px-4 text-center">
  630. <div class="max-w-3xl mx-auto">
  631. <i class="fas fa-envelope-open-text text-3xl md:text-5xl mb-4 md:mb-6 opacity-80"></i>
  632. <h2 class="text-xl md:text-3xl font-bold mb-3 md:mb-4">Restez informé</h2>
  633. <p class="text-green-100 mb-6 md:mb-8 text-sm md:text-base hidden md:block">
  634. Recevez chaque semaine les dernières publications et les actualités juridiques
  635. </p>
  636. <div class="flex flex-col sm:flex-row gap-3 md:gap-4 max-w-2xl mx-auto px-4 md:px-0">
  637. <input type="email"
  638. placeholder="Votre adresse email professionnelle"
  639. class="flex-1 px-4 md:px-6 py-2.5 md:py-3 rounded-xl text-gray-800 focus:outline-none focus:ring-2 focus:ring-green-400 text-sm md:text-base">
  640. <button class="bg-white text-[#006633] px-6 md:px-8 py-2.5 md:py-3 rounded-xl font-semibold hover:bg-gray-100 transition shadow-lg text-sm md:text-base">
  641. S'abonner
  642. </button>
  643. </div>
  644. <p class="text-xs text-green-200 mt-4 md:mt-6">
  645. <i class="fas fa-lock mr-1"></i> Votre adresse est sécurisée. Aucun spam.
  646. </p>
  647. </div>
  648. </div>
  649. </section>
  650. <!-- MODAL DE CONSULTATION -->
  651. <div id="consultationModal" class="fixed inset-0 bg-black/50 backdrop-blur-sm z-50 hidden items-center justify-center p-4 transition-all duration-300" style="overflow-y: auto;">
  652. <div class="bg-white rounded-2xl max-w-5xl w-full max-h-[90vh] overflow-hidden shadow-2xl transform transition-all duration-300 scale-95 opacity-0 modal-content my-auto">
  653. <!-- En-tête du modal -->
  654. <div class="bg-gradient-to-r from-[#006633] to-[#008844] text-white px-6 py-4 flex justify-between items-center sticky top-0 z-10">
  655. <div>
  656. <h3 id="modalTitle" class="text-xl md:text-2xl font-bold">Journal Officiel</h3>
  657. <p id="modalDate" class="text-green-100 text-sm mt-1"></p>
  658. </div>
  659. <button id="closeModalBtn" class="text-white hover:text-gray-200 transition-all hover:rotate-90 duration-300">
  660. <i class="fas fa-times text-2xl"></i>
  661. </button>
  662. </div>
  663. <!-- Corps du modal avec onglets -->
  664. <div class="border-b border-gray-200 sticky top-[73px] bg-white z-10">
  665. <div class="flex px-6 gap-2">
  666. <button id="tabSommaire" class="py-3 px-4 font-semibold text-[#006633] border-b-2 border-[#006633] transition">
  667. <i class="fas fa-list mr-2"></i>Sommaire
  668. </button>
  669. <button id="tabTextes" class="py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent">
  670. <i class="fas fa-file-alt mr-2"></i>Textes officiels
  671. </button>
  672. <button id="tabAnnonces" class="py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent">
  673. <i class="fas fa-bullhorn mr-2"></i>Annonces
  674. </button>
  675. </div>
  676. </div>
  677. <!-- Contenu du modal -->
  678. <div id="modalContent" class="p-6 overflow-y-auto" style="max-height: calc(90vh - 140px);">
  679. <!-- Le contenu sera chargé dynamiquement -->
  680. <div class="text-center py-8">
  681. <i class="fas fa-spinner fa-spin text-3xl text-[#006633]"></i>
  682. <p class="mt-2 text-gray-600">Chargement du contenu...</p>
  683. </div>
  684. </div>
  685. <!-- Pied du modal -->
  686. <div class="border-t px-6 py-4 bg-gray-50 flex justify-between items-center sticky bottom-0 bg-white z-10">
  687. <div class="text-sm text-gray-500">
  688. <i class="fas fa-certificate text-[#006633] mr-1"></i> Document officiel certifié
  689. </div>
  690. <div class="flex gap-3">
  691. <button id="downloadPdfFromModal" class="bg-[#006633] text-white px-5 py-2 rounded-lg hover:bg-[#004d26] transition flex items-center gap-2">
  692. <i class="fas fa-download"></i> Télécharger PDF
  693. </button>
  694. <button id="closeModalFooterBtn" class="px-5 py-2 border border-gray-300 rounded-lg hover:bg-gray-100 transition">
  695. Fermer
  696. </button>
  697. </div>
  698. </div>
  699. </div>
  700. </div>
  701. {% endblock %}
  702. {% block javascripts %}
  703. {{ parent() }}
  704. <script>
  705. document.addEventListener('DOMContentLoaded', function() {
  706. // Éléments du modal
  707. const modal = document.getElementById('consultationModal');
  708. const modalContent = document.getElementById('modalContent');
  709. const modalTitle = document.getElementById('modalTitle');
  710. const modalDate = document.getElementById('modalDate');
  711. const closeModalBtn = document.getElementById('closeModalBtn');
  712. const closeModalFooterBtn = document.getElementById('closeModalFooterBtn');
  713. const downloadPdfFromModal = document.getElementById('downloadPdfFromModal');
  714. // Onglets
  715. const tabSommaire = document.getElementById('tabSommaire');
  716. const tabTextes = document.getElementById('tabTextes');
  717. const tabAnnonces = document.getElementById('tabAnnonces');
  718. let currentJoNumber = '';
  719. let currentJoDate = '';
  720. let currentJoPdf = '';
  721. let scrollPosition = 0;
  722. // Fonction pour bloquer le scroll du body
  723. function blockBodyScroll() {
  724. scrollPosition = window.pageYOffset;
  725. document.body.style.overflow = 'hidden';
  726. document.body.style.position = 'fixed';
  727. document.body.style.top = `-${scrollPosition}px`;
  728. document.body.style.width = '100%';
  729. }
  730. // Fonction pour restaurer le scroll du body
  731. function restoreBodyScroll() {
  732. document.body.style.overflow = '';
  733. document.body.style.position = '';
  734. document.body.style.top = '';
  735. document.body.style.width = '';
  736. window.scrollTo(0, scrollPosition);
  737. }
  738. // Fonction pour fermer le modal
  739. function closeModal() {
  740. const modalContentDiv = document.querySelector('.modal-content');
  741. modalContentDiv.classList.remove('scale-100', 'opacity-100');
  742. modalContentDiv.classList.add('scale-95', 'opacity-0');
  743. setTimeout(() => {
  744. modal.classList.add('hidden');
  745. modal.classList.remove('flex');
  746. restoreBodyScroll();
  747. }, 300);
  748. }
  749. // Fonction pour ouvrir le modal
  750. function openModal() {
  751. blockBodyScroll();
  752. modal.classList.remove('hidden');
  753. modal.classList.add('flex');
  754. setTimeout(() => {
  755. const modalContentDiv = document.querySelector('.modal-content');
  756. modalContentDiv.classList.remove('scale-95', 'opacity-0');
  757. modalContentDiv.classList.add('scale-100', 'opacity-100');
  758. }, 50);
  759. }
  760. // Fonction pour afficher une notification
  761. function showNotification(message, type = 'info') {
  762. const existingNotif = document.querySelector('.custom-notification');
  763. if (existingNotif) existingNotif.remove();
  764. const notification = document.createElement('div');
  765. notification.className = `custom-notification fixed top-20 right-4 z-[100] px-6 py-3 rounded-lg shadow-lg transform transition-all duration-300 flex items-center gap-3 ${
  766. type === 'success' ? 'bg-green-500 text-white' :
  767. type === 'error' ? 'bg-red-500 text-white' :
  768. 'bg-blue-500 text-white'
  769. }`;
  770. const icon = type === 'success' ? 'fa-check-circle' : type === 'error' ? 'fa-exclamation-circle' : 'fa-info-circle';
  771. notification.innerHTML = `<i class="fas ${icon}"></i><span>${message}</span>`;
  772. document.body.appendChild(notification);
  773. setTimeout(() => {
  774. notification.style.transform = 'translateX(100%)';
  775. setTimeout(() => notification.remove(), 300);
  776. }, 3000);
  777. }
  778. // Fonction pour télécharger le PDF
  779. function telechargerPDF(pdfPath, joNumber) {
  780. if (pdfPath && pdfPath !== '') {
  781. const link = document.createElement('a');
  782. link.href = pdfPath;
  783. link.download = `${joNumber.replace(/\s/g, '_')}.pdf`;
  784. document.body.appendChild(link);
  785. link.click();
  786. document.body.removeChild(link);
  787. showNotification(`Téléchargement de ${joNumber} démarré`, 'success');
  788. } else {
  789. showNotification(`Génération du PDF pour ${joNumber}...`, 'info');
  790. setTimeout(() => {
  791. showNotification(`${joNumber} téléchargé avec succès !`, 'success');
  792. }, 1500);
  793. }
  794. }
  795. // Fonction pour charger le contenu du modal
  796. function chargerContenuJO(joNumber, joDate, joPdf) {
  797. currentJoNumber = joNumber;
  798. currentJoDate = joDate;
  799. currentJoPdf = joPdf;
  800. modalTitle.innerHTML = joNumber;
  801. modalDate.innerHTML = joDate;
  802. const contenuSommaire = `
  803. <div class="space-y-6">
  804. <div class="bg-gradient-to-r from-gray-50 to-white rounded-xl p-5 border border-gray-100">
  805. <h4 class="text-lg font-bold text-[#006633] mb-4 flex items-center">
  806. <i class="fas fa-book-open mr-2"></i> Sommaire détaillé
  807. </h4>
  808. <ul class="space-y-3">
  809. <li class="flex items-start gap-3 p-2 hover:bg-gray-50 rounded-lg transition">
  810. <span class="font-bold text-[#006633] bg-[#006633]/10 w-8 h-8 rounded-full flex items-center justify-center">1</span>
  811. <div class="flex-1">
  812. <span class="font-semibold text-gray-800">Textes législatifs</span>
  813. <span class="text-gray-500 text-sm ml-2">Pages 2-15</span>
  814. <p class="text-xs text-gray-400 mt-1">Lois votées par l'Assemblée nationale</p>
  815. </div>
  816. </li>
  817. <li class="flex items-start gap-3 p-2 hover:bg-gray-50 rounded-lg transition">
  818. <span class="font-bold text-[#006633] bg-[#006633]/10 w-8 h-8 rounded-full flex items-center justify-center">2</span>
  819. <div class="flex-1">
  820. <span class="font-semibold text-gray-800">Décrets et arrêtés</span>
  821. <span class="text-gray-500 text-sm ml-2">Pages 16-28</span>
  822. <p class="text-xs text-gray-400 mt-1">Actes exécutifs et réglementaires</p>
  823. </div>
  824. </li>
  825. <li class="flex items-start gap-3 p-2 hover:bg-gray-50 rounded-lg transition">
  826. <span class="font-bold text-[#006633] bg-[#006633]/10 w-8 h-8 rounded-full flex items-center justify-center">3</span>
  827. <div class="flex-1">
  828. <span class="font-semibold text-gray-800">Annonces officielles</span>
  829. <span class="text-gray-500 text-sm ml-2">Pages 29-35</span>
  830. <p class="text-xs text-gray-400 mt-1">Communications et avis divers</p>
  831. </div>
  832. </li>
  833. <li class="flex items-start gap-3 p-2 hover:bg-gray-50 rounded-lg transition">
  834. <span class="font-bold text-[#006633] bg-[#006633]/10 w-8 h-8 rounded-full flex items-center justify-center">4</span>
  835. <div class="flex-1">
  836. <span class="font-semibold text-gray-800">Avis divers</span>
  837. <span class="text-gray-500 text-sm ml-2">Pages 36-40</span>
  838. <p class="text-xs text-gray-400 mt-1">Informations générales</p>
  839. </div>
  840. </li>
  841. </ul>
  842. </div>
  843. <div class="bg-yellow-50 rounded-xl p-4 border border-yellow-200">
  844. <div class="flex items-start gap-3">
  845. <i class="fas fa-info-circle text-yellow-600 mt-1"></i>
  846. <div>
  847. <p class="text-sm text-gray-700">Ce document officiel est certifié conforme par les services de la Présidence de l'Union des Comores.</p>
  848. <p class="text-xs text-gray-500 mt-2">Date de publication : ${joDate}</p>
  849. </div>
  850. </div>
  851. </div>
  852. </div>
  853. `;
  854. const contenuTextes = `
  855. <div class="space-y-4">
  856. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  857. <div class="flex items-start justify-between">
  858. <div class="flex-1">
  859. <span class="inline-block px-2 py-1 text-xs font-semibold bg-blue-100 text-blue-700 rounded mb-2">LOI</span>
  860. <h4 class="font-bold text-gray-800">Loi n°2026-001 du 15 janvier 2026</h4>
  861. <p class="text-sm text-gray-600 mt-1">Portant modification du code des investissements</p>
  862. <div class="flex items-center gap-4 mt-2 text-xs text-gray-400">
  863. <span><i class="far fa-file-pdf mr-1"></i> PDF - 245 KB</span>
  864. <span><i class="far fa-eye mr-1"></i> 1,234 vues</span>
  865. </div>
  866. </div>
  867. <button class="text-[#006633] hover:text-[#004d26] transition consulter-texte" data-texte="LOI-2026-001">
  868. <i class="fas fa-chevron-right"></i>
  869. </button>
  870. </div>
  871. </div>
  872. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  873. <div class="flex items-start justify-between">
  874. <div class="flex-1">
  875. <span class="inline-block px-2 py-1 text-xs font-semibold bg-purple-100 text-purple-700 rounded mb-2">DÉCRET</span>
  876. <h4 class="font-bold text-gray-800">Décret n°2026-045/PR du 20 janvier 2026</h4>
  877. <p class="text-sm text-gray-600 mt-1">Portant nomination des membres du gouvernement</p>
  878. <div class="flex items-center gap-4 mt-2 text-xs text-gray-400">
  879. <span><i class="far fa-file-pdf mr-1"></i> PDF - 156 KB</span>
  880. <span><i class="far fa-eye mr-1"></i> 2,567 vues</span>
  881. </div>
  882. </div>
  883. <button class="text-[#006633] hover:text-[#004d26] transition consulter-texte" data-texte="DECRET-2026-045">
  884. <i class="fas fa-chevron-right"></i>
  885. </button>
  886. </div>
  887. </div>
  888. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  889. <div class="flex items-start justify-between">
  890. <div class="flex-1">
  891. <span class="inline-block px-2 py-1 text-xs font-semibold bg-green-100 text-green-700 rounded mb-2">ARRÊTÉ</span>
  892. <h4 class="font-bold text-gray-800">Arrêté n°2026-089/MF du 25 janvier 2026</h4>
  893. <p class="text-sm text-gray-600 mt-1">Fixant les modalités de paiement des impôts 2026</p>
  894. <div class="flex items-center gap-4 mt-2 text-xs text-gray-400">
  895. <span><i class="far fa-file-pdf mr-1"></i> PDF - 189 KB</span>
  896. <span><i class="far fa-eye mr-1"></i> 892 vues</span>
  897. </div>
  898. </div>
  899. <button class="text-[#006633] hover:text-[#004d26] transition consulter-texte" data-texte="ARRETE-2026-089">
  900. <i class="fas fa-chevron-right"></i>
  901. </button>
  902. </div>
  903. </div>
  904. </div>
  905. `;
  906. const contenuAnnonces = `
  907. <div class="space-y-4">
  908. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  909. <div class="flex items-start gap-4">
  910. <div class="w-10 h-10 bg-orange-100 rounded-full flex items-center justify-center">
  911. <i class="fas fa-gavel text-orange-600"></i>
  912. </div>
  913. <div class="flex-1">
  914. <h4 class="font-bold text-gray-800">Appel d'offres n°2026-001/AO</h4>
  915. <p class="text-sm text-gray-600 mt-1">Travaux de construction de la nouvelle Présidence</p>
  916. <div class="flex flex-wrap gap-3 mt-2 text-xs text-gray-500">
  917. <span><i class="far fa-calendar-alt mr-1"></i> Date limite : 30/04/2026</span>
  918. <span><i class="fas fa-map-marker-alt mr-1"></i> Moroni</span>
  919. </div>
  920. </div>
  921. </div>
  922. </div>
  923. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  924. <div class="flex items-start gap-4">
  925. <div class="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center">
  926. <i class="fas fa-building text-blue-600"></i>
  927. </div>
  928. <div class="flex-1">
  929. <h4 class="font-bold text-gray-800">Avis de recrutement - Fonction publique</h4>
  930. <p class="text-sm text-gray-600 mt-1">100 postes à pourvoir dans l'administration</p>
  931. <div class="flex flex-wrap gap-3 mt-2 text-xs text-gray-500">
  932. <span><i class="far fa-calendar-alt mr-1"></i> Date limite : 15/04/2026</span>
  933. <span><i class="fas fa-file-alt mr-1"></i> Dossier à déposer en ligne</span>
  934. </div>
  935. </div>
  936. </div>
  937. </div>
  938. <div class="bg-white rounded-xl p-4 border border-gray-200 hover:shadow-md transition">
  939. <div class="flex items-start gap-4">
  940. <div class="w-10 h-10 bg-green-100 rounded-full flex items-center justify-center">
  941. <i class="fas fa-handshake text-green-600"></i>
  942. </div>
  943. <div class="flex-1">
  944. <h4 class="font-bold text-gray-800">Consultation publique - Code du travail</h4>
  945. <p class="text-sm text-gray-600 mt-1">Recueil des observations sur l'avant-projet</p>
  946. <div class="flex flex-wrap gap-3 mt-2 text-xs text-gray-500">
  947. <span><i class="far fa-calendar-alt mr-1"></i> Jusqu'au 31/05/2026</span>
  948. <span><i class="fas fa-users mr-1"></i> Ouvert à tous</span>
  949. </div>
  950. </div>
  951. </div>
  952. </div>
  953. </div>
  954. `;
  955. modalContent.innerHTML = contenuSommaire;
  956. tabSommaire.onclick = () => {
  957. tabSommaire.className = "py-3 px-4 font-semibold text-[#006633] border-b-2 border-[#006633] transition";
  958. tabTextes.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  959. tabAnnonces.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  960. modalContent.innerHTML = contenuSommaire;
  961. modalContent.scrollTop = 0;
  962. };
  963. tabTextes.onclick = () => {
  964. tabTextes.className = "py-3 px-4 font-semibold text-[#006633] border-b-2 border-[#006633] transition";
  965. tabSommaire.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  966. tabAnnonces.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  967. modalContent.innerHTML = contenuTextes;
  968. modalContent.scrollTop = 0;
  969. document.querySelectorAll('.consulter-texte').forEach(btn => {
  970. btn.addEventListener('click', function(e) {
  971. const texteRef = this.getAttribute('data-texte');
  972. showNotification(`Consultation du texte ${texteRef}`, 'info');
  973. });
  974. });
  975. };
  976. tabAnnonces.onclick = () => {
  977. tabAnnonces.className = "py-3 px-4 font-semibold text-[#006633] border-b-2 border-[#006633] transition";
  978. tabSommaire.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  979. tabTextes.className = "py-3 px-4 font-semibold text-gray-500 hover:text-[#006633] transition border-b-2 border-transparent";
  980. modalContent.innerHTML = contenuAnnonces;
  981. modalContent.scrollTop = 0;
  982. };
  983. }
  984. // Gestionnaire pour les boutons "Consulter"
  985. document.querySelectorAll('.btn-consulter').forEach(button => {
  986. button.addEventListener('click', function(e) {
  987. e.preventDefault();
  988. const card = this.closest('.group');
  989. if (!card) return;
  990. const joNumber = card.getAttribute('data-jo-number');
  991. const joDate = card.getAttribute('data-jo-date');
  992. const joPdf = card.getAttribute('data-jo-pdf');
  993. if (joNumber) {
  994. chargerContenuJO(joNumber, joDate, joPdf);
  995. openModal();
  996. }
  997. });
  998. });
  999. // Gestionnaire pour les boutons "PDF" dans les cartes
  1000. document.querySelectorAll('.btn-pdf').forEach(button => {
  1001. button.addEventListener('click', function(e) {
  1002. e.preventDefault();
  1003. e.stopPropagation();
  1004. const card = this.closest('.group');
  1005. if (!card) return;
  1006. const joNumber = card.getAttribute('data-jo-number');
  1007. const joPdf = card.getAttribute('data-jo-pdf');
  1008. if (joNumber) {
  1009. telechargerPDF(joPdf, joNumber);
  1010. }
  1011. });
  1012. });
  1013. // Télécharger depuis le modal
  1014. downloadPdfFromModal.addEventListener('click', function() {
  1015. if (currentJoNumber) {
  1016. telechargerPDF(currentJoPdf, currentJoNumber);
  1017. }
  1018. });
  1019. // Fermeture du modal
  1020. closeModalBtn.addEventListener('click', closeModal);
  1021. closeModalFooterBtn.addEventListener('click', closeModal);
  1022. // Fermer en cliquant à l'extérieur
  1023. modal.addEventListener('click', function(e) {
  1024. if (e.target === modal) {
  1025. closeModal();
  1026. }
  1027. });
  1028. // Gestionnaire pour les actes exécutifs (Munganyo)
  1029. document.querySelectorAll('[data-acte-ref]').forEach(card => {
  1030. card.addEventListener('click', function() {
  1031. const acteRef = this.getAttribute('data-acte-ref');
  1032. showNotification(`Consultation de ${acteRef}`, 'info');
  1033. });
  1034. });
  1035. // Gestionnaire pour la newsletter
  1036. const newsletterBtn = document.querySelector('.bg-white.text-\\[\\#006633\\]');
  1037. if (newsletterBtn) {
  1038. newsletterBtn.addEventListener('click', function() {
  1039. const emailInput = document.querySelector('input[type="email"]');
  1040. if (emailInput && emailInput.value) {
  1041. if (emailInput.value.includes('@') && emailInput.value.includes('.')) {
  1042. showNotification('Inscription à la newsletter réussie !', 'success');
  1043. emailInput.value = '';
  1044. } else {
  1045. showNotification('Veuillez entrer une adresse email valide', 'error');
  1046. }
  1047. } else {
  1048. showNotification('Veuillez entrer votre adresse email', 'error');
  1049. }
  1050. });
  1051. }
  1052. });
  1053. </script>
  1054. <style>
  1055. @keyframes fadeInUp {
  1056. from {
  1057. opacity: 0;
  1058. transform: translateY(20px);
  1059. }
  1060. to {
  1061. opacity: 1;
  1062. transform: translateY(0);
  1063. }
  1064. }
  1065. .custom-notification {
  1066. animation: fadeInUp 0.3s ease-out;
  1067. z-index: 9999;
  1068. }
  1069. .btn-consulter, .btn-pdf {
  1070. cursor: pointer;
  1071. }
  1072. [data-acte-ref] {
  1073. cursor: pointer;
  1074. }
  1075. .modal-content {
  1076. transition: all 0.3s ease-out;
  1077. }
  1078. /* Scrollbar personnalisée pour le modal */
  1079. #modalContent::-webkit-scrollbar {
  1080. width: 8px;
  1081. }
  1082. #modalContent::-webkit-scrollbar-track {
  1083. background: #f1f1f1;
  1084. border-radius: 4px;
  1085. }
  1086. #modalContent::-webkit-scrollbar-thumb {
  1087. background: #006633;
  1088. border-radius: 4px;
  1089. }
  1090. #modalContent::-webkit-scrollbar-thumb:hover {
  1091. background: #004d26;
  1092. }
  1093. /* Empêcher le scroll du body quand le modal est ouvert */
  1094. body.modal-open {
  1095. overflow: hidden;
  1096. position: fixed;
  1097. width: 100%;
  1098. }
  1099. </style>
  1100. {% endblock %}