PageSourceSearch

https://villainville.fr/fr/

html villainville.fr collected 2026-10-03 01:49:57 UTC 93,435 bytes, 1,501 lines download raw bytes

1<!DOCTYPE html>
2<html dir="ltr" lang="fr" xmlns:ff4j="http://www.w3.org/1999/xhtml" xmlns:esi="http://www.edge-delivery.org/esi/1.0">
3    <head>
4        <title>
5                Commune de Villainville - Villainville-site officiel-2022        </title>
6
7        
7<script src="/lib/tarteaucitron/tarteaucitron.js"></script>
7
8        
8<script>
9            var tarteaucitronExpireInDay = true, tarteaucitronForceExpire = 183;
10
11            tarteaucitron.init({
12                "privacyUrl": "", /* Privacy policy url */
13
14                "hashtag": "#tarteaucitron", /* Open the panel with this hashtag */
15                "cookieName": "tarteaucitron", /* Cookie name */
16
17                "orientation": "bottom", /* Banner position (top - bottom) */
18
19                "showAlertSmall": false, /* Show the small banner on bottom right */
20                "cookieslist": true, /* Show the cookie list */
21
22                "showIcon": false, /* Show cookie icon to manage cookies */
23                // "iconSrc": "", /* Optionnal: URL or base64 encoded image */
24                "iconPosition": "BottomRight", /* Position of the icon between BottomRight, BottomLeft, TopRight and TopLeft */
25
26                "adblocker": false, /* Show a Warning if an adblocker is detected */
27
28                "DenyAllCta": true, /* Show the deny all button */
29                "AcceptAllCta": true, /* Show the accept all button when highPrivacy on */
30                "highPrivacy": true, /* HIGHLY RECOMMANDED Disable auto consent */
31
32                "handleBrowserDNTRequest": false, /* If Do Not Track == 1, disallow all */
33
34                "removeCredit": false, /* Remove credit link */
35                "moreInfoLink": true, /* Show more info link */
36                "useExternalCss": false, /* If false, the tarteaucitron.css file will be loaded */
37
38                //"cookieDomain": ".my-multisite-domaine.fr", /* Shared cookie for subdomain website */
39
40                "readmoreLink": "", /* Change the default readmore link pointing to tarteaucitron.io */
41
42                "mandatory": true, /* Show a message about mandatory cookies */
43
44                "listCookieByService": false, /* Show a message about list cookie by service */
45
46            });
47        </script>
47
48
49                    
50
51    <meta name="Description" content="Site officiel de la commune de Villainville 76280, Normandie France">
52    <meta name="Keywords" content="Villainville Normandie France site officiel village">
53    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
54    <meta charset="UTF-8">
55                    
56        <!-- Matomo -->
57<script>
58  var _paq = window._paq = window._paq || [];
59  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
60  _paq.push(['trackPageView']);
61  _paq.push(['enableLinkTracking']);
62  (function() {
63    var u="//matomo-client.neopse.com/";
64    _paq.push(['setTrackerUrl', u+'matomo.php']);
65    _paq.push(['setSiteId', '459']);
66    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
67    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
68  })();
69</script>
69
70<!-- End Matomo Code -->
71    
72
73
74
75
76
77                                                <link rel="apple-touch-icon" href="https://static.neopse.com/thumbs/p/2755/site/c9/59/be/c959be76e2df582a172b31c468cded04436ad684.png?v=v1">
78                    <link rel="icon" href="https://static.neopse.com/thumbs/p/2755/site/c9/59/be/c959be76e2df582a172b31c468cded04436ad684.png?v=v1">
79                
80                <link rel="preconnect" href="https://fonts.googleapis.com">
81                <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
82                <link href="https://fonts.googleapis.com/css?family=Montserrat:400,500,600,700|Material+Icons" rel="stylesheet">
83                <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&family=Jost:wght@400;700&family=Lato:wght@400;700&family=Lora:wght@400;700&family=Merriweather:wght@400;700&family=Montserrat:wght@400;700&family=Nunito:wght@400;700&family=Open+Sans:wght@400;700&family=Outfit:wght@400;700&family=Roboto:wght@400;700&family=Roboto+Condensed:wght@400;700&family=Roboto+Slab:wght@400;700&display=swap" rel="stylesheet">
84
85                <link href='/dist/owlcarousel/css/owl.carousel.min.css' rel='stylesheet' type='text/css'>
86                <link href='/dist/owlcarousel/css/owl.theme.default.min.css' rel='stylesheet' type='text/css'>
87                <link href='/dist/slick/slick.css' rel='stylesheet' type='text/css'>
88                <link href='/dist/slick/slick-theme.css' rel='stylesheet' type='text/css'>
89                <link href='/dist/scrollbar/jquery.scrollbar.css' rel='stylesheet' type='text/css'>
90                <link href='/dist/fullcalendar/fullcalendar.min.css' rel='stylesheet' type='text/css'>
91                <link rel="stylesheet"
92                      href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.2/css/bootstrap-select.min.css">
93                <link href="/tpl/1/css/style.css" rel="stylesheet" type='text/css'>
94                <link rel="stylesheet"
95                      href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css"/>
96
97                <link href="/lib/splide-4.0.1/css/splide.min.css" rel="stylesheet" type="text/css"/>
98                <link href="/lib/splide-4.0.1/css/splide-custom.css" rel="stylesheet" type="text/css"/>
99                                    <style class="notranslate" title="customCss" type="text/css"
100                           rel="stylesheet">.bg_bloc { background-color: #90E193 !important; } .table td, .table, .table thead th { border-color: #90E193 !important; } .bg_bloc .dropdown-toggle, .bg_bloc .dropdown-menu {background-color: #90E193 !important;border-color: #90E193 !important;} .fc-unthemed th, .fc-unthemed td, .fc-unthemed thead, .fc-unthemed tbody, .fc-unthemed .fc-divider,  .fc-unthemed .fc-row, .fc-unthemed .fc-content, .fc-unthemed .fc-popover, .fc-unthemed .fc-list-view,  .fc-unthemed .fc-list-heading td{border-color: #90E193 !important;} .fc-unthemed thead.fc-head, .fc-unthemed .fc-popover .fc-header{ background-color: #90E193 !important; } .fc-unthemed td.fc-today{background: #90E193 !important;} .cookies .btn{ color: #90E193 !important; }body { background-color: #FFFFFF; }.bg_wrapper { background-color: #52AF43 !important; }.c_btn, .c_btn:hover, .c_btn:focus, .c_btn:active { color: #A70F24; } .c_btn:before { background-color: #A70F24 !important; } .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span, .carousel-indicators .active {background: #A70F24;opacity: 1;} .carousel-indicators li, .owl-theme .owl-dots .owl-dot span{background-color: #A70F24;opacity: 0.5;} .fc-event{ color: #A70F24 !important;}.text_bloc {color:#FFFFFF !important;} .text_bloc .title:before {background-color:#FFFFFF!important;} .bg_bloc .c_text {color:#FFFFFF !important;} .bg_bloc .dropdown-toggle, .bg_bloc .dropdown-menu, .bg_bloc.bootstrap-select .dropdown-toggle::after {color:#FFFFFF !important;} .fc-unthemed thead.fc-head{ color: #FFFFFF !important; } .fc-unthemed td.fc-today{color: #FFFFFF !important;} .cookies .btn{ background-color: #FFFFFF !important; }.footer.bg { background-color: #52AF43; }nav.navbar.bg { background-color: #52AF43; }nav.navbar.bg { background-image: url(https://static.neopse.com/assets/img/textures/black-thread-light.png?v=v1); background-position: center; background-repeat: repeat; }body, .c_text, .container, .carousel-caption .title, .dropdown-item.c_text, .newsletter .requirements { color: #000000; } .slick-prev:before, .slick-next:before { color: #000000; } .c_text.navbar-toggler{ border-color: #000000 !important; } .title:before{ background-color: #000000 !important; } .intern-page .en-tete{ border-left-color: #000000;} .bootstrap-select .dropdown-menu li a{color: #000000;} .bootstrap-select .dropdown-toggle::after{color: #000000;} .fc-button{color: #000000 !important;}.footer .c_btn, .footer .c_btn:hover, .footer .c_btn:focus, .footer .c_btn:active { color: #E9BB0A; } .footer .c_btn:before { background-color: #E9BB0A !important; }nav.navbar .c_btn, nav.navbar .c_btn:hover, nav.navbar .c_btn:focus, nav.navbar .c_btn:active { color: #FFFFFF; }nav.navbar .dropdown-menu { background-color: #52AF43; }.footer .c_text { color: #FFFFFF; }nav.navbar .c_text { color: #FFFFFF; }nav.navbar .h_text:hover { color: #FFFFFF; }.footer .c_title { color: #FFFFFF; } .footer .c_title:before { background-color: #FFFFFF !important; }.breadcrumb.bg { background-color: #A70F24; }nav.navbar .dropdown-menu .c_text { color: #FFFFFF; }nav.navbar .dropdown-menu .h_text:hover { color: #FFFFFF; }nav.navbar .h_text:hover { background-color: #90E193; }body .bg_btn { background-color: #FFFFFF; } body .bg_btn:hover, body .bg_btn:active, body .bg_btn:focus { background-color: #FFFFFF; } .fc-event{ background-color: #FFFFFF !important; border-color: #FFFFFF !important; }#w_headline { background-color: #A70F24; }#w_0zt4n7hl8 .bg { background-color: #90E193; }#w_0zt4n7hl8 .bg { background-image: url(https://static.neopse.com/assets/img/textures/diagonales-decalees.png?v=v1); background-position:center; background-repeat: repeat;}#w_429770mmd .bg { background-color: #A70F24; }#w_429770mmd .bg { background-image: url(https://static.neopse.com/assets/img/textures/black-thread-light.png?v=v1); background-position: center; background-repeat: repeat; }#w_5yupcqsm2 .bg { background-color: #E9BB0A; }#w_5yupcqsm2 .bg { background-image: url(https://static.neopse.com/assets/img/textures/cubes.png?v=v1); background-position: center; background-repeat: repeat; }#w_aosbsketb .bg { background-color: #A70F24; }#w_fs59045t0 .bg { background-color: #A70F24; }#w_fs59045t0 .bg { background-image: url(https://static.neopse.com/assets/img/textures/black-thread-light.png?v=v1); background-position: center; background-repeat: repeat; }#w_headline .c_btn, #w_headline .c_btn:hover, #w_headline .c_btn:focus, #w_headline .c_btn:active { color: #A70F24; } #w_headline .c_btn:before { background-color: #A70F24 !important; } #w_headline .owl-theme .owl-dots .owl-dot.active span,#w_headline .owl-theme .owl-dots .owl-dot:hover span, #w_headline .carousel-indicators .active {background: #A70F24;opacity: 1;} #w_headline .carousel-indicators li, #w_headline .owl-theme .owl-dots .owl-dot span{background-color: #A70F24;opacity: 0.5;}.breadcrumb.bg .c_text { color: #FFFFFF; }nav.navbar .bg_btn, nav.navbar .bg_btn:hover, nav.navbar .bg_btn:active, nav.navbar .bg_btn:focus{ background-color: #90E193; }nav.navbar .dropdown-menu .h_text:hover { background-color: #A70F24; }#w_429770mmd .c_btn, #w_429770mmd .c_btn:hover, #w_429770mmd .c_btn:focus, #w_429770mmd .c_btn:active, #w_429770mmd .card-icon-date .day { color: #E9BB0A; border-color: #E9BB0A; } #w_429770mmd .c_btn:before, #w_429770mmd .owl-theme .owl-dots .owl-dot.active span, #w_429770mmd .owl-theme .owl-dots .owl-dot:hover span, #w_429770mmd .slick-dots .slick-active button:before, #w_429770mmd .card-icon-date .month {background-color: #E9BB0A !important;opacity: 1;} #w_429770mmd .carousel-indicators li, #w_429770mmd .owl-theme .owl-dots .owl-dot span, #w_429770mmd .slick-dots li button:before {background-color: #E9BB0A; opacity: 0.5;}#w_5yupcqsm2 .c_btn, #w_5yupcqsm2 .c_btn:hover, #w_5yupcqsm2 .c_btn:focus, #w_5yupcqsm2 .c_btn:active { color: #000000; } #w_5yupcqsm2 .c_btn.dark:before { background-color: #000000 !important; } #w_5yupcqsm2 .owl-theme .owl-dots .owl-dot.active span, #w_5yupcqsm2 .owl-theme .owl-dots .owl-dot:hover span {background: #000000;opacity: 1;} #w_5yupcqsm2 .carousel-indicators li, #w_5yupcqsm2 .owl-theme .owl-dots .owl-dot span{background-color: #000000;opacity: 0.5;}#w_headline .c_text { color: rgb(167,15,36); } #w_headline .title.c_text:before { background-color: rgb(167,15,36) !important; }.breadcrumb.bg .c_title { color: #FFFFFF; } .breadcrumb.bg .c_title:before { background-color: #FFFFFF !important; }#w_0zt4n7hl8 .c_text { color: #FFFFFF; }#w_429770mmd .c_text { color: #FFFFFF; }#w_5yupcqsm2 .c_text { color: #000000; }#w_0zt4n7hl8 .c_title { color: #A70F24; } #w_0zt4n7hl8 .c_title:before { background-color: #A70F24 !important; }#w_429770mmd .c_title { color: #FFFFFF; } #w_429770mmd .c_title:before { background-color: #FFFFFF !important; }#w_5yupcqsm2 .c_title { color: #FFFFFF !important; } #w_5yupcqsm2 .c_title.dark:before { background-color: #FFFFFF !important; }#w_aosbsketb .c_title { color: #FFFFFF; } #w_aosbsketb .c_title:before { background-color: #FFFFFF !important; }#w_fs59045t0 .c_title { color: #FFFFFF; } #w_fs59045t0 .c_title:before { background-color: #FFFFFF !important; }#w_0zt4n7hl8 .c_title { display: inline-block; }#w_aosbsketb .c_title { display: inline-block; }#w_429770mmd .bg_text { background-color: #FFFFFF; }#w_headline .c_text_responsive { color: #A70F24; } #w_headline .title.c_text_responsive:before { background-color: #A70F24 !important; }/*np-dropdowns*/.bootstrap-select{background-color:#90E193!important;}.bootstrap-select .dropdown-menu{background-color:#90E193!important;border-color:#90E193!important;}.bootstrap-select .dropdown-menu .dropdown-item,.bootstrap-select .dropdown-menu li a,.bootstrap-select .dropdown-menu .dropdown-item:hover,.bootstrap-select .dropdown-menu .dropdown-item:focus,.bootstrap-select .dropdown-menu .dropdown-item.active,.bootstrap-select .dropdown-menu .dropdown-item.selected{background-color:#90E193!important;}.bootstrap-select,.bootstrap-select .dropdown-toggle,.bootstrap-select .dropdown-toggle::after,.bootstrap-select .dropdown-menu,.bootstrap-select .dropdown-menu .c_text,.bootstrap-select .dropdown-menu .dropdown-item,.bootstrap-select .dropdown-menu .dropdown-item:hover,.bootstrap-select .dropdown-menu .dropdown-item:focus,.bootstrap-select .dropdown-menu .dropdown-item.active,.bootstrap-select .dropdown-menu .dropdown-item.selected,.bootstrap-select .dropdown-menu li a,.bootstrap-select .dropdown-menu .text{color:#FFFFFF!important;}</style>
101                            
102                            <meta property="og:url" content="">
103                <meta property="og:type" content="website">
104                <meta property="og:title" content="Commune de Villainville">
105                <meta property="og:description" content="Site officiel de la commune de Villainville 76280, Normandie France">
106                    
107        
107<script src="/js/vendor/jquery-3.2.1.min.js"></script>
107
108        
108<script>tarteaucitron.user.matomoHost = '//matomo.neopse.com/';</script>
108
109    </head>
110    <body>
111
112        <header role="banner"><!-- Top navbar -->
113<nav role="navigation" class="navbar fixed-top navbar-expand-lg bg">
114    <div class="ov"></div>
115    <div class="container">
116        <a class="navbar-brand c_text" aria-label="Accueil" href="/fr/">
117                            <h1 class="img">
118                    <picture>
119                        <source media="(max-width: 991.98px)" srcset="https://static.neopse.com/medias/p/2755/site/4c/9d/96/4c9d9637b5fb19a3313641044b5569ea550e9329.png">
120                        <img role="img" src="https://static.neopse.com/medias/p/2755/site/4c/9d/96/4c9d9637b5fb19a3313641044b5569ea550e9329.png" alt="Logo Commune de Villainville" loading="eager">
121                    </picture>
122                    <span>Commune de Villainville</span>
123                </h1>
124                    </a>
125        <button class="navbar-toggler c_text h_text" type="button" data-toggle="collapse"
126                data-target="#navbarNavDropdown"
127                aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation" style="z-index: 100;">
128            <span class="navbar-toggler-icon">
129                <i class="material-icons notranslate">menu</i>
130            </span>
131        </button>
132        <div class="collapse navbar-collapse" id="navbarNavDropdown">
133            <ul class="navbar-nav ml-auto">
134                <li class="nav-item dropdown">
135                    <a class="nav-link c_text h_text px-3" href="/" role="button">
136                        <i class="material-icons">home</i>
137                    </a>
138                </li>
139                                                            <li class="nav-item dropdown">
140                            <a class="nav-link c_text h_text dropdown-toggle" href="#" id="menuDropdown0" role="button"
141                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
142                                Accueil
143                            </a>
144                            <div class="dropdown-menu container bg_text" aria-labelledby="menuDropdown0">
145                                                                    <div class="dropdown-menu-image" aria-hidden="true"
146                                         style="background-image: url(https://static.neopse.com/thumbs/p/2755/site/10/91/9e/10919e0e43fdd55f9e6909d14a62e544e85636e3.png?v=v1);"></div>
147                                
148                                <div class="container mega-dropdown-menu">
149                                    <div class="divider">
150                                                                                                                        
151                                        
152                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
153                                               href="/fr/ct/1722346/contacts-1074">
154                                                Contacts
155                                            </a>
156                                        
157                                        
158                                                                                                                                                                
159                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
160                                               href="/fr/rb/1292449/presentation-de-villainville">
161                                                Présentation de Villainville
162                                            </a>
163                                        
164                                        
165                                        
166                                                                                                                                                                
167                                        
168                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
169                                               href="/fr/tb/1723087/le-conseil-municipal-55">
170                                                Le conseil municipal
171                                            </a>
172                                        
173                                        
174                                                                                                                                                                
175                                        
176                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
177                                               href="/fr/nw/1722424/actualites-1186">
178                                                Actualités
179                                            </a>
180                                        
181                                        
182                                                                                                                                                                
183                                        
184                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
185                                               href="/fr/lk/1722541/les-partenaires-de-la-commune">
186                                                Les partenaires de la commune
187                                            </a>
188                                        
189                                        
190                                                                                                                                                                
191                                        
192                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
193                                               href="/fr/rp/1722892/comptes-rendus-706">
194                                                Comptes rendus
195                                            </a>
196                                        
197                                        
198                                                                                                                                                                
199                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
200                                               href="/fr/rb/1577474/plan-local-durbanisme-plu-27">
201                                                Plan Local d&#039;Urbanisme (PLU)
202                                            </a>
203                                        
204                                        
205                                        
206                                                                                                                    </div>
207                                </div>
208                            </div>
209                        </li>
210                    
211
212                                                            <li class="nav-item dropdown">
213                            <a class="nav-link c_text h_text dropdown-toggle" href="#" id="menuDropdown1" role="button"
214                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
215                                Les partenaires
216                            </a>
217                            <div class="dropdown-menu container bg_text" aria-labelledby="menuDropdown1">
218                                                                    <div class="dropdown-menu-image" aria-hidden="true"
219                                         style="background-image: url(https://static.neopse.com/thumbs/p/2755/site/01/0d/85/010d85908e7bb3ce846804514da827ded2d1d483.png?v=v1);"></div>
220                                
221                                <div class="container mega-dropdown-menu">
222                                    <div class="divider">
223                                                                                                                        
224                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
225                                               href="/fr/rb/1291916/les-partenaires-publics">
226                                                Les partenaires publics
227                                            </a>
228                                        
229                                        
230                                        
231                                                                                                                                                                
232                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
233                                               href="/fr/rb/1298234/les-artisans-de-villainville">
234                                                Les artisans de Villainville
235                                            </a>
236                                        
237                                        
238                                        
239                                                                                                                    </div>
240                                </div>
241                            </div>
242                        </li>
243                    
244
245                                                            <li class="nav-item dropdown">
246                            <a class="nav-link c_text h_text dropdown-toggle" href="#" id="menuDropdown2" role="button"
247                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
248                                Vie pratique
249                            </a>
250                            <div class="dropdown-menu container bg_text" aria-labelledby="menuDropdown2">
251                                                                    <div class="dropdown-menu-image" aria-hidden="true"
252                                         style="background-image: url(https://static.neopse.com/thumbs/p/2755/site/5b/e2/40/5be24085a12ce2edea4fc9073268c799a75eb9f3.png?v=v1);"></div>
253                                
254                                <div class="container mega-dropdown-menu">
255                                    <div class="divider">
256                                                                                                                        
257                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
258                                               href="/fr/rb/1291994/se-deplacer-26">
259                                                Se déplacer
260                                            </a>
261                                        
262                                        
263                                        
264                                                                                                                                                                
265                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
266                                               href="/fr/rb/1292072/ou-se-loger-2">
267                                                Où se loger ?
268                                            </a>
269                                        
270                                        
271                                        
272                                                                                                                                                                
273                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
274                                               href="/fr/rb/1291968/gestion-des-dechets-75">
275                                                Gestion des déchets
276                                            </a>
277                                        
278                                        
279                                        
280                                                                                                                                                                
281                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
282                                               href="/fr/rb/1292358/les-demarches-administratives-4">
283                                                Les démarches administratives
284                                            </a>
285                                        
286                                        
287                                        
288                                                                                                                                                                
289                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
290                                               href="/fr/rb/1292033/les-marches-autour-de-villainville">
291                                                Les marchés autour de Villainville...
292                                            </a>
293                                        
294                                        
295                                        
296                                                                                                                                                                
297                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
298                                               href="/fr/rb/1292085/assistantes-maternelles-46">
299                                                Assistantes maternelles
300                                            </a>
301                                        
302                                        
303                                        
304                                                                                                                                                                
305                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
306                                               href="/fr/rb/1292098/la-salle-polyvalente">
307                                                La salle polyvalente
308                                            </a>
309                                        
310                                        
311                                        
312                                                                                                                                                                
313                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
314                                               href="/fr/rb/1292124/eglise-cimetiere-1">
315                                                Église-Cimetière
316                                            </a>
317                                        
318                                        
319                                        
320                                                                                                                                                                
321                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
322                                               href="/fr/rb/1509536/communications-1">
323                                                Communications
324                                            </a>
325                                        
326                                        
327                                        
328                                                                                                                                                                
329                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
330                                               href="/fr/rb/1510316/sante-93">
331                                                Santé
332                                            </a>
333                                        
334                                        
335                                        
336                                                                                                                                                                
337                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
338                                               href="/fr/rb/1510381/au-jardin">
339                                                Au jardin...
340                                            </a>
341                                        
342                                        
343                                        
344                                                                                                                    </div>
345                                </div>
346                            </div>
347                        </li>
348                    
349
350                                                            <li class="nav-item dropdown">
351                            <a class="nav-link c_text h_text dropdown-toggle" href="#" id="menuDropdown3" role="button"
352                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
353                                Autour de l&#039;école
354                            </a>
355                            <div class="dropdown-menu container bg_text" aria-labelledby="menuDropdown3">
356                                                                    <div class="dropdown-menu-image" aria-hidden="true"
357                                         style="background-image: url(https://static.neopse.com/thumbs/p/2755/site/92/65/b8/9265b80c4e8c9818d27114a5e3a419773d26daaa.png?v=v1);"></div>
358                                
359                                <div class="container mega-dropdown-menu">
360                                    <div class="divider">
361                                                                                                                        
362                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
363                                               href="/fr/rb/1292228/garderie-periscolaire-19">
364                                                Garderie périscolaire
365                                            </a>
366                                        
367                                        
368                                        
369                                                                                                                                                                
370                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
371                                               href="/fr/rb/1292267/restauration-scolaire-70">
372                                                Restauration scolaire
373                                            </a>
374                                        
375                                        
376                                        
377                                                                                                                                                                
378                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
379                                               href="/fr/rb/1292319/vie-de-lecole">
380                                                Vie de l&#039;école
381                                            </a>
382                                        
383                                        
384                                        
385                                                                                                                    </div>
386                                </div>
387                            </div>
388                        </li>
389                    
390
391                                                            <li class="nav-item dropdown">
392                            <a class="nav-link c_text h_text dropdown-toggle" href="#" id="menuDropdown4" role="button"
393                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
394                                Services aux habitants
395                            </a>
396                            <div class="dropdown-menu container bg_text" aria-labelledby="menuDropdown4">
397                                
398                                <div class="container mega-dropdown-menu">
399                                    <div class="divider">
400                                                                                                                        
401                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
402                                               href="/fr/rb/1515490/maisons-du-territoire-1">
403                                                Maisons du territoire
404                                            </a>
405                                        
406                                        
407                                        
408                                                                                                                                                                
409                                                                                    <a class="dropdown-item c_text h_text bg_h_text" role="menuitem"
410                                               href="/fr/rb/1515516/facilitez-vos-paiements">
411                                                Facilitez vos paiements
412                                            </a>
413                                        
414                                        
415                                        
416                                                                                                                    </div>
417                                </div>
418                            </div>
419                        </li>
420                    
421
422                
423                                    <li class="nav-item">
424                        <a href="#search-form-collapse" role="button" class="search-button btn c_text h_text" data-toggle="collapse"
425                           data-target="#search-form-collapse" aria-expanded="false">
426                            <i class="material-icons">search</i>
427                        </a>
428                    </li>
429                    <form action="/fr/search" class="form-inline nav-link c_text" method="post">
430                        <div class="toggled row collapse" id="search-form-collapse">
431                            <input id="search-form" class="form-control col-lg-8 col-8" type="search" placeholder="Recherche"
432                                   aria-label="Search" name="keywords">
433                            <button type="submit" class="form-control col-lg-4 col-4 bg_btn c_btn"><i class="material-icons notranslate">search</i></button>
434                        </div>
435                    </form>
436                
437                                    <li class="nav-item position-relative">
438                        <div role="button" class="cursor-pointer nav-link c_text" data-toggle="collapse"
439                             data-target="#google_translate_element" aria-expanded="false" aria-label="Choisir la langue du site"
440                             aria-controls="google_translate_element"><i class="material-icons notranslate">language</i>
441                        </div>
442                        <div id="google_translate_element" class="collapse">
443                            <div id="google_translate"></div>
444                            <div class="google_translate_consent" style="width: 200px; height: 60px;"></div>
445                        </div>
446                    </li>
447                
448            </ul>
449        </div>
450    </div>
451</nav>
452</header>
453
454        <main role="main">
455                <div class="main home">
456
457        <div id="w_headline">
458            <!-- A la une - slider -->
459<header class="container slider">
460    <div id="carouselIndicators" class="carousel slide" data-ride="carousel">
461        <!-- Bullet navigation -->
462        <ol class="carousel-indicators">
463                        <li data-target="#carouselIndicators" data-sli
463de-to="0" class="active"></li>
464                        <li data-target="#carouselIndicators" data-slide-to="1"></li>
465                        <li data-target="#carouselIndicators" data-slide-to="2"></li>
466                        <li data-target="#carouselIndicators" data-slide-to="3"></li>
467                        <li data-target="#carouselIndicators" data-slide-to="4"></li>
468                    </ol>
469
470        <div class="carousel-inner">
471                            <div class="carousel-item overlay active">
472                    <img role="img" class="d-block w-100" src="https://static.neopse.com/thumbs/p/2755/site/e3/08/c8/e308c86c138f294f88a8ddbfb3f941670d877080.png?v=v1" alt="urbanisme"/>
473                    <div class="carousel-caption">
474                        <h2 class="title c_text">
475                            <a href="https://villainville.fr/fr/rb/1510225/urbanisme-4" class="c_text">
476                                urbanisme
477                            </a>
478                        </h2>
479                                                    <p class="lead c_text">Guides</p>
480                                                <a href="https://villainville.fr/fr/rb/1510225/urbanisme-4" class="btn-line light c_btn">
481
482                            Voir plus
483                        </a>
484                    </div>
485                </div>
486                            <div class="carousel-item overlay">
487                    <img role="img" class="d-block w-100" src="https://static.neopse.com/thumbs/p/2755/site/d3/3c/47/d33c4709acc0ff5b78d73cfd76dd0bea0589f896.png?v=v1" alt="Panneau Pocket ..."/>
488                    <div class="carousel-caption">
489                        <h2 class="title c_text">
490                            <a href="https://www.panneaupocket.com" class="c_text" target="_blank" >
491                                Panneau Pocket ...
492                            </a>
493                        </h2>
494                                                    <p class="lead c_text">à télécharger sur vos portables !</p>
495                                                <a href="https://www.panneaupocket.com" class="btn-line light c_btn" target="_blank" >
496
497                            Voir plus
498                        </a>
499                    </div>
500                </div>
501                            <div class="carousel-item overlay">
502                    <img role="img" class="d-block w-100" src="https://static.neopse.com/thumbs/p/2755/site/c6/2b/1f/c62b1f72ced5b09fe067f664d23e2d1898637d37.png?v=v1" alt="PLUI"/>
503                    <div class="carousel-caption">
504                        <h2 class="title c_text">
505                            <a href="/fr/nw/1722424/1223211/plan-local-durbanisme-intercommunal-plui-1" class="c_text">
506                                PLUI
507                            </a>
508                        </h2>
509                                                    <p class="lead c_text">Concertation</p>
510                                                <a href="/fr/nw/1722424/1223211/plan-local-durbanisme-intercommunal-plui-1" class="btn-line light c_btn">
511
512                            Voir plus
513                        </a>
514                    </div>
515                </div>
516                            <div class="carousel-item overlay">
517                    <img role="img" class="d-block w-100" src="https://static.neopse.com/thumbs/p/2755/site/c2/2e/ff/c22eff5c4bcf26d08dca6d5e8215ba015aa1e7f1.png?v=v1" alt="Contrôle d&#039;accès aux centres de recyclage"/>
518                    <div class="carousel-caption">
519                        <h2 class="title c_text">
520                            <a href="/fr/nw/1722424/1211745/ouverture-d-un-nouveau-centre-de-recyclage-ainsi-que-d-une-recyclerie" class="c_text">
521                                Contrôle d&#039;accès aux centres de recyclage
522                            </a>
523                        </h2>
524                                                    <p class="lead c_text">Dès Janvier 2023 !</p>
525                                                <a href="/fr/nw/1722424/1211745/ouverture-d-un-nouveau-centre-de-recyclage-ainsi-que-d-une-recyclerie" class="btn-line light c_btn">
526
527                            Voir plus
528                        </a>
529                    </div>
530                </div>
531                            <div class="carousel-item overlay">
532                    <img role="img" class="d-block w-100" src="https://static.neopse.com/thumbs/p/2755/site/37/fd/a6/37fda6d9b898b39aa1d6bba2a68097241d508586.png?v=v1" alt="Des réponses pour votre habitat"/>
533                    <div class="carousel-caption">
534                        <h2 class="title c_text">
535                            <a href="/fr/nw/1722424/1951601/caue-communique" class="c_text">
536                                Des réponses pour votre habitat
537                            </a>
538                        </h2>
539                                                    <p class="lead c_text">CAUE</p>
540                                                <a href="/fr/nw/1722424/1951601/caue-communique" class="btn-line light c_btn">
541
542                            Voir plus
543                        </a>
544                    </div>
545                </div>
546            
547        </div>
548    </div>
549</header>
550
551        </div>
552
553            <div id="w_5yupcqsm2">
554        <!-- Actualités -->
555<section class="bg actu">
556    <div class="ov"></div>
557    <div class="container">
558        <div class="clearfix">
559                            <h2 class="title dark c_title d_title">Actualités</h2>
560                        <a href="/fr/nw/1722424/actualites-1186" class="btn-line dark float-right c_btn" aria-label="Voir tout">Voir tout</a>
561        </div>
562
563        <div class="carousel-3 owl-carousel owl-theme">
564                            <a href="/fr/nw/1722424/2868504/transport-scolaire-nomad-rentree-2026-2027" class="card item" aria-label="Actualité: Transport scolaire NOMAD-rentrée 2026-2027">
565                    <div class="card-button black card-button-no">
566                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/89/6a/89/896a898bf5d9259713a52ccb13a26367f4c231fc.png?v=v1" alt="">
567                    </div>
568                    <div class="card-body card-body-no">
569                                                    <h3 class="card-title c_text">Transport scolaire NOMAD-rentrée 2026-2027</h3>
570                                                <p class="card-text c_text"></p>
571                    </div>
572                </a>
573                            <a href="/fr/nw/1722424/2294710/ateliers-numeriques-26" class="card item" aria-label="Actualité: Ateliers Numériques">
574                    <div class="card-button black card-button-no">
575                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/57/f9/59/57f959c400c01971da3f3a55684f210cc0cf0c2b.png?v=v1" alt="">
576                    </div>
577                    <div class="card-body card-body-no">
578                                                    <h3 class="card-title c_text">Ateliers Numériques</h3>
579                                                <p class="card-text c_text">2ème trimestre 2026</p>
580                    </div>
581                </a>
582                            <a href="/fr/nw/1722424/1223211/plan-local-durbanisme-intercommunal-plui-1" class="card item" aria-label="Actualité: Plan Local d’Urbanisme intercommunal (PLUi)">
583                    <div class="card-button black card-button-no">
584                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/f3/cb/05/f3cb05787f73ae8981787ac724c3a8a380a375f1.png?v=v1" alt="">
585                    </div>
586                    <div class="card-body card-body-no">
587                                                    <h3 class="card-title c_text">Plan Local d’Urbanisme intercommunal (PLUi)</h3>
588                                                <p class="card-text c_text">Le Plan Local D’urbanisme intercommunal (PLUi) Le Havre Seine Métropole est disponible !</p>
589                    </div>
590                </a>
591                            <a href="/fr/nw/1722424/1211745/ouverture-d-un-nouveau-centre-de-recyclage-ainsi-que-d-une-recyclerie" class="card item" aria-label="Actualité: Ouverture d&#039;un nouveau centre de recyclage ainsi que d&#039;une recyclerie">
592                    <div class="card-button black card-button-no">
593                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/d1/fb/fe/d1fbfee100b1979d03d81dfbefc3ab10e154f755.png?v=v1" alt="">
594                    </div>
595                    <div class="card-body card-body-no">
596                                                    <h3 class="card-title c_text">Ouverture d&#039;un nouveau centre de recyclage ainsi que d&#039;une recyclerie</h3>
597                                                <p class="card-text c_text">A partir du 13 avril 2026</p>
598                    </div>
599                </a>
600                            <a href="/fr/nw/1722424/2782067/inscriptions-pour-la-rentree-2026" class="card item" aria-label="Actualité: inscriptions pour la rentrée 2026">
601                    <div class="card-button black card-button-no">
602                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/af/79/59/af7959829df005f5a468a169af69f92763f930e1.png?v=v1" alt="">
603                    </div>
604                    <div class="card-body card-body-no">
605                                                    <h3 class="card-title c_text">inscriptions pour la rentrée 2026</h3>
606                                                <p class="card-text c_text"></p>
607                    </div>
608                </a>
609                            <a href="/fr/nw/1722424/2780910/conseil-municipal-dinstallation-6" class="card item" aria-label="Actualité: Conseil Municipal d&#039;installation">
610                    <div class="card-button black card-button-no">
611                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/d8/73/dc/d873dcf59a66530a73b644d138da054a097f31fd.png?v=v1" alt="">
612                    </div>
613                    <div class="card-body card-body-no">
614                                                    <h3 class="card-title c_text">Conseil Municipal d&#039;installation</h3>
615                                                <p class="card-text c_text">L'installation du nouveau conseil municipal, suivie de l'élection du maire et des adjoints se tiendra le vendredi 20 mars 2026 à 19h00 à la mairie.</p>
616                    </div>
617                </a>
618                            <a href="/fr/nw/1722424/1951601/caue-communique" class="card item" aria-label="Actualité: CAUE communique...">
619                    <div class="card-button black card-button-no">
620                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/fc/aa/59/fcaa59f4ae88f0ec92bd5d22a35424910a70bf9d.png?v=v1" alt="">
621                    </div>
622                    <div class="card-body card-body-no">
623                                                    <h3 class="card-title c_text">CAUE communique...</h3>
624                                                <p class="card-text c_text">Des conseils gratuits pour votre habitat</p>
625                    </div>
626                </a>
627                            <a href="/fr/nw/1722424/1223146/des-conteneurs-a-verre-connectes" class="card item" aria-label="Actualité: De
627s conteneurs à &quot;verre&quot; connectés !!!">
628                    <div class="card-button black card-button-no">
629                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/d0/58/62/d05862047e9110eab7cf5c4b680d890993388303.png?v=v1" alt="">
630                    </div>
631                    <div class="card-body card-body-no">
632                                                    <h3 class="card-title c_text">Des conteneurs à &quot;verre&quot; connectés !!!</h3>
633                                                <p class="card-text c_text">Nouveau à Villainville</p>
634                    </div>
635                </a>
636                            <a href="/fr/nw/1722424/1129962/filbus-document" class="card item" aria-label="Actualité: Filbus : document">
637                    <div class="card-button black card-button-no">
638                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/7b/c5/9d/7bc59d43d2588c82380cec07ee3644eb6af47b55.png?v=v1" alt="">
639                    </div>
640                    <div class="card-body card-body-no">
641                                                    <h3 class="card-title c_text">Filbus : document</h3>
642                                                <p class="card-text c_text">Septembre 2022</p>
643                    </div>
644                </a>
645                            <a href="/fr/nw/1722424/971531/les-jeux-du-parcours-sante-sont-installes-dans-le-verger" class="card item" aria-label="Actualité: Les jeux du parcours santé sont installés dans le Verger">
646                    <div class="card-button black card-button-no">
647                        <img role="img" class="card-img-top img-fluid" src="https://static.neopse.com/thumbs/p/2755/site/ca/d6/86/cad686b34860ffe39439b2ea2057219839552fee.png?v=v1" alt="">
648                    </div>
649                    <div class="card-body card-body-no">
650                                                    <h3 class="card-title c_text">Les jeux du parcours santé sont installés dans le Verger</h3>
651                                                <p class="card-text c_text">À vos baskets !!!</p>
652                    </div>
653                </a>
654                    </div>
655    </div>
656</section>
657
658    </div>
659    <div id="w_fs59045t0">
660        <div class="map bg">
661    <div class="ov"></div>
662    <div class="d-flex justify-content-center align-items-center">
663        <div class="btn-container">
664                        <a href="/fr/ap/1723048/plan-acces-754" class="d-flex justify-content-center align-items-center">
665                <h2 class="title btn-line light large c_title">
666                    Plan/Accès
667                </h2>
668            </a>
669                    </div>
670
671        <div id="access-plan-map-container" class="overlay">
672            <div id="access-plan-geoloc-map" class="overlay"></div>
673            <a href="https://www.openstreetmap.org/copyright" class="osm-copyright" target="_blank"> © OpenStreetMap</a>
674        </div>
675    </div>
676            <link href="/lib/leaflet/leaflet.css" rel="stylesheet" type='text/css'>
677        <link rel="stylesheet" href="/lib/leaflet-markers/leaflet.awesome-markers.css">
678        
678<script src="/lib/leaflet/leaflet-src.js"></script>
678
679        
679<script src="/lib/leaflet-markers/leaflet.awesome-markers.js"></script>
679
680        <style>
681#access-plan-map-container {
682                width: 100%;
683            }
684            #access-plan-geoloc-map {
685                height: 25rem;
686                width: 100%;
687                z-index: 0;
688            }
689        </style>
690        
690<script>
691            $(document).ready(function () {
692                var myAccessPlanLatLng = [49.660800, 0.243611];
693                var accessPlanMap = L.map('access-plan-geoloc-map').setView(myAccessPlanLatLng, 17);
694
695                L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
696                    maxZoom: 18,
697                    attribution: false,
698                    id: 'mapbox.streets'
699                }).addTo(accessPlanMap);
700
701                var myAccessIcon = L.divIcon({
702                    className: 'material-icons mapMarkers',
703                    html: 'location_on',
704                    iconAnchor: [16, 32]
705                });
706
707                L.marker(myAccessPlanLatLng, {'icon':myAccessIcon}).addTo(accessPlanMap);
708
709                var currentMarker = $('#access-plan-geoloc-map').find('.mapMarkers');
710
711                var currentStyle = currentMarker.attr('style');
712                currentStyle += 'color:#990000 !important;';
713                currentMarker.attr('style',currentStyle);
714            });
715        </script>
715
716    </div>
717
718    </div>
719
720
721    </div>
722
723            </main>
724
725                    <div id="previewModalImage" class="modal">
726
727                <!-- The Close Button -->
728                <span id="closePreviewImage" class="close">&times;</span>
729
730                <!-- Navigation Buttons -->
731                <a id="prevImage" class="modal-nav prev" href="javascript:void(0)">&#10094;</a>
732                <a id="nextImage" class="modal-nav next" href="javascript:void(0)">&#10095;</a>
733
734                <!-- Image Counter -->
735                <div id="imageCounter" class="image-counter"></div>
736
737                <!-- Modal Content (The Image) -->
738                <div id="containerPreviewImage"><img role="img" class="modal-content" alt=""></div>
739
740                <!-- Modal Caption (Image Text) -->
741                <div id="captionPreviewImage"></div>
742            </div>
743        
744                    
744<script>
745                (function() {
746                    // Get the modal elements
747                    const modal = document.getElementById('previewModalImage');
748                    const modalImg = modal.querySelector('img');
749                    const captionText = document.getElementById('captionPreviewImage');
750                    const closePreviewImage = document.getElementById('closePreviewImage');
751                    const prevBtn = document.getElementById('prevImage');
752                    const nextBtn = document.getElementById('nextImage');
753                    const imageCounter = document.getElementById('imageCounter');
754                    
755                    let currentImages = [];
756                    let currentIndex = 0;
757
758                    // Helper function to check if element is visible
759                    function isVisible(element) {
760                        return element && element.offsetParent !== null;
761                    }
762
763                    // Helper function to toggle element visibility
764                    function toggleElement(element, show) {
765                        if (element) {
766                            element.style.display = show ? 'block' : 'none';
767                        }
768                    }
769
770                    // Function to update the modal with a specific image
771                    function updateModal(index) {
772                        if (currentImages.length === 0) return;
773                        
774                        currentIndex = index;
775                        const img = currentImages[currentIndex];
776                        modalImg.setAttribute('src', img.src);
777                        modalImg.setAttribute('alt', img.alt || '');
778                        captionText.innerHTML = img.alt || '';
779                        
780                        // Update counter
781                        imageCounter.textContent = (currentIndex + 1) + ' / ' + currentImages.length;
782                        
783                        // Show/hide navigation buttons
784                        const showNav = currentImages.length > 1;
785                        toggleElement(prevBtn, showNav);
786                        toggleElement(nextBtn, showNav);
787                        toggleElement(imageCounter, showNav);
788                    }
789
790                    // Function to show next image
791                    function showNext() {
792                        if (currentImages.length === 0) return;
793                        currentIndex = (currentIndex + 1) % currentImages.length;
794                        updateModal(currentIndex);
795                    }
796
797                    // Function to show previous image
798                    function showPrev() {
799                        if (currentImages.length === 0) return;
800                        currentIndex = (currentIndex - 1 + currentImages.length) % currentImages.length;
801                        updateModal(currentIndex);
802                    }
803
804                    // Helper function to find closest ancestor with class
805                    function closest(element, selector) {
806                        if (!element) return null;
807                        
808                        // For class selector (e.g., '.splide__slide')
809                        if (selector.startsWith('.')) {
810                            const className = selector.slice(1);
811                            let current = element;
812                            while (current && current !== document) {
813                                if (current.classList && current.classList.contains(className)) {
814                                    return current;
815                                }
816                                current = current.parentElement;
817                            }
818                        }
819                        return null;
820                    }
821
822                    // When clicking on an image
823                    document.addEventListener('click', function(e) {
824                        const target = e.target;
825                        // Check if clicked element is an image with class .img or .main-img inside .splide
826                        if (target.tagName === 'IMG' && 
827                            (target.classList.contains('img') || target.classList.contains('main-img')) &&
828                            closest(target, '.splide')) {
829                            
830                            // Find the clicked image's parent slide
831                            const clickedSlide = closest(target, '.splide__slide');
832                            if (!clickedSlide) return;
833                            
834                            // Find the list that contains this slide
835                            const splideList = closest(clickedSlide, '.splide__list');
836                            if (!splideList) return;
837                            
838                            // Get all slides from this specific list
839                            const allSlides = splideList.querySelectorAll('.splide__slide');
840                            
841                            // Get all images from these slides only, deduplicating by src
842                            // (Splide duplicates slides in loop mode, so we need to filter duplicates)
843                            currentImages = [];
844                            const seenSrcs = new Set();
845                            const clickedSrc = target.src;
846                            
847                            allSlides.forEach(function(slide) {
848                                const slideImg = slide.querySelector('.img, .main-img');
849                                if (slideImg) {
850                                    const imgSrc = slideImg.src;
851                                    // Only add if we haven't seen this src before
852                                    if (!seenSrcs.has(imgSrc)) {
853                                        seenSrcs.add(imgSrc);
854                                        currentImages.push(slideImg);
855                                    }
856                                }
857                            });
858                            
859                            // Find the index of the clicked image by src (to handle duplicates)
860                            currentIndex = currentImages.findIndex(function(img) {
861                                return img.src === clickedSrc;
862                            });
863                            
864                            if (currentIndex === -1) {
865                                currentIndex = 0; // Fallback to first image
866                            }
867                            
868                            // Update and show modal
869                            updateModal(currentIndex);
870                            modal.style.display = 'block';
871                        }
872                    });
873
874                    // Navigation button handlers
875                    if (nextBtn) {
876                        nextBtn.addEventListener('click', function (e) {
877                            e.preventDefault();
878                            e.stopPropagation();
879                            showNext();
880                        });
881                    }
882
883                    if (prevBtn) {
884                        prevBtn.addEventListener('click', function (e) {
885                            e.preventDefault();
886                            e.stopPropagation();
887                            showPrev();
888                        });
889                    }
890
891                    // Keyboard navigation
892                    document.addEventListener('keydown', function (e) {
893                        // Check if modal is visible by checking display style
894                        const isModalVisible = modal.style.display !== 'none' && 
895                                             (modal.style.display === 'block' || 
896                                              window.getComputedStyle(modal).display !== 'none');
897                        
898                        if (isModalVisible) {
899                            if (e.key === 'ArrowRight' || e.keyCode === 39) {
900                                e.preventDefault();
901                                showNext();
902                            } else if (e.key === 'ArrowLeft' || e.keyCode === 37) {
903                                e.preventDefault();
904                                showPrev();
905                            } else if (e.key === 'Escape' || e.keyCode === 27) {
906                                e.preventDefault();
907                                e.stopPropagation();
908                                modal.style.display = 'none';
909                            }
910                        }
911                    });
912
913                    // When the user clicks on <span> (x), close the modal
914                    if (closePreviewImage) {
915                        closePreviewImage.addEventListener('click', function () {
916                            modal.style.display = 'none';
917                        });
918                    }
919
920                    // Close modal when clicking outside the image
921                    modal.addEventListener('click', function (e) {
922                        if (e.target === modal) {
923                            modal.style.display = 'none';
924                        }
925                    });
926                })();
927            </script>
927
928        
929        
930        
931        <!-- Footer -->
932<footer role="contentinfo" class="footer bg footer1">
933    <div class="ov"></div>
934    <div class="container d-flex flex-wrap justify-content-between">
935        <div class="footer-container">
936            <h2 class="title light c_title d_title btn-line"><a
937        href="/fr/ct/1722346/contacts-1074">Contacts</a></h2>
938<div class="footer-box">
939    <div class="contact c_text">
940        <p class="font-weight-bold mb-0" aria-label="Nom du structure">Commune de Villainville</p>
941        <p class="mb-0" aria-label="adresse">704, route d&#039;Étretat</p>
942        <p class="mb-0" aria-label="adresse 2">76280 Villainville - FRANCE</p>
943         <p class="mb-0"><a href="tel:+33235298559" title="Numéro de téléphone">+33 2 35 29 85 59</a></p>
944                    <p class="mb-0"><a style="display:initial;" class="btn-line footer-btn light c_btn" href="#" data-toggle="modal" data-target="#contactFormContactFooter" aria-label="Afficher le formulaire">Contact par formulaire</a>
945            </p>
946        
947                    <div class="mt-4">
948                <p style="margin:0;"><strong>HORAIRES</strong></p>
949                <p><strong><span style="color:#f39c12">Accueil public par la secr&eacute;taire de mairie:</span></strong><br />
950Lundi:9h00-12h/13h30-16h00<br />
951Mardi:9h00-12h/13h30-16h00<br />
952Jeudi:9h00-12h<br />
953<br />
954<strong><span style="color:#f39c12">Accueil public avec Monsieur le Maire ou adjoint:</span></strong><br />
955les samedis de 9h30 &agrave; 11h00.<br />
956<br />
957Pour les d&eacute;p&ocirc;ts de dossiers d&rsquo;urbanisme, location de salle, &eacute;tat civil, recensement citoyen, RDV avec Monsieur le Maire ou adjoints...<br />
958<br />
959Pour prendre rendez-vous, vous devez contacter la mairie de Villainville par courriel &agrave; : [email protected]</p>
960            </div>
961            </div>
962
963
964</div>
965
966
967
968            <div class="social-media">
969    <ul class="c_text">
970                                                                                                                                                            </ul>
971</div>
972
973            
974        </div>
975        
976        
977    </div>
978    <div class="container d-flex flex-wrap position-relative c_text">
979        <p class="mr-2 c_text"><a href="/fr/li/1722385/mentions-legales-1238">Mentions légales</a>
980</p> -
981        <p class="mr-2 ml-2 c_text"><a href="/fr/1722385/politique-confidentialite">Politique de confidentialité</a>
982</p> -
983        <p class="mr-2 ml-2 c_text"><a href="/fr/accessibilite">Accessibilité</a>
984</p> -
985        
986        <p class="mr-2 ml-2 c_text">
987            <a href="/fr/sm/71622/plan-du-site-1">
988                Plan du site</a></p>-
989        <p class="ml-2 c_text"><a href="#tarteaucitron">Gestion des cookies</a></p>
990    </div>
991</footer>
992
993<div class="modal fade" id="contactFormContactFooter" tabindex="-1" role="dialog" aria-labelledby="modalFooter-label" aria-hidden="true"
994     style="color:initial;-webkit-transform: translateZ(0);transform: translateZ(0);">
995    <div class="modal-dialog" role="document">
996        <div class="modal-content">
997            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
998                <span aria-hidden="true">&times;</span>
999            </button>
1000
1001            <div class="modal-header bg_bloc">
1002                                <h4 id="modalFooter-label" class="modal-title font-weight-bold dark text_bloc">Contact Mairie</h4>
1003                            </div>
1004            <form id="contactFormFooter" action="/formMdContact" method="post"
1005                  novalidate enctype="multipart/form-data">
1006                <div class="modal-body pb-0">
1007
1008                                            <div class="field-wrapper"><p class="title">Contact Mairie</p></div>                                            <div class="field-wrapper">
1009    <div><label class="control-label generalLabel font-weight-bold mr-1">Destinataire de votre message <span
1010                class="cursor-pointer" data-toggle="popover" data-content="Sélectionnez"><i
1011                            class="material-icons align-top">info_outline</i></span>        </label><span>*</span></div>
1012
1013            <div class="form-check d-block">
1014            <label class="form-check-label"><input class="form-check-input" type="checkbox" name="2_check_list[]" value="Karine Ramain- Maire">Karine Ramain- Maire<span
1015                        class="form-check-sign"><span class="check"></span></span></label>
1016        </div>
1017            <div class="form-check d-block">
1018            <label class="form-check-label"><input class="form-check-input" type="checkbox" name="2_check_list[]" value="Agnès Lenormand- 1ère adjointe">Agnès Lenormand- 1ère adjointe<span
1019                        class="form-check-sign"><span class="check"></span></span></label>
1020        </div>
1021            <div class="form-check d-block">
1022            <label class="form-check-label"><input class="form-check-input" type="checkbox" name="2_check_list[]" value="Secretariat de mairie ">Secretariat de mairie <span
1023                        class="form-check-sign"><span class="check"></span></span></label>
1024        </div>
1025        <span class="form-error requirements" id="2_check_list-error" role="alert">Ce champ est obligatoire</span>
1026</div>                                            <div class="form-group">
1027    <div><label for="3_email">Votre adresse e-mail</label><span>*</span></div>
1028    <input type="email" name="3_email" class="form-control" id="3_email"
1029           aria-label="Votre adresse e-mail">
1030    <span class="help-message cursor-pointer" data-toggle="popover" data-content="Veuillez"><i
1031                class="material-icons">info_outline</i></span>    <span class="form-error requirements" id="3_email-error" role="alert">Ce champ est obligatoire</span>
1032</div>
1033                                            <div class="form-group">
1034    <div><label for="4_date" id="4_dateLabel">Date</label><span>*</span></div>
1035    <div class="d-flex align-items-end">
1036        <div class="col-10 col-md-5 mr-3 px-0">
1037            <input type="date" name="4_date" class="form-control" id="4_date" aria-describedby="4_dateLabel" placeholder="Date">
1038            <span class="help-message"><i class="material-icons notranslate">date_range</i></span>
1039        </div>
1040        <div data-toggle="popover" data-content="">
1041                    </div>
1042    </div>
1043    <span class="form-error requirements" id="4_date-error" role="alert">Ce champ est obligatoire</span>
1044</div>
1045                                            <div class="form-group">
1046    <div><label for="5_textarea">Nom</label><span></span>
1047    </div>
1048    <textarea name="5_textarea" class="form-control pl-0" id="5_textarea" rows="3"></textarea>
1049        <span class="form-error requirements" id="5_textarea-error" role="alert">Ce champ est obligatoire</span>
1050</div>                    
1051                    <div class="form-group">
1052    <div class="h-recaptcha m-auto d-inline-block"></div>
1053    <div class="form-error requirements" id="h-captcha-response-error" role="alert">Ce champ est obligatoire
1054    </div>
1055</div>                </div>
1056                <div class="modal-footer">
1057                    <button id="formContactForm" type="submit" class="btn bg_btn c_btn formContactForm" aria-label="Envoyer">ENVOYER</button>
1058                </div>
1059                <div class="m-3">
1060                    Les informations recueillies &agrave; partir de ce formulaire sont n&eacute;cessaires &agrave; la gestion de votre demande par notre Structure qui est responsable du traitement de vos donn&eacute;es personnelles collect&eacute;es.<br />
1061Vos donn<span style="color:null"><span style="background-color:null">&eacute;es personnelles re&ccedil;ues sont conserv&eacute;es par notre Structure pendant toute la dur&eacute;e n&eacute;cessaire au traitement de votre demande ou bien pour une dur&eacute;e de [&hellip;&hellip;.] mois maximum &agrave; compter du dernier contact. Dans la limite de leurs attributions respectives, sont destinataires de tout ou partie des donn&eacute;es les services et repr&eacute;sentants de notre Structure en charge des r&eacute;ponses aux demandes &eacute;mises via ce formulaire. Aucun transfert de vos donn&eacute;es hors de l&#39;Union europ&eacute;enne n&#39;est r&eacute;alis&eacute;. </span><br />
1062<span style="background-color:null">Vous pouvez &agrave; tout moment demander l&rsquo;acc&egrave;s, la rectification, l&rsquo;effacement, la portabilit&eacute; ou la limitation de vos donn&eacute;es, ou bien vous opposer &agrave; leur traitement, en contactant le D&eacute;l&eacute;gu&eacute; &agrave; la Protection des Donn&eacute;es de notre structure : </span><br />
1063<span style="background-color:null">- Par voie &eacute;lectronique &agrave; l&rsquo;adresse : [&hellip;&hellip;.] ; </span><br />
1064<span style="background-color:null">- Par voie postale &agrave; l&rsquo;attention du D&eacute;l&eacute;gu&eacute; &agrave; la Protection des Donn&eacute;es et &agrave; l&rsquo;adresse suivante : [&hellip;&hellip;.]. </span><br />
1065<span style="background-color:null">Si vous estimez, apr&egrave;s nous avoir contact&eacute;s, que vos droits sur vos donn&eacute;es personnelles ne sont pas respect&eacute;s, vous pou</span></span>vez adresser une r&eacute;clamation &agrave; la CNIL.
1066                </div>
1067            </form>
1068
1069            <div id="messageSendedFormContactFooter" class="form-message-sent" style="display: none">
1070                <p role="status">Le message a bien été envoyé à son destinataire. Merci.</p>
1071            </div>
1072        </div>
1073    </div>
1074</div>
1075
1076        <div class="footer-bottom" style="position: relative;">
1077    <div class="container">
1078        <p>
1079            <a href="https://reseaudescommunes.fr/?utm_source=rdcclients&utm_medium=footerlink" target="_blank">
1080                <img role="img" src="/images/rdc-logo-footer-2.png" alt="logo Réseau des Communes" class="img-fluid">
1081                Site créé en partenariat avec Réseau des Communes
1082            </a>
1083        </p>
1084    </div>
1085</div>
1086        <div class="modal fade pdfModal" id="pdfModal" tabindex="-1" role="dialog" aria-label="Prévisualisation du PDF" aria-hidden="true">
1087    <div class="modal-dialog" role="document">
1088        <div class="modal-content">
1089            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
1090                <span aria-hidden="true">&times;</span>
1091            </button>
1092
1093            <embed type="application/pdf">
1094        </div>
1095    </div>
1096</div>
1097
1098        
1099                        
1099<script src="/js/vendor/popper.min.js"></script>
1099
1100            
1100<script src="/js/vendor/bootstrap.min.js"></script>
1100
1101
1102            <!-- Carousel -->
1103            
1103<script src='/dist/owlcarousel/js/owl.carousel.min.js'></script>
1103
1104            
1104<script src='/dist/owlcarousel/js/owl.linked.js'></script>
1104
1105
1106            
1106<script src="/lib/splide-4.0.1/js/splide.min.js"></script>
1106
1107            
1107<script src="/lib/splide-4.0.1/extensions/autoscroll/js/splide-extension-auto-scroll.min.js"></script>
1107
1108
1109            
1109<script src='/dist/slick/slick.js'></script>
1109
1110            
1110<script src='/dist/scrollbar/jquery.scrollbar.min.js'></script>
1110
1111
1112                        
1112<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.2/js/bootstrap-select.min.js"></script>
1112
1113
1114                        
1114<script src='/dist/pagination.min.js'></script>
1114
1115
1116            
1116<script src="/js/shared.js?v1"></script>
1116
1117            
1117<script src="/tpl/1/js/main.js"></script>
1117
1118            
1118<script src="/lib/chartjs/Chart.js"></script>
1118
1119            
1119<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.js"></script>
1119
1120
1121                        
1121<script type="text/javascript">
1122
1123                tarteaucitron.user.matomoId = 6;
1124                (tarteaucitron.job = tarteaucitron.job || []).push('matomohightrack');
1125
1126
1127                (tarteaucitron.job = tarteaucitron.job || []).push('youtube');
1128                (tarteaucitron.job = tarteaucitron.job || []).push('dailymotion');
1129                (tarteaucitron.job = tarteaucitron.job || []).push('vimeo');
1130                (tarteaucitron.job = tarteaucitron.job || []).push('othervideo');
1131
1132                                                tarteaucitron.user.googleTranslateCallback = function () {
1133                    new google.translate.TranslateElement({pageLanguage: 'fr'}, 'google_translate');
1134                };
1135                (tarteaucitron.job = tarteaucitron.job || []).push('googletranslate');
1136                            </script>
1136
1137
1138        
1139
1140    
1140<script src="/js/hammer/hammer.min.js"></script>
1140
1141    
1141<script>
1142        $(function () {
1143            var hammertime = new Hammer($('#carouselIndicators')[0]);
1144
1145            hammertime.get('swipe').set({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 0});
1146
1147            hammertime.on("swipeleft", function () {
1148                $('#carouselIndicators').carousel('next');
1149            });
1150            hammertime.on("swiperight", function () {
1151                $('#carouselIndicators').carousel('prev');
1152            });
1153        });
1154    </script>
1154
1155    
1155<script>
1156        // gestion responsive sur custom css
1157
1158        //WIDGET UNES
1159
1160        // récupération des stylessheets
1161        var styleSheetList = document.styleSheets;
1162        var currentCustomCss = false;
1163
1164        for (let i = 0; i < styleSheetList.length; i++) {
1165            if (styleSheetList[i].title === "customCss") {
1166                currentCustomCss = styleSheetList[i]['cssRules'];
1167            }
1168        }
1169
1170        // récupération des valeurs par défauts
1171
1172        var originalCTextColor = false;
1173        var originalCBtnColor = false;
1174        var originalCarouselIndicatorColor = false;
1175
1176        var currentCTextColor = false;
1177        var currentCBtnColor = false;
1178
1179        var currentCBtnColorBefore = false;
1180        var currentCTextColorBefore = false;
1181        var currentCarouselIndicatorBefore = false;
1182
1183        for (let i = 0; i < currentCustomCss.length; i++) {
1184
1185            if (currentCustomCss[i]['selectorText'] === '.c_btn') {
1186                originalCBtnColor = currentCustomCss[i].style.color;
1187            }
1188
1189            // if(currentCustomCss[i]['selectorText'].includes('.c_text, .container,')){
1190            //     originalCTextColor = currentCustomCss[i].style.color;
1191            // }
1192
1193            if (currentCustomCss[i]['selectorText'].includes('.c_text_responsive')) {
1194
1195                if (currentCustomCss[i].style.color != "") {
1196                    originalCTextColor = currentCustomCss[i].style.color;
1197                }
1198
1199            }
1200
1201            if (currentCustomCss[i]['selectorText'].includes('.carousel-indicators .active')) {
1202                originalCarouselIndicatorColor = currentCustomCss[i].style.backgroundColor;
1203            }
1204        }
1205
1206
1207        function myFunction(screen) {
1208
1209            if (screen.matches) { // If media query matches
1210                for (let i = 0; i < currentCustomCss.length; i++) {
1211
1212                    //.c_btn
1213                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_btn") {
1214                        if (currentCBtnColor == false) {
1215                            currentCBtnColor = currentCustomCss[i].style.color;
1216                        }
1217
1218                        currentCustomCss[i].style.setProperty('color', originalCBtnColor, 'important');
1219                    }
1220
1221                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_btn::before") {
1222                        if (currentCBtnColorBefore == false) {
1223                            currentCBtnColorBefore = currentCustomCss[i].style.backgroundColor;
1224                        }
1225                        currentCustomCss[i].style.setProperty('background-color', originalCBtnColor, 'important');
1226                    }
1227
1228                    //.c_text
1229                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_text") {
1230                        if (currentCTextColor == false) {
1231                            currentCTextColor = currentCustomCss[i].style.color;
1232                        }
1233                        currentCustomCss[i].style.setProperty('color', originalCTextColor, 'important');
1234                    }
1235
1236                    if (currentCustomCss[i]['selectorText'] === "#w_headline .title.c_text::before") {
1237                        if (currentCTextColorBefore == false) {
1238                            currentCTextColorBefore = currentCustomCss[i].style.backgroundColor;
1239                        }
1240                        currentCustomCss[i].style.setProperty('background-color', originalCTextColor, 'important');
1241                    }
1242
1243                    //indicators
1244                    if (currentCustomCss[i]['selectorText'].includes("#w_headline .carousel-indicators .active")) {
1245                        if (currentCarouselIndicatorBefore == false) {
1246                            currentCarouselIndicatorBefore = currentCustomCss[i].style.backgroundColor;
1247                        }
1248                        currentCustomCss[i].style.setProperty('background-color', originalCarouselIndicatorColor, 'important');
1249                    }
1250
1251                    if (currentCustomCss[i]['selectorText'].includes("#w_headline .carousel-indicators li")) {
1252                        currentCustomCss[i].style.setProperty('background-color', originalCarouselIndicatorColor, 'important');
1253                    }
1254                }
1255            } else {
1256                for (let i = 0; i < currentCustomCss.length; i++) {
1257
1258                    //.c_btn
1259                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_btn") {
1260                        currentCustomCss[i].style.setProperty('color', currentCBtnColor, 'important');
1261                    }
1262
1263                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_btn::before") {
1264                        currentCustomCss[i].style.setProperty('background-color', currentCBtnColorBefore, 'important');
1265                    }
1266
1267                    //.c_text
1268                    if (currentCustomCss[i]['selectorText'] === "#w_headline .c_text") {
1269                        currentCustomCss[i].style.setProperty('color', currentCTextColor, 'important');
1270                    }
1271
1272                    if (currentCustomCss[i]['selectorText'] === "#w_headline .title.c_text::before") {
1273                        currentCustomCss[i].style.setProperty('background-color', currentCTextColorBefore, 'important');
1274                    }
1275
1276                    //indicators
1277                    if (currentCustomCss[i]['selectorText'].includes("#w_headline .carousel-indicators .active")) {
1278                        currentCustomCss[i].style.setProperty('background-color', currentCarouselIndicatorBefore, 'important');
1279                    }
1280
1281                    if (currentCustomCss[i]['selectorText'].includes("#w_headline .carousel-indicators li")) {
1282                        currentCustomCss[i].style.setProperty('background-color', currentCarouselIndicatorBefore, 'important');
1283                    }
1284                }
1285            }
1286        }
1287
1288        var screenTablet = window.matchMedia("(max-width: 979px)");
1289        myFunction(screenTablet); // Call listener function at run time
1290        screenTablet.addEventListener('change', myFunction); // Attach listener function on state changes
1291
1292
1293    </script>
1293
1294
1295                    
1295<script type="text/javascript">
1296                $(document).ready(function () {
1297                                    });
1298
1299            </script>
1299
1300        
1301
1302        
1302<script>
1303            (function (i, s, o, g, r, a, m) {
1304                i['InstanaEumObject'] = r;
1305                i[r] = i[r] || function () {
1306                    (i[r].q = i[r].q || []).push(arguments)
1307                }, i[r].l = 1 * new Date();
1308                a = s.createElement(o),
1309                    m = s.getElementsByTagName(o)[0];
1310                a.async = 1;
1311                a.src = g;
1312                m.parentNode.insertBefore(a, m)
1313            })(window, document, 'script', '//eum.instana.io/eum.min.js', 'ineum');
1314            ineum('reportingUrl', 'https://eum-eu-west-1.instana.io');
1315            ineum('apiKey', '9yG9cnlKTcS4le-zMVtBJA');
1316
1317            // set the name of a page on which this load/errors/calls happened
1318            ineum('page', 'front-site');
1319        </script>
1319
1320
1321
1322        
1322<script src="https://js.hcaptcha.com/1/api.js?hl=fr&onload=CaptchaCallback&render=explicit" async defer></script>
1322
1323
1324        
1324<script type="text/javascript">
1325            var CaptchaCallback = function () {
1326                $('.h-recaptcha').each(function (index, el) {
1327                    hcaptcha.render(el, {'sitekey': 'f5095cfb-139b-47da-88e2-f0d2e7485392'});
1328                });
1329            };
1330
1331            var originalStyle = false;
1332
1333            $(window).on('shown.bs.modal', function () {
1334                originalStyle = $('body').attr('style');
1335
1336                $('body').attr('style', '');
1337            });
1338
1339            $(window).on('hidden.bs.modal', function () {
1340                $('body').attr('style', originalStyle);
1341
1342            });
1343
1344        </script>
1344
1345
1346        
1346<script>
1347            $(document).ready(function () {
1348
1349                $('.selectpicker').selectpicker();
1350
1351                var input = $('input[type=file]');
1352
1353                input.on('change', function () {
1354                    var list = $(this).parent().parent().parent().parent().find($('.listFiles'));
1355                    list.empty();
1356
1357                    for (var x = 0; x < this.files.length; x++) {
1358                        var newFile = '<li>Fichier joint :  ' + this.files[x].name + ' (' + humanFileSize(this.files[x].size) + ')</li>';
1359//                    li.innerHTML = 'File ' + (x + 1) + ':  ' + input.files[x].name;
1360                        list.append(newFile);
1361                    }
1362                });
1363
1364                $('.form-error').hide();
1365                $('#contactFormFooter').submit(function (e) {
1366                    let form = $(this);
1367
1368                    $.ajax({
1369                        type: "POST",
1370                        url: form.attr('action'),
1371                        data: new FormData(form[0]),
1372                        contentType: false,
1373                        processData: false,
1374                        beforeSend: function () {
1375                            form.find('.form-error').hide();
1376                            $('.formContactForm').attr('disabled', true);
1377                        },
1378                        success: function (response) {
1379                            hcaptcha.reset();
1380
1381                            if (response.status === 'KO') {
1382                                let errors = response.errors;
1383                                for (let index in errors) {
1384                                    if (errors.hasOwnProperty(index)) {
1385                                        let attr = errors[index];
1386                                        let error = attr[Object.keys(attr)[0]];
1387                                        form.find('#' + index + '-error').text(error).show();
1388                                    }
1389                                }
1390                            } else {
1391
1392                                $('#contactFormFooter').css('display', 'none');
1393                                $('#messageSendedFormContactFooter').css('display', '');
1394                                form[0].reset();
1395                            }
1396                        },
1397                        complete: function () {
1398
1399                            $('.formContactForm').removeAttr('disabled');
1400                        }
1401                    });
1402
1403                    return false;
1404                });
1405
1406                $('#contactFormContactFooter').on('hidden.bs.modal', function () {
1407                    $('#contactFormFooter')[0].reset();
1408
1409                    $('#contactFormFooter').css('display', '');
1410
1411                    $('#messageSendedFormContactFooter').css('display', 'none');
1412
1413                    $('.form-error').hide();
1414
1415                    $('.listFiles').empty();
1416
1417                    hcaptcha.reset();
1418                });
1419
1420
1421            });
1422
1423            function humanFileSize(size) {
1424                var i = Math.floor(Math.log(size) / Math.log(1024));
1425                return (size / Math.pow(1024, i)).toFixed(1) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
1426            }
1427        </script>
1427
1428
1429        
1429<script>
1430            $(function () {
1431
1432
1433                var numberAlerts = false;
1434
1435                var allAlerts = $('#alertsModal').find($('.alertsInfo'));
1436
1437                numberAlerts = allAlerts.length;
1438
1439                allAlerts.each(function (e) {
1440
1441                    if (!sessionStorage.getItem("_nps_cookie_accept_alerts" + $(this).attr('data-id') + "")) {
1442                        $('#alertsModal').modal('show');
1443                    } else {
1444                        $(this).remove();
1445                        numberAlerts = numberAlerts - 1;
1446                        setActiveAndDecrementNumber();
1447                    }
1448
1449                });
1450
1451                $('.acceptCookiesAlerts').on('click', function (e) {
1452                    e.preventDefault();
1453
1454                    var currentDataId = $(this).attr('data-id');
1455
1456                    sessionStorage.setItem('_nps_cookie_accept_alerts' + currentDataId + '', '1');
1457
1458                    numberAlerts = numberAlerts - 1;
1459
1460                    var currentParentNode = $(this).parent().parent().parent();
1461
1462                    currentParentNode.removeClass('active');
1463                    currentParentNode.remove();
1464
1465                    setActiveAndDecrementNumber();
1466
1467                });
1468
1469                function setActiveAndDecrementNumber() {
1470                    var newListOfAlerts = $('#alertsModal').find($('.alertsInfo'));
1471
1472                    newListOfAlerts.each(function (index, e) {
1473                        if (index == 0) {
1474                            $(this).addClass('active');
1475                        }
1476                    });
1477
1478                    if (numberAlerts == 0) {
1479                        $('#alertsModal').modal('hide');
1480                    }
1481                }
1482
1483                var currentColorControl = '#212529';
1484
1485                $('#controlPrev').css('color', 'initial !important');
1486                $('#controlNext').css('color', 'initial !important');
1487
1488                $('#controlPrev').on('mouseover', function () {
1489
1490                    $(this).css('color', 'initial !important');
1491                });
1492
1493                $('#controlNext').on('mouseover', function () {
1494
1495                    $(this).css('color', 'initial !important');
1496                });
1497
1498            });
1499        </script>
1499
1500    </body>
1501</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.