1<!DOCTYPE html> 2<html lang="fr"> 3<head> 4 <!-- Google Tag Manager --> 5
5<script>
vendor: 438 bytes, lines 5-14
5 6 (function(w,d,s,l,i){ 7 w[l]=w[l]||[]; 8 w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); 9 var f=d.getElementsByTagName(s)[0], 10 j=d.createElement(s), dl=l!='dataLayer'?'&l='+l:''; 11 j.async=true; 12 j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; 13 f.parentNode.insertBefore(j,f); 14 })(window,document,'script','dataLayer','
14GTM-5NXLDJZZ
vendor: 8 bytes, lines 14-15
14'); 15
15</script>
15 16 <!-- Métadonnées --> 17 <meta charset="UTF-8" /> 18 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 19 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" /> 20 <meta name="language" content="fr-FR" /> 21 <meta name="copyright" content="© 2025 Mairie de Saint-Denis-le-Thiboult" /> 22 <title>Mairie de Saint-Denis-le-Thiboult - Accueil</title> 23 <link rel="canonical" href="https://www.saintdenislethiboult.fr" /> 24 <meta name="robots" content="index, follow" /> 25 <meta name="description" content="Bienvenue sur le site officiel de la Mairie de Saint-Denis-le-Thiboult. Retrouvez toutes les informations sur notre commune, les services municipaux et les actualités locales." /> 26 <meta name="keywords" content="Saint-Denis-le-Thiboult, mairie, commune, Seine-Maritime, services municipaux, actualités" /> 27 <meta name="author" content="Mairie de Saint-Denis-le-Thiboult" /> 28 <!-- Préconnexion et ressources externes --> 29 <link rel="preconnect" href="https://assets.synapse76.fr" /> 30 <link rel="preconnect" href="https://cdnjs.cloudflare.com" /> 31 <link rel="preconnect" href="https://fonts.googleapis.com" /> 32 <link rel="preconnect" href="https://cdn.jsdelivr.net" /> 33 <!-- Feuilles de style --> 34 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" crossorigin="anonymous" /> 35 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/aos.css" crossorigin="anonymous" /> 36 <link rel="stylesheet" href="https://fonts.cdnfonts.com/css/open-dyslexic" crossorigin="anonymous" /> 37 <link rel="stylesheet" href="https://assets.synapse76.fr/css/bootstrap.min.css" /> 38 <link rel="stylesheet" href="https://assets.synapse76.fr/css/jarallax.css" /> 39 <link rel="stylesheet" href="https://assets.synapse76.fr/css/dropdown.css" /> 40 <link rel="preload" as="style" href="https://assets.synapse76.fr/css/syn_menu.css?v=1" /> 41 <link rel="stylesheet" href="https://assets.synapse76.fr/css/syn_menu.css?v=1" /> 42 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/MarkerCluster.css" /> 43 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/MarkerCluster.Default.css" /> 44 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" crossorigin="" /> 45
45<script src="https://unpkg.com/[email protected]/dist/leaflet.js" crossorigin=""></script>
45 46 <!-- Favicon et icônes --> 47 <link rel="shortcut icon" href="lib/images/blason/76573_Blason.png" type="image/x-icon" /> 48 <link rel="apple-touch-icon" href="lib/images/blason/76573_Blason.png" /> 49 <link rel="icon" href="lib/images/blason/favicon.ico" type="image/x-icon" /> 50 <!-- Police Bellota Text --> 51 <link rel="preload" href="https://fonts.googleapis.com/css?family=Bellota+Text:300,300i,400,400i,700,700i&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" /> 52 <noscript> 53 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Bellota+Text:300,300i,400,400i,700,700i&display=swap" /> 54 </noscript> 55 <!-- Scripts de gestion des cookies --> 56
56<script src="https://assets.synapse76.fr/script/tarteaucitron/tarteaucitron.js"></script>
56 57
57<script src="https://assets.synapse76.fr/script/tarteaucitron/tarteaucitron_config.js"></script>
57 58 <!-- Variables CSS dynamiques --> 59 <style> 60 :root { 61 --theme-name: Synapse; 62 --nav-theme-color: #4d6d9a; 63 --nav-theme-fond: #ffffff; 64 --nav-theme-hover: #304460; 65 --nav-theme-active: #263a56; 66 --nav-theme-disabled: #aab8d8; 67 --nav-cancel-color: #d9534f; 68 --nav-cancel-hover: #c9302c; 69 --nav-cancel-active: #ac2925; 70 --nav-cancel-disabled: #e6b9b5; 71 --nav-text-disable: #e0e0e0; 72 --nav-text-color: #fafafa; 73 --theme-text: #4d6d9a; 74 --theme-text-dark: #000000; 75 --theme-text-light: #f9f9f9; 76 --theme-text-white: #ffffff; 77 --color-background: #f5f7fa; 78 --color-gray-lightest: #f9f9f9; 79 --color-border: #d1d9e6; 80 --text-primary: #1f3c5b; 81 --text-secondary: #5a6b85; 82 --text-muted: #7d879c; 83 --nav-theme-color-dark: #3a5a85; 84 --font-family-base: "Bellota Text', display"; 85 } 86 #illustration .parallax-bg { 87 background-image: url('lib/images/fond/76573_Fond.webp'); 88 } 89 .sr-only { 90 position: absolute; 91 width: 1px; 92 height: 1px; 93 padding: 0; 94 margin: -1px; 95 overflow: hidden; 96 clip: rect(0,0,0,0); 97 white-space: nowrap; 98 border: 0; 99 } 100 </style> 101</head> 102<body> 103 <!-- Google Tag Manager (noscript) --> 104 <noscript> 105 <iframe 106 src="https://www.googletagmanager.com/ns.html?id=GTM-5NXLDJZZ" 107 height="0" width="0" 108 style="display:none;visibility:hidden" 109 title="Google Tag Manager" 110 aria-hidden="true"> 111 </iframe> 112 </noscript> 113 <!-- Menu principal --> 114 <header> 115 <section class="menu syn-sect-barre-menu" once="menu" id="menu" aria-label="Menu principal"> 116 <nav class="navbar navbar-dropdown navbar-fixed-top navbar-expand-lg" role="navigation" aria-label="Menu de navigation"> 117 <div class="container"> 118 <div class="navbar-brand"> 119 <span class="navbar-logo"> 120 <a href="admin/index.php" aria-label="Accéder à l'administration"> 121 <img src="lib/images/blason/76573_Blason.png" alt="" class="blason-mairie" aria-hidden="true" /> 122 </a> 123 </span> 124 <span class="navbar-caption-wrap"> 125 <a class="navbar-caption text-white display-7" href="index.php#top" aria-label="Retour à la page d'accueil de la mairie">Mairie de Saint-Denis-le-Thiboult</a> 126 </span> 127 </div> 128 <button class="navbar-toggler" type="button" data-toggle="collapse" data-bs-toggle="collapse" data-target="#navbarSupportedContent" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Basculer le menu de navigation"> 129 <div class="hamburger"> 130 <span></span> 131 <span></span> 132 <span></span> 133 <span></span> 134 </div> 135 </button> 136 <div class="collapse navbar-collapse" id="navbarSupportedContent"> 137 <ul class="navbar-nav nav-dropdown nav-right" data-app-modern-menu="true"> 138 <li class="nav-item"> 139 <a class="nav-link link text-white text-primary display-4" href="index.php?choix=accueil" aria-label="Page d'accueil">Accueil</a> 140 </li> 141 <li class="nav-item"> 142 <a class="nav-link link text-white text-primary display-4" href="actualites.html" aria-label="Actualités de la mairie">Actualités</a> 143 </li> 144 <li class="nav-item"> 145 <a class="nav-link link text-white text-primary display-4" href="index.php?choix=accueil#venir" aria-label="Informations sur la mairie">Votre Mairie</a> 146 </li> 147 <li class="nav-item"> 148 <a class="nav-link link text-white text-primary display-4" href="index.php?choix=demarche" aria-label="Informations sur la mairie">Vos Démarches</a> 149 </li> 150 <li class="nav-item"> 151 <a class="nav-link link text-white text-primary display-4" href="index.php?choix=accueil#conseil" aria-label="Liste des élus">Vos Elus</a> 152 </li> 153 <li class="nav-item"> 154 <a class="nav-link link text-white text-primary display-4" href="publications.html" aria-label="Publications de la mairie">Publications</a> 155 </li> 156 <li class="nav-item"> 157 <a class="nav-link link text-white text-primary display-4" href="agenda.html" aria-label="Agenda des événements">Agenda</a> 158 </li> 159 </ul> 160 </div> 161 </div> 162 </nav> 163 </section> 164 </header> 165<!-- Contenu principal --> 166<main> 167 168<!-- Section visuelle avec effet parallax --> 169<section class="syn-sect-parallax" id="illustration" aria-label="Illustration de la commune"> 170 <div class="parallax-bg"></div> 171 <div class="mbr-overlay"></div> 172 <div class="container"> 173 <div class="row justify-content-center"> 174 <div class="col-12 col-lg-7"> 175 <h1 class="mbr-section-title mbr-fonts-style mb-3 display-1"> 176 <strong>Saint-Denis-le-Thiboult</strong> 177 </h1> 178 <p class="mbr-text mbr-fonts-style display-7"> 179 <strong>Site Officiel</strong> 180 </p> 181 </div> 182 </div> 183 </div> 184</section> 185 186<!-- Section de présentation textuelle de la commune --> 187<section class="syn-sect-presentation" id="presentation" data-aos="fade-up"> 188 <div class="container"> 189 <div class="row justify-content-center"> 190 <div class="col-md-12 col-lg-10"> 191 <hr class="line" aria-hidden="true"> 192 <p class="mbr-text text-center mbr-fonts-style my-4 display-5" id="presentationContent"> 193 <p><strong>Saint-Denis-le-Thiboult</strong> est une commune de <strong>Seine Maritime</strong> de 521 habitants. Ses habitants se nomment les Diony-Théobaldiens.<br>Notre commune a intégré avec 63 autres communes, la <strong>Communauté de communes Inter-Caux-Vexin</strong>.<br>La commune a sur son territoire la chapelle funéraire Saint-Laurian classée aux monuments historiques, le château - hôtel de Belmesnil.</p> </p> 194 <hr class="line" aria-hidden="true"> 195 </div> 196 </div> 197 </div> 198</section> 199 200<!-- Script gérant lâeffet parallax -->
201<script nonce="YV297nvcBPjnfjKabK3QgA=="> 202(function() { 203 const parallaxSection = document.getElementById('illustration'); 204 if (!parallaxSection) return; 205 const bg = parallaxSection.querySelector('.parallax-bg'); 206 if (!bg) return; 207 let isMobile = window.innerWidth <= 768; 208 let parallaxStrength = Math.min(window.innerHeight / 800, 1.2); 209 210 function updateParallax() { 211 const rect = parallaxSection.getBoundingClientRect(); 212 const windowHeight = window.innerHeight; 213 if (rect.bottom >= 0 && rect.top <= windowHeight) { 214 const progress = rect.top / windowHeight; 215 const offset = progress * 150 * parallaxStrength; 216 bg.style.transform = `translateY(${offset}px)`; 217 } 218 } 219 220 function recalcParams() { 221 isMobile = window.innerWidth <= 768; 222 parallaxStrength = Math.min(window.innerHeight / 800, 1.2); 223 if (isMobile) { 224 bg.style.transform = 'none'; 225 } else { 226 updateParallax(); 227 } 228 } 229 230 if (!isMobile && 'IntersectionObserver' in window) { 231 let active = false; 232 function onScroll() { 233 requestAnimationFrame(updateParallax); 234 } 235 const observer = new IntersectionObserver(entries => { 236 entries.forEach(entry => { 237 if (entry.isIntersecting && !active) { 238 active = true; 239 window.addEventListener('scroll', onScroll, { passive: true }); 240 updateParallax(); 241 } else if (!entry.isIntersecting && active) { 242 active = false; 243 window.removeEventListener('scroll', onScroll); 244 } 245 }); 246 }); 247 observer.observe(parallaxSection); 248 window.addEventListener('resize', recalcParams); 249 window.addEventListener('orientationchange', recalcParams); 250 } 251})(); 252</script>
252 253 254
255<script> 256document.addEventListener('DOMContentLoaded', () => { 257 const categoryColors = []; 258 const categoryIcons = {1:'fa-landmark',2:'fa-theater-masks',3:'fa-futbol',4:'fa-glass-cheers',5:'fa-book',6:'fa-hands-helping',7:'fa-home',8:'fa-store',9:'fa-briefcase'}; 259 let events = []; 260 261 let userLat = null, userLng = null, userLatRad = null; 262 263 function escapeHTML(str) { 264 if (!str) return ''; 265 return str.replace(/[&<>"']/g, m => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m])); 266 } 267 268 function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2){ 269 const R = 6371; 270 const dLat = (lat2-lat1)*Math.PI/180; 271 const dLon = (lon2-lon1)*Math.PI/180; 272 const a = Math.sin(dLat/2)**2 + Math.cos(userLatRad)*Math.cos(lat2*Math.PI/180)*Math.sin(dLon/2)**2; 273 return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 274 } 275 276 function getDelayText(dateEndStr){ 277 const today = new Date(); today.setHours(0,0,0,0); 278 const eventEnd = new Date(dateEndStr); eventEnd.setHours(0,0,0,0); 279 if(eventEnd < today) return "Passé"; 280 if(eventEnd.getTime() === today.getTime()) return "Aujourd'hui"; 281 const diffDays = Math.floor((eventEnd - today)/(1000*60*60*24)); 282 if(diffDays === 1) return "Demain"; 283 return `Dans ${diffDays} jours`; 284 } 285 286 function parseRruleSummary(rrule){ 287 if(!rrule) return ''; 288 const freq = (rrule.match(/FREQ=([^;]+)/i)?.[1]||'').toUpperCase(); 289 return {DAILY:'Tous les jours', WEEKLY:'Toutes les semaines', MONTHLY:'Tous les mois', YEARLY:'Tous les ans'}[freq]||''; 290 } 291 292 function enrichWithDistances() { 293 if (userLat !== null && userLng !== null) { 294 events = events.map(e => { 295 if (e.event_lat && e.event_lng) { 296 const distKm = getDistanceFromLatLonInKm( 297 userLat, userLng, 298 parseFloat(e.event_lat), parseFloat(e.event_lng) 299 ); 300 e.distanceDisplay = distKm < 1 ? (distKm * 1000).toFixed(0) + ' m' : distKm.toFixed(1) + ' km'; 301 } 302 return e; 303 }); 304 } 305 } 306 307 function renderResults(events){ 308 const resultsDiv = document.getElementById('agenda-results'); 309 if(!events.length){ 310 resultsDiv.innerHTML = '<div class="no-events">Aucun événement trouvé.</div>'; 311 return; 312 } 313 resultsDiv.className = 'agenda-grid grid-view'; 314 resultsDiv.innerHTML = events.map(e => { 315 const imgFile = e.event_image || 'lib/images/agenda/default_event.png'; 316 const descShort = e.event_description ? (e.event_description.length>117 ? escapeHTML(e.event_description.substring(0,117))+'...' : escapeHTML(e.event_description)) : ''; 317 const catId = e.event_category_id; 318 const iconClass = categoryIcons[catId] || 'fa-map-marker-alt'; 319 const recurrenceText = (e.event_rrule && e.event_rrule.trim()) ? `<div class="recurrence-indicator badge bg-info mb-1" title="Récurrence">${parseRruleSummary(e.event_rrule)}</div>` : ''; 320 const distanceDisplay = e.distanceDisplay || (e.distance || '?'); 321 322 return ` 323 <div class="agenda-item"> 324 <div class="card" role="article" tabindex="0" aria-label="Ãvénement : ${escapeHTML(e.event_title)}"> 325 <div class="card-img-wrapper"> 326 <img 327 src="${imgFile}" 328 alt="Affiche de l'événement ${escapeHTML(e.event_title)}" 329 class="card-img-top" 330 loading="lazy" 331 aria-describedby="desc-${e.id}" 332 /> 333 <div id="desc-${e.id}" class="visually-hidden"> 334 ${escapeHTML(e.event_description || 'Affiche illustrant lâévénement')} 335 </div> 336 ${e.event_source==='SMA' 337 ? '<img src="https://assets.synapse76.fr/images/commun/sma.webp" alt="Logo SMA" class="sma-logo" />' 338 : '' 339 } 340 </div> 341 <div class="card-body"> 342 <span class="badge-category cat-${catId}"> 343 <i class="fa-solid ${iconClass}" aria-hidden="true"></i>${escapeHTML(e.cat_name || '')} 344 </span> 345 ${recurrenceText} 346 <div class="card-title">${escapeHTML(e.event_title)}</div> 347 <div class="card-sub"><i class="fa fa-calendar-alt"></i> ${e.event_start.substring(0,10).split('-').reverse().join('/')} <i class="fa fa-map-marker-alt"></i> ${escapeHTML(e.event_location || '')}</div> 348 <div class="card-desc" title="${escapeHTML(e.event_description || '')}">${descShort}</div> 349 <div class="chips">
350 <span class="chip chip-time">${getDelayText(e.event_end)}</span> 351 <span class="chip chip-dist"><i class="fa fa-route"></i> ${distanceDisplay}</span> 352 </div> 353 <div class="card-action"> 354 <a href="syn_agenda_view.php?id=${e.id}" class="stretched-link" aria-label="Lire événement : ${escapeHTML(e.event_title)}"></a> 355 <button class="btn btn-outline-primary" type="button" aria-label="Lire l'événement : ${escapeHTML(e.event_title)}"> 356 <i class="fa fa-eye me-1" aria-hidden="true"></i>Lire 357 </button> 358 </div> 359 </div> 360 </div> 361 </div>`; 362 }).join(''); 363 } 364 365 // 1. Affiche immédiatement sans distance 366 renderResults(events); 367 368 // 2. Si la géolocalisation est dispo, on met à jour les distances puis on re-render 369 if(navigator.geolocation){ 370 navigator.geolocation.getCurrentPosition(pos => { 371 userLat = pos.coords.latitude; 372 userLng = pos.coords.longitude; 373 userLatRad = userLat * Math.PI/180; 374 enrichWithDistances(); 375 renderResults(events); 376 }); 377 } 378}); 379</script>
379 380 381<style> 382.actualite-item a { 383 color: inherit; 384 text-decoration: none; 385 border-bottom: 2px solid transparent; 386 transition: border-color 0.2s, box-shadow 0.2s; 387 display: flex; 388 flex-direction: column; 389 height: 100%; 390} 391 392.actualite-item a:hover, 393.actualite-item a:focus { 394 border-bottom: 2px solid #0056b3; 395 box-shadow: 0 0 6px rgba(0,0,0,0.15); 396 outline: none; 397} 398</style> 399<!-- Section affichage des actualités --> 400<section id="actualites" class="syn-actualites" aria-label="Actualités récentes"> 401 <div class="container"> 402 <header class="actualites-header"> 403 <h2 class="actualites-title"> 404 <i class="fa fa-newspaper me-2" aria-hidden="true"></i>Actualités 405 </h2> 406 <p class="actualites-subtitle">Retrouvez les dernières nouvelles et informations de votre commune.</p> 407 </header> 408 <div id="actualites-results" aria-live="polite" aria-atomic="true" class="actualites-grid"></div> 409 <div class="btn-container" style="text-align:center; margin-top:1rem;"> 410 <a href="index.php?choix=actualites" class="btn btn-primary" aria-label="Consultez toutes les actualités"> 411 Consultez toutes les actualités 412 </a> 413 </div> 414 </div> 415</section> 416
417<script> 418document.addEventListener('DOMContentLoaded', () => { 419 // Données des articles envoyées depuis PHP 420 const resultDiv = document.getElementById('actualites-results'); 421 const articles = [{"id":30,"title":"Mairie ferm\u00e9e le vendredi 25 septembre 2026 de 9h \u00e0 12h","author":"Mairie de Saint-Denis-le-Thiboult","date":"24\/09\/2026","image":"lib\/images\/actu\/photo_news.webp","isTop":false,"anchor":"mairie-ferm-e-le-vendredi-25-septembre-2026-de-9h-12h"},{"id":29,"title":"Arr\u00eat\u00e9 de circulation Route de Villers le mardi 22 septembre 2026","author":"Mairie de Saint-Denis-le-Thiboult","date":"15\/09\/2026","image":"lib\/images\/actu\/photo_news.webp","isTop":false,"anchor":"arr-t-de-circulation-route-de-villers-le-mardi-22-septembre-2026"},{"id":27,"title":"D\u00e9lib\u00e9ration du 21\/08\/2026","author":"Mairie de Saint-Denis-le-Thiboult","date":"21\/08\/2026","image":"lib\/images\/actu\/photo_newsletter.webp","isTop":false,"anchor":"d-lib-ration-du-21-08-2026"},{"id":26,"title":"D\u00e9lib\u00e9ration du 21\/08\/2026","author":"Mairie de Saint-Denis-le-Thiboult","date":"21\/08\/2026","image":"lib\/images\/actu\/
421photo_newsletter.webp","isTop":false,"anchor":"d-lib-ration-du-21-08-2026"},{"id":25,"title":"D\u00e9ch\u00e8terie de SDLT ouverte jusqu\u2019\u00e0 fin octobre","author":"Mairie de Saint-Denis-le-Thiboult","date":"18\/08\/2026","image":"lib\/images\/actu\/76573_actu_83.webp","isTop":false,"anchor":"d-ch-terie-de-sdlt-ouverte-jusqu-fin-octobre"},{"id":24,"title":"Offre BlaBlaCar InterCauxVexin","author":"Mairie de Saint-Denis-le-Thiboult","date":"18\/08\/2026","image":"lib\/images\/actu\/76573_actu_24.webp","isTop":false,"anchor":"offre-blablacar-intercauxvexin"},{"id":22,"title":"Randonn\u00e9es Vall\u00e9e du Crevon","author":"Mairie de Saint-Denis-le-Thiboult","date":"17\/07\/2026","image":"lib\/images\/actu\/76573_actu_22.webp","isTop":false,"anchor":"randonn-es-vall-e-du-crevon"},{"id":21,"title":"Arr\u00eat\u00e9s pr\u00e9fectoraux - 13-15 juillet 2026","author":"Mairie de Saint-Denis-le-Thiboult","date":"12\/07\/2026","image":"lib\/images\/actu\/76573_actu_80.webp","isTop":false,"anchor":"arr-t-s-pr-fectoraux-13-15-juillet-2026"},{"id":20,"title":"D\u00e9lib\u00e9ration du 25\/06\/2026","author":"Mairie de Saint-Denis-le-Thiboult","date":"11\/07\/2026","image":"lib\/images\/actu\/
421photo_newsletter.webp","isTop":false,"anchor":"d-lib-ration-du-25-06-2026"},{"id":12,"title":"r\u00e9glez vos prestations de services publics sur internet","author":"Mairie de Saint-Denis-le-Thiboult","date":"15\/06\/2026","image":"lib\/images\/actu\/photo_news.webp","isTop":false,"anchor":"r-glez-vos-prestations-de-services-publics-sur-internet"},{"id":11,"title":"Sant\u00e9; num\u00e9ros utiles","author":"Mairie de Saint-Denis-le-Thiboult","date":"02\/02\/2026","image":"lib\/images\/actu\/76573_actu_1.webp","isTop":false,"anchor":"sant-num-ros-utiles"}]; 422 const maxArticles = 8; 423 const toDisplay = articles.slice(0, maxArticles); 424 425 // Génération d'une carte article 426function createArticleCard(a) { 427 return ` 428 <article class="actualite-item" role="article" tabindex="0" aria-label="Actualité : ${a.title}"> 429 ${a.isTop ? '<div class="actualite-top-label" aria-label="Top actualité">Top Actu</div>' : ''} 430 <a href="index.php?choix=actualites#${a.anchor}" 431 aria-label="Lire l'actualité : ${a.title}" 432 title="Lire l'actualité : ${a.title}"> 433 <img src="${a.image}?t=${Date.now()}" 434 alt="Image illustrant l'article : ${a.title}" 435 aria-label="Lire l'actualité : ${a.title}" 436 class="actualite-img" loading="lazy" /> 437 <div class="actualite-content"> 438 <h3 class="actualite-title">${a.title}</h3> 439 <div class="actualite-subtitle"><strong>${a.author}</strong></div> 440 <div class="actualite-date-author">le ${a.date}</div> 441 <div class="actualite-footer"> 442 <button class="btn btn-outline-primary" type="button" aria-label="Lire l'article ${a.title}"> 443 <i class="fa fa-eye me-1" aria-hidden="true"></i>Lire 444 </button> 445 </div> 446 </div> 447 </a> 448 </article> 449 `; 450} 451 452 // Rendu des articles ou message si aucun 453 if (!toDisplay.length) { 454 resultDiv.innerHTML = `<p class="no-news" style="text-align:center; color:#666; font-size:1.1rem;">Aucune actualité disponible.</p>`; 455 } else { 456 resultDiv.innerHTML = toDisplay.map(createArticleCard).join(''); 457 } 458}); 459</script>
459 460<style> 461.visually-hidden { 462 position: absolute !important; 463 width: 1px; 464 height: 1px; 465 padding: 0; 466 margin: -1px; 467 overflow: hidden; 468 clip: rect(0, 0, 0, 0); 469 white-space: nowrap; 470 border: 0; 471} 472</style> 473<!-- Section venir en mairie --> 474<section id="venir" class="syn-venir" aria-label="Venir en mairie"> 475 <div class="container-xl"> 476 <header class="venir-header text-center mb-4"> 477 <h2 class="venir-title fw-bold"> 478 <i class="fa fa-building me-2" aria-hidden="true"></i>Venir en mairie 479 </h2> 480 <p class="venir-subtitle text-secondary">Retrouvez toutes les informations utiles pour venir et contacter votre mairie.</p> 481 </header> 482 <div class="row gx-4 gy-4 align-items-stretch"> 483 <div class="col-md-6 d-flex flex-column"> 484 <!-- Bloc adresse de la mairie --> 485 <div class="card flex-fill mb-4 shadow-sm rounded-3 p-4 d-flex flex-column"> 486 <div class="d-flex align-items-center mb-3 text-primary"> 487 <i class="fas fa-map-marker-alt fa-2x me-3"></i> 488 <h3 class="mb-0">Adresse</h3> 489 </div> 490 <address> 491 Saint-Denis-le-Thiboult<br> 492 600 route de la Vallée<br> 493 <br> 494 <br> 495 76116 Saint-Denis-le-Thiboult<br> 496 <br><i class="fa-solid fa-phone"> : </i> 497 02 35 23 60 59<br> 498 </address> 499 </div> 500 <!-- Bloc horaires dâouverture --> 501 <div class="card flex-fill shadow-sm rounded-3 p-4 d-flex flex-column"> 502 <div class="d-flex align-items-center mb-3 text-primary"> 503 <i class="fas fa-clock fa-2x me-3"></i> 504 <h3 class="mb-0">Horaires d'ouverture</h3> 505 </div> 506 <table class="table table-borderless mb-0"> 507 <caption class="visually-hidden">Horaires dâouverture de la mairie par jour</caption> 508 <thead> 509 <tr> 510 <th scope="col" class="text-secondary fw-semibold">Jour</th> 511 <th scope="col" class="text-secondary fw-semibold">Horaires</th> 512 </tr> 513 </thead> 514 <tbody> 515 <tr> 516 <th scope="row" class="fw-normal">Lundi</th> 517 <td>de 17h00 à 19h00</td> 518 </tr> 519 <tr> 520 <th scope="row" class="fw-normal">Mardi</th> 521 <td>Fermé</td> 522 </tr> 523 <tr> 524 <th scope="row" class="fw-normal">Mercredi</th> 525 <td>Fermé</td> 526 </tr> 527 <tr> 528 <th scope="row" class="fw-normal">jeudi</th> 529 <td>de 17h00 à 19h00</td> 530 </tr> 531 <tr> 532 <th scope="row" class="fw-normal">Vendredi</th> 533 <td>de 9h00 à 12h00</td> 534 </tr> 535 <tr> 536 <th scope="row" class="fw-normal">Samedi</th> 537 <td>Fermé</td> 538 </tr> 539 </tbody> 540 </table> 541 </div> 542 </div> 543 <!-- Bloc carte interactive --> 544 <div class="col-md d-flex flex-column"> 545 <div id="map-mairie" class="rounded flex-fill shadow-sm"></div> 546 </div> 547 </div> 548 <!-- Bloc bouton contact --> 549 <div class="text-center mt-4"> 550 <a class="btn btn-primary display-4" onclick="open_win_poly()" href="javascript:void(0)" aria-label="Ouvrir le formulaire de contact"> 551 <i class="fa fa-envelope me-2"></i> Contactez Nous 552 </a> 553 </div> 554 </div> 555</section>
556<script> 557document.addEventListener("DOMContentLoaded", function() { 558 const lat = parseFloat("49.45916377"); 559 const lng = parseFloat("1.36276066"); 560 const map = L.map('map-mairie').setView([lat, lng], 15); 561 562 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 563 attribution: '© OpenStreetMap contributors' 564 }).addTo(map); 565 566 L.marker([lat, lng]).addTo(map).bindPopup("Mairie de Saint-Denis-le-Thiboult").openPopup(); 567 568 // â Corrige le SVG du contrôle attribution 569 setTimeout(() => { 570 document.querySelectorAll('.leaflet-control-attribution svg').forEach(svg => { 571 svg.setAttribute('role', 'img'); 572 svg.setAttribute('aria-label', 'Drapeau de lâUnion Européenne'); 573 // Optionnel pour support large 574 const title = document.createElementNS("http://www.w3.org/2000/svg", "title"); 575 title.textContent = "Drapeau affiché par Leaflet"; 576 svg.prepend(title); 577 }); 578 }, 500); 579 }); 580</script>
580 581 582<!-- Bloc de présentation du conseil municipal --> 583<section id="conseil" class="syn-conseil" aria-label="Conseil Municipal"> 584 <div class="container-xl"> 585 <header class="conseil-header text-center"> 586 <h2 class="conseil-title"> 587 <i class="fa fa-users me-2" aria-hidden="true"></i>Le Conseil Municipal 588 </h2> 589 <p class="conseil-subtitle">Découvrez votre maire et vos élus, au service de la commune et de ses habitants.</p> 590 </header> 591 </div> 592</section> 593 594 <section class="syn-sect-titre maire-section" id="titre_maire" data-aos="fade-up"> 595 <div class="container-xl"> 596 <div class="row justify-content-center"> 597 <div class="title col-md-12 col-lg-10"> 598 <h3 class="mbr-section-subtitle align-center mbr-fonts-style mb-4 display-5" id="titre_maire-title" aria-label="Section des élus : Votre Maire"> 599 <strong>Votre Maire</strong> 600 </h3> 601 </div> 602 </div> 603 </div> 604 </section> 605 <section class="syn-sect-trombi-big" id="liste_maire" data-aos="fade-up" aria-labelledby="titre_maire-title" aria-live="polite"> 606 <div class="container-xl"> 607 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-hebert-title"> 608 <div class="item-wrapper"> 609 <div class="row align-items-center"> 610 <div class="col-12 col-md-4"> 611 <div class="image-wrapper"> 612 <img src="lib/images/elus/photo_elu.webp" 613 alt="Photo de Catherine HEBERT" 614 class="img-fluid" loading="lazy"> 615 </div> 616 </div> 617 <div class="col-12 col-md"> 618 <div class="card-box"> 619 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-hebert-title"> 620 <strong>Catherine HEBERT</strong> 621 </h4> 622 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 623 <strong>Maire</strong> 624 </h5> 625 </div> 626 </div> 627 </div> 628 </div> 629 </div> 630 </div> 631 </section> 632 <section class="syn-sect-titre " id="titre_adjoints" data-aos="fade-up"> 633 <div class="container-xl"> 634 <div class="row justify-content-center"> 635 <div class="title col-md-12 col-lg-10"> 636 <h3 class="mbr-section-subtitle align-center mbr-fonts-style mb-4 display-5" id="titre_adjoints-title" aria-label="Section des élus : Les Adjoints au Maire"> 637 <strong>Les Adjoints au Maire</strong> 638 </h3> 639 </div> 640 </div> 641 </div> 642 </section> 643 <section class="syn-sect-trombi-small" id="liste_adjoints" data-aos="fade-up" aria-labelledby="titre_adjoints-title" aria-live="polite"> 644 <div class="container-xl"> 645 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-houdeville-title"> 646 <div class="item-wrapper"> 647 <div class="row align-items-center"> 648 <div class="col-12 col-md-2"> 649 <div class="image-wrapper"> 650 <img src="lib/images/elus/photo_elu.webp" 651 alt="Photo de Cyril HOUDEVILLE" 652 class="img-fluid" loading="lazy"> 653 </div> 654 </div> 655 <div class="col-12 col-md"> 656 <div class="card-box"> 657 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-houdeville-title"> 658 <strong>Cyril HOUDEVILLE</strong> 659 </h4> 660 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 661 <strong>1er Adjoint</strong> 662 </h5> 663 </div> 664 </div> 665 </div> 666 </div> 667 </div> 668 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-paresy-title"> 669 <div class="item-wrapper"> 670 <div class="row align-items-center"> 671 <div class="col-12 col-md-2"> 672 <div class="image-wrapper"> 673 <img src="lib/images/elus/photo_elu.webp" 674 alt="Photo de Laëtitia PARESY" 675 class="img-fluid" loading="lazy"> 676 </div> 677 </div> 678 <div class="col-12 col-md"> 679 <div class="card-box"> 680 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-paresy-title"> 681 <strong>Laëtitia PARESY</strong> 682 </h4> 683 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 684 <strong>2ème Adjoint</strong> 685 </h5> 686 </div> 687 </div> 688 </div> 689 </div> 690 </div> 691 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-ganz-title"> 692 <div class="item-wrapper"> 693 <div class="row align-items-center"> 694 <div class="col-12 col-md-2"> 695 <div class="image-wrapper"> 696 <img src="lib/images/elus/photo_elu.webp" 697 alt="Photo de Georges GANZ" 698 class="img-fluid" loading="lazy"> 699 </div> 700 </div> 701 <div class="col-12 col-md"> 702 <div class="card-box"> 703 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-ganz-title"> 704 <strong>Georges GANZ</strong> 705 </h4> 706 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 707 <strong>3ème Adjoint</strong> 708 </h5> 709 </div> 710 </div> 711 </div> 712 </div> 713 </div> 714 </div> 715 </section> 716 <section class="syn-sect-titre " id="titre_conseillers" data-aos="fade-up"> 717 <div class="container-xl"> 718 <div class="row justify-content-center"> 719 <div class="title col-md-12 col-lg-10"> 720 <h3 class="mbr-section-subtitle align-center mbr-fonts-style mb-4 display-5" id="titre_conseillers-title" aria-label="Section des élus : Les Conseillers Municipaux"> 721 <strong>Les Conseillers Municipaux</strong> 722 </h3> 723 </div> 724 </div> 725 </div> 726 </section> 727 <section class="syn-sect-trombi-small" id="liste_conseillers" data-aos="fade-up" aria-labelledby="titre_conseillers-title" aria-live="polite"> 728 <div class="container-xl"> 729 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-a thomas-title"> 730 <div class="item-wrapper"> 731 <div class="row align-items-center"> 732 <div class="col-12 col-md-2"> 733 <div class="image-wrapper"> 734 <img src="lib/images/elus/photo_elu.webp" 735 alt="Photo de Christel a THOMAS" 736 class="img-fluid" loading="lazy"> 737 </div> 738 </div> 739 <div class="col-12 col-md"> 740 <div class="card-box"> 741 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-a thomas-title"> 742 <strong>Christel a THOMAS</strong> 743 </h4> 744 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 745 <strong>Conseillère Municipale</strong> 746 </h5> 747 </div> 748 </div> 749 </div> 750 </div> 751 </div> 752 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-b lecouteux-title"> 753 <div class="item-wrapper"> 754 <div class="row align-items-center"> 755 <div class="col-12 col-md-2"> 756 <div class="image-wrapper"> 757 <img src="lib/images/elus/photo_elu.webp" 758 alt="Photo de Michel b LECOUTEUX" 759 class="img-fluid" loading="lazy"> 760 </div> 761 </div> 762 <div class="col-12 col-md"> 763 <div class="card-box"> 764 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-b lecouteux-title"> 765 <strong>Michel b LECOUTEUX</strong> 766 </h4> 767 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 768 <strong>Conseiller Municipal</strong> 769 </h5> 770 </div> 771 </div> 772 </div> 773 </div> 774 </div> 775 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-c fauconnet-title"> 776 <div class="item-wrapper"> 777 <div class="row align-items-center"> 778 <div class="col-12 col-md-2"> 779 <div class="image-wrapper"> 780 <img src="lib/images/elus/photo_elu.webp" 781 alt="Photo de Monica c FAUCONNET" 782 class="img-fluid" loading="lazy"> 783 </div> 784 </div> 785 <div class="col-12 col-md"> 786 <div class="card-box"> 787 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-c fauconnet-title"> 788 <strong>Monica c FAUCONNET</strong> 789 </h4> 790 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 791 <strong>Conseillère Municipale</strong> 792 </h5> 793 </div> 794 </div> 795 </div> 796 </div> 797 </div> 798 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-d lancel-title"> 799 <div class="item-wrapper"> 800 <div class="row align-items-center"> 801 <div class="col-12 col-md-2"> 802 <div class="image-wrapper"> 803 <img src="lib/images/elus/photo_elu.webp" 804 alt="Photo de Olivier d LANCEL" 805 class="img-fluid" loading="lazy"> 806 </div> 807 </div> 808 <div class="col-12 col-md"> 809 <div class="card-box"> 810 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-d lancel-title"> 811 <strong>Olivier d LANCEL</strong> 812 </h4> 813 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 814 <strong>Conseiller Municipal</strong> 815 </h5> 816 </div> 817 </div> 818 </div> 819 </div> 820 </div> 821 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-e mirianon-title"> 822 <div class="item-wrapper"> 823 <div class="row align-items-center"> 824 <div class="col-12 col-md-2"> 825 <div class="image-wrapper"> 826 <img src="lib/images/elus/photo_elu.webp" 827 alt="Photo de Elisabeth e MIRIANON" 828 class="img-fluid" loading="lazy"> 829 </div> 830 </div> 831 <div class="col-12 col-md"> 832 <div class="card-box"> 833 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-e mirianon-title"> 834 <strong>Elisabeth e MIRIANON</strong> 835 </h4> 836 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 837 <
837strong>Conseillère Municipale</strong> 838 </h5> 839 </div> 840 </div> 841 </div> 842 </div> 843 </div> 844 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-f humel-title"> 845 <div class="item-wrapper"> 846 <div class="row align-items-center"> 847 <div class="col-12 col-md-2"> 848 <div class="image-wrapper"> 849 <img src="lib/images/elus/photo_elu.webp" 850 alt="Photo de Aurélien f HUMEL" 851 class="img-fluid" loading="lazy"> 852 </div> 853 </div> 854 <div class="col-12 col-md"> 855 <div class="card-box"> 856 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-f humel-title"> 857 <strong>Aurélien f HUMEL</strong> 858 </h4> 859 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 860 <strong>Conseiller Municipal</strong> 861 </h5> 862 </div> 863 </div> 864 </div> 865 </div> 866 </div> 867 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-g laurens-title"> 868 <div class="item-wrapper"> 869 <div class="row align-items-center"> 870 <div class="col-12 col-md-2"> 871 <div class="image-wrapper"> 872 <img src="lib/images/elus/photo_elu.webp" 873 alt="Photo de Valérie g LAURENS" 874 class="img-fluid" loading="lazy"> 875 </div> 876 </div> 877 <div class="col-12 col-md"> 878 <div class="card-box"> 879 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-g laurens-title"> 880 <strong>Valérie g LAURENS</strong> 881 </h4> 882 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 883 <strong>Conseillère Municipale</strong> 884 </h5> 885 </div> 886 </div> 887 </div> 888 </div> 889 </div> 890 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-h leblond-title"> 891 <div class="item-wrapper"> 892 <div class="row align-items-center"> 893 <div class="col-12 col-md-2"> 894 <div class="image-wrapper"> 895 <img src="lib/images/elus/photo_elu.webp" 896 alt="Photo de Clément h LEBLOND" 897 class="img-fluid" loading="lazy"> 898 </div> 899 </div> 900 <div class="col-12 col-md"> 901 <div class="card-box"> 902 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-h leblond-title"> 903 <strong>Clément h LEBLOND</strong> 904 </h4> 905 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 906 <strong>Conseiller Municipal</strong> 907 </h5> 908 </div> 909 </div> 910 </div> 911 </div> 912 </div> 913 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-i roynard-title"> 914 <div class="item-wrapper"> 915 <div class="row align-items-center"> 916 <div class="col-12 col-md-2"> 917 <div class="image-wrapper"> 918 <img src="lib/images/elus/photo_elu.webp" 919 alt="Photo de Corine i ROYNARD" 920 class="img-fluid" loading="lazy"> 921 </div> 922 </div> 923 <div class="col-12 col-md"> 924 <div class="card-box"> 925 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-i roynard-title"> 926 <strong>Corine i ROYNARD</strong> 927 </h4> 928 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 929 <strong>Conseillère Municipale</strong> 930 </h5> 931 </div> 932 </div> 933 </div> 934 </div> 935 </div> 936 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-j lefebvre-title"> 937 <div class="item-wrapper"> 938 <div class="row align-items-center"> 939 <div class="col-12 col-md-2"> 940 <div class="image-wrapper"> 941 <img src="lib/images/elus/photo_elu.webp" 942 alt="Photo de Sé
942verine j LEFEBVRE" 943 class="img-fluid" loading="lazy"> 944 </div> 945 </div> 946 <div class="col-12 col-md"> 947 <div class="card-box"> 948 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-j lefebvre-title"> 949 <strong>Séverine j LEFEBVRE</strong> 950 </h4> 951 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 952 <strong>Conseillère Municipale</strong> 953 </h5> 954 </div> 955 </div> 956 </div> 957 </div> 958 </div> 959 <div class="item features-image" data-aos="zoom-in-up" aria-labelledby="elu-k delnott-title"> 960 <div class="item-wrapper"> 961 <div class="row align-items-center"> 962 <div class="col-12 col-md-2"> 963 <div class="image-wrapper"> 964 <img src="lib/images/elus/photo_elu.webp" 965 alt="Photo de François k DELNOTT" 966 class="img-fluid" loading="lazy"> 967 </div> 968 </div> 969 <div class="col-12 col-md"> 970 <div class="card-box"> 971 <h4 class="card-title mbr-fonts-style m-0 mb-3 display-5" id="elu-k delnott-title"> 972 <strong>François k DELNOTT</strong> 973 </h4> 974 <h5 class="card-subtitle mbr-fonts-style mb-3 display-4"> 975 <strong>Conseiller Municipal</strong> 976 </h5> 977 </div> 978 </div> 979 </div> 980 </div> 981 </div> 982 </div> 983 </section> 984 </main> 985<footer id="footer-main" class="text-light pt-5 pb-4" role="contentinfo" aria-label="Pied de page principal"> 986 <div class="container-xl"> 987 <div class="row g-4 align-items-start"> 988 <div class="col-lg-4 col-md-6"> 989 <h5>Mairie de Saint-Denis-le-Thiboult</h5> 990 <address class="mb-3"> 991 600 route de la Vallée<br> 992 76116 Saint-Denis-le-Thiboult<br> 993 <br><i class="fa-solid fa-phone"> : </i> 994 02 35 23 60 59<br> 995 </address> 996 <div class="horizontal-bar" aria-hidden="true"></div> 997 <h6>Horaires d'ouverture</h6> 998 <ul class="list-unstyled small" aria-label="Horaires d'ouverture"> 999 <li><strong>Lundi :</strong> de 17h00 à 19h00</li> 1000 <li><strong>Mardi :</strong> Fermé</li> 1001 <li><strong>Mercredi :</strong> Fermé</li> 1002 <li><strong>jeudi :</strong> de 17h00 à 19h00</li> 1003 <li><strong>Vendredi :</strong> de 9h00 à 12h00</li> 1004 <li><strong>Samedi :</strong> Fermé</li> 1005 </ul> 1006 </div> 1007 <div class="col-lg-4 col-md-6 text-center"> 1008 <h5>Suivez-nous</h5> 1009 <div class="d-flex flex-wrap gap-3 mb-3 justify-content-center" aria-label="Réseaux sociaux"> 1010 <a href="https://www.facebook.com/share/19EaWK4tN4/?mibextid=wwXIfr" target="_blank" rel="noopener" aria-label="Sur Facebook"><i class="fab fa-facebook fa-2x text-light"></i></a> </div> 1011 <div class="horizontal-bar" aria-hidden="true"></div> 1012 <h5>Nos partenaires</h5> 1013 <div class="partner-logos-container" aria-label="Logos de partenaires"> 1014 <img src="https://assets.synapse76.fr/images/logo/CD76_Logo.webp" alt="CD76" class="partner-logo d-block mx-auto" /> 1015 <img src="https://assets.synapse76.fr/images/logo/200070449_Logo.webp" alt="Partenaire" class="partner-logo d-block mx-auto" /> 1016 <img src="https://assets.synapse76.fr/images/logo/SMN76_Logo.webp" alt="SMN76" class="partner-logo d-block mx-auto" /> 1017 </div> 1018 </div> 1019 <div class="col-lg-4 col-md-12 text-center" aria-label="Widget météo"> 1020 <div class="iframe-container"> 1021 <div class="tac_meteofrance" data-insee="76573" data-comm="Saint-Denis-le-Thiboult" data-css="0##4D6D9A" data-width="width" data-height="height"></div> 1022 <!--<iframe id="iframe-meteo" 1023 src="https://meteofrance.com/widget/prevision/0##4D6D9A" 1024 title="Prévisions par Météo-France" 1025 loading="lazy" 1026 allowtransparency="true"> 1027 </iframe>--> 1028 </div> 1029 <noscript> 1030 <p class="small text-muted">Météo indisponible - JavaScript désactivé.</p> 1031 </noscript> 1032 </div> 1033 </div> 1034 <div class="row mt-4"> 1035 <div class="col-12 text-center small"> 1036 <a href="index.php?choix=plan-du-site" class="text-decoration-none text-light me-2">Plan du Site</a> | 1037 <a href="index.php?choix=donnees-personnelles" class="text-decoration-none text-light me-2">Données Personnelles et Cookies</a> | 1038 <a href="index.php?choix=mentions-legales" class="text-decoration-none text-light">Mentions Légales</a> | 1039 <a href="index.php?choix=accessibilite" class="text-decoration-none text-light">Accessibilité</a> 1040 </div> 1041 </div> 1042 </div> 1043</footer> 1044<img src="https://assets.synapse76.fr/images/commun/handicap.webp" alt="Icône d'accessibilité" id="accessibility-toggle" aria-haspopup="true" aria-expanded="false" aria-label="Ouvrir le panneau d'accessibilité" /> 1045<aside id="accessibility-panel" aria-hidden="true" role="complementary" aria-labelledby="accessibility-title"> 1046 <h2 id="accessibility-title">Accessibilité</h2> 1047 <button onclick="adjustFontSize(1)" aria-label="Agrandir le texte">ð Agrandir le texte</button> 1048 <button onclick="adjustFontSize(-1)" aria-label="Réduire le texte">ð Réduire le texte</button> 1049 <button onclick="toggleContrast()" aria-label="Activer le contraste élevé">ð Contraste élevé</button> 1050 <button onclick="toggleInvertColors()" aria-label="Inverser les couleurs">ð Inversion des couleurs</button> 1051 <button onclick="toggleFont()" aria-label="Activer ou désactiver la police dyslexique">ðï¸ Police Dyslexique</button> 1052 <button onclick="toggleReadPage()" aria-label="Lire la page">ð Lire la page</button> 1053 <div id="speech-controls" class="audio-controls"> 1054 <button onclick="pauseSpeech()" aria-label="Mettre en pause la lecture vocale">â¸ï¸</button> 1055 <button onclick="resumeSpeech()" aria-label="Reprendre la lecture vocale">â¶ï¸</button> 1056 <button onclick="stopSpeech()" aria-label="Arrêter la lecture vocale">â¹ï¸</button> 1057 </div> 1058<button onclick="toggleHoverReading()" id="hover-read-btn" aria-label="Activer ou désactiver la lecture au survol"> 1059 <svg xmlns="http://www.w3.org/2000/svg" 1060 width="16" 1061 height="16" 1062 fill="currentColor"
1063 viewBox="0 0 16 16" 1064 role="img" 1065 aria-label="Icône lecture au survol" 1066 focusable="false" 1067 style="margin-right: 6px;"> 1068 <title>Icône lecture au survol</title> 1069 <path d="M11.536 14.01A.5.5 0 0 1 11 13.5v-11a.5.5 0 0 1 .836-.37l3.25 2.75a.5.5 0 0 1 .164.37v5.5a.5.5 0 0 1-.164.37l-3.25 2.75a.5.5 0 0 1-.5.09zm-1.586-1.34a.5.5 0 0 1-.95-.32V3.65a.5.5 0 0 1 .95-.32L14.5 8l-4.55 4.67zM2 4.5A.5.5 0 0 1 2.5 4h2.086A1.5 1.5 0 0 1 6 4.5v7A1.5 1.5 0 0 1 4.586 13H2.5a.5.5 0 0 1-.5-.5v-8z"/> 1070 </svg> 1071 Lecture au survol 1072</button> 1073 <button onclick="resetAccessibility()" aria-label="Réinitialiser les paramètres d'accessibilité">â»ï¸ Réinitialiser</button> 1074</aside>
1075<script> 1076 var windowObjectReference; 1077 function open_win_poly() { 1078 windowObjectReference = window.open("syn_contact.php", 1079 "_blank", "toolbar=no, directories=yes, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=1000, height=850"); 1080 } 1081</script>
1081 1082
1083<script src="https://assets.synapse76.fr/script/rgpd.js"></script>
vendor: 1 bytes, line 1083
1083
1084<script src="https://assets.synapse76.fr/script/syn_rgaa.js"></script>
vendor: 1 bytes, line 1084
1084
1085<script src="https://assets.synapse76.fr/script/bootstrap.bundle.min.js"></script>
vendor: 1 bytes, line 1085
1085
1086<script src="https://assets.synapse76.fr/script/smooth-scroll.js"></script>
vendor: 1 bytes, line 1086
1086
1087<script src="https://assets.synapse76.fr/script/navbar-dropdown.js"></script>
vendor: 1 bytes, line 1087
1087
1088<script src="https://assets.synapse76.fr/script/social-likes.js"></script>
vendor: 1 bytes, line 1088
1088
1089<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/aos.js"></script>
vendor: 1 bytes, line 1089
1089
1090<script> 1091AOS.init({duration:1000,easing:'ease',once:true}); 1092</script>
1092 1093</body> 1094</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.