PageSourceSearch

https://balsareny.net/ajuntament/plans-projectes-campanyes-i-programes

html balsareny.net collected 2026-10-02 14:25:00 UTC 111,582 bytes, 1,743 lines download raw bytes

1<!DOCTYPE HTML>
2<html lang="ca" xmlns="http://www.w3.org/1999/xhtml" xml:lang="ca" >
3    <head>
4        <!-- METADATA -->
5<meta charset="utf-8">
6<meta name="viewport" content="width=device-width, initial-scale=1">
7<meta name="title" lang="ca" content="Plans, projectes, campanyes i programes - Ajuntament de Balsareny">
8<meta name="description" lang="ca" content="">
9<meta name="author" lang="ca" content="Ajuntament de Balsareny">
10<meta name="date" lang="ca" content="2021-06-11 12:15:18">
11<meta name="generator" lang="ca" content="Ajuntament de Balsareny">
12<meta name="robots" content="index, follow">
13
14        <title>Plans, projectes, campanyes i programes - Ajuntament de Balsareny</title>
15
16        <!-- Global Site Tag (gtag.js) - Google Analytics v4-->
vendor: 124 bytes, lines 16-17
16
17<script type="text/plain" data-type="text/javascript" data-name="ga" data-src="https://www.googletagmanager.com/gtag/js?id=
17G-FP3MX7VGJ7
vendor: 12 bytes, line 17
17"></script>
18<script type="text/plain" data-type="text/javascript" data-name="ga">
19    
vendor: 140 bytes, lines 19-23
19window.dataLayer = window.dataLayer || [];
20    function gtag(){dataLayer.push(arguments);}
21    gtag('js', new Date());
22
23    gtag('config', '
23G-FP3MX7VGJ7
vendor: 8 bytes, lines 23-24
23');
24    
24// Creates the default tracker.
25    gtag('event', 'page_view', { 'send_to': 'G-FP3MX7VGJ7' });
26</script>
26
27<!-- End of code Global Site Tag (gtag.js) - Google Analytics v4--><!-- Global Site Tag (gtag.js) - Google Analytics v4-->
vendor: 124 bytes, lines 27-28
27
28<script type="text/plain" data-type="text/javascript" data-name="ga" data-src="https://www.googletagmanager.com/gtag/js?id=
28UA-180644712-1
vendor: 12 bytes, line 28
28"></script>
29<script type="text/plain" data-type="text/javascript" data-name="ga">
30    
vendor: 140 bytes, lines 30-34
30window.dataLayer = window.dataLayer || [];
31    function gtag(){dataLayer.push(arguments);}
32    gtag('js', new Date());
33
34    gtag('config', '
34UA-180644712-1
vendor: 8 bytes, lines 34-35
34');
35    
35// Creates the default tracker.
36    gtag('event', 'page_view', { 'send_to': 'UA-180644712-1' });
37</script>
37
38<!-- End of code Global Site Tag (gtag.js) - Google Analytics v4-->
39        <link rel="canonical" href="/ajuntament/plans-projectes-campanyes-i-programes">
40
41        <link rel="stylesheet" href="/front/view/js/bower_components/bootstrap/dist/css/bootstrap.min.css?ver=1790951099">
42<link rel="stylesheet" href="/front/view/js/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css?ver=1790951099">
43<link rel="stylesheet" href="/front/view/js/bower_components/bootstrap-icons.min/index.css?ver=1790951099">
44<link rel="stylesheet" href="/front/view/js/bower_components/tempus-dominus.min.css/index.css?ver=1790951099">
45<link rel="stylesheet" href="/common/bower_components/select2/dist/css/select2.min.css?ver=1790951099">
46
47        <!-- Real Favicon Genenrator-->
48<link rel="apple-touch-icon" href="/themes/balsareny/images/favicons/apple-touch-icon.png">
49<link rel="icon" type="image/png" href="/themes/balsareny/images/favicons/favicon-16x16.png" sizes="16x16">
50<link rel="icon" type="image/png" href="/themes/balsareny/images/favicons/favicon-32x32.png" sizes="32x32">
51<link rel="shortcut icon" href="/themes/balsareny/images/favicons/favicon.ico">
52        
52<script src="/front/controller/klaro-config.php"></script>
vendor: 1 bytes, line 52
52
53<script>
54	// Fallback defensiu: si per algun motiu el PHP no retorna la configuració,
55	// assegurem una configuració mínima perquè Klaro no falli i mostri el banner.
56	window.klaroConfig = window.klaroConfig || {
57		version: '1.0',
58		elementID: 'klaro',
59		storageMethod: 'cookie',
60		storageName: 'klaro',
61		cookieName: 'klaro',
62		htmlTexts: true,
63		acceptAll: true,
64		hideDeclineAll: false,
65		services: []
66	};
67</script>
vendor: 1 bytes, line 67
67
68<script src="/front/view/js/klaro.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 68
68
69<script src="/front/view/js/klaro-init.js?ver=1790951099"></script>
69
70
71        <!-- Twitter Card data -->
72<meta name="twitter:card" content="summary">
73<meta name="twitter:title" content="Plans, projectes, campanyes i programes">
74<meta name="twitter:description" content="">
75<meta name="twitter:image" content="https://www.balsareny.cat/themes/balsareny/images/logos/header.png">
76    <meta name="twitter:image:alt" content="Logo">
77        <!-- Open Graph data -->
78<meta property="og:title" content="Plans, projectes, campanyes i programes">
79<meta property="og:type" content="website">
80<meta property="og:url" content="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes">
81<meta property="og:image" content="https://www.balsareny.cat/themes/balsareny/images/logos/header.png">
82    <meta property="og:image:alt" content="Logo">
83    <meta property="og:image" content="https://www.balsareny.cat/themes/balsareny/images/logos/header_inv.png">
84    <meta property="og:image:alt" content="Logo invertit">
85    <meta property="og:description" content="">
86<meta property="og:site_name" content="Ajuntament de Balsareny">
87
88        <!-- HTML5 compatible tags -->
89<script>
90    document.createElement('header');
91    document.createElement('footer');
92    document.createElement('section');
93    document.createElement('aside');
94    document.createElement('nav');
95    document.createElement('article');
96    document.createElement('hgroup');
97    document.createElement('lh');
98</script>
98
99        
99<script>window.mapsConfig = { layerType: 'OpenStreetMap_Mapnik' };</script>
99
100<link rel="stylesheet" href="/front/view/js/bower_components/FreezeUI/freeze-ui.min.css">
101<link rel="stylesheet" href="/front/view/js/bower_components/Leaflet/default/leaflet.css">
102<link rel="stylesheet" href="/front/view/js/bower_components/Leaflet/default/Control.Loading.css">
103<script  src="/front/view/js/bower_components/FreezeUI/freeze-ui.min.js"></script>
vendor: 1 bytes, line 103
103
104<script  src="/front/view/js/bower_components/Leaflet/default/leaflet.js"></script>
vendor: 1 bytes, line 104
104
105<script src="/front/view/js/bower_components/es6-promise/es6-promise.min.js"></script>
vendor: 1 bytes, line 105
105
106<script>ES6Promise.polyfill();</script>
vendor: 1 bytes, line 106
106
107<script  src='/front/view/js/bower_components/Leaflet/default/Leaflet.GoogleMutant.js'></script>
vendor: 1 bytes, line 107
107
108<script src="/front/view/js/googleMapsInit.js"></script>
vendor: 1 bytes, line 108
108
109<script type="text/plain" data-type="text/javascript" data-name="maps" data-src="https://maps.google.com/maps/api/js?key=AIzaSyDzMQfPcdyACxfYosZzQs43alxB8BKfkx8&amp;loading=async&amp;callback=onGoogleMapsReady"></script>
vendor: 1 bytes, line 109
109
110<script  src="/front/view/js/bower_components/Leaflet/default/leaflet.maps.js"></script>
vendor: 1 bytes, line 110
110
111<script  src="/front/view/js/bower_components/Leaflet/default/leaflet.clone.js"></script>
vendor: 1 bytes, line 111
111
112<script  src="/front/view/js/bower_components/Leaflet/default/Control.Loading.js"></script>
vendor: 1 bytes, line 112
112
113<script src="/front/view/js/bower_components/jquery.min/index.js"></script>
vendor: 1 bytes, line 113
113
114<script src="/front/view/js/maps.js"></script>
114        <!-- Init addHeadExtraStyles -->
115        <style>html body{font-size:1em !important;} </style>
116        <!-- End addHeadExtraStyles -->
117        <!-- Font Awesome 7 + v4-shims for backward compatibility -->
118        <link href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css" rel="stylesheet">
119        <link href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/v4-shims.min.css" rel="stylesheet">
120        <!-- Popperjs + Tempus Dominus -->
121        
121<script src="/front/view/js/bower_components/popper.min/index.js?ver=1790951099"></script>
vendor: 1 bytes, line 121
121
122<script src="/front/view/js/bower_components/tempus-dominus.min.js/index.js?ver=1790951099"></script>
122
123                <link rel="stylesheet" media="all" href="/themes/balsareny/styles/style.min.css?ver=1790951099">
124            </head>
125    <body class="page id-16 list-10">
126        <nav class="skip-links" aria-label="Dreceres d&#039;accessibilitat"><ul><li><a href="#site-header">Saltar a la capçalera</a></li><li><a href="#readspeakerPage">Saltar al contingut</a></li><li><a href="#footer-content">Saltar al peu de pàgina</a></li></ul></nav>        <header id="site-header" tabindex="-1">
127                                    <div class="toolbar clearfix">
128    <div class="container-xl">
129                <div class="fright">
130            <div class="toolbarItem">
131    <div class="toolbarItem page-62 page-contactar">
132    <a 
133        href="/altres-continguts/contactar"
134        target="_self"
135        rel=""
136            >
137        Contactar    </a>
138</div>
139</div>                        <div id="social" class="toolbarItem">
140                  
141    <a target="_blank" aria-label="Twitter" href="https://twitter.com/ajbalsareny" title="Obre en finestra nova: Twitter">
142        <span style="display: none">Twitter</span>
143        <img src="/front/view/images/icons/social/twitter.png" alt="Twitter" width="32" height="32">
144    </a>
145  
146    <a target="_blank" aria-label="Facebook" href="https://www.facebook.com/ajbalsareny" title="Obre en finestra nova: Facebook">
147        <span style="display: none">Facebook</span>
148        <img src="/front/view/images/icons/social/facebook.png" alt="Facebook" width="32" height="32">
149    </a>
150  
151    <a target="_blank" aria-label="Instagram" href="https://www.instagram.com/ajbalsareny/" title="Obre en finestra nova: Instagram">
152        <span style="display: none">Instagram</span>
153        <img src="/front/view/images/icons/social/instagram.png" alt="Instagram" width="32" height="32">
154    </a>
155  
156    <a target="_blank" aria-label="Whatsapp" href="https://whatsapp.com/channel/0029VaDpBOR1yT21e6pB7n2o" title="Obre en finestra nova: Whatsapp">
157        <span style="display: none">Whatsapp</span>
158        <img src="/front/view/images/icons/social/whatsapp.png" alt="Whatsapp" width="32" height="32">
159    </a>
160            </div>
161                        <div class="toolbarItem">
162                <div id="toolbarLanguages">
163    <ul id="languages">
164        <li><a href="#" role="button" aria-expanded="false" aria-controls="languagesList" id="languagesToggle">Idiomes</a>
165            <ul id="languagesList">
166                                    <li><a class="link-language" href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes?lang=ca" data-target="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes?lang=ca">Català</a></li>
167                                    <li><a class="link-language" href="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=esie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=es" data-target="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=esie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=es">Castellà</a></li>
168                                    <li><a class="link-language" href="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=enie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=en" data-target="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=enie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=en">Anglès</a></li>
169                                    <li><a class="link-language" href="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=deie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=de" data-target="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=deie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=de">Alemany</a></li>
170                                    <li><a class="link-language" href="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=frie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=fr" data-target="https://translate.google.es/translate?js=y&amp;prev=_t&amp;hl=frie=UTF-8&amp;u=https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes&amp;sl=ca&amp;tl=fr">Francès</a></li>
171                            </ul>
172        </li>
173    </ul>
174</div>
175<script>
176(function () {
177    var toggle = document.getElementById('languagesToggle');
178    if (!toggle) return;
179    var li = toggle.parentElement;
180    var submenu = li.querySelector('ul');
181    var links = Array.prototype.slice.call(submenu.querySelectorAll('a'));
182
183    function keyName(e) {
184        return e.key || e.code || e.keyCode;
185    }
186
187    function isSpaceKey(e) {
188        var key = keyName(e);
189        return key === ' ' || key === 'Spacebar' || key === 'Space' || key === 32;
190    }
191
192    function open(focusFirst) {
193        li.classList.add('is-open');
194        submenu.style.display = 'block';
195        submenu.style.padding = '1em';
196        toggle.setAttribute('aria-expanded', 'true');
197        if (focusFirst && links.length) links[0].focus();
198    }
199
200    function close() {
201        li.classList.remove('is-open');
202        submenu.style.display = '';
203        submenu.style.padding = '';
204        toggle.setAttribute('aria-expanded', 'false');
205    }
206
207    function isOpen() {
208        return toggle.getAttribute('aria-expanded') === 'true';
209    }
210
211    function focusLink(index) {
212        if (!links.length) return;
213        links[(index + links.length) % links.length].focus();
214    }
215
216    function focusedLinkIndex() {
217        return links.indexOf(document.activeElement);
218    }
219
220    toggle.addEventListener('click', function (e) {
221        e.preventDefault();
222        isOpen() ? close() : open(false);
223    });
224
225    toggle.addEventListener('keydown', function (e) {
226        var key = keyName(e);
227        if (key === 'Enter' || isSpaceKey(e)) {
228            e.preventDefault();
229            isOpen() ? close() : open(false);
230        } else if (key === 'ArrowDown' || key === 40) {
231            e.preventDefault();
232            open(true);
233        } else if (key === 'ArrowUp' || key === 38) {
234            e.preventDefault();
235            open(false);
236            focusLink(links.length - 1);
237        } else if (key === 'Escape' || key === 'Esc' || key === 27) {
238            if (isOpen()) {
239                e.preventDefault();
240                close();
241            }
242        }
243    });
244
245    submenu.addEventListener('keydown', function (e) {
246        var key = keyName(e);
247        var index = focusedLinkIndex();
248
249        if (key === 'ArrowDown' || key === 40) {
250            e.preventDefault();
251            focusLink(index + 1);
252        } else if (key === 'ArrowUp' || key === 38) {
253            e.preventDefault();
254            focusLink(index - 1);
255        } else if (key === 'Home' || key === 36) {
256            e.preventDefault();
257            focusLink(0);
258        } else if (key === 'End' || key === 35) {
259            e.preventDefault();
260            focusLink(links.length - 1);
261        } else if (isSpaceKey(e)) {
262            e.preventDefault();
263            if (document.activeElement && document.activeElement.click) {
264                document.activeElement.click();
265            }
266        } else if (key === 'Escape' || key === 'Esc' || key === 27) {
267            e.preventDefault();
268            close();
269            toggle.focus();
270        }
271    });
272
273    li.addEventListener('focusout', function () {
274        window.setTimeout(function () {
275            if (!li.contains(document.activeElement)) close();
276        }, 0);
277    });
278
279    document.addEventListener('click', function (e) {
280        if (!li.contains(e.target)) close();
281    });
282})();
283</script>
283
284                <div class="currentDate" style='padding:9px;color:white'>
285    <span id="clock" class="clock" title='Data i hora oficial' >
286        02.10.2026 | 16:24    </span>
287</div>            </div>
288        </div>
289    </div>
290</div>
291<div class="header ">
292    <div class="branding">
293        <div class="container-xl">
294            <div class="row">
295                <div class="col-md-8 col-sm-8 col-lg-8 logo_box">
296    <a class="logo" href="/" aria-label="Ajuntament de Balsareny - Pàgina d'inici">
297        <img src="/themes/balsareny/images/logos/header.png" alt="" width="233" height="111" id="mainLogo">
298    </a>
299    </div>                <div class="col-md-4 col-sm-4 col-lg-4 middle search_box">
300    <form id="search_box" aria-label="Cercar:" name="search_box" method="get" action="/search">
301        <label for="search" accesskey="4">
302            <span class="visually-hidden">Cercar:</span>
303        </label>
304        <input id="search" name="search" type="text" aria-label="Cercar:" title="Cerca a tot el web" value="" placeholder="Cercar...">
305        <button type="submit" class="search-button" aria-label="Cerca"><i class="fa fa-search"></i></button>
306    </form>
307</div>
308            </div>
309        </div>
310    </div>
311        <div id="navbar-top" class="navbar navbar-expand-lg navbar-dark"><div class="nav"><div class="container-xl"><div class="row"><div class="col"><nav class="menu_principal" aria-label="menú"><div class="menu-flexible__wrapper menu-font-medium menu-alignment-left menu-spacing-normal menu-animation-fade menu-text-transform-none menu-columns-1" style="--menu-cols:1;--menu-submenu-width:200px;--menu-hover-delay:300ms;--menu-image-width:160px;" data-menu-columns="1" data-expand-type="hover" data-menu-sticky="false" data-menu-alignment="left" data-menu-spacing="normal" data-menu-animation="fade" data-menu-external-icon="auto" data-menu-external-dim="false" data-menu-text-transform="none"><div class="menu-flexible__topbar"><a href="#" class="menu-flexible__toggle phoneMenuButton" aria-label="Menú" aria-expanded="false"><i class="fa fa-bars"></i></a></div><ul class="menu-flexible menu-flexible__list"><li class="menu-flexible__item page-1 level1"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/ajuntament" ><span class="menu-flexible__item-text">Ajuntament</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-8 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/ajuntament/govern" ><span class="menu-flexible__item-text">Govern</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-13 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/consistori" ><span class="menu-flexible__item-text">Consistori</span></a></li><li class="menu-flexible__item page-14 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/regidories" ><span class="menu-flexible__item-text">Regidories</span></a></li><li class="menu-flexible__item page-115 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/informacio-dels-regidors" ><span class="menu-flexible__item-text">Informació dels regidors</span></a></li><li class="menu-flexible__item page-15 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/grups-municipals" ><span class="menu-flexible__item-text">Grups municipals</span></a></li><li class="menu-flexible__item page-141 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/sous-i-despeses-carrecs-electes" ><span class="menu-flexible__item-text">Sous i despeses càrrecs electes</span></a></li><li class="menu-flexible__item page-116 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/govern/agenda-politica" ><span class="menu-flexible__item-text">Agenda política</span></a></li><li class="menu-flexible__item page-127 level3"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="http://aplicacions.municat.gencat.cat/index.php?page=consulta&amp;mostraEns=0801800000&amp;accio=eleccions" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Resultats electorals</span></a></li></ul></li><li class="menu-flexible__item page-142 level2"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="https://www.seu-e.cat/ca/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/accio-de-govern-i-grups-politics/actes-de-ple" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Plens municipals</span></a></li><li class="menu-flexible__item page-24 level2"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/gestio-economica" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Pressupostos i gestió econòmica</span></a></li><li class="menu-flexible__item page-144 level2"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/informacio-institucional-i-organitzativa/empleats-publics/plantilla-empleats-publics" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Plantilla empleats públics</span></a></li><li class="menu-flexible__item page-16 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/plans-projectes-campanyes-i-programes" ><span class="menu-flexible__item-text">
311Plans, projectes, campanyes i programes</span></a></li><li class="menu-flexible__item page-18 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/anuncis-edictes" ><span class="menu-flexible__item-text">Anuncis / Edictes</span></a></li><li class="menu-flexible__item page-200 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/convocatories-de-personal" ><span class="menu-flexible__item-text">Convocatòries de personal</span></a></li><li class="menu-flexible__item page-184 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/subvencions" ><span class="menu-flexible__item-text">Subvencions</span></a></li><li class="menu-flexible__item page-26 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/perfil-de-contractant" ><span class="menu-flexible__item-text">Perfil de contractant</span></a></li><li class="menu-flexible__item page-126 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/ajuntament/normativa" ><span class="menu-flexible__item-text">Normativa</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-27 level3"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/normativa-plans-i-programes/ordenances-reguladores-i-reglaments" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Ordenances Generals i Reglaments</span></a></li><li class="menu-flexible__item page-22 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/normativa/ordenances-fiscals" ><span class="menu-flexible__item-text">Ordenances Fiscals</span></a></li><li class="menu-flexible__item page-28 level3"><a class="menu-flexible__link menu-link--external" aria-expanded="false" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/urbanisme" target="_blank" rel="noopener noreferrer"><span class="menu-flexible__item-text">Urbanisme</span></a></li><li class="menu-flexible__item page-191 level3"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/normativa/altra-normativa" ><span class="menu-flexible__item-text">Altra normativa</span></a></li></ul></li><li class="menu-flexible__item page-132 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/altres-administracions" ><span class="menu-flexible__item-text">Altres administracions</span></a></li><li class="menu-flexible__item page-122 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/que-es-la-seu-electronica" ><span class="menu-flexible__item-text">Seu electrònica</span></a></li><li class="menu-flexible__item page-123 level2"><a class="menu-flexible__link" aria-expanded="false" href="/ajuntament/transparencia" ><span class="menu-flexible__item-text">Transparència</span></a></li></ul></li><li class="menu-flexible__item page-10 level1"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/serveis-i-tramits" ><span class="menu-flexible__item-text">Serveis i tràmits</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-208 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/notificacions-electroniques" ><span class="menu-flexible__item-text">Notificacions electròniques</span></a></li><li class="menu-flexible__item page-209 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/carpeta-ciutadana" ><span class="menu-flexible__item-text">Carpeta ciutadana</span></a></li><li class="menu-flexible__item page-82 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/oficines-municipals" ><span class="menu-flexible__item-text">Oficines municipals</span></a></li><li class="menu-flexible__item page-140 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/cataleg-de-serveis" ><span class="menu-flexible__item-text">Catàleg de Serveis</span></a></li><li class="menu-flexible__item page-31 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/tramits-i-gestions" ><span class="menu-flexible__item-text">Tràmits i gestions</span></a></li><li class="menu-flexible__item page-133 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/finestreta-unica-empresarial-fue" ><span class="menu-flexible__item-text">Finestreta Única Empresarial (FUE)</span></a></li><li class="menu-flexible__item page-182 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/verificacio-de-documents" ><span class="menu-flexible__item-text">Verificació de documents</span></a></li><li class="menu-flexible__item page-32 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/impostos" ><span class="menu-flexible__item-text">Impostos</span></a></li><li class="menu-flexible__item page-88 level2"><a class="menu-flexible__link" aria-expanded="false" href="/serveis-i-tramits/factura-electronica" ><span class="menu-flexible__item-text">Factura electrònica</span></a></li></ul></li><li class="menu-flexible__item page-2 level1"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/municipi" ><span class="menu-flexible__item-text">Municipi</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-34 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/com-arribar-hi" ><span class="menu-flexible__item-text">Com arribar-hi</span></a></li><li class="menu-flexible__item page-36 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/planol--guia-de-carrers" ><span class="menu-flexible__item-text">Plànol / Guia de carrers</span></a></li><li class="menu-flexible__item page-50 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/festes-fires-i-mercats" ><span class="menu-flexible__item-text">Festes, fires i mercats</span></a></li><li class="menu-flexible__item page-129 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/rutes" ><span class="menu-flexible__item-text">Rutes</span></a></li><li class="menu-flexible__item page-41 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/llocs-dinteres" ><span class="menu-flexible__item-text">Llocs d&#039;interès</span></a></li><li class="menu-flexible__item page-145 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/municipi/nuclis" ><span class="menu-flexible__item-text">Nuclis</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-146 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/nuclis/cal-nosa-i-cal-rata" ><span class="menu-flexible__item-text">Cal Nosa i Cal Rata</span></a></li><li class="menu-flexible__item page-147 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/nuclis/colonia-soldevila-o-sant-esteve-de-balsareny" ><span class="menu-flexible__item-text">Colònia Soldevila o Sant Esteve de Balsareny</span></a></li><li class="menu-flexible__item page-148 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/nuclis/la-rabeia" ><span class="menu-flexible__item-text">La Rabeia</span></a></li><li class="menu-flexible__item page-149 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/nuclis/vilafruns" ><span class="menu-flexible__item-text">Vilafruns</span></a></li></ul></li><li class="menu-flexible__item page-151 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/municipi/sol-industrial" ><span class="menu-flexible__item-text">
311Sòl industrial</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-152 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/sol-industrial/la-millor-opcio-en-sol-industrial" ><span class="menu-flexible__item-text">La millor opció en sòl industrial</span></a></li><li class="menu-flexible__item page-153 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/sol-industrial/comunicacions" ><span class="menu-flexible__item-text">Comunicacions</span></a></li><li class="menu-flexible__item page-154 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/sol-industrial/poligons" ><span class="menu-flexible__item-text">Polígons</span></a></li></ul></li><li class="menu-flexible__item page-3 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/municipi/guia-del-municipi" ><span class="menu-flexible__item-text">Guia del municipi</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-37 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/equipaments" ><span class="menu-flexible__item-text">Equipaments</span></a></li><li class="menu-flexible__item page-40 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/entitats-i-associacions" ><span class="menu-flexible__item-text">Entitats i associacions</span></a></li><li class="menu-flexible__item page-143 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/comercos" ><span class="menu-flexible__item-text">Comerços</span></a></li><li class="menu-flexible__item page-39 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/empreses" ><span class="menu-flexible__item-text">Empreses</span></a></li><li class="menu-flexible__item page-130 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/on-menjar" ><span class="menu-flexible__item-text">On menjar</span></a></li><li class="menu-flexible__item page-43 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/guia-del-municipi/emergencies" ><span class="menu-flexible__item-text">Emergències</span></a></li></ul></li><li class="menu-flexible__item page-7 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/municipi/informacio-del-municipi" ><span class="menu-flexible__item-text">Informació del municipi</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-44 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/informacio-del-municipi/introduccio" ><span class="menu-flexible__item-text">Introducció</span></a></li><li class="menu-flexible__item page-46 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/informacio-del-municipi/historia" ><span class="menu-flexible__item-text">Història</span></a></li><li class="menu-flexible__item page-47 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/informacio-del-municipi/el-municipi-en-xifres" ><span class="menu-flexible__item-text">El municipi en xifres</span></a></li><li class="menu-flexible__item page-48 level3"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/informacio-del-municipi/informacio-geografica" ><span class="menu-flexible__item-text">Informació geogràfica</span></a></li></ul></li><li class="menu-flexible__item page-35 level2"><a class="menu-flexible__link" aria-expanded="false" href="/municipi/transport-public" ><span class="menu-flexible__item-text">Transport públic</span></a></li></ul></li><li class="menu-flexible__item page-156 level1"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca" ><span class="menu-flexible__item-text">Escoles i biblioteca</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-205 level2"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/aula-activa" ><span class="menu-flexible__item-text">Aula Activa</span></a></li><li class="menu-flexible__item page-157 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona" ><span class="menu-flexible__item-text">Escola de música Mn Joan Bajona</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-216 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/contacta-amb-lescola-de-musica" ><span class="menu-flexible__item-text">Contacta amb l&#039;escola de música</span></a></li><li class="menu-flexible__item page-160 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/oferta-formativa-de-lescola-de-musica" ><span class="menu-flexible__item-text">Oferta formativa de l&#039;escola de música</span></a></li><li class="menu-flexible__item page-161 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/tarifes-de-lescola-de-musica" ><span class="menu-flexible__item-text">Tarifes de l&#039;escola de música</span></a></li><li class="menu-flexible__item page-164 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/matricula-de-lescola-de-musica" ><span class="menu-flexible__item-text">Matrícula de l&#039;escola de música</span></a></li><li class="menu-flexible__item page-163 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/calendari-i-horaris" ><span class="menu-flexible__item-text">Calendari i horaris</span></a></li><li class="menu-flexible__item page-165 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona/equip-docent-de-lescola-de-musica" ><span class="menu-flexible__item-text">Equip docent de l&#039;escola de música</span></a></li></ul></li><li class="menu-flexible__item page-155 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona" ><span class="menu-flexible__item-text">Escola de teatre Mn Joan Bajona</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-170 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/equip-docent-de-lescola-de-teatre" ><span class="menu-flexible__item-text">Equip docent de l&#039;escola de teatre</span></a></li><li class="menu-flexible__item page-166 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/oferta-formativa-de-lescola-de-teatre" ><span class="menu-flexible__item-text">Oferta formativa de l&#039;escola de teatre</span></a></li><li class="menu-flexible__item page-167 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/calendari-i-horaris-de-lescola-municipal-de-teatre" ><span class="menu-flexible__item-text">Calendari i horaris de l&#039;escola municipal de teatre</span></a></li><li class="menu-flexible__item page-169 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/tarifes-de-lescola-de-teatre" ><span class="menu-flexible__item-text">Tarifes de l&#039;escola de teatre</span></a></li><li class="menu-flexible__item page-168 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/matricula-de-lescola-de-teatre" ><span class="menu-flexible__item-text">Matrícula de l&#039;escola de teatre</span></a></li><li class="menu-flexible__item page-194 level3"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny" ><span class="menu-flexible__item-text">Galeria d&#039;imatges escola de teatre Balsareny</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-213 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2024-2025" ><span class="menu-flexible__item-text">Fotos escola de teatre 2024-2025</span></a></li><li class="menu-flexible__item page-206 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2021-2022" ><span class="menu-flexible__item-text">Fotos escola de teatre 2021-2022</span></a></li><li class="menu-flexible__item page-198 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2020-2021" ><span class="menu-flexible__item-text">Fotos escola de teatre 2020-2021</span></a></li><li class="menu-flexible__item page-196 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2019-2020" ><span class="menu-flexible__item-text">
311Fotos escola de teatre 2019-2020</span></a></li><li class="menu-flexible__item page-195 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2018-2019" ><span class="menu-flexible__item-text">Fotos escola de teatre 2018-2019</span></a></li><li class="menu-flexible__item page-192 level4"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona/galeria-dimatges-escola-de-teatre-balsareny/fotos-escola-de-teatre-2017-2018" ><span class="menu-flexible__item-text">Fotos escola de teatre 2017-2018</span></a></li></ul></li></ul></li><li class="menu-flexible__item page-158 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc" ><span class="menu-flexible__item-text">Llar d&#039;infants municipal Sant Marc</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-172 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc/equip-docent-de-la-llar-dinfants" ><span class="menu-flexible__item-text">Equip docent de la llar d&#039;infants</span></a></li><li class="menu-flexible__item page-173 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc/calendari-de-la-llar-dinfants" ><span class="menu-flexible__item-text">Calendari de la llar d&#039;infants</span></a></li><li class="menu-flexible__item page-174 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc/tarifes-de-lescola-de-la-llar-dinfants" ><span class="menu-flexible__item-text">Tarifes de l&#039;escola de la llar d&#039;infants</span></a></li><li class="menu-flexible__item page-175 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc/preinscripcio-i-matricula-de-la-llar-dinfants-2627" ><span class="menu-flexible__item-text">Preinscripció i matrícula de la llar d&#039;infants 26/27</span></a></li></ul></li><li class="menu-flexible__item page-159 level2"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/escoles-i-biblioteca/biblioteca-municipal-pere-casaldaliga" ><span class="menu-flexible__item-text">Biblioteca municipal Pere Casaldàliga</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-176 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/biblioteca-municipal-pere-casaldaliga/serveis" ><span class="menu-flexible__item-text">Serveis</span></a></li><li class="menu-flexible__item page-177 level3"><a class="menu-flexible__link" aria-expanded="false" href="/escoles-i-biblioteca/biblioteca-municipal-pere-casaldaliga/activitats-i-formacio" ><span class="menu-flexible__item-text">Activitats i formació</span></a></li></ul></li></ul></li><li class="menu-flexible__item page-4 level1"><a class="menu-flexible__link menu-flexible__link--dropdown" aria-expanded="false" href="/actualitat" ><span class="menu-flexible__item-text">Actualitat</span></a><ul class="menu-flexible menu-flexible__submenu"><li class="menu-flexible__item page-53 level2"><a class="menu-flexible__link" aria-expanded="false" href="/actualitat/noticies" ><span class="menu-flexible__item-text">Notícies</span></a></li><li class="menu-flexible__item page-56 level2"><a class="menu-flexible__link" aria-expanded="false" href="/actualitat/butlleti-municipal" ><span class="menu-flexible__item-text">Butlletí municipal</span></a></li><li class="menu-flexible__item page-150 level2"><a class="menu-flexible__link" aria-expanded="false" href="/actualitat/participacio-ciutadana" ><span class="menu-flexible__item-text">Participació ciutadana</span></a></li><li class="menu-flexible__item page-55 level2"><a class="menu-flexible__link" aria-expanded="false" href="/actualitat/butlleti-digital" ><span class="menu-flexible__item-text">Butlletí digital</span></a></li><li class="menu-flexible__item page-57 level2"><a class="menu-flexible__link" aria-expanded="false" href="/actualitat/rss" ><span class="menu-flexible__item-text">Rss</span></a></li></ul></li><li class="menu-flexible__item page-5 level1"><a class="menu-flexible__link" aria-expanded="false" href="/adreces-i-telefons" ><span class="menu-flexible__item-text">Adreces i telèfons</span></a></li></ul></div>
311<script>(function() {
312    'use strict';
313
314    // Mega panel
315
316    function initMegaPanels(navContainer) {
317        var menuItems = Array.prototype.slice.call(navContainer.querySelectorAll('[data-mega-id]'));
318        if (!menuItems.length) return;
319
320        var navUl    = navContainer.querySelector('ul');
321        var topItems = navUl
322            ? menuItems.filter(function(el) { return el.parentElement === navUl; })
323            : menuItems;
324
325        var wrapper    = navContainer.closest('.menu-flexible__wrapper');
326        var isClick    = wrapper && wrapper.getAttribute('data-expand-type') === 'click';
327
328        menuItems.forEach(function(item) {
329            var panel = getPanelForItem(item, navContainer);
330            if (!panel) return;
331
332            if (isClick) {
333                var link = item.querySelector('a');
334                if (link) {
335                    link.addEventListener('click', function(e) {
336                        // En mòbil, els elements naveguen directament sense desplegar submenús
337                        if (window.innerWidth <= 992) return;
338                        if (panel.classList.contains('mf-mega-visible')) {
339                            // Segon clic: navegar
340                            return;
341                        }
342                        e.preventDefault();
343                        hideAllMegaPanels(navContainer);
344                        showPanel(item, panel);
345                    });
346                }
347            } else {
348                var hoverDelay = parseInt(
349                    getComputedStyle(wrapper).getPropertyValue('--menu-hover-delay'), 10
350                ) || 0;
351                var hoverTimer = null;
352
353                var leaveTimer = null;
354
355                item.addEventListener('mouseenter', function() {
356                    clearTimeout(hoverTimer);
357                    clearTimeout(leaveTimer);
358                    if (hoverDelay > 0) {
359                        hoverTimer = setTimeout(function() { showPanel(item, panel); }, hoverDelay);
360                    } else {
361                        showPanel(item, panel);
362                    }
363                });
364                item.addEventListener('mouseleave', function(e) {
365                    clearTimeout(hoverTimer);
366                    if (!panel.contains(e.relatedTarget)) {
367                        leaveTimer = setTimeout(function() { hidePanel(item, panel); }, 300);
368                    }
369                });
370                panel.addEventListener('mouseenter', function() {
371                    clearTimeout(leaveTimer);
372                });
373                panel.addEventListener('mouseleave', function(e) {
374                    clearTimeout(hoverTimer);
375                    clearTimeout(leaveTimer);
376                    if (!item.contains(e.relatedTarget)) hidePanel(item, panel);
377                });
378
379                // Tàctil: fallback quan hover no disponible (només escriptori tàctil)
380                var link = item.querySelector('a');
381                if (link) {
382                    link.addEventListener('click', function(e) {
383                        if (window.matchMedia('(hover: none)').matches && window.innerWidth > 992) {
384                            if (panel.classList.contains('mf-mega-visible')) {
385                                // Segon clic en tàctil: navegar
386                                return;
387                            }
388                            e.preventDefault();
389                            hideAllMegaPanels(navContainer);
390                            showPanel(item, panel);
391                        }
392                    });
393                }
394            }
395        });
396
397        navContainer.addEventListener('keydown', function(e) {
398            handleMegaKeydown(e, navContainer, topItems);
399        });
400
401        if (!isClick) {
402            navContainer.addEventListener('focusin', function(e) {
403                var item = e.target.closest('[data-mega-id]');
404                if (!item) return;
405                var panel = getPanelForItem(item, navContainer);
406                if (!panel) return;
407                hideAllMegaPanels(navContainer);
408                showPanel(item, panel);
409            });
410        }
411
412        navContainer.addEventListener('focusout', function() {
413            setTimeout(function() {
414                if (!navContainer.contains(document.activeElement)) {
415                    hideAllMegaPanels(navContainer);
416                }
417            }, 0);
418        });
419
420        document.addEventListener('click', function(e) {
421            if (!navContainer.contains(e.target)) {
422                hideAllMegaPanels(navContainer);
423            }
424        });
425    }
426
427    function handleMegaKeydown(e, navContainer, topItems) {
428        var focused = document.activeElement;
429        if (!focused) return;
430
431        var currentItem = focused.closest('[data-mega-id]');
432        var currentPanel = focused.closest('.menu-flexible__mega-panel');
433        var key = e.key || e.code || e.keyCode;
434
435        function directLink(item) {
436            if (!item) return null;
437            return Array.prototype.slice.call(item.children).find(function(el) {
438                return el.tagName === 'A';
439            }) || item.querySelector('a');
440        }
441
442        function itemForPanel(panel) {
443            if (!panel) return null;
444            var id = panel.getAttribute('data-mega-id');
445            return id ? navContainer.querySelector('li[data-mega-id="' + id + '"]') : null;
446        }
447
448        function focusPanelLink(panel, index) {
449            var links = Array.prototype.slice.call(panel.querySelectorAll('a'));
450            if (!links.length) return;
451            links[(index + links.length) % links.length].focus();
452        }
453
454        function focusPanelSibling(panel, offset) {
455            var links = Array.prototype.slice.call(panel.querySelectorAll('a'));
456            var idx = links.indexOf(focused);
457            if (idx === -1) return;
458            links[(idx + offset + links.length) % links.length].focus();
459        }
460
461        function panelColumnForLink(link) {
462            return link ? link.closest('.menu-flexible__mega-col') : null;
463        }
464
465        function focusAdjacentPanelColumn(panel, offset) {
466            var columns = Array.prototype.slice.call(panel.querySelectorAll('.menu-flexible__mega-col'));
467            var currentColumn = panelColumnForLink(focused);
468            var idx = columns.indexOf(currentColumn);
469            if (idx === -1) return false;
470
471            var targetColumn = columns[(idx + offset + columns.length) % columns.length];
472            var targetLink = targetColumn.querySelector('a');
473            if (targetLink) {
474                targetLink.focus();
475                return true;
476            }
477
478            return false;
479        }
480
481        function focusTopItem(item, offset) {
482            var idx = topItems.indexOf(item);
483            if (idx === -1) return;
484
485            var next = topItems[(idx + offset + topItems.length) % topItems.length];
486            hideAllMegaPanels(navContainer);
487
488            var nextLink = directLink(next);
489            if (nextLink) {
490                nextLink.focus();
491                var nextPanel = getPanelForItem(next, navContainer);
492                if (nextPanel) showPanel(next, nextPanel);
493            }
494        }
495
496        switch (key) {
497            case 'Escape':
498            case 'Esc':
499            case 27: {
500                e.preventDefault();
501                hideAllMegaPanels(navContainer);
502                if (currentPanel) {
503                    var item = itemForPanel(currentPanel);
504                    var lnk = directLink(item);
505                    if (lnk) lnk.focus();
506                }
507                break;
508            }
509
510            case 'ArrowRight':
511            case 39:
512            case 'ArrowLeft':
513            case 37: {
514                var direction = (key === 'ArrowRight' || key === 39) ? 1 : -1;
515                e.preventDefault();
516
517                if (currentPanel) {
518                    if (!focusAdjacentPanelColumn(currentPanel, direction)) {
519                        var ownerItem = itemForPanel(currentPanel);
520                        focusTopItem(ownerItem, direction);
521                    }
522                    break;
523                }
524
525                if (!currentItem) return;
526                focusTopItem(currentItem, direction);
527                break;
528            }
529
530            case 'ArrowDown':
531            case 40: {
532                e.preventDefault();
533                if (currentPanel) {
534                    focusPanelSibling(currentPanel, 1);
535                    break;
536                }
537                if (!currentItem) return;
538                var panel = getPanelForItem(currentItem, navContainer);
539                if (!panel) return;
540                if (!panel.classList.contains('mf-mega-visible')) {
541                    hideAllMegaPanels(navContainer);
542                    showPanel(currentItem, panel);
543                }
544                focusPanelLink(panel, 0);
545                break;
546            }
547
548            case ' ':
549            case 'Space':
550            case 'Spacebar':
551            case 32: {
552                if (currentPanel || !currentItem) return;
553                var spacePanel = getPanelForItem(currentItem, navContainer);
554                if (!spacePanel) return;
555
556                e.preventDefault();
557                if (spacePanel.classList.contains('mf-mega-visible')) {
558                    hidePanel(currentItem, spacePanel);
559                } else {
560                    hideAllMegaPanels(navContainer);
561                    showPanel(currentItem, spacePanel);
562                }
563                break;
564            }
565
566            case 'ArrowUp':
567            case 38: {
568                if (!currentPanel) return;
569                e.preventDefault();
570                var panelLinks = Array.prototype.slice.call(currentPanel.querySelectorAll('a'));
571                var focusedIndex = panelLinks.indexOf(focused);
572
573                if (focusedIndex > 0) {
574                    focusPanelLink(currentPanel, focusedIndex - 1);
575                } else {
576                    var parentItem = itemForPanel(currentPanel);
577                    var parentLink = directLink(parentItem);
578                    if (parentLink) parentLink.focus();
579                    if (parentItem) hidePanel(parentItem, currentPanel);
580                }
581                break;
582            }
583        }
584    }
585
586    function getPanelForItem(item, navContainer) {
587        var id = item.getAttribute('data-mega-id');
588        return id
589            ? navContainer.querySelector('.menu-flexible__mega-panel[data-mega-id="' + id + '"]')
590            : null;
591    }
592
593    function showPanel(item, panel) {
594        panel.classList.add('mf-mega-visible');
595        panel.setAttribute('aria-hidden', 'false');
596        var link = item.querySelector('a');
597        if (link) link.setAttribute('aria-expanded', 'true');
598    }
599
600    function hidePanel(item, panel) {
601        panel.classList.remove('mf-mega-visible');
602        panel.setAttribute('aria-hidden', 'true');
603        var link = item.querySelector('a');
604        if (link) link.setAttribute('aria-expanded', 'false');
605    }
606
607    function hideAllMegaPanels(navContainer) {
608        navContainer.querySelectorAll('.menu-flexible__mega-panel.mf-mega-visible')
609            .forEach(function(panel) {
610                var id   = panel.getAttribute('data-mega-id');
611                var item = id ? navContainer.querySelector('li[data-mega-id="' + id + '"]') : null;
612                if (item) {
613                    hidePanel(item, panel);
614                } else {
615                    panel.classList.remove('mf-mega-visible');
616                    panel.setAttribute('aria-hidden', 'true');
617                }
618            });
619    }
620
621
622    // Tecles de fletxa (menú estàndard)
623
624    function initStandardKeyboard(wrapper) {
625        var menu = wrapper.querySelector('.menu-flexible__list');
626        if (!menu) return;
627
628        function closeAll() {
629            Array.prototype.slice.call(menu.querySelectorAll('.menu-flexible__item[focus="true"]'))
630                .forEach(function(item) {
631                    item.setAttribute('focus', 'false');
632                    var submenu = Array.prototype.slice.call(item.children).find(function(el) {
633                        return el.classList && el.classList.contains('menu-flexible__submenu');
634                    });
635                    if (submenu) {
636                        submenu.style.left = '';
637                        submenu.style.opacity = '';
638                        submenu.style.visibility = '';
639                        submenu.style.pointerEvents = '';
640                        submenu.style.transform = '';
641                    }
642                    var link = Array.prototype.slice.call(item.children).find(function(el) {
643                        return el.tagName === 'A';
644                    });
645                    if (link && link.classList.contains('menu-flexible__link--dropdown')) {
646                        link.setAttribute('aria-expanded', 'false');
647                    }
648                });
649        }
650
651        wrapper.addEventListener('keydown', function(e) {
652            handleStandardKeydown(e, menu);
653        });
654
655        wrapper.addEventListener('focusout', function() {
656            setTimeout(function() {
657                if (!wrapper.contains(document.activeElement)) {
658                    closeAll();
659                }
660            }, 0);
661        });
662    }
663
664    function handleStandardKeydown(e, menu) {
665        var focused = document.activeElement;
666        if (!focused || !menu.contains(focused)) return;
667
668        var itemSel = '.menu-flexible__item';
669        var linkSel = '.menu-flexible__link';
670
671        var currentLi = focused.closest(itemSel);
672        if (!currentLi) return;
673
674        var parentUl = currentLi.parentElement;
675        var isLevel1 = parentUl === menu;
676
677        function directLink(li) {
678            var direct = Array.prototype.slice.call(li.children).find(function(el) {
679                return el.tagName === 'A';
680            });
681            return direct || li.querySelector(linkSel);
682        }
683
684        function siblingItems(ul) {
685            return Array.prototype.slice.call(ul.children).filter(function(el) {
686                return el.matches(itemSel);
687            });
688        }
689
690        function childMenu(li) {
691            return Array.prototype.slice.call(li.children).find(function(el) {
692                return el.classList && el.classList.contains('menu-flexible__submenu');
693            });
694        }
695
696        function setSubmenuVisible(li, visible) {
697            var submenu = childMenu(li);
698            if (!submenu) return;
699
700            if (visible) {
701                submenu.style.left = li.parentElement === menu ? '0' : '100%';
702                submenu.style.opacity = '1';
703                submenu.style.visibility = 'visible';
704                submenu.style.pointerEvents = 'auto';
705                submenu.style.transform = 'none';
706            } else {
707                submenu.style.left = '';
708                submenu.style.opacity = '';
709                submenu.style.visibility = '';
710                submenu.style.pointerEvents = '';
711                submenu.style.transform = '';
712            }
713        }
714
715        function setExpanded(li, expanded) {
716            li.setAttribute('focus', expanded ? 'true' : 'false');
717            setSubmenuVisible(li, expanded);
718            var lnk = directLink(li);
719            if (lnk && lnk.classList.contains('menu-flexible__link--dropdown')) {
720                lnk.setAttribute('aria-expanded', expanded ? 'true' : 'false');
721            }
722            if (!expanded) {
723                Array.prototype.slice.call(li.querySelectorAll(itemSel + '[focus="true"]'))
724                    .forEach(function(item) {
725                        item.setAttribute('focus', 'false');
726                        setSubmenuVisible(item, false);
727                        var childLink = directLink(item);
728                        if (childLink && childLink.classList.contains('menu-flexible__link--dropdown')) {
729                            childLink.setAttribute('aria-expanded', 'false');
730                        }
731                    });
732            }
733        }
734
735        function closeSiblings(li) {
736            Array.prototype.slice.call(li.parentElement.children)
737                .filter(function(item) {
738                    return item !== li && item.matches(itemSel);
739                })
740                .forEach(function(item) {
741                    setExpanded(item, false);
742                });
743        }
744
745        function openChild(li) {
746            var submenu = childMenu(li);
747            if (!submenu) return false;
748            closeSiblings(li);
749            setExpanded(li, true);
750            var firstChild = submenu.querySelector(linkSel);
751            if (firstChild) firstChild.focus();
752            return true;
753        }
754
755        function focusSibling(offset) {
756            var sibs = siblingItems(parentUl);
757            var idx  = sibs.indexOf(currentLi);
758            var lnk  = directLink(sibs[(idx + offset + sibs.length) % sibs.length]);
759            if (lnk) lnk.focus();
760        }
761
762        var key = e.key || e.code || e.keyCode;
763
764        switch (key) {
765            case 'ArrowRight':
766            case 39: {
767                if (!isLevel1) return;
768                e.preventDefault();
769                setExpanded(currentLi, false);
770                focusSibling(1);
771                break;
772            }
773            case 'ArrowLeft':
774            case 37: {
775                if (!isLevel1) return;
776                e.preventDefault();
777                setExpanded(currentLi, false);
778                focusSibling(-1);
779                break;
780            }
781            case 'ArrowDown':
782            case 40: {
783                e.preventDefault();
784                if (focused === directLink(currentLi) && openChild(currentLi)) {
785                    break;
786                }
787                var sibsDown = siblingItems(parentUl);
788                var idxDown  = sibsDown.indexOf(currentLi);
789                if (idxDown < sibsDown.length - 1) {
790                    var lnkDown = directLink(sibsDown[idxDown + 1]);
791                    if (lnkDown) lnkDown.focus();
792                }
793                break;
794            }
795            case 'ArrowUp':
796            case 38: {
797                e.preventDefault();
798                var sibsUp = siblingItems(parentUl);
799                var idxUp  = sibsUp.indexOf(currentLi);
800                if (idxUp > 0) {
801                    var lnkUp = directLink(sibsUp[idxUp - 1]);
802                    if (lnkUp) lnkUp.focus();
803                } else if (!isLevel1) {
804                    var parentItemUp = parentUl.closest(itemSel);
805                    if (parentItemUp) {
806                        setExpanded(parentItemUp, false);
807                        var parentLinkUp = directLink(parentItemUp);
808                        if (parentLinkUp) parentLinkUp.focus();
809                    }
810                }
811                break;
812            }
813            case ' ':
814            case 'Space':
815            case 'Spacebar':
816            case 32: {
817                if (!focused.classList.contains('menu-flexible__link--dropdown')) return;
818                e.preventDefault();
819                currentLi.getAttribute('focus') === 'true'
820                    ? setExpanded(currentLi, false)
821                    : openChild(currentLi);
822                break;
823            }
824            case 'Escape':
825            case 'Esc':
826            case 27: {
827                if (isLevel1 && currentLi.getAttribute('focus') !== 'true') return;
828                e.preventDefault();
829                if (!isLevel1) {
830                    var parentItemEsc = parentUl.closest(itemSel);
831                    if (parentItemEsc) {
832                        setExpanded(parentItemEsc, false);
833                        var parentLinkEsc = directLink(parentItemEsc);
834                        if (parentLinkEsc) parentLinkEsc.focus();
835                    }
836                } else {
837                    setExpanded(currentLi, false);
838                }
839                break;
840            }
841        }
842    }
843
844
845    // Click mode: expandir submenús via [focus=true]
846
847    function initClickExpand(wrapper) {
848        var menu = wrapper.querySelector('.menu-flexible__list');
849        if (!menu) return;
850
851        var itemSel        = '.menu-flexible__item';
852        var dropdownSel    = '.menu-flexible__link--dropdown';
853
854        function closeAll(container) {
855            Array.prototype.slice.call(container.querySelectorAll(itemSel + '[focus="true"]'))
856                .forEach(function(el) { el.setAttribute('focus', 'false'); });
857        }
858
859        function closeSiblings(item) {
860            var parentUl = item.parentElement;
861            Array.prototype.slice.call(parentUl.children)
862                .filter(function(el) {
863                    return el !== item
864                        && el.matches(itemSel)
865                        && el.getAttribute('focus') === 'true';
866                })
867                .forEach(function(el) {
868                    el.setAttribute('focus', 'false');
869                    closeAll(el);
870                });
871        }
872
873        menu.addEventListener('click', function(e) {
874            var link = e.target.closest(dropdownSel);
875            if (!link || !menu.contains(link)) return;
876
877            var item = link.parentElement;
878            if (!item || !item.matches(itemSel)) return;
879
880            // En mòbil, els elements naveguen directament sense desplegar submenús
881            if (window.innerWidth <= 992) return;
882
883            var isOpen = item.getAttribute('focus') === 'true';
884
885            if (isOpen) {
886                // Segon clic: navegar
887                return;
888            }
889
890            e.preventDefault();
891            closeSiblings(item);
892            item.setAttribute('focus', 'true');
893        });
894
895        document.addEventListener('click', function(e) {
896            var openItem = menu.querySelector(itemSel + '[focus="true"]');
897            if (!openItem) return;
898            if (!openItem.contains(e.target)) {
899                closeAll(menu);
900            }
901        });
902    }
903
904
905    // Hamburger (mòbil ≤992px)
906
907    class MenuFlexible {
908        constructor(wrapper) {
909            this.wrapper   = wrapper;
910            this.hamburger = wrapper.querySelector('.menu-flexible__toggle');
911            this.menu      = wrapper.querySelector('.menu-flexible__list');
912
913            if (!this.hamburger || !this.menu) return;
914
915            var parent  = this.menu.parentElement;
916            this.isMega = parent && parent.classList.contains('menu-flexible__nav-container');
917            this.target = this.isMega ? parent : this.menu;
918
919            // Ancestre que en mòbil és barra fixa de 44px amb overflow:clip i retalla
920            // el menú desplegat. En obrir, l'eixamplem; en tancar, el restaurem.
921            this.clipper = wrapper.closest('.nav');
922
923            this.init();
924            window.addEventListener('resize', () => this.handleResize());
925        }
926
927        init() {
928            this.hamburger.addEventListener('click', (e) => {
929                e.preventDefault();
930                e.stopPropagation();
931                this.toggleMenu();
932            });
933
934            document.addEventListener('click', (e) => {
935                if (!this.wrapper.contains(e.target) && this.isOpen()) {
936                    this.closeMenu();
937                }
938            });
939
940            this.menu.querySelectorAll('a').forEach(link => {
941                link.addEventListener('click', () => {
942                    if (window.innerWidth <= 992 && this.isOpen()) {
943                        this.closeMenu();
944                    }
945                });
946            });
947        }
948
949        isOpen()     { return this.target.classList.contains('show'); }
950        toggleMenu() { this.isOpen() ? this.closeMenu() : this.openMenu(); }
951
952        liftClip() {
953            if (this.clipper && window.innerWidth <= 992) {
954                this.clipper.style.height = 'auto';
955                this.clipper.style.maxHeight = 'none';
956                this.clipper.style.overflow = 'visible';
957            }
958        }
959
960        restoreClip() {
961            if (this.clipper) {
962                this.clipper.style.height = '';
963                this.clipper.style.maxHeight = '';
964                this.clipper.style.overflow = '';
965            }
966        }
967
968        openMenu() {
969            this.target.classList.add('show');
970            this.target.style.display = this.isMega ? 'block' : 'flex';
971            if (this.isMega) this.menu.style.display = 'flex';
972            this.liftClip();
973            this.hamburger.classList.add('active');
974            this.hamburger.setAttribute('aria-expanded', 'true');
975        }
976
977        closeMenu() {
978            this.target.classList.remove('show');
979            this.target.style.display = 'none';
980            if (this.isMega) {
981                this.menu.style.display = '';
982                var nc = this.wrapper.querySelector('.menu-flexible__nav-container');
983                if (nc) hideAllMegaPanels(nc);
984            }
985            this.restoreClip();
986            this.hamburger.classList.remove('active');
987            this.hamburger.setAttribute('aria-expanded', 'false');
988        }
989
990        handleResize() {
991            if (window.innerWidth > 992) {
992                this.target.classList.remove('show');
993                this.target.style.display = '';
994                if (this.isMega) this.menu.style.display = '';
995                this.restoreClip();
996                this.hamburger.classList.remove('active');
997                this.hamburger.setAttribute('aria-expanded', 'false');
998            }
999        }
1000    }
1001
1002
1003    // Init
1004
1005    function init() {
1006        document.querySelectorAll('.menu-flexible__wrapper').forEach(function(wrapper) {
1007            var navContainer = wrapper.querySelector('.menu-flexible__nav-container');
1008            if (navContainer) {
1009                initMegaPanels(navContainer);
1010            } else {
1011                initStandardKeyboard(wrapper);
1012                if (wrapper.getAttribute('data-expand-type') === 'click') {
1013                    initClickExpand(wrapper);
1014                }
1015            }
1016            new MenuFlexible(wrapper);
1017            if (wrapper.getAttribute('data-menu-sticky') === 'true') {
1018                var stickyTarget = wrapper.closest('#navbar-top')
1019                                || wrapper.closest('.navbar')
1020                                || wrapper.closest('nav');
1021                if (stickyTarget) {
1022                    stickyTarget.classList.add('menu-sticky-enabled');
1023                    document.body.classList.add('has-sticky-menu');
1024
1025                    var navbarHeight   = stickyTarget.offsetHeight;
1026                    var navbarTop      = stickyTarget.getBoundingClientRect().top + window.scrollY;
1027                    var bodyPadApplied = false;
1028
1029                    function updateStickyOffset() {
1030                        navbarHeight = stickyTarget.offsetHeight;
1031                        document.documentElement.style.setProperty('--skip-links-sticky-offset', navbarHeight + 'px');
1032
1033                        if (bodyPadApplied) {
1034                            document.body.style.paddingTop = navbarHeight + 'px';
1035                        }
1036                    }
1037
1038                    function getTargetFromHash(hash) {
1039                        if (!hash || hash.charAt(0) !== '#') {
1040                            return null;
1041                        }
1042
1043                        try {
1044                            return document.getElementById(decodeURIComponent(hash.substring(1)));
1045                        } catch (error) {
1046                            return document.getElementById(hash.substring(1));
1047                        }
1048                    }
1049
1050                    function scrollToSkipTarget(hash) {
1051                        var target = getTargetFromHash(hash);
1052                        if (!target) {
1053                            return;
1054                        }
1055
1056                        updateStickyOffset();
1057
1058                        var expectedTop = target.getBoundingClientRect().top + window.scrollY - navbarHeight;
1059                        if (expectedTop > navbarTop) {
1060                            applyFixed();
1061                        } else {
1062                            removeFixed();
1063                        }
1064
1065                        try {
1066                            target.focus({ preventScroll: true });
1067                        } catch (error) {
1068                            target.focus();
1069                        }
1070
1071                        var targetTop = target.getBoundingClientRect().top + window.scrollY;
1072                        window.scrollTo(0, Math.max(targetTop - navbarHeight, 0));
1073                    }
1074
1075                    document.querySelectorAll('.skip-links a[href^="#"]').forEach(function(link) {
1076                        link.addEventListener('click', function(event) {
1077                            var hash = link.getAttribute('href');
1078                            var target = getTargetFromHash(hash);
1079                            if (!target) {
1080                                return;
1081                            }
1082
1083                            event.preventDefault();
1084
1085                            if (window.history && window.history.pushState) {
1086                                window.history.pushState(null, '', hash);
1087                            } else {
1088                                window.location.hash = hash;
1089                            }
1090
1091                            scrollToSkipTarget(hash);
1092                        });
1093                    });
1094
1095                    updateStickyOffset();
1096
1097                    function applyFixed() {
1098                        if (!stickyTarget.classList.contains('fixed-top')) {
1099                            updateStickyOffset();
1100                            stickyTarget.classList.add('fixed-top');
1101                            document.body.style.paddingTop = navbarHeight + 'px';
1102                            bodyPadApplied = true;
1103                        }
1104                    }
1105
1106                    function removeFixed() {
1107                        if (stickyTarget.classList.contains('fixed-top')) {
1108                            stickyTarget.classList.remove('fixed-top');
1109                            document.body.style.paddingTop = '';
1110                            bodyPadApplied = false;
1111                        }
1112                    }
1113
1114                    window.addEventListener('scroll', function() {
1115                        if (window.scrollY > navbarTop) {
1116                            applyFixed();
1117                        } else {
1118                            removeFixed();
1119                        }
1120                    });
1121
1122                    window.addEventListener('resize', function() {
1123                        updateStickyOffset();
1124                        if (!stickyTarget.classList.contains('fixed-top')) {
1125                            navbarTop = stickyTarget.getBoundingClientRect().top + window.scrollY;
1126                        }
1127                    });
1128
1129                    if ('ResizeObserver' in window) {
1130                        new ResizeObserver(updateStickyOffset).observe(stickyTarget);
1131                    }
1132
1133                    stickyTarget.querySelectorAll('img').forEach(function(image) {
1134                        if (!image.complete) {
1135                            image.addEventListener('load', updateStickyOffset, { once: true });
1136                        }
1137                    });
1138
1139                    window.addEventListener('load', updateStickyOffset);
1140
1141                    if (window.scrollY > navbarTop) applyFixed();
1142
1143                    if (window.location.hash) {
1144                        window.setTimeout(function() {
1145                            scrollToSkipTarget(window.location.hash);
1146                        }, 0);
1147                    }
1148                }
1149            }
1150        });
1151    }
1152
1153    if (document.readyState === 'loading') {
1154        document.addEventListener('DOMContentLoaded', init);
1155    } else {
1156        init();
1157    }
1158})();
1159</script>
1159</nav></div></div></div></div></div>        </div>        </header>
1160                <main id="main-content" tabindex="-1">
1161            <div class="content">
1162                <div class="container-xl columns " id="Path">
1163    <div class="row">
1164        <nav aria-label="breadcrumb">
1165            <ol class="breadcrumb">
1166            <li class="breadcrumb-item">
1167    <a href="/" target="_self">
1168        <span style="display: none">home</span><i class="fa fa-home" aria-hidden="true"></i>    </a>
1169    </li>
1170<li class="breadcrumb-item">
1171    <a href="/ajuntament" target="_self">
1172        Ajuntament    </a>
1173        <button class="btn dropdown-toggle" type="button" id="defaultDropdow1" data-bs-toggle="dropdown" data-bs-auto-close="true" aria-expanded="false" aria-label="Desplega"></button>
1174    <ul class="dropdown-menu" aria-label="defaultDropdown1">
1175                    <li><a class="dropdown-item" href="/ajuntament/govern">Govern</a></li>
1176                    <li><a class="dropdown-item" href="https://www.seu-e.cat/ca/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/accio-de-govern-i-grups-politics/actes-de-ple">Plens municipals</a></li>
1177                    <li><a class="dropdown-item" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/gestio-economica">Pressupostos i gestió econòmica</a></li>
1178                    <li><a class="dropdown-item" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/informacio-institucional-i-organitzativa/empleats-publics/plantilla-empleats-publics">Plantilla empleats públics</a></li>
1179                    <li><a class="dropdown-item" href="/ajuntament/plans-projectes-campanyes-i-programes">Plans, projectes, campanyes i programes</a></li>
1180                    <li><a class="dropdown-item" href="/ajuntament/anuncis-edictes">Anuncis / Edictes</a></li>
1181                    <li><a class="dropdown-item" href="/ajuntament/convocatories-de-personal">Convocatòries de personal</a></li>
1182                    <li><a class="dropdown-item" href="/ajuntament/subvencions">Subvencions</a></li>
1183                    <li><a class="dropdown-item" href="/ajuntament/perfil-de-contractant">Perfil de contractant</a></li>
1184                    <li><a class="dropdown-item" href="/ajuntament/normativa">Normativa</a></li>
1185                    <li><a class="dropdown-item" href="/ajuntament/altres-administracions">Altres administracions</a></li>
1186                    <li><a class="dropdown-item" href="/ajuntament/que-es-la-seu-electronica">Seu electrònica</a></li>
1187                    <li><a class="dropdown-item" href="/ajuntament/transparencia">Transparència</a></li>
1188            </ul>
1189    </li>
1190            </ol>
1191        </nav>
1192    </div>
1193</div>
1194                <div class="container-xl columns">
1195                                        <div class="row">
1196    <div class="col-xs-12 col-sm-12 col-md-3 col-lg-3 leftSidebar responsiveHeight" data-nosnippet>
1197        <nav class="menuLeft" id="Menuleft_page" aria-label="Menú Plans, projectes, campanyes i programes">
1198                    <ul>
1199                <li class="subMenuPage-8 level2">
1200    <a href="/ajuntament/govern" target="_self">
1201        Govern            </a>
1202
1203    </li>
1204<li class="subMenuPage-142 level2">
1205    <a href="https://www.seu-e.cat/ca/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/accio-de-govern-i-grups-politics/actes-de-ple" target="_blank">
1206        Plens municipals            </a>
1207
1208    </li>
1209<li class="subMenuPage-24 level2">
1210    <a href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/gestio-economica" target="_blank">
1211        Pressupostos i gestió econòmica            </a>
1212
1213    </li>
1214<li class="subMenuPage-144 level2">
1215    <a href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/informacio-institucional-i-organitzativa/empleats-publics/plantilla-empleats-publics" target="_blank">
1216        Plantilla empleats públics            </a>
1217
1218    </li>
1219<li class="subMenuPage-16 current level2">
1220    <a href="/ajuntament/plans-projectes-campanyes-i-programes" target="_self" aria-current="page">
1221        Plans, projectes, campanyes i programes            </a>
1222
1223    </li>
1224<li class="subMenuPage-18 level2">
1225    <a href="/ajuntament/anuncis-edictes" target="_self">
1226        Anuncis / Edictes            </a>
1227
1228    </li>
1229<li class="subMenuPage-200 level2">
1230    <a href="/ajuntament/convocatories-de-personal" target="_self">
1231        Convocatòries de personal            </a>
1232
1233    </li>
1234<li class="subMenuPage-184 level2">
1235    <a href="/ajuntament/subvencions" target="_self">
1236        Subvencions            </a>
1237
1238    </li>
1239<li class="subMenuPage-26 level2">
1240    <a href="/ajuntament/perfil-de-contractant" target="_self">
1241        Perfil de contractant            </a>
1242
1243    </li>
1244<li class="subMenuPage-126 level2">
1245    <a href="/ajuntament/normativa" target="_self">
1246        Normativa            </a>
1247
1248    </li>
1249<li class="subMenuPage-132 level2">
1250    <a href="/ajuntament/altres-administracions" target="_self">
1251        Altres administracions            </a>
1252
1253    </li>
1254<li class="subMenuPage-122 level2">
1255    <a href="/ajuntament/que-es-la-seu-electronica" target="_self">
1256        Seu electrònica            </a>
1257
1258    </li>
1259<li class="subMenuPage-123 level2">
1260    <a href="/ajuntament/transparencia" target="_self">
1261        Transparència            </a>
1262
1263    </li>
1264            </ul>
1265                    </nav>
1266</div>
1267    <div class="col-xs-12 col-sm-12 col-md-9 col-lg-9 article responsiveHeight" id="readspeakerPage" tabindex="-1">
1268                    <div class="hideTablets">
1269    </div>
1270<h1 class="title"  id='title0' data-attribute="Plans, projectes, campanyes i programes">Plans, projectes, campanyes i programes</h1><div class="showTablets">
1271    </div>
1272<div>
1273        <div class="dinamic">
1274                                </div>        <div class="dinamic">
1275    <div class="pager newsletter-hidden"></div>    <ul class="clear articlelist default">
1276    <li class="article-item col-md-12"><div class="tplDefault ">
1277                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-inicial-del-projecte-per-a-lampliacio-del-cementiri-municipal.html" target="_blank" title ='Obre-ho en una finestra nova'>
1278        <p class="subtitle">Aprovació inicial del projecte per a l'ampliació del cementiri municipal</p>
1279    </a>
1280                <div class="date">
1281            29/09/2026        </div>
1282        <div class="entradeta ddbbtext"></div>            </div>
1283</li><li class="article-item col-md-12"><div class="tplDefault ">
1284                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-definitiva-del-projecte-dobres-per-a-la-reforma-interior-amb-canvi-dus-per-a-centre-datencio-primaria.html" target="_blank" title ='Obre-ho en una finestra nova'>
1285        <p class="subtitle">Aprovació definitiva del Projecte d'obres per a la reforma interior amb canvi d'ús per a centre d'atenció primària</p>
1286    </a>
1287                <div class="date">
1288            05/08/2026        </div>
1289        <div class="entradeta ddbbtext"></div>            </div>
1290</li><li class="article-item col-md-12"><div class="tplDefault ">
1291                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/memoria-collocacio-parament-translucid-en-el-vestibul-edifici-de-lajuntament.html" target="_blank" title ='Obre-ho en una finestra nova'>
1292        <p class="subtitle">Memòria col·locació parament translúcid en el vestíbul edifici de l'Ajuntament</p>
1293    </a>
1294                <div class="date">
1295            04/08/2026        </div>
1296        <div class="entradeta ddbbtext"></div>            </div>
1297</li><li class="article-item col-md-12"><div class="tplDefault ">
1298                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-definitiva-del-projecte-per-a-la-installacio-solar-fotovoltaica-a-la-sala-sindicat.html" target="_blank" title ='Obre-ho en una finestra nova'>
1299        <p class="subtitle">Aprovació definitiva del Projecte per a la instal·lació solar fotovoltaica a la Sala Sindicat</p>
1300    </a>
1301                <div class="date">
1302            23/07/2026        </div>
1303        <div class="entradeta ddbbtext"></div>            </div>
1304</li><li class="article-item col-md-12"><div class="tplDefault ">
1305                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/pla-igualtat-genere-a-la-comarca-del-bages.html" target="_blank" title ='Obre-ho en una finestra nova'>
1306        <p class="subtitle">Pla Igualtat Gènere a la comarca del Bages</p>
1307    </a>
1308                <div class="date">
1309            25/06/2026        </div>
1310        <div class="entradeta ddbbtext"></div>            </div>
1311</li><li class="article-item col-md-12"><div class="tplDefault ">
1312                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/pla-de-transicio-energetica-cap-a-un-2050-neutre-en-emissions.html" target="_blank" title ='Obre-ho en una finestra nova'>
1313        <p class="subtitle">Pla de Transició Energètica cap a un 2050 neutre en emissions</p>
1314    </a>
1315                <div class="date">
1316            13/02/2026        </div>
1317        <div class="entradeta ddbbtext"></div>            </div>
1318</li><li class="article-item col-md-12"><div class="tplDefault ">
1319                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/projecte-actuacio-especifica-del-cortes.html" target="_blank" title ='Obre-ho en una finestra nova'>
1320        <p class="subtitle">Projecte actuació específica  del CORTÉS</p>
1321    </a>
1322                <div class="date">
1323            13/01/2026        </div>
1324        <div class="entradeta ddbbtext"></div>            </div>
1325</li><li class="article-item col-md-12"><div class="tplDefault ">
1326                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-inicial-del-pla-director-del-clavegueram-de-balsareny.html" target="_blank" title ='Obre-ho en una finestra nova'>
1327        <p class="subtitle">Aprovació inicial del  Pla Director del Clavegueram de Balsareny</p>
1328    </a>
1329                <div class="date">
1330            15/12/2025        </div>
1331        <div class="entradeta ddbbtext"></div>            </div>
1332</li><li class="article-item col-md-12"><div class="tplDefault ">
1333                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-inicial-del-projecte-per-a-la-reduccio-de-la-densitat-de
1333-larbrat-i-estassada-del-sotabosc-en-la-franja-exterior-de-proteccio-de-la-colonia-soldevila.html" target="_blank" title ='Obre-ho en una finestra nova'>
1334        <p class="subtitle">Aprovació inicial del Projecte per a la reducció de la densitat de l'arbrat i estassada del sotabosc en la franja exterior de protecció de la Colònia Soldevila</p>
1335    </a>
1336                <div class="date">
1337            24/10/2025        </div>
1338        <div class="entradeta ddbbtext"></div>            </div>
1339</li><li class="article-item col-md-12"><div class="tplDefault ">
1340                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-inicial-del-projecte-per-a-la-renovacio-del-passeig-historic-del-carrer-carrilet.html" target="_blank" title ='Obre-ho en una finestra nova'>
1341        <p class="subtitle">Aprovació inicial del Projecte per a la renovació del passeig històric del carrer Carrilet</p>
1342    </a>
1343                <div class="date">
1344            23/09/2025        </div>
1345        <div class="entradeta ddbbtext"></div>            </div>
1346</li><li class="article-item col-md-12"><div class="tplDefault ">
1347                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/aprovacio-inicial-projecte-basic-i-executiu-per-la-reforma-amb-canvi-dus-per-centre-atencio-primaria-a-la-planta-baixa-del-carrer-llevant-1-3.html" target="_blank" title ='Obre-ho en una finestra nova'>
1348        <p class="subtitle">Aprovació inicial projecte bàsic i executiu per la reforma amb canvi d'ús per centre atenció primària a la planta baixa del carrer Llevant 1-3</p>
1349    </a>
1350                <div class="date">
1351            12/08/2025        </div>
1352        <div class="entradeta ddbbtext"></div>            </div>
1353</li><li class="article-item col-md-12"><div class="tplDefault ">
1354                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/pla-local-de-joventut.html" target="_blank" title ='Obre-ho en una finestra nova'>
1355        <p class="subtitle">Pla Local de Joventut</p>
1356    </a>
1357                <div class="date">
1358            26/01/2023        </div>
1359        <div class="entradeta ddbbtext"></div>            </div>
1360</li><li class="article-item col-md-12"><div class="tplDefault ">
1361                    <a href="https://www.balsareny.cat/ajuntament/plans-projectes-campanyes-i-programes/document-unic-de-proteccio-civil-municipal.html" target="_blank" title ='Obre-ho en una finestra nova'>
1362        <p class="subtitle">Document Únic de Protecció Civil Municipal</p>
1363    </a>
1364                <div class="date">
1365            13/08/2021        </div>
1366        <div class="entradeta ddbbtext"></div>            </div>
1367</li>    </ul>
1368    <div class="pager newsletter-hidden"></div></div>
1369                                </div>
1370<div class="hideTablets">
1371                            </div>
1372<div id="share"><div class="js-widget o-widget clearfix boxBX  default "  >  <div class="o-widget-wrapper clearfix default-BX   row " ><div class="o-widget-container ">
1372<div class="o-share o-share--icones_rodones">
1373    
1374    <div class="o-share__list">
1375                    <a
1376                class="o-share__link o-share__link--facebook"
1377                href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fbalsareny.net%2Fajuntament%2Fplans-projectes-campanyes-i-programes"
1378                target="_blank"
1379                rel="noopener"
1380                title="Facebook"
1381            >
1382                <span class="o-share__icon" aria-hidden="true">
1383                    <i class="fa-brands fa-facebook-f"></i>
1384                </span>
1385                <span class="visually-hidden">Facebook</span>
1386            </a>
1387                    <a
1388                class="o-share__link o-share__link--x"
1389                href="https://twitter.com/intent/tweet?text=Plans%2C%20projectes%2C%20campanyes%20i%20programes&amp;url=https%3A%2F%2Fbalsareny.net%2Fajuntament%2Fplans-projectes-campanyes-i-programes"
1390                target="_blank"
1391                rel="noopener"
1392                title="X"
1393            >
1394                <span class="o-share__icon" aria-hidden="true">
1395                    <i class="fa-brands fa-x-twitter"></i>
1396                </span>
1397                <span class="visually-hidden">X</span>
1398            </a>
1399            </div>
1400</div>
1401</div>  </div></div></div>
1402<span class="updated">Darrera actualització: 11.06.2021 | 12:15</span>
1403                </div>
1404    </div>
1405                </div>
1406            </div>
1407        </main>
1408        <footer id="footer-content" tabindex="-1">
1409            <div class="footer">
1410    <div class="shortcuts">
1411    <div class="container-xl">            
1412        <div class="featuredItem responsiveHeight">
1413    <h2 class="title">RSS</h2>
1414    <p class="subtitle">L'actualitat a un clic</p>
1415    <ul id="cm_rss">
1416        <li style="background-image: url('/front/view/images/ico_16_rss.png');">
1417    <a href="/rss/11">
1418           Notícies    </a>
1419</li>
1420<li style="background-image: url('/front/view/images/ico_16_rss.png');">
1421    <a href="/rss/12">
1422           Agenda    </a>
1423</li>
1424<li style="background-image: url('/front/view/images/ico_16_rss.png');">
1425    <a href="/rss/13">
1426           Avisos    </a>
1427</li>
1428<li style="background-image: url('/front/view/images/ico_16_rss.png');">
1429    <a href="/rss/23">
1430           Convocatòries personal    </a>
1431</li>
1432<li style="background-image: url('/front/view/images/ico_16_rss.png');">
1433    <a href="/rss/14">
1434           Publicacions    </a>
1435</li>
1436    </ul>
1437</div>
1438<div class="featuredItem responsiveHeight">
1439    <h2 class="title">Adreces i telèfons</h2>
1440    
1441    <img width="96" height="96" src="/front/view/images/icons/plugin_home.png" alt="">
1442
1443    <p class="elem_button">
1444        <a href="/adreces-i-telefons" aria-label="Adreces i telèfons">
1445            Accedeix        </a>
1446    </p>
1447</div>
1448<div class="featuredItem">
1449    <h2 class="title">Meteo</h2>
1450    <div id="cm_meteocat">
1451        <ul class="bxslider">
1452            <li>
1453    Dissabte, 3 d’octubre    <img width="80" height="80"
1454        alt="entre poc i mig ennuvolat"
1455        src="/front/view/images/meteocat/nuvolina.png"
1456    >
1457    <p>
1458        T.Màx: 25&deg;
1459        <br>
1460        T.Min: 13&deg;
1461    </p>
1462            <p>
1463            Tarda
1464            <img alt="entre mig i molt ennuvolat" width="24" height="24"
1465                src="/front/view/images/meteocat/nuvol.png"
1466            >
1467        </p>
1468    </li>
1469<li>
1470    Diumenge, 4 d’octubre    <img width="80" height="80"
1471        alt="entre mig i molt ennuvolat"
1472        src="/front/view/images/meteocat/nuvol.png"
1473    >
1474    <p>
1475        T.Màx: 23&deg;
1476        <br>
1477        T.Min: 14&deg;
1478    </p>
1479            <p>
1480            Tarda
1481            <img alt="ruixat" width="24" height="24"
1482                src="/front/view/images/meteocat/pluja.png"
1483            >
1484        </p>
1485    </li>
1486        </ul>
1487        <div class="outside">
1488            <p><span id="slider-prev"></span><span id="slider-next"></span></p>
1489        </div>
1490
1491    </div>
1492</div>
1493<div class="featuredItem responsiveHeight">
1494    <h2 class="title">Butlletí digital</h2>
1495    <img width="96" height="96" src="/front/view/images/icons/plugin_newsletter.png" alt="">
1496    <p class="elem_button">
1497        <a href="/actualitat/butlleti-digital" aria-label="Butlletí digital">
1498            Subscriu-te        </a>
1499    </p>
1500</div>
1501<div id="cm_planol" class="featuredItem responsiveHeight">
1502    <h2 class="title">Plànol / Carrers</h2>
1503
1504    <img width="96" height="96" src="/front/view/images/icons/plugin_map.png" alt="">
1505
1506    <p class="elem_button">
1507        <a href="/municipi/planol--guia-de-carrers" aria-label="Plànol">
1508            Accedeix        </a>
1509    </p>
1510</div>
1511    </div>
1512</div>
1513    <div class="hightlights">
1514        <div class="container-xl">
1515                    </div>
1516    </div>
1517    <nav class="menu" aria-label="Peu de menú">
1518        <ul class="container-xl sitemap">
1519            <li class="page-1 Inferior">  <a class="page-1" href="/ajuntament" target="_self" >Ajuntament  </a><ul id="footer-menu-1"><li class="subMenuPage-8">  <a class="subMenuPage-8" href="/ajuntament/govern" target="_self" >Govern  </a></li><li class="subMenuPage-142">  <a class="subMenuPage-142" href="https://www.seu-e.cat/ca/web/balsareny/govern-obert-i-transparencia/accio-de-govern-i-normativa/accio-de-govern-i-grups-politics/actes-de-ple" target="_blank" rel="noopener noreferrer" >Plens municipals  </a></li><li class="subMenuPage-24">  <a class="subMenuPage-24" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/gestio-economica" target="_blank" rel="noopener noreferrer" >Pressupostos i gestió econòmica  </a></li><li class="subMenuPage-144">  <a class="subMenuPage-144" href="https://www.seu-e.cat/web/balsareny/govern-obert-i-transparencia/informacio-institucional-i-organitzativa/empleats-publics/plantilla-empleats-publics" target="_blank" rel="noopener noreferrer" >Plantilla empleats públics  </a></li><li class="subMenuPage-16">  <a class="subMenuPage-16" href="/ajuntament/plans-projectes-campanyes-i-programes" target="_self" >
1519Plans, projectes, campanyes i programes  </a></li><li class="subMenuPage-18">  <a class="subMenuPage-18" href="/ajuntament/anuncis-edictes" target="_self" >Anuncis / Edictes  </a></li><li class="subMenuPage-200">  <a class="subMenuPage-200" href="/ajuntament/convocatories-de-personal" target="_self" >Convocatòries de personal  </a></li><li class="subMenuPage-184">  <a class="subMenuPage-184" href="/ajuntament/subvencions" target="_self" >Subvencions  </a></li><li class="subMenuPage-26">  <a class="subMenuPage-26" href="/ajuntament/perfil-de-contractant" target="_self" >Perfil de contractant  </a></li><li class="subMenuPage-126">  <a class="subMenuPage-126" href="/ajuntament/normativa" target="_self" >Normativa  </a></li><li class="subMenuPage-132">  <a class="subMenuPage-132" href="/ajuntament/altres-administracions" target="_self" >Altres administracions  </a></li><li class="subMenuPage-122">  <a class="subMenuPage-122" href="/ajuntament/que-es-la-seu-electronica" target="_self" >Seu electrònica  </a></li><li class="subMenuPage-123">  <a class="subMenuPage-123" href="/ajuntament/transparencia" target="_self" >Transparència  </a></li></ul></li><li class="page-10 Inferior">  <a class="page-10" href="/serveis-i-tramits" target="_self" >Serveis i tràmits  </a><ul id="footer-menu-10"><li class="subMenuPage-208">  <a class="subMenuPage-208" href="/serveis-i-tramits/notificacions-electroniques" target="_self" >Notificacions electròniques  </a></li><li class="subMenuPage-209">  <a class="subMenuPage-209" href="/serveis-i-tramits/carpeta-ciutadana" target="_self" >Carpeta ciutadana  </a></li><li class="subMenuPage-82">  <a class="subMenuPage-82" href="/serveis-i-tramits/oficines-municipals" target="_self" >Oficines municipals  </a></li><li class="subMenuPage-140">  <a class="subMenuPage-140" href="/serveis-i-tramits/cataleg-de-serveis" target="_self" >Catàleg de Serveis  </a></li><li class="subMenuPage-31">  <a class="subMenuPage-31" href="/serveis-i-tramits/tramits-i-gestions" target="_self" >Tràmits i gestions  </a></li><li class="subMenuPage-133">  <a class="subMenuPage-133" href="/serveis-i-tramits/finestreta-unica-empresarial-fue" target="_self" >Finestreta Única Empresarial (FUE)  </a></li><li class="subMenuPage-182">  <a class="subMenuPage-182" href="/serveis-i-tramits/verificacio-de-documents" target="_self" >Verificació de documents  </a></li><li class="subMenuPage-32">  <a class="subMenuPage-32" href="/serveis-i-tramits/impostos" target="_self" >Impostos  </a></li><li class="subMenuPage-88">  <a class="subMenuPage-88" href="/serveis-i-tramits/factura-electronica" target="_self" >Factura electrònica  </a></li></ul></li><li class="page-2 Inferior">  <a class="page-2" href="/municipi" target="_self" >Municipi  </a><ul id="footer-menu-2"><li class="subMenuPage-34">  <a class="subMenuPage-34" href="/municipi/com-arribar-hi" target="_self" >Com arribar-hi  </a></li><li class="subMenuPage-36">  <a class="subMenuPage-36" href="/municipi/planol--guia-de-carrers" target="_self" >Plànol / Guia de carrers  </a></li><li class="subMenuPage-50">  <a class="subMenuPage-50" href="/municipi/festes-fires-i-mercats" target="_self" >Festes, fires i mercats  </a></li><li class="subMenuPage-129">  <a class="subMenuPage-129" href="/municipi/rutes" target="_self" >Rutes  </a></li><li class="subMenuPage-41">  <a class="subMenuPage-41" href="/municipi/llocs-dinteres" target="_self" >Llocs d'interès  </a></li><li class="subMenuPage-145">  <a class="subMenuPage-145" href="/municipi/nuclis" target="_self" >Nuclis  </a></li><li class="subMenuPage-151">  <a class="subMenuPage-151" href="/municipi/sol-industrial" target="_self" >Sòl industrial  </a></li><li class="subMenuPage-3">  <a class="subMenuPage-3" href="/municipi/guia-del-municipi" target="_self" >Guia del municipi  </a></li><li class="subMenuPage-7">  <a class="subMenuPage-7" href="/municipi/informacio-del-municipi" target="_self" >Informació del municipi  </a></li><li class="subMenuPage-35">  <a class="subMenuPage-35" href="/municipi/transport-public" target="_self" >Transport públic  </a></li></ul></li><li class="page-156 Inferior">  <a class="page-156" href="/escoles-i-biblioteca" target="_self" >Escoles i biblioteca  </a><ul id="footer-menu-156"><li class="subMenuPage-205">  <a class="subMenuPage-205" href="/escoles-i-biblioteca/aula-activa" target="_self" >Aula Activa  </a></li><li class="subMenuPage-157">  <a class="subMenuPage-157" href="/escoles-i-biblioteca/escola-de-musica-mn-joan-bajona" target="_self" >Escola de música Mn Joan Bajona  </a></li><li class="subMenuPage-155">  <a class="subMenuPage-155" href="/escoles-i-biblioteca/escola-de-teatre-mn-joan-bajona" target="_self" >Escola de teatre Mn Joan Bajona  </a></li><li class="subMenuPage-158">  <a class="subMenuPage-158" href="/escoles-i-biblioteca/llar-dinfants-municipal-sant-marc" target="_self" >Llar d'infants municipal Sant Marc  </a></li><li class="subMenuPage-159">  <a class="subMenuPage-159" href="/escoles-i-biblioteca/biblioteca-municipal-pere-casaldaliga" target="_self" >Biblioteca municipal Pere Casaldàliga  </a></li></ul></li><li class="page-4 Inferior">  <a class="page-4" href="/actualitat" target="_self" >Actualitat  </a><ul id="footer-menu-4"><li class="subMenuPage-53">  <a class="subMenuPage-53" href="/actualitat/noticies" target="_self" >Notícies  </a></li><li class="subMenuPage-56">  <a class="subMenuPage-56" href="/actualitat/butlleti-municipal" target="_self" >Butlletí municipal  </a></li><li class="subMenuPage-150">  <a class="subMenuPage-150" href="/actualitat/participacio-ciutadana" target="_self" >Participació ciutadana  </a></li><li class="subMenuPage-55">  <a class="subMenuPage-55" href="/actualitat/butlleti-digital" target="_self" >Butlletí digital  </a></li><li class="subMenuPage-57">  <a class="subMenuPage-57" href="/actualitat/rss" target="_self" >Rss  </a></li></ul></li>        </ul>
1520    </nav>
1521    <div class="links">
1522        <div class="container-xl">
1523            <div class="row">
1524                <div class="xxss col-md-6 col-sm-6 col-lg-6 middle">                
1525                        <span class="titol">Xarxes socials:</span>
1526  
1527    <a target="_blank" aria-label="Twitter" href="https://twitter.com/ajbalsareny" title="Obre en finestra nova: Twitter">
1528        <span style="display: none">Twitter</span>
1529        <img src="/front/view/images/icons/social/twitter.png" alt="Twitter" width="32" height="32">
1530    </a>
1531  
1532    <a target="_blank" aria-label="Facebook" href="https://www.facebook.com/ajbalsareny" title="Obre en finestra nova: Facebook">
1533        <span style="display: none">Facebook</span>
1534        <img src="/front/view/images/icons/social/facebook.png" alt="Facebook" width="32" height="32">
1535    </a>
1536  
1537    <a target="_blank" aria-label="Instagram" href="https://www.instagram.com/ajbalsareny/" title="Obre en finestra nova: Instagram">
1538        <span style="display: none">Instagram</span>
1539        <img src="/front/view/images/icons/social/instagram.png" alt="Instagram" width="32" height="32">
1540    </a>
1541  
1542    <a target="_blank" aria-label="Whatsapp" href="https://whatsapp.com/channel/0029VaDpBOR1yT21e6pB7n2o" title="Obre en finestra nova: Whatsapp">
1543        <span style="display: none">Whatsapp</span>
1544        <img src="/front/view/images/icons/social/whatsapp.png" alt="Whatsapp" width="32" height="32">
1545    </a>
1546                </div>
1547                <div class="col-md-6 col-sm-6 col-lg-6 middle">
1548                    <nav class="menu"><ul id="Inferior2"><li class="page-63">  <a href="/altres-continguts/credits" target="_self" >Crèdits  </a></li><li class="page-62">  <a href="/altres-continguts/contactar" target="_self" >Contactar  </a></li><li class="page-60">  <a href="/altres-continguts/proteccio-de-dades" target="_self" >Protecció de dades  </a></li><li class="page-59">  <a href="/altres-continguts/avis-legal" target="_self" >Avís legal  </a></li><li class="page-61">  <a href="/altres-continguts/accessibilitat" target="_self" >Accessibilitat  </a></li></ul></nav>                </div>
1549            </div>
1550        </div>
1551    </div>
1552    <div class="contact">
1553        <div class="container-xl">
1554            <div class="row">
1555                <address class="address col-md-6 col-sm-6 col-lg-6">
1556    <div class="title">
1557        Ajuntament de Balsareny    </div>
1558    Plaça de l'Ajuntament, 2<br>08660 Balsareny<br>Tel. 938 396 100<br>NIF P0801800D<br></address><div class="diba col-md-6 col-sm-6 col-lg-6" id="diba-partner">
1559    <div class="title">
1560        Amb la col·laboració de:    </div>
1561    <a href="http://diba.cat/" target="_blank" aria-label="Anar a la web Diputació de Barcelona" title="Obre en finestra nova: Diputació de Barcelona">
1562        <span style="display: none">Diputació de Barcelona</span>
1563        <img src="/front/view//images/logoDiba/Negre.svg" alt="Diputació de Barcelona" class="logo-diba">
1564    </a>
1565</div>            </div>
1566        </div>
1567    </div>
1568</div>
1569        </footer>
1570        <!-- Llibreries de tercers + js propis registrats a AssetManager (jQuery primer) -->
1571<script src="/front/view/js/bower_components/jquery/dist/jquery.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1571
1571
1572<script src="/front/view/js/bower_components/bootstrap/dist/js/bootstrap.bundle.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1572
1572
1573<script src="/front/view/js/bower_components/bxslider-4/dist/jquery.bxslider.js?ver=1790951099"></script>
vendor: 1 bytes, line 1573
1573
1574<script src="/front/view/js/bower_components/jscal/index.js?ver=1790951099"></script>
vendor: 1 bytes, line 1574
1574
1575<script src="/common/bower_components/select2/dist/js/select2.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1575
1575
1576<script src="/common/bower_components/select2/dist/js/i18n/ca.js?ver=1790951099"></script>
vendor: 1 bytes, line 1576
1576
1577<script src="/common/bower_components/strength.js/src/strength.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1577
1577
1578<script src="/front/view/js/bower_components/masonry-layout/dist/masonry.pkgd.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1578
1578
1579<script src="/front/view/js/constants.js?ver=1790951099"></script>
vendor: 1 bytes, line 1579
1579
1580<script src="/front/view/js/functions.js?ver=1790951099"></script>
vendor: 1 bytes, line 1580
1580
1581<script src="/front/view/js/functions/footer.js?ver=1790951099"></script>
vendor: 1 bytes, line 1581
1581
1582<script src="/front/view/js/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js?ver=1790951099"></script>
vendor: 1 bytes, line 1582
1582
1583<script src="/front/view/js/bower_components/jquery.prettyPhoto/index.js?ver=1790951099"></script>
vendor: 1 bytes, line 1583
1583
1584<script>
1585    $(document).ready(function(){
1586                    $("a[rel^='prettyPhoto']").prettyPhoto();
1587            $("a[rel^='prettyFrame']").prettyPhoto();
1588            });
1589</script>
vendor: 1 bytes, line 1589
1589
1590<script>
1591        var TWITTER = true;
1592            var FACEBOOK = true;
1593        $(window).on("load", function() {
1594        start();
1595    });
1596        $(document).ready(function() {
1597        if (typeof articlesId !== 'undefined') {
1598            var today = new Date();
1599                        var date = today
1600                        articlesId.push('internal_calendar');
1601
1602            var oneYearAfter = new Date();
1603            oneYearAfter.setDate(oneYearAfter.getDate() + 365);
1604            for (id in articlesId) {
1605                Calendar.setup({
1606                    id: articlesId[id],
1607                    cont: "dv_calendar_" + articlesId[id],
1608                    fdow: 1,
1609                    date: date,
1610                    noScroll: true,
1611                    bottomBar: false,
1612                    max: oneYearAfter,
1613                    animation: false,
1614                    titleFormat: "%B %Y",
1615                    dateInfo: getDateInfo
1616                });
1617                setEqualContentColumns();
1618            }
1619        }
1620    });
1621
1622        
1623    // Initialize Select2 with icon support for category filter
1624    $(document).ready(function() {
1625        if ($('#categoryFilter').length) {
1626            $('#categoryFilter').select2({
1627                templateResult: function(option) {
1628                    if (!option.id) return option.text;
1629                    var icon = $(option.element).data('icon');
1630                    if (!icon) return option.text;
1631                    return $('<span><img src="' + icon + '" style="width: 16px; height: 16px; margin-right: 6px; vertical-align: middle;"> ' + option.text + '</span>');
1632                },
1633                templateSelection: function(option) {
1634                    if (!option.id) return option.text;
1635                    var icon = $(option.element).data('icon');
1636                    if (!icon) return option.text;
1637                    return $('<span><img src="' + icon + '" style="width: 16px; height: 16px; margin-right: 6px; vertical-align: middle;"> ' + option.text + '</span>');
1638                },
1639                allowHtml: true
1640            });
1641        }
1642    });
1643</script>
1643
1644        <!-- CSS final-->
1645
1646        
1646<script>
1647          const css = "";
1648          const style = document.createElement('style');
1649          style.textContent = css;
1650          document.head.appendChild(style);
1651        </script>
1651
1652
1653        <!-- Start Modal views-->
1654        
1655        <div class="modal fade" id="videoModal" tabindex="-1" role="dialog"  aria-hidden="true">
1656    <div class="modal-dialog modal-dialog-centered" role="document">
1657        <div class="modal-content">
1658            <div class="modal-header">
1659                <div class="title-head"></div>
1660            </div>
1661            <div class="modal-body">
1662                <div class="tiktok-div-embed"></div>
1663                <iframe id="iframeVideo" title="Vídeo" class="iframeVideo" allowfullscreen></iframe>
1664
1665            </div>
1666            <div class="modal-footer">
1667                <span id="titleVideo" class="titleVideo"></span>
1668                <a id="closeModalVideo" class="close" href="javascript:void(0)" data-bs-dismiss="modal"><span style="display: none">X</span></a>
1669
1670            </div>
1671        </div>
1672    </div>
1673</div>        <div class="modal fade" id="pdfModal" tabindex="-1" role="dialog"  aria-hidden="true">
1674    <div id="documentDialog" class="modal-dialog modal-dialog-centered" role="document">
1675        <div class="modal-content">
1676            <div class="modal-header">
1677                <div class="title-head"></div>
1678            </div>
1679            <div class="modal-body">
1680                <iframe id="iframePdf" title='Document' class="pdfview" style="width: 100%; height: 100%"></iframe>
1681            </div>
1682            <div class="modal-footer">
1683                <span id="titlePdf" class="titlePdf"></span>
1684                <a id="closeModalPDF" class="close" href="javascript:void(0)"><span style="display: none">X</span></a>
1685            </div>
1686        </div>
1687    </div>
1688</div>        <!-- End Modal views -->
1689        
1689<script src="/front/view/js/endScript.js?ver=1790951099"></script>
1689
1690        <!-- Només activar per desenvolupament
1691        
1691<script src="../../../node_modules/axe-core/axe.js"></script>
1691
1692        
1692<script src="../../../dist/my-first-webpack.bundle.js"></script>
1692
1693        -->
1694                
1694<script>
1695            $(document).ready(function () {
1696                startClock(1790951100);
1697                if (typeof (callMenuAfterJQueryLoaded) == "function") {
1698                    callMenuAfterJQueryLoaded();
1699                }
1700                
1701                datepickerInit();
1702                carouselControlSmall();
1703
1704                if (typeof (callMenuBeforeJQueryLoaded) == "function") {
1705                    callMenuBeforeJQueryLoaded();
1706                }
1707
1708                if (typeof (callMenuBeforeTopJQueryLoaded) == "function") {
1709                    callMenuBeforeTopJQueryLoaded();
1710                }
1711                addAttributesDivVcards();
1712                modalsImage();
1713                modalsPdf();
1714                translateWeb();
1715                var carousel = $('#carouselControls');
1716                carousel.on('slide.bs.carousel', function (event) {
1717                    toSlideImage(event);
1718                });
1719                /** Només activar per desenvolupament
1720                axe.configure({
1721                    locale: {
1722                        lang: 'es',
1723                    }
1724                });
1725
1726                axe.run().then(results => {
1727                        if (results.violations.length) {
1728                            console.log(results.violations);
1729                            throw new Error('Accessibility issues found');
1730                        }
1731                    })
1732                    .catch(err => {
1733                        console.log('Something bad happened:', err.message);
1734                    });
1735                */
1736            });
1737
1738            $(window).resize(function() {
1739                equalHeightIconTime();
1740            })
1741        </script>
1741
1742                    </body>
1743</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.