PageSourceSearch

https://saintdenislethiboult.fr/index.php

html saintdenislethiboult.fr collected 2026-10-07 06:49:37 UTC 61,500 bytes, 1,094 lines download raw bytes

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 => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[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('/')} &nbsp; <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: '&copy; 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&euml;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&euml;titia PARESY</strong>
682                                        </h4>
683                                        <h5 class="card-subtitle mbr-fonts-style mb-3 display-4">
684                                            <strong>2&egrave;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&egrave;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&egrave;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&egrave;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&egrave;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&eacute;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&eacute;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&eacute;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&eacute;rie g LAURENS</strong>
881                                        </h4>
882                                        <h5 class="card-subtitle mbr-fonts-style mb-3 display-4">
883                                            <strong>Conseill&egrave;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&eacute;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&eacute;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&egrave;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&eacute;
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&eacute;verine j LEFEBVRE</strong>
950                                        </h4>
951                                        <h5 class="card-subtitle mbr-fonts-style mb-3 display-4">
952                                            <strong>Conseill&egrave;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&ccedil;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&ccedil;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.