Sempre hi som

El metro i els busos tenen càmeres de videovigilància en temps real perquè viatgis amb seguretat.

Gràcies als sistemes de videovigilància, els professionals de TMB vetllen per la teva seguretat durant totes les hores del servei, tant a metro com a bus.

Videovigilància al metro

La xarxa de metro compta amb gairebé 10.000 càmeres que estan repartides per trens i estacions i també a cotxeres, tallers i altres dependències de TMB.

Aquestes càmeres permeten veure el que està passant en directe quan un usuari prem el botó SOS o el d’informació en un tren o en una estació. Les imatges captades per aquests dispositius de videovigilància es reben al Centre de Control de Metro i al Centre de Seguretat i Protecció Civil.

Videovigilància al bus

La xarxa de bus disposa de més de 4.500 càmeres que actualment cobreixen pràcticament tot el servei regular de la flota.

Aquest sistema de videovigilància permet al Centre de Control de Seguretat de Bus visualitzar en temps real imatges de l’interior dels vehicles, així com descarregar al moment qualsevol de les gravacions.

Imatges a disposició dels cossos de seguretat

Les imatges captades per aquests dispositius de videovigilància tant de la xarxa de bus com la de metro queden enregistrades i poden ser revisades quan els Mossos d’Esquadra o altres cossos de seguretat ho requereixin.

Millor AMBici!

La bicicleta elèctrica metropolitana

Més de 200 estacions que et connecten al transport i a altres municipis, i més de 2.500 bicicletes 100% elèctriques perquè pedalegis còmodament fins al teu destí.

De casa a la feina

Moure’s millor és desplaçar-se de forma saludable mantenint un estil de vida actiu, amb bicicletes 100% elèctriques que incorporen assistència a la pedalada.

Per connectar amb el transport públic

Moure’s millor és desplaçar-se de forma econòmica i evitar embussos. Connecta amb altres opcions de transport públic, viatja per 15 municipis de l’àrea metropolitana i, si vols, pedaleja fins arribar a Barcelona.

Per una ciutat sense fum

Moure’s millor és desplaçar-se de forma sostenible, amb zero emissions, i reduir el soroll de les ciutats i la contaminació de l’aire.

Quan viatgis en metro, fes-ho de manera segura

Nosaltres vetllem per la teva seguretat, tu evites accions que posen en perill la teva integritat i el bon funcionament del servei.

No baixis a les vies

Mai no baixis a les vies. No ho facis sota cap concepte.

  • Si has de creuar a l’altra andana, fes-ho utilitzant les escales o els ascensors.
  • Si t’ha caigut algun objecte a la via, acciona l’intèrfon SOS de l’andana i t’ajudarem a recuperar-lo quan sigui possible.
  • Actua cívicament, respecta les instal·lacions.

Baixar a la via, no és la via. Comporta risc de mort.

No pugis al tren quan s’estiguin tancant les portes

Quan s’activa l’avís de tancament de portes, no es pot entrar ni sortir del vagó.

  • Si arribes a l’andana i el tren fa sonar l’avís de tancament de portes (sonora i visual), és imprescindible que el respectis i esperis el següent tren.

Un cop s’inicï l’avís sonor/visual, ja no s’hi pot pujar.

  • Si ets a bord del tren i t’adones tard que has de baixar, cal que esperis a la següent estació. Quan hi arribis, podràs baixar i tornar enrere fins on volies anar.

Un cop s’inicï l’avís sonor/visual, ja no s’hi pot baixar.

  • Mai no intentis forçar les portes del tren. Hi podries quedar atrapat i patir un accident molt greu.

Si et trobes malament al metro, demana ajuda

Tant si ets a l’andana com dins el vagó, fer servir l’intèrfon SOS. El metro disposa de 2.300 intèrfons distribuïts a totes les andanes i vestíbuls de les estacions.

  • Quan comencis a trobar-te malament, surt del tren en el possible i demana ajuda a l’intèrfon SOS de l’andana, o mira si algú ho pot fer per tu.
  • Si els símptomes apareixen abans de pujar al tren, queda’t a l’andana i prem el botó SOS de l’intèrfon.
  • Si sospites que una persona està patint una aturada cardíaca, localitza el desfibril·lador a l’andana i segueix les instruccions. La xarxa de metro està cardioprotegida.

Més informació

Trobaràs més informació a Com es viatja en metro.

Posa't a la seva pell, no al seu lloc

Respecta la prioritat absoluta al transport públic.

Atenció!

Al bus i al metro, els espais reservats per a cadires de rodes són reservats per a cadires de rodes. A més, les persones amb discapacitat o mobilitat reduïda tenen prioritat absoluta per seure als seients d'ús preferent i per utilitzar l'ascensor.

Posa't a la seva pell, no al seu lloc.

Al bus i al metro, dona prioritat absoluta a qui ho necessiti

Des de Transports Metropolitans de Barcelona i l'Institut Municipal de Persones amb Discapacitat fomentem l'ús correcte dels seients preferents, els espais reservats per a cadires de rodes i els ascensors de la xarxa de transport públic de la ciutat.

Donant més visibilitat al col·lectiu de persones amb mobilitat reduïda i persones amb discapacitat, esperem arribar a les consciències de les persones usuàries que no respecten aquests espais, i no sempre de manera intencionada.

Els testimonis d'aquesta campanya són reals, ja que la seva problemàtica també és molt real. 

 

 

La comunitat TMB supera el milió i mig de seguidors

La comunitat d’usuaris de TMB que ens segueixen a les xarxes socials i a JoTMBé ja sumen més d’un milió i mig de persones.

Xarxes socials i JoTMBé

A TMB estem d'enhorabona! La nostra comunitat d’usuaris continua creixent i les persones connectades a través dels nostres perfils a les xarxes socials i a JoTMBé ja són més d’un milió i mig.

Sou molts els que ens seguiu a Instagram, Facebook, X, LinkedIn, Spotify, YouTube i WeChat per estar al dia de totes les novetats, serveis i iniciatives que posem en marxa. I, des del 31 de gener de 2025, també a TikTok.

A més, a través de JoTMBé, milers de vosaltres gaudiu d’informació actualitzada del servei, avantatges exclusius i compreu i recarregueu títols de transport amb total agilitat. També els subscriptors del blog Hola Barcelona aprofiteu les millors propostes i consells per no perdre-us res de la ciutat.

Volem agrair-vos la confiança i suport. La vostra participació és clau per continuar millorant dia a dia i oferir-vos el millor servei possible.

Ens queda molt de camí per recórrer junts!

Suma’t a la comunitat de TMB i viu el transport públic com mai abans!

Segueix-nos a les nostres xarxes socials, registra’t a JoTMBé i subscriu-te al butlletí del blog Hola Barcelona per descobrir tot el que tenim preparat per a tu. Estaràs al dia de les novetats, podràs participar en concursos, rebràs consells per als teus trajectes, accediràs a promocions exclusives i molts més avantatges de formar-ne part.

Dansa Metropolitana al metro

Transformem la quotidianitat del metro en una experiència artística i emocional que connecti els usuaris amb un instant de contemplació.

Quan: 15.03.2025


On: Estació Universitat L1


Accés: Entrada gratuïta*

*Validant el títol de transport

El 15 de març a les 12h, els usuaris i usuàries del metro poden gaudir d’una experiència artística en viu. Un any més, la Fundació TMB col·labora amb el festival Dansa Metropolitana per traslladar l’emoció de la dansa al suburbà. Concretament, al vestíbul inferior de l’estació Universitat L1.

A l'espectacle (Un attimo), de la companyia Paloma Muñoz - Siberia Danza, els ballarins es mouen al so de la música de Mozart i creen una atmosfera que transforma l’espai a través d’un joc simple de llums i reflexos. La proposta explora la interacció dels cossos en moviment i l’entorn arquitectònic i ens convida a fer pausa de la rutina i contemplar la bellesa en un espai habitualment associat a l’estrès i la pressa. Un projecte que busca transformar la quotidianitat del metro en una experiència artística i emocional que connecti els usuaris amb un instant de contemplació.

Dansa a tots els municipis, fins al 30 de març

Del 13 al 30 de març, Dansa Metropolitana programarà funcions de dansa en diferents espais de 12 municipis de l’àrea metropolitana de Barcelona: Badalona, Barcelona, Cornellà, Granollers, l’Hospitalet, Esplugues, el Prat, Santa Coloma, Sabadell, Sant Cugat, Terrassa i Viladecans.

Enguany, el festival posa l'accent en la connexió íntima entre el so i el moviment i explora com la vibració crea diàlegs únics entre cos i música. Aquesta interacció esdevé un llenguatge artístic que transcendeix disciplines i suscita emocions compartides. Perquè la dansa no només es veu, es viu, i és en aquest moviment compartit on trobem la vibració que ens uneix.

Zurich Marató de Barcelona

T'expliquem com arribar-hi!

Quan: 16.03.2025


On: Des del passeig de Gràcia


Si participes a la Marató Barcelona, arriba-hi amb transport públic. A TMB t'hi portem.

Recomanem accedir al punt de sortida amb metro a les estacions Catalunya (L1 i L3) i Passeig de Gràcia (L2, L3 i L4). També tens l'opció d'arribar-hi en FGC.

Consulta les afectacions al servei de bus i les recomanacions de transport a l'avís de servei específic.

Disposes de Vull anar per trobar altres opcions de transport.

Fins a primera hora de la tarda de diumenge 16 de març, aconsellem fer servir el metro com a mitjà de transport principal. L'amplitud del recorregut de la Marató i la durada de la cursa comportarà alteracions en el servei d'una seixantena de línies de bus.

Bitllet de transport exclusiu

Per a aquesta edició, s'han editat 25.000 bitllets senzills, que s'inclouen a la bossa dels corredors fins a esgotar-ne les existències.

TMB, amb els grans esdeveniments de la ciutat

La Zurich Marató Barcelona, amb 27.000 participants, és una de les curses més importants que se celebren anualment a la ciutat.

TMB, com a principal operador de transport públic de Barcelona i la seva àrea metropolitana, treballa en l'impacte que una celebració d'aquesta magnitud pot tenir a la xarxa de transport. A més a més, també s'implica de forma activa amb els esdeveniments, sent-hi present de forma latent i col·laborant-hi a nivell logístic i de marca.

Proves d’aptitud per als músics del metro

Nova edició de les proves de selecció per als músics aspirants a tocar als punts habilitats de la xarxa de metro.

Quan: 14.03.2025


On: Estació Universitat L2


Accés: Entrada gratuïta*

*Validant el títol de transport

El 14 de març tindrà lloc una nova edició de les proves de selecció per als músics aspirants a tocar als punts habilitats de la xarxa de metro. Transports Metropolitans de Barcelona (TMB) i l’AMUC BCN (Associació de músics i músiques del carrer i del metro de Barcelona) són els organitzadors d'aquesta convocatòria, que es durà terme al vestíbul de l'estació Universitat L2, de 8 a 20 hores.

La prova d’idoneïtat consisteix en què cada candidat haurà d’interpretar un parell de fragments de temes del seu repertori, amb una durada màxima entre tres i cinc minuts. Un jurat, format per professors de música professionals, auditarà la prova i valorarà criteris com la qualitat interpretativa, la varietat de repertori, l’originalitat i la riquesa creativa de la proposta i la diversitat cultural, estilística i instrumental.

Si l’avaluació del jurat és favorable, el músic obtindrà el carnet d’associat a AMUC BCN i podrà participar en els projectes d’aquesta associació, incloent-hi les actuacions al metro.

S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda  [in template "20155#20195#1501272" at line 308, column 85]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if detallAgenda?? && 0 < detallAgend...  [in template "20155#20195#1501272" at line 308, column 1]
----
1<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
3<#assign currentURL = request.getRequestURL() /> 
4<#assign isFundacio = false> 
5<#if currentURL?contains("fundacio")> 
6	<#assign isFundacio = true> 
7</#if> 
8 
9<#function miliSeconds dateString firstDate> 
10	<#assign params = dateString?split(":")> 
11	 
12	<#if params?size == 2> 
13		<#assign param1 = params[0]> 
14		<#assign param2 = params[1]> 
15		<#assign param1 = getterUtil.getLong(param1)*3600000> 
16		<#assign param2 = getterUtil.getLong(param2)*60000> 
17		<#assign finalMilSec = param1 + param2> 
18		<#assign finalMilSecLong = getterUtil.getLong(finalMilSec)> 
19		<#assign resultLong = firstDate + finalMilSecLong> 
20		 
21		<#return resultLong> 
22	</#if> 
23</#function> 
24 
25<#--  header-image  --> 
26 
27<#if upperImage?? && upperImage.getData()?has_content> 
28	<div class="header-image"> 
29		<img src="${upperImage.getData()}" <#if upperImageAlt?? && upperImageAlt.getData()?has_content>alt="${upperImageAlt.getData()}"</#if>> 
30	</div> 
31</#if> 
32 
33 
34<#--  breadcrumbs  --> 
35 
36<div class="full-body__container breadcrumbs" style="float: unset; margin-right: auto; padding-bottom: 22px; padding-top: 22px;"> 
37	<p class="breadcrumbs__title"><@liferay.language key='header.breadcrumbs.text' />:</p> 
38	<#if liferay_portlet?has_content><@liferay.breadcrumbs /></#if> 
39</div> 
40 
41 
42<#-- TITOL I SUBTITOL  --> 
43 
44<#if titleGlobal?? && titleGlobal.getData()?has_content || subtitleGlobal?? && subtitleGlobal.getData()?has_content> 
45	<div class="full-body__container basicav2-titol-subtitol"> 
46		<#if titleGlobal?? && titleGlobal.getData()?has_content><h1>${titleGlobal.getData()}</h1></#if> 
47		<#if subtitleGlobal?? && subtitleGlobal.getData()?has_content><p>${subtitleGlobal.getData()}</p></#if> 
48	</div> 
49</#if> 
50 
51 
52<#--  bloc-info-agenda  --> 
53 
54<#if blocInfoAgenda?? && ((blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content)) && (!blocInfoAgenda.hideBlocInfoAgenda?? || !getterUtil.getBoolean(blocInfoAgenda.hideBlocInfoAgenda.getData()))> 
55	<div class="full-body__container bloc-info-agenda"> 
56		<div class="bloc-info-agenda-elements"> 
57			<#if blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content> 
58				<div class="bloc-info-agenda-element"> 
59					<#if blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()?has_content> 
60						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()}"> 
61					<#else> 
62						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/calendar.svg"> 
63					</#if> 
64					<#if blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData()?has_content && getterUtil.getBoolean(blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData())> 
65						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b><@liferay.language key='label.bloc.novetatagenda.from' /> ${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</b></p></div> 
66					<#else> 
67						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b>${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}<#if blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?has_content> <@liferay.language key="label.bloc.novetatagenda.to"/> ${blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</#if></b></p></div> 
68					</#if> 
69				</div> 
70				<hr> 
71			</#if> 
72			<#if blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content> 
73				<div class="bloc-info-agenda-element"> 
74					<#if blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()?has_content> 
75						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()}"> 
76					<#else> 
77						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/location_on.svg"> 
78					</#if> 
79					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.where"/> <b>${blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()}</b></p></div> 
80				</div> 
81				<hr> 
82			</#if> 
83			<#if blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content> 
84				<div class="bloc-info-agenda-element"> 
85					<#if blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()?has_content> 
86						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()}"> 
87					<#else> 
88						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/ticket.svg"> 
89					</#if> 
90					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.acces"/> <b>${blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()}</b></p></div> 
91				</div> 
92			</#if> 
93		</div> 
94		<#if blocInfoAgenda.textBottomBlocInfoAgenda?? && blocInfoAgenda.textBottomBlocInfoAgenda.getData()?has_content> 
95			<div class="bloc-info-agenda-bottom"> 
96				<span>${blocInfoAgenda.textBottomBlocInfoAgenda.getData()}</span> 
97			</div> 
98		</#if> 
99	</div> 
100</#if> 
101 
102<#--  text-center  --> 
103 
104<#if textCenter?? && textCenter.getData()?has_content> 
105	<div class="full-body__container text-center-basic"> 
106		${textCenter.getData()} 
107	</div> 
108</#if> 
109 
110 
111<#--  image-center  --> 
112 
113<#if imageCenter?? && imageCenter.getData()?has_content> 
114	<div class="full-body__container image-center-basic"> 
115		<img src="${imageCenter.getData()}"> 
116	</div> 
117</#if> 
118 
119 
120<#--  TEXT-CARRUSEL-IMATGES  --> 
121 
122<#if textCarruselImatges1?? && 0 < textCarruselImatges1.elementsFieldSet.getSiblings()?size && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image?? && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image.getData()?has_content && (!textCarruselImatges1.hideTextCarruselImatges?? || !getterUtil.getBoolean(textCarruselImatges1.hideTextCarruselImatges.getData()))> 
123	<#assign entriesMapList = []> 
124	<#foreach elem in textCarruselImatges1.elementsFieldSet.getSiblings()> 
125		<#if elem.elementsFieldSetFieldSet.order?has_content> 
126			<#assign currentOrder = elem.elementsFieldSetFieldSet.order.getData()> 
127		</#if> 
128		<#if !currentOrder?has_content || currentOrder == "null"> 
129			<#assign currentOrder = "99"> 
130		</#if> 
131		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSet , "order" : currentOrder?number}> 
132		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
133	</#foreach> 
134 
135	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
136	<#assign sortedEntriesRootElems = []> 
137 
138	<#foreach currEntryMap in sortedEntriesMapList> 
139		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
140	</#foreach> 
141 
142	<#assign leftContent = ""> 
143	<#if textCarruselImatges1.titleHeader?? && textCarruselImatges1.titleHeader.getData()?has_content && textCarruselImatges1.descHeader?? && textCarruselImatges1.descHeader?has_content> 
144		<#assign leftContent = "true"> 
145	</#if> 
146 
147	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
148		<#if leftContent?has_content> 
149			<div class="hero-carousel__container-banner"> 
150				<h2 class="hero-carousel-banner-alt-title"> 
151					${textCarruselImatges1.titleHeader.getData()} 
152				</h2> 
153				<p class="hero-carousel-banner-alt-desc"> 
154					${textCarruselImatges1.descHeader.getData()} 
155				</p> 
156			</div> 
157		</#if> 
158		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
159			<div class="hero-carousel__container js-carousel-banner-al_1 is-playing" 
160				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
161				data-next-text='<@liferay.language key="label.carousel.next"/>' 
162				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
163				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
164				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
165				<#if sortedEntriesRootElems?has_content>				 
166					<#foreach element in sortedEntriesRootElems> 
167						<div class="hero hero--super"> 
168							<div class="hero__container"> 
169								<#if element.typeLink.getData() == "video"> 
170								<a href="#" onclick='showVideoModalBanner(`${element.External_Link.getData()}`);return false;' class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>> 
171								<#else> 
172								<a class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if> <#if element.typeLink.getData() == "extern"> href="${element.External_Link.getData()}" target="_blank" <#elseif element.typeLink.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLink.getData() == "intern" && element.External_Link?? && element.External_Link.getData()?has_content> href="${element.External_Link.getData()}" target="_self" </#if>> 
173								</#if> 
174									<div class="hero__media <#if (!element.titleElem?? || !element.titleElem.getData()?has_content) && (!element.descElem?? || !element.descElem.getData()?has_content)>hero__media-no-fade</#if>"> 
175										<#if element.typeLink.getData() == "video"> 
176											<div class="hero__media-video__container"> 
177												<span class="hero__media-video__img"> 
178												</span> 
179											</div> 
180										</#if> 
181										<img class="hero__image hero__image-new lazyload" data-src="${element.image.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
182									</div> 
183									<div class="hero__content white__banner"> 
184										<p class="hero__title" > 
185											${element.titleElem.getData()} 
186											<#if element.typeLink.getData() == "extern"> 
187												<span class="window-warning"> 
188													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
189												</span> 
190											</#if> 
191										</p> 
192										<p class="hero__desc-alt" > 
193											${element.descElem.getData()} 
194										</p> 
195									</div> 
196								</a> 
197							</div> 
198						</div> 
199					</#foreach> 
200				</#if> 
201			</div> 
202		</div> 
203	</div> 
204 
205	<div class="dialog"> 
206		<div id="carrusel-banner-video" class="u-hidden"> 
207			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
208			</div> 
209		</div> 
210	</div> 
211	<script type="text/javascript"> 
212		initSliderCarruselBanner1(); 
213 
214		function initSliderCarruselBanner1() { 
215			if($(".js-carousel-banner-al_1").hasClass('slick-initialized')) { 
216				$(".js-carousel-banner-al_1").slick("unslick"); 
217
218			$('.js-carousel-banner-al_1 .slick-toggle-play').remove(); 
219			$('.js-carousel-banner-al_1').slick({ 
220				slidesToShow: 1, 
221				arrows: true, 
222				draggable: true, 
223				infinite: false, 
224				variableWidth: false, 
225				autoplaySpeed: 4000, 
226				dots: true, 
227				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
228				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
229				responsive: [ 
230
231						breakpoint: 767, 
232						settings: { 
233							slidesToShow: 1, 
234							arrows: false, 
235							variableWidth: true, 
236							dots: true 
237
238
239
240			}).each(function () { 
241				var carousel = $(this), 
242				toggleButton, 
243				toggleIcon; 
244 
245				carousel.find('.slick-next__icon').attr({ 
246					'alt': carousel.data('next-text') 
247				}); 
248 
249				carousel.find('.slick-prev__icon').attr({ 
250					'alt': carousel.data('prev-text') 
251				}); 
252			}); 
253 
254			if ($('.hero-carousel__container .hero').length == 1) { 
255				$('.hero-carousel__container .slick-toggle-play').hide(); 
256
257 
258			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
259			if($(".js-carousel-banner-al_1 .slick-dots").length > 0) { 
260				setDotsPositionBanner1(); 
261
262
263 
264		function showVideoModalBanner(link) { 
265			const start = link.indexOf("v=") + 2; 
266			const end = start + 2 + 11; 
267 
268			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
269			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
270
271		function setDotsPositionBanner1() { 
272			$(".js-carousel-banner-al_1 .slick-dots").appendTo($(".js-carousel-banner-al_1").parent()); 
273
274 
275		window.addEventListener('resize', function(event){ 
276			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
277			if($(".js-carousel-banner-al_1 .slick-dots").length > 0 && width > 768) { 
278				setDotsPositionBanner1(); 
279
280		});    
281 
282	</script> 
283</#if> 
284 
285 
286<#--  BASICA-TITOL-TEXT  --> 
287 
288<#if basicaTitolText?? && 0 < basicaTitolText.elementsBasica.getSiblings()?size && (basicaTitolText.elementsBasica.getSiblings()[0].titleBasica.getData()?has_content || basicaTitolText.elementsBasica.getSiblings()[0].contentBasica.getData()?has_content) && (!basicaTitolText.hideBasicaTitolText?? || !getterUtil.getBoolean(basicaTitolText.hideBasicaTitolText.getData()))> 
289	<div class="full-body__container basica-titol-text"> 
290		<#foreach elem in basicaTitolText.elementsBasica.getSiblings()> 
291			<div class="basica-titol-text-wrapper"> 
292				<#if elem.titleBasica?? && elem.titleBasica.getData()?has_content><h2 class="">${elem.titleBasica.getData()}</h2></#if> 
293				<#if elem.contentBasica?? && elem.contentBasica.getData()?has_content><div class="basica-titol-text-content">${elem.contentBasica.getData()}</div></#if> 
294			</div> 
295			<#foreach subelem in elem.subelementsBasica.getSiblings()> 
296				<div class="basica-titol-text-wrapper"> 
297					<#if subelem.subelementTitleBasica?? && subelem.subelementTitleBasica.getData()?has_content><h3>${subelem.subelementTitleBasica.getData()}</h3></#if> 
298					<#if subelem.subelementContentBasica?? && subelem.subelementContentBasica.getData()?has_content><div class="basica-titol-text-content">${subelem.subelementContentBasica.getData()}</div></#if> 
299				</div> 
300			</#foreach> 
301		</#foreach> 
302	</div> 
303</#if> 
304 
305 
306<#--  bloc-detall-agenda  --> 
307 
308<#if detallAgenda?? && 0 < detallAgenda.elementsDetallAgenda.getSiblings()?size && (detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda.getData()?has_content || detallAgenda.elementsDetallAgenda.getSiblings()[0].contentDetallAgenda.getData()?has_content) && (!detallAgenda.hideDetallAgenda?? || !getterUtil.getBoolean(detallAgenda.hideDetallAgenda.getData()))> 
309	<div class="full-body__container detall-agenda"> 
310		<#foreach elem in detallAgenda.elementsDetallAgenda.getSiblings()> 
311			<div class="detall-agenda-wrapper"> 
312				<#if elem.titleDetallAgenda?? && elem.titleDetallAgenda.getData()?has_content><h2 class="">${elem.titleDetallAgenda.getData()}</h2></#if> 
313				<#if elem.contentDetallAgenda?? && elem.contentDetallAgenda.getData()?has_content><div class="detall-agenda-content">${elem.contentDetallAgenda.getData()}</div></#if> 
314			</div> 
315		</#foreach> 
316		<div class="detall-agenda-buttons-wrapper"> 
317		<#foreach subelem in detallAgenda.buttonsDetallAgenda.getSiblings()> 
318			<a title="<#if subelem.accessibleTitleButtons?? && subelem.accessibleTitleButtons.getData()?has_content>${subelem.accessibleTitleButtons.getData()}</#if>" type="button" class="button button--a" <#if subelem.linkTypeDetallAgenda.getData() == "extern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" rel="external" target="_blank" <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.Internal_LinkDetallAgenda?? && subelem.Internal_LinkDetallAgenda.getFriendlyUrl()?has_content> href="${subelem.Internal_LinkDetallAgenda.getFriendlyUrl()}" target="_self"  <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" target="_self" </#if>> 
319				<span class="button__label">${subelem.linkTextDetallAgenda.getData()}</span> 
320			</a> 
321		</#foreach> 
322		</div> 
323	</div> 
324</#if> 
325 
326 
327<#--  DT_PP_TITULO_VIDEO  --> 
328 
329<#if stPpVideo?? && stPpVideo.linkFieldSet.link.getData()?has_content && (!stPpVideo.hideStPpVideo?? || !getterUtil.getBoolean(stPpVideo.hideStPpVideo.getData()))> 
330	<style> 
331		.points-video__video-cover.no_video::after{ 
332			background: none; 
333
334	</style> 
335	<#assign hasLink = false> 
336	<#if stPpVideo.linkHeader?? && stPpVideo.linkHeader.getData()?has_content && stPpVideo.linkHeaderText?? && stPpVideo.linkHeaderText.getData()?has_content> 
337		<#assign hasLink = true> 
338	</#if> 
339	<section class="points-video bg-gray pt-56"> 
340		<div class="main__container"> 
341			<div class="full-body"> 
342				<div class="full-body__container points-video__header-extra-container"> 
343					<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?has_content && stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?trim?has_content> 
344						<a name="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}" id="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}"> 
345						</a> 
346					</#if> 
347					<#if stPpVideo.titol?? && stPpVideo.titol.getData()?has_content> 
348						<div class="points-video__header"> 
349							<div class="points-video__header-extra" <#if !hasLink>style="justify-content: center; margin-right: 0;"</#if>> 
350								<h2 class="points-video__title"> 
351								${stPpVideo.titol.getData()}</h2> 
352								<#if hasLink> 
353									<a class="points-video__subtitle-link" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
354								</#if> 
355							</div> 
356							<p class="points-video__description" <#if !hasLink>style="text-align: center; max-width: 100%;"</#if>> 
357							${stPpVideo.descriptiu.getData()}</p> 
358						</div> 
359					</#if> 
360					 
361					<div class="points-video__video-item cookieconsent-optin-marketing media-unit__content" id="marketingCookies"> 
362						<#if stPpVideo.linkFieldSet.link.getData()?has_content> 
363							<#assign start = stPpVideo.linkFieldSet.link.getData()?index_of("v=") + 2> 
364							<#--13 because v= + 11 char for youtube ids 
365							--> 
366							<#assign end = start + 11> 
367							<a href="${stPpVideo.linkFieldSet.link.getData()}" class="points-video__video-stPpVideo.linkFieldSet.link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}" 
368								rel="dialog-video" data-video="${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}"> 
369								<div class="points-video__video-cover" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
370									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
371								</div> 
372								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
373									<p class="points-video__caption"> 
374									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
375								</#if> 
376							</a> 
377						<#else> 
378							<a class="points-video__video-link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}"> 
379								<div class="points-video__video-cover no_video" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
380									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
381								</div> 
382								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
383									<p class="points-video__caption"> 
384									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
385								</#if> 
386							</a> 
387							 
388						</#if> 
389					</div> 
390					<div class='cookieconsent-optout-marketing media-unit__content'> 
391						<@liferay.language key="cookiebot.youtube.no-marketing"/> 
392					</div> 
393					<#if hasLink> 
394						<a class="points-video__subtitle-link-mobile" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
395					</#if> 
396				</div> 
397			</div> 
398		</div> 
399	</section> 
400	<section class="video-dialog js__video-dialog u-hidden"> 
401		<div class="u-hidden" id="fragment-show-video"> 
402			<div class="video-dialog__panel"> 
403				<header class="video-dialog__header"> 
404					<button class="video-dialog__close js__video-dialog-close"> 
405					Cerrar</button> 
406				</header> 
407				<div class="video-dialog__content"> 
408					<div class="video-dialog__inner js__video-dialog-container"> 
409						<iframe data-cookieconsent="marketing" data-cookieblock-src="https://www.youtube.com/embed/${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}" frameborder="0" class="video-dialog__media" allow="encrypted-media" allowfullscreen=""> 
410						</iframe> 
411					</div> 
412				</div> 
413			</div> 
414		</div> 
415		<div class="video-dialog__overlay js__video-dialog-close"> 
416		</div> 
417	</section> 
418</#if> 
419 
420 
421<#--  TEXT-CARRUSEL-IMATGES-ALT  --> 
422 
423<#if textCarruselImatges2?? && 0 < textCarruselImatges2.elementsFieldSetAlt.getSiblings()?size && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt?? && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt.getData()?has_content && (!textCarruselImatges2.hideTextCarruselImatgesAlt?? || !getterUtil.getBoolean(textCarruselImatges2.hideTextCarruselImatgesAlt.getData()))> 
424	<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
425 
426	<#assign entriesMapList = []> 
427	<#foreach elem in textCarruselImatges2.elementsFieldSetAlt.getSiblings()> 
428		<#if elem.elementsFieldSetFieldSetAlt.order?has_content> 
429			<#assign currentOrder = elem.elementsFieldSetFieldSetAlt.order.getData()> 
430		</#if> 
431		<#if !currentOrder?has_content || currentOrder == "null"> 
432			<#assign currentOrder = "99"> 
433		</#if> 
434		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSetAlt , "order" : currentOrder?number}> 
435		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
436	</#foreach> 
437 
438	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
439	<#assign sortedEntriesRootElems = []> 
440 
441	<#foreach currEntryMap in sortedEntriesMapList> 
442		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
443	</#foreach> 
444 
445	<#assign leftContent = ""> 
446	<#if textCarruselImatges2.titleHeaderAlt?? && textCarruselImatges2.titleHeaderAlt.getData()?has_content && textCarruselImatges2.descHeaderAlt?? && textCarruselImatges2.descHeaderAlt?has_content> 
447		<#assign leftContent = "true"> 
448	</#if> 
449 
450	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
451		<#if leftContent?has_content> 
452			<div class="hero-carousel__container-banner"> 
453				<h2 class="hero-carousel-banner-alt-title"> 
454					${textCarruselImatges2.titleHeaderAlt.getData()} 
455				</h2> 
456				<p class="hero-carousel-banner-alt-desc"> 
457					${textCarruselImatges2.descHeaderAlt.getData()} 
458				</p> 
459			</div> 
460		</#if> 
461		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
462			<div class="hero-carousel__container js-carousel-banner-al_alt is-playing" 
463				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
464				data-next-text='<@liferay.language key="label.carousel.next"/>' 
465				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
466				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
467				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
468				<#if sortedEntriesRootElems?has_content>				 
469					<#foreach element in sortedEntriesRootElems> 
470						<div class="hero hero--super"> 
471							<div class="hero__container"> 
472								<#if element.typeLinkAlt.getData() == "video"> 
473								<a href="#" onclick='showVideoModalBanner(`${element.External_LinkAlt.getData()}`);return false;' class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if>> 
474								<#else> 
475								<a class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if> <#if element.typeLinkAlt.getData() == "extern"> href="${element.External_LinkAlt.getData()}" target="_blank" <#elseif element.typeLinkAlt.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLinkAlt.getData() == "intern" && element.External_LinkAlt?? && element.External_LinkAlt.getData()?has_content> href="${element.External_LinkAlt.getData()}" target="_self" </#if>> 
476								</#if> 
477									<div class="hero__media <#if (!element.titleElemAlt?? || !element.titleElemAlt.getData()?has_content) && (!element.descElemAlt?? || !element.descElemAlt.getData()?has_content)>hero__media-no-fade</#if>"> 
478										<#if element.typeLinkAlt.getData() == "video"> 
479											<div class="hero__media-video__container"> 
480												<span class="hero__media-video__img"> 
481												</span> 
482											</div> 
483										</#if> 
484										<img class="hero__image hero__image-new lazyload" data-src="${element.imageAlt.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
485									</div> 
486									<div class="hero__content white__banner"> 
487										<p class="hero__title" > 
488											${element.titleElemAlt.getData()} 
489											<#if element.typeLinkAlt.getData() == "extern"> 
490												<span class="window-warning"> 
491													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
492												</span> 
493											</#if> 
494										</p> 
495										<p class="hero__desc-alt" > 
496											${element.descElemAlt.getData()} 
497										</p> 
498									</div> 
499								</a> 
500							</div> 
501						</div> 
502					</#foreach> 
503				</#if> 
504			</div> 
505		</div> 
506	</div> 
507 
508	<div class="dialog"> 
509		<div id="carrusel-banner-video" class="u-hidden"> 
510			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
511			</div> 
512		</div> 
513	</div> 
514	<script type="text/javascript"> 
515		initSliderCarruselBanner2(); 
516 
517		function initSliderCarruselBanner2() { 
518			if($(".js-carousel-banner-al_alt").hasClass('slick-initialized')) { 
519				$(".js-carousel-banner-al_alt").slick("unslick"); 
520
521			$('.js-carousel-banner-al_alt .slick-toggle-play').remove(); 
522			$('.js-carousel-banner-al_alt').slick({ 
523				slidesToShow: 1, 
524				arrows: true, 
525				draggable: true, 
526				infinite: false, 
527				variableWidth: false, 
528				autoplaySpeed: 4000, 
529				dots: true, 
530				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
531				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
532				responsive: [ 
533
534						breakpoint: 767, 
535						settings: { 
536							slidesToShow: 1, 
537							arrows: false, 
538							variableWidth: true, 
539							dots: true 
540
541
542
543			}).each(function () { 
544				var carousel = $(this), 
545				toggleButton, 
546				toggleIcon; 
547 
548				carousel.find('.slick-next__icon').attr({ 
549					'alt': carousel.data('next-text') 
550				}); 
551 
552				carousel.find('.slick-prev__icon').attr({ 
553					'alt': carousel.data('prev-text') 
554				}); 
555			}); 
556 
557			if ($('.hero-carousel__container .hero').length == 1) { 
558				$('.hero-carousel__container .slick-toggle-play').hide(); 
559
560 
561			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
562			if($(".js-carousel-banner-al_alt .slick-dots").length > 0) { 
563				setDotsPositionBanner2(); 
564
565
566 
567		function showVideoModalBanner2(link) { 
568			const start = link.indexOf("v=") + 2; 
569			const end = start + 2 + 11; 
570 
571			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
572			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
573
574		function setDotsPositionBanner2() { 
575			$(".js-carousel-banner-al_alt .slick-dots").appendTo($(".js-carousel-banner-al_alt").parent()); 
576
577 
578		window.addEventListener('resize', function(event){ 
579			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
580			if($(".js-carousel-banner-al_alt .slick-dots").length > 0 && width > 768) { 
581				setDotsPositionBanner2(); 
582
583		});    
584 
585	</script> 
586</#if> 
587 
588 
589<#--  CARRUSEL-TRES-CARD  --> 
590 
591<#if referencesFieldSet?? && 0 < referencesFieldSet.getSiblings()?size && referencesFieldSet.getSiblings()[0].referenceId.getData()?has_content && (!hideTresCards?? || !getterUtil.getBoolean(hideTresCards.getData()))> 
592	<#assign colorClass = "" /> 
593	<#assign fullBody = "" /> 
594	<#if fondoColorCarruselCards?? && fondoColorCarruselCards.getData()??> 
595		<#if fondoColorCarruselCards.getData()=="blanc"> 
596			<#assign colorClass = "hola-bcn-carrusel-standard--white" /> 
597			<#assign fullBody = "full-body__container" /> 
598		<#else> 
599			<#assign colorClass = "hola-bcn-carrusel-standard--gray" /> 
600			<#assign fullBody = "full-body__container" /> 
601		</#if> 
602	</#if> 
603 
604	<section class="hola-bcn-carrusel-standard ${colorClass}"> 
605		<div class="hola-bcn-carrusel-standard-cont-ext hola-bcn-carrusel-standard-cont-ext-extra hola-bcn-carrusel-standard-cont-ext-flex ${fullBody}"> 
606			<div class="hola-bcn-carrusel-standard--container"> 
607				<div class="hola-bcn-carrusel-standard--outer"> 
608						<div class="hola-bcn-carrusel-standard_new-header"> 
609							<h2 class="title title--1 hola-bcn-carrusel-standard__title hola-bcn-carrusel-standard__title_new">${titleCarruselCards.getData()}</h2> 
610							<p class="hola-bcn-carrusel-standard__intro-text">${subtitleCarruselCards.getData()}</p> 
611						</div> 
612					<ul id="result-list" class="hola-bcn-carrusel-standard__items js__hola-bcn-standard-slider"> 
613						<#assign tmbGroupId = 20182> 
614						<#assign fundacioGroupId = 79790> 
615						<#list referencesFieldSet.getSiblings() as element> 
616							<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
617							<#assign articleId = element.referenceId.getData()> 
618							<#assign groupId = getterUtil.getLong(groupId)> 
619							<#attempt> 
620								<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId) /> 
621							<#recover> 
622								<#if groupId == tmbGroupId> 
623									<#assign groupId = fundacioGroupId> 
624								<#else> 
625									<#assign groupId = tmbGroupId> 
626								</#if> 
627								<#attempt> 
628									<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId)!> 
629								<#recover> 
630									<#assign journalArticle = ""> 
631								</#attempt> 
632							</#attempt> 
633							<#if journalArticle?has_content && journalArticle != ""> 
634								<#assign document = saxReaderUtil.read(journalArticle.getContent())> 
635								<#assign rootElement = document.getRootElement()> 
636 
637								<#assign resourceprimKey = journalArticle.getResourcePrimKey()> 
638								<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey)> 
639								<#assign assetRenderer = assetEntry.getAssetRenderer()> 
640								<#assign articleURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, "")> 
641								<#assign articleFriendlyURL = assetRenderer.getUrlTitle()> 
642								<#assign newwindow = ""> 
643								<#if !articleURL?has_content> 
644									<#assign newwindow = "target='_blank'"> 
645									<#if !isFundacio> 
646										<#if currentURL?contains("pre3")> 
647											<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
648										<#else> 
649											<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
650										</#if> 
651									<#else> 
652										<#if currentURL?contains("pre3")> 
653											<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
654										<#else> 
655											<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
656										</#if> 
657									</#if> 
658								</#if> 
659 
660								<#assign title = ""> 
661								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
662								<#if titleSel.selectSingleNode(rootElement)?has_content> 
663									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
664								</#if> 
665								 
666								<#assign subtitle = ""> 
667								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
668								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
669									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
670								</#if> 
671 
672								<#assign initDateNovetatAgenda = ""> 
673								<#assign fromInitDateNovetatAgenda = ""> 
674								<#assign endDateNovetatAgenda = ""> 
675								<#assign whereNovetatAgenda = ""> 
676								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
677								<#if novetatAgendaSel?has_content> 
678									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
679 
680									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
681										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
682									</#if> 
683 
684									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
685										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
686									</#if> 
687 
688									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
689										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
690									</#if> 
691 
692									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
693									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
694										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
695									</#if> 
696								</#if> 
697 
698								<#assign typeNovetatAgenda = ""> 
699								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
700								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
701									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
702								</#if> 
703 
704								<#assign filterNovetatAgenda = ""> 
705								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
706								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
707									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
708								</#if> 
709								 
710								<#assign imageNovetatAgenda = ""> 
711								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
712								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
713									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
714									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
715									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
716								</#if> 
717 
718								<#assign imageAltNovetatAgenda = ""> 
719								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
720								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
721									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
722								</#if> 
723 
724								<#assign pubDateNovetatAgenda = ""> 
725								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
726								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
727									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
728								</#if> 
729 
730								<#assign pubTimeNovetatAgenda = ""> 
731								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
732								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
733									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
734								</#if> 
735 
736								<#assign despubDateNovetatAgenda = ""> 
737								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
738								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
739									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
740								</#if> 
741 
742								<#assign despubTimeNovetatAgenda = ""> 
743								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
744								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
745									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
746								</#if> 
747 
748								<#assign isExpiredNovetatAgenda = ""> 
749								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
750								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
751									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
752								</#if> 
753 
754								<#assign isPublishedNA = false> 
755								<#if (pubDateNovetatAgenda?has_content)> 
756									<#if pubTimeNovetatAgenda?has_content> 
757										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
758										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
759									<#else> 
760										<#assign timeActDate = ""> 
761										<#assign timeActFormat = ""> 
762									</#if> 
763									<#attempt>	 
764										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
765										 
766										<#if timeActFormat?has_content && timeActFormat != ""> 
767											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
768											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
769										</#if> 
770										<#assign dataActMil = dataAct?long> 
771										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
772										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
773									<#recover> 
774									</#attempt> 
775								</#if> 
776 
777								<#assign isDespublishedNA = false> 
778								<#if (despubDateNovetatAgenda?has_content)> 
779									<#if despubTimeNovetatAgenda?has_content> 
780										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
781										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
782									<#else> 
783										<#assign timeExpDate = ""> 
784										<#assign timeExpFormat = ""> 
785									</#if> 
786									<#attempt> 
787										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
788										 
789										<#if timeExpFormat?has_content && timeExpFormat != ""> 
790											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
791											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
792										</#if> 
793										<#assign dataExpMil = dataExp?long> 
794										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
795										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
796									<#recover> 
797									</#attempt> 
798								</#if> 
799 
800								<#assign isExpiredNA = false> 
801								<#if journalArticle.expirationDate??> 
802									<#assign dataExp = journalArticle.expirationDate?datetime> 
803									<#attempt> 
804										<#assign dataExpMil = dataExp?long> 
805										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
806										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
807									<#recover> 
808									</#attempt> 
809								</#if> 
810 
811								<#assign showNovetatAgenda = false> 
812								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
813									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
814								<#else> 
815									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
816								</#if> 
817 
818								<#if showNovetatAgenda> 
819									<#if title?has_content> 
820										<li class="hola-bcn-carrusel-standard_new-li"> 
821											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
822												<div class="hola-bcn-carrusel-standard__card-cover"> 
823													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
824													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
825													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
826														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
827													</div> 
828													<#if filterNovetatAgenda?has_content> 
829														<div class="hola-bcn-carrusel-standard-highlight"> 
830															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
831														</div> 
832													</#if> 
833												</div> 
834												<div class="hola-bcn-carrusel-standard-container"> 
835													<div> 
836														<h3 class="hola-bcn-carrusel-standard__card-title"> 
837															${title} 
838															<#if newwindow?? && newwindow?has_content> 
839																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
840															</#if> 
841														</h3> 
842														<span class="hola-bcn-carrusel-standard__card-description"> 
843															${subtitle} 
844														</span> 
845													</div> 
846													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
847														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
848															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
849																<div class="hola-bcn-carrusel-standard-date"> 
850																	<#if fromInitDateNovetatAgenda == "true"> 
851																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</span> 
852																	<#else> 
853																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}<#if endDateNovetatAgenda?has_content> <@liferay.language key='label.bloc.novetatagenda.to' /> ${endDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</#if></span> 
854																	</#if> 
855																</div> 
856															</#if> 
857															<#if whereNovetatAgenda?has_content> 
858																<div class="hola-bcn-carrusel-standard-where"> 
859																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
860																</div> 
861															</#if> 
862														</div> 
863													</#if> 
864												</div> 
865											</a> 
866										</li> 
867									</#if> 
868								</#if> 
869							</#if> 
870						</#list> 
871					</ul> 
872				</div> 
873			</div> 
874		</div> 
875	</section> 
876 
877	<script type="text/javascript"> 
878 
879		$(document).ready(function() { 
880			initSliderBcnStandard(); 
881		}); 
882 
883		function initSliderBcnStandard() { 
884			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
885				$(".js__hola-bcn-standard-slider").slick("unslick"); 
886
887 
888			$('.js__hola-bcn-standard-slider').slick({ 
889				slidesToShow: 3, 
890				slidesToScroll: 1, 
891				arrows: false, 
892				dots: false, 
893				draggable: false, 
894				infinite: false, 
895				responsive: [ 
896
897						breakpoint: 767, 
898						settings: { 
899							variableWidth: true, 
900							slidesToShow: 2, 
901							slidesToScroll: 1, 
902							arrows: false, 
903							dots: true, 
904							draggable: true, 
905							infinite: true 
906
907
908
909			}); 
910
911 
912	</script> 
913</#if> 

Exposició La petita història del metro

Un viatge de cent anys d'història en dibuixos.

Quan: 10.01.2025 a 19.03.2025


On: Espai Mercè Sala - Fundació TMB


Accés: Entrada gratuïta*

*Validant el títol de transport

Barcelona celebra cent anys del metro: el 30 de desembre de 1924, el primer tren de la xarxa de metro de Barcelona sortia de l'estació de Lesseps en direcció a Passeig de Gràcia. Des de llavors, el suburbà de la ciutat ha anat creixent i adaptant-se als nous temps.

TMB i la Fundació TMB han creat un ventall d'accions que, emmarcades dins d'una gran campanya de comunicació, s'aniran duent a terme a la xarxa del suburbà durant tot 2025: publicacions de llibres, esdeveniments molt variats, visites guiades, exposicions i molt més.

Una de les publicacions més especials és La petita història del metro, un viatge de 100 anys a través de les magnífiques il·lustracions de Pilarín Bayés i els textos de Daniel Venteo. Aquest llibre, a més d'apropar petits i grans a la història del metro a través de les seves explicacions, desprèn una tendresa peculiar, que hem volgut portar a les parets de l'Espai Mercè Sala.

Tant si ja has tingut l'oportunitat que aquest llibre caigui a les teves mans com si no, vine a visitar l'exposició i gaudeix del viatge!

Què hi trobaràs a l'exposició?

Saps quin dia i quin any es va inaugurar la primera línia del metro de Barcelona? I quantes estacions tenia?

Sabies que durant la Generalitat republicana el metro ja va arribar a l’Hospitalet de Llobregat

O que durant la Guerra Civil espanyola la ciutadania va utilitzar-lo sovint com a refugi per a protegir-se de les bombes?

Sabies que no va ser fins a principis dels anys seixanta que el servei de metro es va municipalitzar i convertir en un servei públic de garantia del dret universal a la mobilitat que és avui?

Sabies que el 1992, amb els Jocs Olímpics de Barcelona, el metro va fer un nou impuls obrint-se pas cap a Santa Coloma de Gramenet i Badalona? 

Sabies que avui té 125 quilòmetres de vies i fins a 165 estacions que faciliten prop de 280 milions de viatges l’any? O que la línia 9 del metro, que acaba a l’aeroport del Prat, és automàtica i una de les més modernes d’Europa?

El metro de Barcelona reuneix una i mil històries del passat, del present i del futur.

S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda  [in template "20155#20195#1501272" at line 308, column 85]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if detallAgenda?? && 0 < detallAgend...  [in template "20155#20195#1501272" at line 308, column 1]
----
1<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
3<#assign currentURL = request.getRequestURL() /> 
4<#assign isFundacio = false> 
5<#if currentURL?contains("fundacio")> 
6	<#assign isFundacio = true> 
7</#if> 
8 
9<#function miliSeconds dateString firstDate> 
10	<#assign params = dateString?split(":")> 
11	 
12	<#if params?size == 2> 
13		<#assign param1 = params[0]> 
14		<#assign param2 = params[1]> 
15		<#assign param1 = getterUtil.getLong(param1)*3600000> 
16		<#assign param2 = getterUtil.getLong(param2)*60000> 
17		<#assign finalMilSec = param1 + param2> 
18		<#assign finalMilSecLong = getterUtil.getLong(finalMilSec)> 
19		<#assign resultLong = firstDate + finalMilSecLong> 
20		 
21		<#return resultLong> 
22	</#if> 
23</#function> 
24 
25<#--  header-image  --> 
26 
27<#if upperImage?? && upperImage.getData()?has_content> 
28	<div class="header-image"> 
29		<img src="${upperImage.getData()}" <#if upperImageAlt?? && upperImageAlt.getData()?has_content>alt="${upperImageAlt.getData()}"</#if>> 
30	</div> 
31</#if> 
32 
33 
34<#--  breadcrumbs  --> 
35 
36<div class="full-body__container breadcrumbs" style="float: unset; margin-right: auto; padding-bottom: 22px; padding-top: 22px;"> 
37	<p class="breadcrumbs__title"><@liferay.language key='header.breadcrumbs.text' />:</p> 
38	<#if liferay_portlet?has_content><@liferay.breadcrumbs /></#if> 
39</div> 
40 
41 
42<#-- TITOL I SUBTITOL  --> 
43 
44<#if titleGlobal?? && titleGlobal.getData()?has_content || subtitleGlobal?? && subtitleGlobal.getData()?has_content> 
45	<div class="full-body__container basicav2-titol-subtitol"> 
46		<#if titleGlobal?? && titleGlobal.getData()?has_content><h1>${titleGlobal.getData()}</h1></#if> 
47		<#if subtitleGlobal?? && subtitleGlobal.getData()?has_content><p>${subtitleGlobal.getData()}</p></#if> 
48	</div> 
49</#if> 
50 
51 
52<#--  bloc-info-agenda  --> 
53 
54<#if blocInfoAgenda?? && ((blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content)) && (!blocInfoAgenda.hideBlocInfoAgenda?? || !getterUtil.getBoolean(blocInfoAgenda.hideBlocInfoAgenda.getData()))> 
55	<div class="full-body__container bloc-info-agenda"> 
56		<div class="bloc-info-agenda-elements"> 
57			<#if blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content> 
58				<div class="bloc-info-agenda-element"> 
59					<#if blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()?has_content> 
60						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()}"> 
61					<#else> 
62						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/calendar.svg"> 
63					</#if> 
64					<#if blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData()?has_content && getterUtil.getBoolean(blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData())> 
65						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b><@liferay.language key='label.bloc.novetatagenda.from' /> ${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</b></p></div> 
66					<#else> 
67						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b>${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}<#if blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?has_content> <@liferay.language key="label.bloc.novetatagenda.to"/> ${blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</#if></b></p></div> 
68					</#if> 
69				</div> 
70				<hr> 
71			</#if> 
72			<#if blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content> 
73				<div class="bloc-info-agenda-element"> 
74					<#if blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()?has_content> 
75						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()}"> 
76					<#else> 
77						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/location_on.svg"> 
78					</#if> 
79					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.where"/> <b>${blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()}</b></p></div> 
80				</div> 
81				<hr> 
82			</#if> 
83			<#if blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content> 
84				<div class="bloc-info-agenda-element"> 
85					<#if blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()?has_content> 
86						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()}"> 
87					<#else> 
88						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/ticket.svg"> 
89					</#if> 
90					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.acces"/> <b>${blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()}</b></p></div> 
91				</div> 
92			</#if> 
93		</div> 
94		<#if blocInfoAgenda.textBottomBlocInfoAgenda?? && blocInfoAgenda.textBottomBlocInfoAgenda.getData()?has_content> 
95			<div class="bloc-info-agenda-bottom"> 
96				<span>${blocInfoAgenda.textBottomBlocInfoAgenda.getData()}</span> 
97			</div> 
98		</#if> 
99	</div> 
100</#if> 
101 
102<#--  text-center  --> 
103 
104<#if textCenter?? && textCenter.getData()?has_content> 
105	<div class="full-body__container text-center-basic"> 
106		${textCenter.getData()} 
107	</div> 
108</#if> 
109 
110 
111<#--  image-center  --> 
112 
113<#if imageCenter?? && imageCenter.getData()?has_content> 
114	<div class="full-body__container image-center-basic"> 
115		<img src="${imageCenter.getData()}"> 
116	</div> 
117</#if> 
118 
119 
120<#--  TEXT-CARRUSEL-IMATGES  --> 
121 
122<#if textCarruselImatges1?? && 0 < textCarruselImatges1.elementsFieldSet.getSiblings()?size && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image?? && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image.getData()?has_content && (!textCarruselImatges1.hideTextCarruselImatges?? || !getterUtil.getBoolean(textCarruselImatges1.hideTextCarruselImatges.getData()))> 
123	<#assign entriesMapList = []> 
124	<#foreach elem in textCarruselImatges1.elementsFieldSet.getSiblings()> 
125		<#if elem.elementsFieldSetFieldSet.order?has_content> 
126			<#assign currentOrder = elem.elementsFieldSetFieldSet.order.getData()> 
127		</#if> 
128		<#if !currentOrder?has_content || currentOrder == "null"> 
129			<#assign currentOrder = "99"> 
130		</#if> 
131		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSet , "order" : currentOrder?number}> 
132		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
133	</#foreach> 
134 
135	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
136	<#assign sortedEntriesRootElems = []> 
137 
138	<#foreach currEntryMap in sortedEntriesMapList> 
139		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
140	</#foreach> 
141 
142	<#assign leftContent = ""> 
143	<#if textCarruselImatges1.titleHeader?? && textCarruselImatges1.titleHeader.getData()?has_content && textCarruselImatges1.descHeader?? && textCarruselImatges1.descHeader?has_content> 
144		<#assign leftContent = "true"> 
145	</#if> 
146 
147	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
148		<#if leftContent?has_content> 
149			<div class="hero-carousel__container-banner"> 
150				<h2 class="hero-carousel-banner-alt-title"> 
151					${textCarruselImatges1.titleHeader.getData()} 
152				</h2> 
153				<p class="hero-carousel-banner-alt-desc"> 
154					${textCarruselImatges1.descHeader.getData()} 
155				</p> 
156			</div> 
157		</#if> 
158		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
159			<div class="hero-carousel__container js-carousel-banner-al_1 is-playing" 
160				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
161				data-next-text='<@liferay.language key="label.carousel.next"/>' 
162				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
163				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
164				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
165				<#if sortedEntriesRootElems?has_content>				 
166					<#foreach element in sortedEntriesRootElems> 
167						<div class="hero hero--super"> 
168							<div class="hero__container"> 
169								<#if element.typeLink.getData() == "video"> 
170								<a href="#" onclick='showVideoModalBanner(`${element.External_Link.getData()}`);return false;' class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>> 
171								<#else> 
172								<a class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if> <#if element.typeLink.getData() == "extern"> href="${element.External_Link.getData()}" target="_blank" <#elseif element.typeLink.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLink.getData() == "intern" && element.External_Link?? && element.External_Link.getData()?has_content> href="${element.External_Link.getData()}" target="_self" </#if>> 
173								</#if> 
174									<div class="hero__media <#if (!element.titleElem?? || !element.titleElem.getData()?has_content) && (!element.descElem?? || !element.descElem.getData()?has_content)>hero__media-no-fade</#if>"> 
175										<#if element.typeLink.getData() == "video"> 
176											<div class="hero__media-video__container"> 
177												<span class="hero__media-video__img"> 
178												</span> 
179											</div> 
180										</#if> 
181										<img class="hero__image hero__image-new lazyload" data-src="${element.image.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
182									</div> 
183									<div class="hero__content white__banner"> 
184										<p class="hero__title" > 
185											${element.titleElem.getData()} 
186											<#if element.typeLink.getData() == "extern"> 
187												<span class="window-warning"> 
188													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
189												</span> 
190											</#if> 
191										</p> 
192										<p class="hero__desc-alt" > 
193											${element.descElem.getData()} 
194										</p> 
195									</div> 
196								</a> 
197							</div> 
198						</div> 
199					</#foreach> 
200				</#if> 
201			</div> 
202		</div> 
203	</div> 
204 
205	<div class="dialog"> 
206		<div id="carrusel-banner-video" class="u-hidden"> 
207			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
208			</div> 
209		</div> 
210	</div> 
211	<script type="text/javascript"> 
212		initSliderCarruselBanner1(); 
213 
214		function initSliderCarruselBanner1() { 
215			if($(".js-carousel-banner-al_1").hasClass('slick-initialized')) { 
216				$(".js-carousel-banner-al_1").slick("unslick"); 
217
218			$('.js-carousel-banner-al_1 .slick-toggle-play').remove(); 
219			$('.js-carousel-banner-al_1').slick({ 
220				slidesToShow: 1, 
221				arrows: true, 
222				draggable: true, 
223				infinite: false, 
224				variableWidth: false, 
225				autoplaySpeed: 4000, 
226				dots: true, 
227				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
228				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
229				responsive: [ 
230
231						breakpoint: 767, 
232						settings: { 
233							slidesToShow: 1, 
234							arrows: false, 
235							variableWidth: true, 
236							dots: true 
237
238
239
240			}).each(function () { 
241				var carousel = $(this), 
242				toggleButton, 
243				toggleIcon; 
244 
245				carousel.find('.slick-next__icon').attr({ 
246					'alt': carousel.data('next-text') 
247				}); 
248 
249				carousel.find('.slick-prev__icon').attr({ 
250					'alt': carousel.data('prev-text') 
251				}); 
252			}); 
253 
254			if ($('.hero-carousel__container .hero').length == 1) { 
255				$('.hero-carousel__container .slick-toggle-play').hide(); 
256
257 
258			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
259			if($(".js-carousel-banner-al_1 .slick-dots").length > 0) { 
260				setDotsPositionBanner1(); 
261
262
263 
264		function showVideoModalBanner(link) { 
265			const start = link.indexOf("v=") + 2; 
266			const end = start + 2 + 11; 
267 
268			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
269			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
270
271		function setDotsPositionBanner1() { 
272			$(".js-carousel-banner-al_1 .slick-dots").appendTo($(".js-carousel-banner-al_1").parent()); 
273
274 
275		window.addEventListener('resize', function(event){ 
276			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
277			if($(".js-carousel-banner-al_1 .slick-dots").length > 0 && width > 768) { 
278				setDotsPositionBanner1(); 
279
280		});    
281 
282	</script> 
283</#if> 
284 
285 
286<#--  BASICA-TITOL-TEXT  --> 
287 
288<#if basicaTitolText?? && 0 < basicaTitolText.elementsBasica.getSiblings()?size && (basicaTitolText.elementsBasica.getSiblings()[0].titleBasica.getData()?has_content || basicaTitolText.elementsBasica.getSiblings()[0].contentBasica.getData()?has_content) && (!basicaTitolText.hideBasicaTitolText?? || !getterUtil.getBoolean(basicaTitolText.hideBasicaTitolText.getData()))> 
289	<div class="full-body__container basica-titol-text"> 
290		<#foreach elem in basicaTitolText.elementsBasica.getSiblings()> 
291			<div class="basica-titol-text-wrapper"> 
292				<#if elem.titleBasica?? && elem.titleBasica.getData()?has_content><h2 class="">${elem.titleBasica.getData()}</h2></#if> 
293				<#if elem.contentBasica?? && elem.contentBasica.getData()?has_content><div class="basica-titol-text-content">${elem.contentBasica.getData()}</div></#if> 
294			</div> 
295			<#foreach subelem in elem.subelementsBasica.getSiblings()> 
296				<div class="basica-titol-text-wrapper"> 
297					<#if subelem.subelementTitleBasica?? && subelem.subelementTitleBasica.getData()?has_content><h3>${subelem.subelementTitleBasica.getData()}</h3></#if> 
298					<#if subelem.subelementContentBasica?? && subelem.subelementContentBasica.getData()?has_content><div class="basica-titol-text-content">${subelem.subelementContentBasica.getData()}</div></#if> 
299				</div> 
300			</#foreach> 
301		</#foreach> 
302	</div> 
303</#if> 
304 
305 
306<#--  bloc-detall-agenda  --> 
307 
308<#if detallAgenda?? && 0 < detallAgenda.elementsDetallAgenda.getSiblings()?size && (detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda.getData()?has_content || detallAgenda.elementsDetallAgenda.getSiblings()[0].contentDetallAgenda.getData()?has_content) && (!detallAgenda.hideDetallAgenda?? || !getterUtil.getBoolean(detallAgenda.hideDetallAgenda.getData()))> 
309	<div class="full-body__container detall-agenda"> 
310		<#foreach elem in detallAgenda.elementsDetallAgenda.getSiblings()> 
311			<div class="detall-agenda-wrapper"> 
312				<#if elem.titleDetallAgenda?? && elem.titleDetallAgenda.getData()?has_content><h2 class="">${elem.titleDetallAgenda.getData()}</h2></#if> 
313				<#if elem.contentDetallAgenda?? && elem.contentDetallAgenda.getData()?has_content><div class="detall-agenda-content">${elem.contentDetallAgenda.getData()}</div></#if> 
314			</div> 
315		</#foreach> 
316		<div class="detall-agenda-buttons-wrapper"> 
317		<#foreach subelem in detallAgenda.buttonsDetallAgenda.getSiblings()> 
318			<a title="<#if subelem.accessibleTitleButtons?? && subelem.accessibleTitleButtons.getData()?has_content>${subelem.accessibleTitleButtons.getData()}</#if>" type="button" class="button button--a" <#if subelem.linkTypeDetallAgenda.getData() == "extern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" rel="external" target="_blank" <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.Internal_LinkDetallAgenda?? && subelem.Internal_LinkDetallAgenda.getFriendlyUrl()?has_content> href="${subelem.Internal_LinkDetallAgenda.getFriendlyUrl()}" target="_self"  <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" target="_self" </#if>> 
319				<span class="button__label">${subelem.linkTextDetallAgenda.getData()}</span> 
320			</a> 
321		</#foreach> 
322		</div> 
323	</div> 
324</#if> 
325 
326 
327<#--  DT_PP_TITULO_VIDEO  --> 
328 
329<#if stPpVideo?? && stPpVideo.linkFieldSet.link.getData()?has_content && (!stPpVideo.hideStPpVideo?? || !getterUtil.getBoolean(stPpVideo.hideStPpVideo.getData()))> 
330	<style> 
331		.points-video__video-cover.no_video::after{ 
332			background: none; 
333
334	</style> 
335	<#assign hasLink = false> 
336	<#if stPpVideo.linkHeader?? && stPpVideo.linkHeader.getData()?has_content && stPpVideo.linkHeaderText?? && stPpVideo.linkHeaderText.getData()?has_content> 
337		<#assign hasLink = true> 
338	</#if> 
339	<section class="points-video bg-gray pt-56"> 
340		<div class="main__container"> 
341			<div class="full-body"> 
342				<div class="full-body__container points-video__header-extra-container"> 
343					<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?has_content && stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?trim?has_content> 
344						<a name="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}" id="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}"> 
345						</a> 
346					</#if> 
347					<#if stPpVideo.titol?? && stPpVideo.titol.getData()?has_content> 
348						<div class="points-video__header"> 
349							<div class="points-video__header-extra" <#if !hasLink>style="justify-content: center; margin-right: 0;"</#if>> 
350								<h2 class="points-video__title"> 
351								${stPpVideo.titol.getData()}</h2> 
352								<#if hasLink> 
353									<a class="points-video__subtitle-link" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
354								</#if> 
355							</div> 
356							<p class="points-video__description" <#if !hasLink>style="text-align: center; max-width: 100%;"</#if>> 
357							${stPpVideo.descriptiu.getData()}</p> 
358						</div> 
359					</#if> 
360					 
361					<div class="points-video__video-item cookieconsent-optin-marketing media-unit__content" id="marketingCookies"> 
362						<#if stPpVideo.linkFieldSet.link.getData()?has_content> 
363							<#assign start = stPpVideo.linkFieldSet.link.getData()?index_of("v=") + 2> 
364							<#--13 because v= + 11 char for youtube ids 
365							--> 
366							<#assign end = start + 11> 
367							<a href="${stPpVideo.linkFieldSet.link.getData()}" class="points-video__video-stPpVideo.linkFieldSet.link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}" 
368								rel="dialog-video" data-video="${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}"> 
369								<div class="points-video__video-cover" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
370									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
371								</div> 
372								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
373									<p class="points-video__caption"> 
374									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
375								</#if> 
376							</a> 
377						<#else> 
378							<a class="points-video__video-link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}"> 
379								<div class="points-video__video-cover no_video" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
380									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
381								</div> 
382								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
383									<p class="points-video__caption"> 
384									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
385								</#if> 
386							</a> 
387							 
388						</#if> 
389					</div> 
390					<div class='cookieconsent-optout-marketing media-unit__content'> 
391						<@liferay.language key="cookiebot.youtube.no-marketing"/> 
392					</div> 
393					<#if hasLink> 
394						<a class="points-video__subtitle-link-mobile" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
395					</#if> 
396				</div> 
397			</div> 
398		</div> 
399	</section> 
400	<section class="video-dialog js__video-dialog u-hidden"> 
401		<div class="u-hidden" id="fragment-show-video"> 
402			<div class="video-dialog__panel"> 
403				<header class="video-dialog__header"> 
404					<button class="video-dialog__close js__video-dialog-close"> 
405					Cerrar</button> 
406				</header> 
407				<div class="video-dialog__content"> 
408					<div class="video-dialog__inner js__video-dialog-container"> 
409						<iframe data-cookieconsent="marketing" data-cookieblock-src="https://www.youtube.com/embed/${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}" frameborder="0" class="video-dialog__media" allow="encrypted-media" allowfullscreen=""> 
410						</iframe> 
411					</div> 
412				</div> 
413			</div> 
414		</div> 
415		<div class="video-dialog__overlay js__video-dialog-close"> 
416		</div> 
417	</section> 
418</#if> 
419 
420 
421<#--  TEXT-CARRUSEL-IMATGES-ALT  --> 
422 
423<#if textCarruselImatges2?? && 0 < textCarruselImatges2.elementsFieldSetAlt.getSiblings()?size && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt?? && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt.getData()?has_content && (!textCarruselImatges2.hideTextCarruselImatgesAlt?? || !getterUtil.getBoolean(textCarruselImatges2.hideTextCarruselImatgesAlt.getData()))> 
424	<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
425 
426	<#assign entriesMapList = []> 
427	<#foreach elem in textCarruselImatges2.elementsFieldSetAlt.getSiblings()> 
428		<#if elem.elementsFieldSetFieldSetAlt.order?has_content> 
429			<#assign currentOrder = elem.elementsFieldSetFieldSetAlt.order.getData()> 
430		</#if> 
431		<#if !currentOrder?has_content || currentOrder == "null"> 
432			<#assign currentOrder = "99"> 
433		</#if> 
434		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSetAlt , "order" : currentOrder?number}> 
435		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
436	</#foreach> 
437 
438	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
439	<#assign sortedEntriesRootElems = []> 
440 
441	<#foreach currEntryMap in sortedEntriesMapList> 
442		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
443	</#foreach> 
444 
445	<#assign leftContent = ""> 
446	<#if textCarruselImatges2.titleHeaderAlt?? && textCarruselImatges2.titleHeaderAlt.getData()?has_content && textCarruselImatges2.descHeaderAlt?? && textCarruselImatges2.descHeaderAlt?has_content> 
447		<#assign leftContent = "true"> 
448	</#if> 
449 
450	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
451		<#if leftContent?has_content> 
452			<div class="hero-carousel__container-banner"> 
453				<h2 class="hero-carousel-banner-alt-title"> 
454					${textCarruselImatges2.titleHeaderAlt.getData()} 
455				</h2> 
456				<p class="hero-carousel-banner-alt-desc"> 
457					${textCarruselImatges2.descHeaderAlt.getData()} 
458				</p> 
459			</div> 
460		</#if> 
461		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
462			<div class="hero-carousel__container js-carousel-banner-al_alt is-playing" 
463				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
464				data-next-text='<@liferay.language key="label.carousel.next"/>' 
465				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
466				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
467				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
468				<#if sortedEntriesRootElems?has_content>				 
469					<#foreach element in sortedEntriesRootElems> 
470						<div class="hero hero--super"> 
471							<div class="hero__container"> 
472								<#if element.typeLinkAlt.getData() == "video"> 
473								<a href="#" onclick='showVideoModalBanner(`${element.External_LinkAlt.getData()}`);return false;' class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if>> 
474								<#else> 
475								<a class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if> <#if element.typeLinkAlt.getData() == "extern"> href="${element.External_LinkAlt.getData()}" target="_blank" <#elseif element.typeLinkAlt.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLinkAlt.getData() == "intern" && element.External_LinkAlt?? && element.External_LinkAlt.getData()?has_content> href="${element.External_LinkAlt.getData()}" target="_self" </#if>> 
476								</#if> 
477									<div class="hero__media <#if (!element.titleElemAlt?? || !element.titleElemAlt.getData()?has_content) && (!element.descElemAlt?? || !element.descElemAlt.getData()?has_content)>hero__media-no-fade</#if>"> 
478										<#if element.typeLinkAlt.getData() == "video"> 
479											<div class="hero__media-video__container"> 
480												<span class="hero__media-video__img"> 
481												</span> 
482											</div> 
483										</#if> 
484										<img class="hero__image hero__image-new lazyload" data-src="${element.imageAlt.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
485									</div> 
486									<div class="hero__content white__banner"> 
487										<p class="hero__title" > 
488											${element.titleElemAlt.getData()} 
489											<#if element.typeLinkAlt.getData() == "extern"> 
490												<span class="window-warning"> 
491													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
492												</span> 
493											</#if> 
494										</p> 
495										<p class="hero__desc-alt" > 
496											${element.descElemAlt.getData()} 
497										</p> 
498									</div> 
499								</a> 
500							</div> 
501						</div> 
502					</#foreach> 
503				</#if> 
504			</div> 
505		</div> 
506	</div> 
507 
508	<div class="dialog"> 
509		<div id="carrusel-banner-video" class="u-hidden"> 
510			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
511			</div> 
512		</div> 
513	</div> 
514	<script type="text/javascript"> 
515		initSliderCarruselBanner2(); 
516 
517		function initSliderCarruselBanner2() { 
518			if($(".js-carousel-banner-al_alt").hasClass('slick-initialized')) { 
519				$(".js-carousel-banner-al_alt").slick("unslick"); 
520
521			$('.js-carousel-banner-al_alt .slick-toggle-play').remove(); 
522			$('.js-carousel-banner-al_alt').slick({ 
523				slidesToShow: 1, 
524				arrows: true, 
525				draggable: true, 
526				infinite: false, 
527				variableWidth: false, 
528				autoplaySpeed: 4000, 
529				dots: true, 
530				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
531				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
532				responsive: [ 
533
534						breakpoint: 767, 
535						settings: { 
536							slidesToShow: 1, 
537							arrows: false, 
538							variableWidth: true, 
539							dots: true 
540
541
542
543			}).each(function () { 
544				var carousel = $(this), 
545				toggleButton, 
546				toggleIcon; 
547 
548				carousel.find('.slick-next__icon').attr({ 
549					'alt': carousel.data('next-text') 
550				}); 
551 
552				carousel.find('.slick-prev__icon').attr({ 
553					'alt': carousel.data('prev-text') 
554				}); 
555			}); 
556 
557			if ($('.hero-carousel__container .hero').length == 1) { 
558				$('.hero-carousel__container .slick-toggle-play').hide(); 
559
560 
561			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
562			if($(".js-carousel-banner-al_alt .slick-dots").length > 0) { 
563				setDotsPositionBanner2(); 
564
565
566 
567		function showVideoModalBanner2(link) { 
568			const start = link.indexOf("v=") + 2; 
569			const end = start + 2 + 11; 
570 
571			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
572			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
573
574		function setDotsPositionBanner2() { 
575			$(".js-carousel-banner-al_alt .slick-dots").appendTo($(".js-carousel-banner-al_alt").parent()); 
576
577 
578		window.addEventListener('resize', function(event){ 
579			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
580			if($(".js-carousel-banner-al_alt .slick-dots").length > 0 && width > 768) { 
581				setDotsPositionBanner2(); 
582
583		});    
584 
585	</script> 
586</#if> 
587 
588 
589<#--  CARRUSEL-TRES-CARD  --> 
590 
591<#if referencesFieldSet?? && 0 < referencesFieldSet.getSiblings()?size && referencesFieldSet.getSiblings()[0].referenceId.getData()?has_content && (!hideTresCards?? || !getterUtil.getBoolean(hideTresCards.getData()))> 
592	<#assign colorClass = "" /> 
593	<#assign fullBody = "" /> 
594	<#if fondoColorCarruselCards?? && fondoColorCarruselCards.getData()??> 
595		<#if fondoColorCarruselCards.getData()=="blanc"> 
596			<#assign colorClass = "hola-bcn-carrusel-standard--white" /> 
597			<#assign fullBody = "full-body__container" /> 
598		<#else> 
599			<#assign colorClass = "hola-bcn-carrusel-standard--gray" /> 
600			<#assign fullBody = "full-body__container" /> 
601		</#if> 
602	</#if> 
603 
604	<section class="hola-bcn-carrusel-standard ${colorClass}"> 
605		<div class="hola-bcn-carrusel-standard-cont-ext hola-bcn-carrusel-standard-cont-ext-extra hola-bcn-carrusel-standard-cont-ext-flex ${fullBody}"> 
606			<div class="hola-bcn-carrusel-standard--container"> 
607				<div class="hola-bcn-carrusel-standard--outer"> 
608						<div class="hola-bcn-carrusel-standard_new-header"> 
609							<h2 class="title title--1 hola-bcn-carrusel-standard__title hola-bcn-carrusel-standard__title_new">${titleCarruselCards.getData()}</h2> 
610							<p class="hola-bcn-carrusel-standard__intro-text">${subtitleCarruselCards.getData()}</p> 
611						</div> 
612					<ul id="result-list" class="hola-bcn-carrusel-standard__items js__hola-bcn-standard-slider"> 
613						<#assign tmbGroupId = 20182> 
614						<#assign fundacioGroupId = 79790> 
615						<#list referencesFieldSet.getSiblings() as element> 
616							<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
617							<#assign articleId = element.referenceId.getData()> 
618							<#assign groupId = getterUtil.getLong(groupId)> 
619							<#attempt> 
620								<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId) /> 
621							<#recover> 
622								<#if groupId == tmbGroupId> 
623									<#assign groupId = fundacioGroupId> 
624								<#else> 
625									<#assign groupId = tmbGroupId> 
626								</#if> 
627								<#attempt> 
628									<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId)!> 
629								<#recover> 
630									<#assign journalArticle = ""> 
631								</#attempt> 
632							</#attempt> 
633							<#if journalArticle?has_content && journalArticle != ""> 
634								<#assign document = saxReaderUtil.read(journalArticle.getContent())> 
635								<#assign rootElement = document.getRootElement()> 
636 
637								<#assign resourceprimKey = journalArticle.getResourcePrimKey()> 
638								<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey)> 
639								<#assign assetRenderer = assetEntry.getAssetRenderer()> 
640								<#assign articleURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, "")> 
641								<#assign articleFriendlyURL = assetRenderer.getUrlTitle()> 
642								<#assign newwindow = ""> 
643								<#if !articleURL?has_content> 
644									<#assign newwindow = "target='_blank'"> 
645									<#if !isFundacio> 
646										<#if currentURL?contains("pre3")> 
647											<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
648										<#else> 
649											<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
650										</#if> 
651									<#else> 
652										<#if currentURL?contains("pre3")> 
653											<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
654										<#else> 
655											<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
656										</#if> 
657									</#if> 
658								</#if> 
659 
660								<#assign title = ""> 
661								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
662								<#if titleSel.selectSingleNode(rootElement)?has_content> 
663									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
664								</#if> 
665								 
666								<#assign subtitle = ""> 
667								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
668								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
669									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
670								</#if> 
671 
672								<#assign initDateNovetatAgenda = ""> 
673								<#assign fromInitDateNovetatAgenda = ""> 
674								<#assign endDateNovetatAgenda = ""> 
675								<#assign whereNovetatAgenda = ""> 
676								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
677								<#if novetatAgendaSel?has_content> 
678									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
679 
680									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
681										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
682									</#if> 
683 
684									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
685										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
686									</#if> 
687 
688									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
689										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
690									</#if> 
691 
692									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
693									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
694										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
695									</#if> 
696								</#if> 
697 
698								<#assign typeNovetatAgenda = ""> 
699								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
700								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
701									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
702								</#if> 
703 
704								<#assign filterNovetatAgenda = ""> 
705								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
706								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
707									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
708								</#if> 
709								 
710								<#assign imageNovetatAgenda = ""> 
711								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
712								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
713									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
714									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
715									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
716								</#if> 
717 
718								<#assign imageAltNovetatAgenda = ""> 
719								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
720								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
721									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
722								</#if> 
723 
724								<#assign pubDateNovetatAgenda = ""> 
725								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
726								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
727									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
728								</#if> 
729 
730								<#assign pubTimeNovetatAgenda = ""> 
731								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
732								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
733									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
734								</#if> 
735 
736								<#assign despubDateNovetatAgenda = ""> 
737								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
738								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
739									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
740								</#if> 
741 
742								<#assign despubTimeNovetatAgenda = ""> 
743								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
744								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
745									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
746								</#if> 
747 
748								<#assign isExpiredNovetatAgenda = ""> 
749								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
750								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
751									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
752								</#if> 
753 
754								<#assign isPublishedNA = false> 
755								<#if (pubDateNovetatAgenda?has_content)> 
756									<#if pubTimeNovetatAgenda?has_content> 
757										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
758										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
759									<#else> 
760										<#assign timeActDate = ""> 
761										<#assign timeActFormat = ""> 
762									</#if> 
763									<#attempt>	 
764										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
765										 
766										<#if timeActFormat?has_content && timeActFormat != ""> 
767											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
768											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
769										</#if> 
770										<#assign dataActMil = dataAct?long> 
771										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
772										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
773									<#recover> 
774									</#attempt> 
775								</#if> 
776 
777								<#assign isDespublishedNA = false> 
778								<#if (despubDateNovetatAgenda?has_content)> 
779									<#if despubTimeNovetatAgenda?has_content> 
780										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
781										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
782									<#else> 
783										<#assign timeExpDate = ""> 
784										<#assign timeExpFormat = ""> 
785									</#if> 
786									<#attempt> 
787										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
788										 
789										<#if timeExpFormat?has_content && timeExpFormat != ""> 
790											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
791											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
792										</#if> 
793										<#assign dataExpMil = dataExp?long> 
794										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
795										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
796									<#recover> 
797									</#attempt> 
798								</#if> 
799 
800								<#assign isExpiredNA = false> 
801								<#if journalArticle.expirationDate??> 
802									<#assign dataExp = journalArticle.expirationDate?datetime> 
803									<#attempt> 
804										<#assign dataExpMil = dataExp?long> 
805										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
806										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
807									<#recover> 
808									</#attempt> 
809								</#if> 
810 
811								<#assign showNovetatAgenda = false> 
812								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
813									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
814								<#else> 
815									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
816								</#if> 
817 
818								<#if showNovetatAgenda> 
819									<#if title?has_content> 
820										<li class="hola-bcn-carrusel-standard_new-li"> 
821											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
822												<div class="hola-bcn-carrusel-standard__card-cover"> 
823													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
824													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
825													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
826														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
827													</div> 
828													<#if filterNovetatAgenda?has_content> 
829														<div class="hola-bcn-carrusel-standard-highlight"> 
830															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
831														</div> 
832													</#if> 
833												</div> 
834												<div class="hola-bcn-carrusel-standard-container"> 
835													<div> 
836														<h3 class="hola-bcn-carrusel-standard__card-title"> 
837															${title} 
838															<#if newwindow?? && newwindow?has_content> 
839																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
840															</#if> 
841														</h3> 
842														<span class="hola-bcn-carrusel-standard__card-description"> 
843															${subtitle} 
844														</span> 
845													</div> 
846													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
847														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
848															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
849																<div class="hola-bcn-carrusel-standard-date"> 
850																	<#if fromInitDateNovetatAgenda == "true"> 
851																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</span> 
852																	<#else> 
853																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}<#if endDateNovetatAgenda?has_content> <@liferay.language key='label.bloc.novetatagenda.to' /> ${endDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</#if></span> 
854																	</#if> 
855																</div> 
856															</#if> 
857															<#if whereNovetatAgenda?has_content> 
858																<div class="hola-bcn-carrusel-standard-where"> 
859																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
860																</div> 
861															</#if> 
862														</div> 
863													</#if> 
864												</div> 
865											</a> 
866										</li> 
867									</#if> 
868								</#if> 
869							</#if> 
870						</#list> 
871					</ul> 
872				</div> 
873			</div> 
874		</div> 
875	</section> 
876 
877	<script type="text/javascript"> 
878 
879		$(document).ready(function() { 
880			initSliderBcnStandard(); 
881		}); 
882 
883		function initSliderBcnStandard() { 
884			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
885				$(".js__hola-bcn-standard-slider").slick("unslick"); 
886
887 
888			$('.js__hola-bcn-standard-slider').slick({ 
889				slidesToShow: 3, 
890				slidesToScroll: 1, 
891				arrows: false, 
892				dots: false, 
893				draggable: false, 
894				infinite: false, 
895				responsive: [ 
896
897						breakpoint: 767, 
898						settings: { 
899							variableWidth: true, 
900							slidesToShow: 2, 
901							slidesToScroll: 1, 
902							arrows: false, 
903							dots: true, 
904							draggable: true, 
905							infinite: true 
906
907
908
909			}); 
910
911 
912	</script> 
913</#if> 

eDreams Mitja Marató Barcelona

T'expliquem com arribar-hi!

Quan: 16.02.2025


On: Parc de la Ciutadella


Si participes a l'eDreams Mitja Marató Barcelona, arriba-hi amb transport públic. A TMB t'hi portem.

Recomanem accedir al punt de sortida amb metro. Pots fer-ho des de les estacions Arc de Triomf (L1) i Ciutadella - Vila Olímpica (L4)

Consulta les afectacions al servei de bus i les recomanacions de transport.

Consulta Vull anar per altres opcions de transport.

Important! Tingues present que les curses de gran magnitud ocasionen afectacions al trasport de superfície de la ciutat. Consulta l'estat de la xarxa de transport públic abans de sortir de casa.

Bitllet de transport exclusiu

Per a aquesta edició, s'han editat 30.000 bitllest senzills, que s'incloen en a la bossa del corredor.

TMB, amb els grans esdeveniments de la ciutat

L'eDreams Mitja Marató Barcelona, amb 30.000 participants, és una de les curses més importants que es celebren anualment a la ciutat.

TMB, com a principal operador de transport públic de Barcelona i la seva àrea metropolitana, treball en l'impacte que una celebració d'aquesta magnitud pot tenir a la xarxa de trasport. A més a més, també s'implica de forma activa amb els esdeveniments, sent-hi present de forma latent i col·laborant-hi a nivell logístic i de marca.

S'ha produït un error mentre es processava la plantilla.
The following has evaluated to null or missing:
==> detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda  [in template "20155#20195#1501272" at line 308, column 85]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if detallAgenda?? && 0 < detallAgend...  [in template "20155#20195#1501272" at line 308, column 1]
----
1<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
2<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
3<#assign currentURL = request.getRequestURL() /> 
4<#assign isFundacio = false> 
5<#if currentURL?contains("fundacio")> 
6	<#assign isFundacio = true> 
7</#if> 
8 
9<#function miliSeconds dateString firstDate> 
10	<#assign params = dateString?split(":")> 
11	 
12	<#if params?size == 2> 
13		<#assign param1 = params[0]> 
14		<#assign param2 = params[1]> 
15		<#assign param1 = getterUtil.getLong(param1)*3600000> 
16		<#assign param2 = getterUtil.getLong(param2)*60000> 
17		<#assign finalMilSec = param1 + param2> 
18		<#assign finalMilSecLong = getterUtil.getLong(finalMilSec)> 
19		<#assign resultLong = firstDate + finalMilSecLong> 
20		 
21		<#return resultLong> 
22	</#if> 
23</#function> 
24 
25<#--  header-image  --> 
26 
27<#if upperImage?? && upperImage.getData()?has_content> 
28	<div class="header-image"> 
29		<img src="${upperImage.getData()}" <#if upperImageAlt?? && upperImageAlt.getData()?has_content>alt="${upperImageAlt.getData()}"</#if>> 
30	</div> 
31</#if> 
32 
33 
34<#--  breadcrumbs  --> 
35 
36<div class="full-body__container breadcrumbs" style="float: unset; margin-right: auto; padding-bottom: 22px; padding-top: 22px;"> 
37	<p class="breadcrumbs__title"><@liferay.language key='header.breadcrumbs.text' />:</p> 
38	<#if liferay_portlet?has_content><@liferay.breadcrumbs /></#if> 
39</div> 
40 
41 
42<#-- TITOL I SUBTITOL  --> 
43 
44<#if titleGlobal?? && titleGlobal.getData()?has_content || subtitleGlobal?? && subtitleGlobal.getData()?has_content> 
45	<div class="full-body__container basicav2-titol-subtitol"> 
46		<#if titleGlobal?? && titleGlobal.getData()?has_content><h1>${titleGlobal.getData()}</h1></#if> 
47		<#if subtitleGlobal?? && subtitleGlobal.getData()?has_content><p>${subtitleGlobal.getData()}</p></#if> 
48	</div> 
49</#if> 
50 
51 
52<#--  bloc-info-agenda  --> 
53 
54<#if blocInfoAgenda?? && ((blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content) || (blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content)) && (!blocInfoAgenda.hideBlocInfoAgenda?? || !getterUtil.getBoolean(blocInfoAgenda.hideBlocInfoAgenda.getData()))> 
55	<div class="full-body__container bloc-info-agenda"> 
56		<div class="bloc-info-agenda-elements"> 
57			<#if blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?has_content> 
58				<div class="bloc-info-agenda-element"> 
59					<#if blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()?has_content> 
60						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whenBlocInfoAgenda.imageWhenBlocInfoAgenda.getData()}"> 
61					<#else> 
62						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/calendar.svg"> 
63					</#if> 
64					<#if blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData()?has_content && getterUtil.getBoolean(blocInfoAgenda.whenBlocInfoAgenda.fromInitDateBlocInfoAgenda.getData())> 
65						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b><@liferay.language key='label.bloc.novetatagenda.from' /> ${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</b></p></div> 
66					<#else> 
67						<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.when"/> <b>${blocInfoAgenda.whenBlocInfoAgenda.initDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}<#if blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda?? && blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?has_content> <@liferay.language key="label.bloc.novetatagenda.to"/> ${blocInfoAgenda.whenBlocInfoAgenda.endDateBlocInfoAgenda.getData()?date["yyyy-MM-dd"]?string("dd.MM.yyyy")}</#if></b></p></div> 
68					</#if> 
69				</div> 
70				<hr> 
71			</#if> 
72			<#if blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()?has_content> 
73				<div class="bloc-info-agenda-element"> 
74					<#if blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda?? && blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()?has_content> 
75						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.whereBlocInfoAgenda.imageWhereBlocInfoAgenda.getData()}"> 
76					<#else> 
77						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/location_on.svg"> 
78					</#if> 
79					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.where"/> <b>${blocInfoAgenda.whereBlocInfoAgenda.textWhereBlocInfoAgenda.getData()}</b></p></div> 
80				</div> 
81				<hr> 
82			</#if> 
83			<#if blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()?has_content> 
84				<div class="bloc-info-agenda-element"> 
85					<#if blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda?? && blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()?has_content> 
86						<img class="bloc-info-agenda-img" src="${blocInfoAgenda.accesBlocInfoAgenda.imageAccesBlocInfoAgenda.getData()}"> 
87					<#else> 
88						<img class="bloc-info-agenda-img" src="${imagesFolder}/basic/24px/svg/ticket.svg"> 
89					</#if> 
90					<div class="bloc-info-agenda-text"><p><@liferay.language key="label.bloc.novetatagenda.acces"/> <b>${blocInfoAgenda.accesBlocInfoAgenda.textAccesBlocInfoAgenda.getData()}</b></p></div> 
91				</div> 
92			</#if> 
93		</div> 
94		<#if blocInfoAgenda.textBottomBlocInfoAgenda?? && blocInfoAgenda.textBottomBlocInfoAgenda.getData()?has_content> 
95			<div class="bloc-info-agenda-bottom"> 
96				<span>${blocInfoAgenda.textBottomBlocInfoAgenda.getData()}</span> 
97			</div> 
98		</#if> 
99	</div> 
100</#if> 
101 
102<#--  text-center  --> 
103 
104<#if textCenter?? && textCenter.getData()?has_content> 
105	<div class="full-body__container text-center-basic"> 
106		${textCenter.getData()} 
107	</div> 
108</#if> 
109 
110 
111<#--  image-center  --> 
112 
113<#if imageCenter?? && imageCenter.getData()?has_content> 
114	<div class="full-body__container image-center-basic"> 
115		<img src="${imageCenter.getData()}"> 
116	</div> 
117</#if> 
118 
119 
120<#--  TEXT-CARRUSEL-IMATGES  --> 
121 
122<#if textCarruselImatges1?? && 0 < textCarruselImatges1.elementsFieldSet.getSiblings()?size && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image?? && textCarruselImatges1.elementsFieldSet.getSiblings()[0].elementsFieldSetFieldSet.image.getData()?has_content && (!textCarruselImatges1.hideTextCarruselImatges?? || !getterUtil.getBoolean(textCarruselImatges1.hideTextCarruselImatges.getData()))> 
123	<#assign entriesMapList = []> 
124	<#foreach elem in textCarruselImatges1.elementsFieldSet.getSiblings()> 
125		<#if elem.elementsFieldSetFieldSet.order?has_content> 
126			<#assign currentOrder = elem.elementsFieldSetFieldSet.order.getData()> 
127		</#if> 
128		<#if !currentOrder?has_content || currentOrder == "null"> 
129			<#assign currentOrder = "99"> 
130		</#if> 
131		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSet , "order" : currentOrder?number}> 
132		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
133	</#foreach> 
134 
135	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
136	<#assign sortedEntriesRootElems = []> 
137 
138	<#foreach currEntryMap in sortedEntriesMapList> 
139		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
140	</#foreach> 
141 
142	<#assign leftContent = ""> 
143	<#if textCarruselImatges1.titleHeader?? && textCarruselImatges1.titleHeader.getData()?has_content && textCarruselImatges1.descHeader?? && textCarruselImatges1.descHeader?has_content> 
144		<#assign leftContent = "true"> 
145	</#if> 
146 
147	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
148		<#if leftContent?has_content> 
149			<div class="hero-carousel__container-banner"> 
150				<h2 class="hero-carousel-banner-alt-title"> 
151					${textCarruselImatges1.titleHeader.getData()} 
152				</h2> 
153				<p class="hero-carousel-banner-alt-desc"> 
154					${textCarruselImatges1.descHeader.getData()} 
155				</p> 
156			</div> 
157		</#if> 
158		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
159			<div class="hero-carousel__container js-carousel-banner-al_1 is-playing" 
160				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
161				data-next-text='<@liferay.language key="label.carousel.next"/>' 
162				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
163				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
164				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
165				<#if sortedEntriesRootElems?has_content>				 
166					<#foreach element in sortedEntriesRootElems> 
167						<div class="hero hero--super"> 
168							<div class="hero__container"> 
169								<#if element.typeLink.getData() == "video"> 
170								<a href="#" onclick='showVideoModalBanner(`${element.External_Link.getData()}`);return false;' class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if>> 
171								<#else> 
172								<a class="hero__link" <#if element.titleLink?? && element.titleLink.getData()?has_content>title="${element.titleLink.getData()}"</#if> <#if element.typeLink.getData() == "extern"> href="${element.External_Link.getData()}" target="_blank" <#elseif element.typeLink.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLink.getData() == "intern" && element.External_Link?? && element.External_Link.getData()?has_content> href="${element.External_Link.getData()}" target="_self" </#if>> 
173								</#if> 
174									<div class="hero__media <#if (!element.titleElem?? || !element.titleElem.getData()?has_content) && (!element.descElem?? || !element.descElem.getData()?has_content)>hero__media-no-fade</#if>"> 
175										<#if element.typeLink.getData() == "video"> 
176											<div class="hero__media-video__container"> 
177												<span class="hero__media-video__img"> 
178												</span> 
179											</div> 
180										</#if> 
181										<img class="hero__image hero__image-new lazyload" data-src="${element.image.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
182									</div> 
183									<div class="hero__content white__banner"> 
184										<p class="hero__title" > 
185											${element.titleElem.getData()} 
186											<#if element.typeLink.getData() == "extern"> 
187												<span class="window-warning"> 
188													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
189												</span> 
190											</#if> 
191										</p> 
192										<p class="hero__desc-alt" > 
193											${element.descElem.getData()} 
194										</p> 
195									</div> 
196								</a> 
197							</div> 
198						</div> 
199					</#foreach> 
200				</#if> 
201			</div> 
202		</div> 
203	</div> 
204 
205	<div class="dialog"> 
206		<div id="carrusel-banner-video" class="u-hidden"> 
207			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
208			</div> 
209		</div> 
210	</div> 
211	<script type="text/javascript"> 
212		initSliderCarruselBanner1(); 
213 
214		function initSliderCarruselBanner1() { 
215			if($(".js-carousel-banner-al_1").hasClass('slick-initialized')) { 
216				$(".js-carousel-banner-al_1").slick("unslick"); 
217
218			$('.js-carousel-banner-al_1 .slick-toggle-play').remove(); 
219			$('.js-carousel-banner-al_1').slick({ 
220				slidesToShow: 1, 
221				arrows: true, 
222				draggable: true, 
223				infinite: false, 
224				variableWidth: false, 
225				autoplaySpeed: 4000, 
226				dots: true, 
227				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
228				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
229				responsive: [ 
230
231						breakpoint: 767, 
232						settings: { 
233							slidesToShow: 1, 
234							arrows: false, 
235							variableWidth: true, 
236							dots: true 
237
238
239
240			}).each(function () { 
241				var carousel = $(this), 
242				toggleButton, 
243				toggleIcon; 
244 
245				carousel.find('.slick-next__icon').attr({ 
246					'alt': carousel.data('next-text') 
247				}); 
248 
249				carousel.find('.slick-prev__icon').attr({ 
250					'alt': carousel.data('prev-text') 
251				}); 
252			}); 
253 
254			if ($('.hero-carousel__container .hero').length == 1) { 
255				$('.hero-carousel__container .slick-toggle-play').hide(); 
256
257 
258			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
259			if($(".js-carousel-banner-al_1 .slick-dots").length > 0) { 
260				setDotsPositionBanner1(); 
261
262
263 
264		function showVideoModalBanner(link) { 
265			const start = link.indexOf("v=") + 2; 
266			const end = start + 2 + 11; 
267 
268			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
269			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
270
271		function setDotsPositionBanner1() { 
272			$(".js-carousel-banner-al_1 .slick-dots").appendTo($(".js-carousel-banner-al_1").parent()); 
273
274 
275		window.addEventListener('resize', function(event){ 
276			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
277			if($(".js-carousel-banner-al_1 .slick-dots").length > 0 && width > 768) { 
278				setDotsPositionBanner1(); 
279
280		});    
281 
282	</script> 
283</#if> 
284 
285 
286<#--  BASICA-TITOL-TEXT  --> 
287 
288<#if basicaTitolText?? && 0 < basicaTitolText.elementsBasica.getSiblings()?size && (basicaTitolText.elementsBasica.getSiblings()[0].titleBasica.getData()?has_content || basicaTitolText.elementsBasica.getSiblings()[0].contentBasica.getData()?has_content) && (!basicaTitolText.hideBasicaTitolText?? || !getterUtil.getBoolean(basicaTitolText.hideBasicaTitolText.getData()))> 
289	<div class="full-body__container basica-titol-text"> 
290		<#foreach elem in basicaTitolText.elementsBasica.getSiblings()> 
291			<div class="basica-titol-text-wrapper"> 
292				<#if elem.titleBasica?? && elem.titleBasica.getData()?has_content><h2 class="">${elem.titleBasica.getData()}</h2></#if> 
293				<#if elem.contentBasica?? && elem.contentBasica.getData()?has_content><div class="basica-titol-text-content">${elem.contentBasica.getData()}</div></#if> 
294			</div> 
295			<#foreach subelem in elem.subelementsBasica.getSiblings()> 
296				<div class="basica-titol-text-wrapper"> 
297					<#if subelem.subelementTitleBasica?? && subelem.subelementTitleBasica.getData()?has_content><h3>${subelem.subelementTitleBasica.getData()}</h3></#if> 
298					<#if subelem.subelementContentBasica?? && subelem.subelementContentBasica.getData()?has_content><div class="basica-titol-text-content">${subelem.subelementContentBasica.getData()}</div></#if> 
299				</div> 
300			</#foreach> 
301		</#foreach> 
302	</div> 
303</#if> 
304 
305 
306<#--  bloc-detall-agenda  --> 
307 
308<#if detallAgenda?? && 0 < detallAgenda.elementsDetallAgenda.getSiblings()?size && (detallAgenda.elementsDetallAgenda.getSiblings()[0].titleDetallAgenda.getData()?has_content || detallAgenda.elementsDetallAgenda.getSiblings()[0].contentDetallAgenda.getData()?has_content) && (!detallAgenda.hideDetallAgenda?? || !getterUtil.getBoolean(detallAgenda.hideDetallAgenda.getData()))> 
309	<div class="full-body__container detall-agenda"> 
310		<#foreach elem in detallAgenda.elementsDetallAgenda.getSiblings()> 
311			<div class="detall-agenda-wrapper"> 
312				<#if elem.titleDetallAgenda?? && elem.titleDetallAgenda.getData()?has_content><h2 class="">${elem.titleDetallAgenda.getData()}</h2></#if> 
313				<#if elem.contentDetallAgenda?? && elem.contentDetallAgenda.getData()?has_content><div class="detall-agenda-content">${elem.contentDetallAgenda.getData()}</div></#if> 
314			</div> 
315		</#foreach> 
316		<div class="detall-agenda-buttons-wrapper"> 
317		<#foreach subelem in detallAgenda.buttonsDetallAgenda.getSiblings()> 
318			<a title="<#if subelem.accessibleTitleButtons?? && subelem.accessibleTitleButtons.getData()?has_content>${subelem.accessibleTitleButtons.getData()}</#if>" type="button" class="button button--a" <#if subelem.linkTypeDetallAgenda.getData() == "extern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" rel="external" target="_blank" <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.Internal_LinkDetallAgenda?? && subelem.Internal_LinkDetallAgenda.getFriendlyUrl()?has_content> href="${subelem.Internal_LinkDetallAgenda.getFriendlyUrl()}" target="_self"  <#elseif subelem.linkTypeDetallAgenda.getData() == "intern" && subelem.External_LinkDetallAgenda?? && subelem.External_LinkDetallAgenda.getData()?has_content> href="${subelem.External_LinkDetallAgenda.getData()}" target="_self" </#if>> 
319				<span class="button__label">${subelem.linkTextDetallAgenda.getData()}</span> 
320			</a> 
321		</#foreach> 
322		</div> 
323	</div> 
324</#if> 
325 
326 
327<#--  DT_PP_TITULO_VIDEO  --> 
328 
329<#if stPpVideo?? && stPpVideo.linkFieldSet.link.getData()?has_content && (!stPpVideo.hideStPpVideo?? || !getterUtil.getBoolean(stPpVideo.hideStPpVideo.getData()))> 
330	<style> 
331		.points-video__video-cover.no_video::after{ 
332			background: none; 
333
334	</style> 
335	<#assign hasLink = false> 
336	<#if stPpVideo.linkHeader?? && stPpVideo.linkHeader.getData()?has_content && stPpVideo.linkHeaderText?? && stPpVideo.linkHeaderText.getData()?has_content> 
337		<#assign hasLink = true> 
338	</#if> 
339	<section class="points-video bg-gray pt-56"> 
340		<div class="main__container"> 
341			<div class="full-body"> 
342				<div class="full-body__container points-video__header-extra-container"> 
343					<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?has_content && stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()?trim?has_content> 
344						<a name="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}" id="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.ancoraVideo.getData()}"> 
345						</a> 
346					</#if> 
347					<#if stPpVideo.titol?? && stPpVideo.titol.getData()?has_content> 
348						<div class="points-video__header"> 
349							<div class="points-video__header-extra" <#if !hasLink>style="justify-content: center; margin-right: 0;"</#if>> 
350								<h2 class="points-video__title"> 
351								${stPpVideo.titol.getData()}</h2> 
352								<#if hasLink> 
353									<a class="points-video__subtitle-link" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
354								</#if> 
355							</div> 
356							<p class="points-video__description" <#if !hasLink>style="text-align: center; max-width: 100%;"</#if>> 
357							${stPpVideo.descriptiu.getData()}</p> 
358						</div> 
359					</#if> 
360					 
361					<div class="points-video__video-item cookieconsent-optin-marketing media-unit__content" id="marketingCookies"> 
362						<#if stPpVideo.linkFieldSet.link.getData()?has_content> 
363							<#assign start = stPpVideo.linkFieldSet.link.getData()?index_of("v=") + 2> 
364							<#--13 because v= + 11 char for youtube ids 
365							--> 
366							<#assign end = start + 11> 
367							<a href="${stPpVideo.linkFieldSet.link.getData()}" class="points-video__video-stPpVideo.linkFieldSet.link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}" 
368								rel="dialog-video" data-video="${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}"> 
369								<div class="points-video__video-cover" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
370									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
371								</div> 
372								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
373									<p class="points-video__caption"> 
374									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
375								</#if> 
376							</a> 
377						<#else> 
378							<a class="points-video__video-link" title="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}"> 
379								<div class="points-video__video-cover no_video" style="background-image: url(${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()});"> 
380									<img src="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideo.getData()}" alt="${stPpVideo.linkFieldSet.linkFieldSetFieldSet.imgVideoFieldSet.imgVideoFieldSetFieldSet.alt.getData()}" class="points-video__video-image"> 
381								</div> 
382								<#if stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()?has_content> 
383									<p class="points-video__caption"> 
384									${stPpVideo.linkFieldSet.linkFieldSetFieldSet.descriptiuVideo.getData()}</p> 
385								</#if> 
386							</a> 
387							 
388						</#if> 
389					</div> 
390					<div class='cookieconsent-optout-marketing media-unit__content'> 
391						<@liferay.language key="cookiebot.youtube.no-marketing"/> 
392					</div> 
393					<#if hasLink> 
394						<a class="points-video__subtitle-link-mobile" href="${stPpVideo.linkHeader.getData()}">${stPpVideo.linkHeaderText.getData()}</a> 
395					</#if> 
396				</div> 
397			</div> 
398		</div> 
399	</section> 
400	<section class="video-dialog js__video-dialog u-hidden"> 
401		<div class="u-hidden" id="fragment-show-video"> 
402			<div class="video-dialog__panel"> 
403				<header class="video-dialog__header"> 
404					<button class="video-dialog__close js__video-dialog-close"> 
405					Cerrar</button> 
406				</header> 
407				<div class="video-dialog__content"> 
408					<div class="video-dialog__inner js__video-dialog-container"> 
409						<iframe data-cookieconsent="marketing" data-cookieblock-src="https://www.youtube.com/embed/${stPpVideo.linkFieldSet.link.getData()?substring(start, end)}" frameborder="0" class="video-dialog__media" allow="encrypted-media" allowfullscreen=""> 
410						</iframe> 
411					</div> 
412				</div> 
413			</div> 
414		</div> 
415		<div class="video-dialog__overlay js__video-dialog-close"> 
416		</div> 
417	</section> 
418</#if> 
419 
420 
421<#--  TEXT-CARRUSEL-IMATGES-ALT  --> 
422 
423<#if textCarruselImatges2?? && 0 < textCarruselImatges2.elementsFieldSetAlt.getSiblings()?size && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt?? && textCarruselImatges2.elementsFieldSetAlt.getSiblings()[0].elementsFieldSetFieldSetAlt.imageAlt.getData()?has_content && (!textCarruselImatges2.hideTextCarruselImatgesAlt?? || !getterUtil.getBoolean(textCarruselImatges2.hideTextCarruselImatgesAlt.getData()))> 
424	<#assign imagesFolder = themeDisplay.getPathThemeImages()> 
425 
426	<#assign entriesMapList = []> 
427	<#foreach elem in textCarruselImatges2.elementsFieldSetAlt.getSiblings()> 
428		<#if elem.elementsFieldSetFieldSetAlt.order?has_content> 
429			<#assign currentOrder = elem.elementsFieldSetFieldSetAlt.order.getData()> 
430		</#if> 
431		<#if !currentOrder?has_content || currentOrder == "null"> 
432			<#assign currentOrder = "99"> 
433		</#if> 
434		<#assign currEntryMap = {"entry" : elem.elementsFieldSetFieldSetAlt , "order" : currentOrder?number}> 
435		<#assign entriesMapList = entriesMapList + [currEntryMap]> 
436	</#foreach> 
437 
438	<#assign sortedEntriesMapList = entriesMapList?sort_by("order")> 
439	<#assign sortedEntriesRootElems = []> 
440 
441	<#foreach currEntryMap in sortedEntriesMapList> 
442		<#assign sortedEntriesRootElems = sortedEntriesRootElems + [currEntryMap.entry]> 
443	</#foreach> 
444 
445	<#assign leftContent = ""> 
446	<#if textCarruselImatges2.titleHeaderAlt?? && textCarruselImatges2.titleHeaderAlt.getData()?has_content && textCarruselImatges2.descHeaderAlt?? && textCarruselImatges2.descHeaderAlt?has_content> 
447		<#assign leftContent = "true"> 
448	</#if> 
449 
450	<div class="full-body__container hero-carousel-new hero-carousel hero-carousel--super hero-carousel-banner-alt <#if !leftContent?has_content>hero-carousel-banner-solo</#if>"> 
451		<#if leftContent?has_content> 
452			<div class="hero-carousel__container-banner"> 
453				<h2 class="hero-carousel-banner-alt-title"> 
454					${textCarruselImatges2.titleHeaderAlt.getData()} 
455				</h2> 
456				<p class="hero-carousel-banner-alt-desc"> 
457					${textCarruselImatges2.descHeaderAlt.getData()} 
458				</p> 
459			</div> 
460		</#if> 
461		<div aria-live="polite" aria-atomic="false" aria-relevant="all" class="slick-list draggable"> 
462			<div class="hero-carousel__container js-carousel-banner-al_alt is-playing" 
463				data-prev-text='<@liferay.language key="label.carousel.prev"/>' 
464				data-next-text='<@liferay.language key="label.carousel.next"/>' 
465				data-pagination-text='<@liferay.language key="label.carousel.outstanding"/>' 
466				data-stop-text='<@liferay.language key="label.carousel.pause"/>' 
467				data-play-text='<@liferay.language key="label.carousel.start"/>'> 
468				<#if sortedEntriesRootElems?has_content>				 
469					<#foreach element in sortedEntriesRootElems> 
470						<div class="hero hero--super"> 
471							<div class="hero__container"> 
472								<#if element.typeLinkAlt.getData() == "video"> 
473								<a href="#" onclick='showVideoModalBanner(`${element.External_LinkAlt.getData()}`);return false;' class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if>> 
474								<#else> 
475								<a class="hero__link" <#if element.titleLinkAlt?? && element.titleLinkAlt.getData()?has_content>title="${element.titleLinkAlt.getData()}"</#if> <#if element.typeLinkAlt.getData() == "extern"> href="${element.External_LinkAlt.getData()}" target="_blank" <#elseif element.typeLinkAlt.getData() == "intern" && element.Internal_Link?? && element.Internal_Link.getFriendlyUrl()?has_content> href="${element.Internal_Link.getFriendlyUrl()}" target="_self"  <#elseif element.typeLinkAlt.getData() == "intern" && element.External_LinkAlt?? && element.External_LinkAlt.getData()?has_content> href="${element.External_LinkAlt.getData()}" target="_self" </#if>> 
476								</#if> 
477									<div class="hero__media <#if (!element.titleElemAlt?? || !element.titleElemAlt.getData()?has_content) && (!element.descElemAlt?? || !element.descElemAlt.getData()?has_content)>hero__media-no-fade</#if>"> 
478										<#if element.typeLinkAlt.getData() == "video"> 
479											<div class="hero__media-video__container"> 
480												<span class="hero__media-video__img"> 
481												</span> 
482											</div> 
483										</#if> 
484										<img class="hero__image hero__image-new lazyload" data-src="${element.imageAlt.getData()}" <#if element.altImage?? && element.altImage.getData()?has_content>alt="${element.altImage.getData()}"</#if>> 
485									</div> 
486									<div class="hero__content white__banner"> 
487										<p class="hero__title" > 
488											${element.titleElemAlt.getData()} 
489											<#if element.typeLinkAlt.getData() == "extern"> 
490												<span class="window-warning"> 
491													<img class="window-warning__icon" src="${imagesFolder}/basic/16px/png/icone-obrir-fora-blanc-16x16.png" alt="<@liferay.language key="label.externalLink.alt"/>" title="<@liferay.language key="label.externalLink.title"/>"> 
492												</span> 
493											</#if> 
494										</p> 
495										<p class="hero__desc-alt" > 
496											${element.descElemAlt.getData()} 
497										</p> 
498									</div> 
499								</a> 
500							</div> 
501						</div> 
502					</#foreach> 
503				</#if> 
504			</div> 
505		</div> 
506	</div> 
507 
508	<div class="dialog"> 
509		<div id="carrusel-banner-video" class="u-hidden"> 
510			<div class="dialog__body dialog__body--jotmbe" id="carrusel-banner-video-content"> 
511			</div> 
512		</div> 
513	</div> 
514	<script type="text/javascript"> 
515		initSliderCarruselBanner2(); 
516 
517		function initSliderCarruselBanner2() { 
518			if($(".js-carousel-banner-al_alt").hasClass('slick-initialized')) { 
519				$(".js-carousel-banner-al_alt").slick("unslick"); 
520
521			$('.js-carousel-banner-al_alt .slick-toggle-play').remove(); 
522			$('.js-carousel-banner-al_alt').slick({ 
523				slidesToShow: 1, 
524				arrows: true, 
525				draggable: true, 
526				infinite: false, 
527				variableWidth: false, 
528				autoplaySpeed: 4000, 
529				dots: true, 
530				nextArrow: '<button type="button" class="slick-next"><img class="slick-next__icon slick-next__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-next-black.svg" alt=\'<@liferay.language key="label.next"/>\'/><img class="slick-next__icon slick-next__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-next-gray.svg" alt=\'<@liferay.language key="label.next"/>\'/></button>', 
531				prevArrow: '<button type="button" class="slick-prev"><img class="slick-prev__icon slick-prev__icon-normal" src="${imagesFolder}/basic/18px/svg/arrow-prev-black.svg" alt=\'<@liferay.language key="label.prev"/>\'/><img class="slick-prev__icon slick-prev__icon-disabled" src="${imagesFolder}/basic/18px/svg/arrow-prev-gray.svg" alt=\'<@liferay.language key="label.prev"/>\'/></button>', 
532				responsive: [ 
533
534						breakpoint: 767, 
535						settings: { 
536							slidesToShow: 1, 
537							arrows: false, 
538							variableWidth: true, 
539							dots: true 
540
541
542
543			}).each(function () { 
544				var carousel = $(this), 
545				toggleButton, 
546				toggleIcon; 
547 
548				carousel.find('.slick-next__icon').attr({ 
549					'alt': carousel.data('next-text') 
550				}); 
551 
552				carousel.find('.slick-prev__icon').attr({ 
553					'alt': carousel.data('prev-text') 
554				}); 
555			}); 
556 
557			if ($('.hero-carousel__container .hero').length == 1) { 
558				$('.hero-carousel__container .slick-toggle-play').hide(); 
559
560 
561			$('.slick-cloned[aria-describedby]').removeAttr('aria-describedby'); 
562			if($(".js-carousel-banner-al_alt .slick-dots").length > 0) { 
563				setDotsPositionBanner2(); 
564
565
566 
567		function showVideoModalBanner2(link) { 
568			const start = link.indexOf("v=") + 2; 
569			const end = start + 2 + 11; 
570 
571			TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog-video-iframe", "carrusel-banner-video", ""); 
572			$('#carrusel-banner-video-content').html('<iframe class="home-carrusel-video-iframe" src="https://www.youtube.com/embed/'+link.substring(start, end)+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'); 
573
574		function setDotsPositionBanner2() { 
575			$(".js-carousel-banner-al_alt .slick-dots").appendTo($(".js-carousel-banner-al_alt").parent()); 
576
577 
578		window.addEventListener('resize', function(event){ 
579			const width  = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
580			if($(".js-carousel-banner-al_alt .slick-dots").length > 0 && width > 768) { 
581				setDotsPositionBanner2(); 
582
583		});    
584 
585	</script> 
586</#if> 
587 
588 
589<#--  CARRUSEL-TRES-CARD  --> 
590 
591<#if referencesFieldSet?? && 0 < referencesFieldSet.getSiblings()?size && referencesFieldSet.getSiblings()[0].referenceId.getData()?has_content && (!hideTresCards?? || !getterUtil.getBoolean(hideTresCards.getData()))> 
592	<#assign colorClass = "" /> 
593	<#assign fullBody = "" /> 
594	<#if fondoColorCarruselCards?? && fondoColorCarruselCards.getData()??> 
595		<#if fondoColorCarruselCards.getData()=="blanc"> 
596			<#assign colorClass = "hola-bcn-carrusel-standard--white" /> 
597			<#assign fullBody = "full-body__container" /> 
598		<#else> 
599			<#assign colorClass = "hola-bcn-carrusel-standard--gray" /> 
600			<#assign fullBody = "full-body__container" /> 
601		</#if> 
602	</#if> 
603 
604	<section class="hola-bcn-carrusel-standard ${colorClass}"> 
605		<div class="hola-bcn-carrusel-standard-cont-ext hola-bcn-carrusel-standard-cont-ext-extra hola-bcn-carrusel-standard-cont-ext-flex ${fullBody}"> 
606			<div class="hola-bcn-carrusel-standard--container"> 
607				<div class="hola-bcn-carrusel-standard--outer"> 
608						<div class="hola-bcn-carrusel-standard_new-header"> 
609							<h2 class="title title--1 hola-bcn-carrusel-standard__title hola-bcn-carrusel-standard__title_new">${titleCarruselCards.getData()}</h2> 
610							<p class="hola-bcn-carrusel-standard__intro-text">${subtitleCarruselCards.getData()}</p> 
611						</div> 
612					<ul id="result-list" class="hola-bcn-carrusel-standard__items js__hola-bcn-standard-slider"> 
613						<#assign tmbGroupId = 20182> 
614						<#assign fundacioGroupId = 79790> 
615						<#list referencesFieldSet.getSiblings() as element> 
616							<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
617							<#assign articleId = element.referenceId.getData()> 
618							<#assign groupId = getterUtil.getLong(groupId)> 
619							<#attempt> 
620								<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId) /> 
621							<#recover> 
622								<#if groupId == tmbGroupId> 
623									<#assign groupId = fundacioGroupId> 
624								<#else> 
625									<#assign groupId = tmbGroupId> 
626								</#if> 
627								<#attempt> 
628									<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, articleId)!> 
629								<#recover> 
630									<#assign journalArticle = ""> 
631								</#attempt> 
632							</#attempt> 
633							<#if journalArticle?has_content && journalArticle != ""> 
634								<#assign document = saxReaderUtil.read(journalArticle.getContent())> 
635								<#assign rootElement = document.getRootElement()> 
636 
637								<#assign resourceprimKey = journalArticle.getResourcePrimKey()> 
638								<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey)> 
639								<#assign assetRenderer = assetEntry.getAssetRenderer()> 
640								<#assign articleURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, "")> 
641								<#assign articleFriendlyURL = assetRenderer.getUrlTitle()> 
642								<#assign newwindow = ""> 
643								<#if !articleURL?has_content> 
644									<#assign newwindow = "target='_blank'"> 
645									<#if !isFundacio> 
646										<#if currentURL?contains("pre3")> 
647											<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
648										<#else> 
649											<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
650										</#if> 
651									<#else> 
652										<#if currentURL?contains("pre3")> 
653											<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
654										<#else> 
655											<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + "/w/" + articleFriendlyURL> 
656										</#if> 
657									</#if> 
658								</#if> 
659 
660								<#assign title = ""> 
661								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
662								<#if titleSel.selectSingleNode(rootElement)?has_content> 
663									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
664								</#if> 
665								 
666								<#assign subtitle = ""> 
667								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
668								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
669									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
670								</#if> 
671 
672								<#assign initDateNovetatAgenda = ""> 
673								<#assign fromInitDateNovetatAgenda = ""> 
674								<#assign endDateNovetatAgenda = ""> 
675								<#assign whereNovetatAgenda = ""> 
676								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
677								<#if novetatAgendaSel?has_content> 
678									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
679 
680									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
681										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
682									</#if> 
683 
684									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
685										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
686									</#if> 
687 
688									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
689										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
690									</#if> 
691 
692									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
693									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
694										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
695									</#if> 
696								</#if> 
697 
698								<#assign typeNovetatAgenda = ""> 
699								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
700								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
701									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
702								</#if> 
703 
704								<#assign filterNovetatAgenda = ""> 
705								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
706								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
707									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
708								</#if> 
709								 
710								<#assign imageNovetatAgenda = ""> 
711								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
712								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
713									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
714									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
715									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
716								</#if> 
717 
718								<#assign imageAltNovetatAgenda = ""> 
719								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
720								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
721									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
722								</#if> 
723 
724								<#assign pubDateNovetatAgenda = ""> 
725								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
726								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
727									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
728								</#if> 
729 
730								<#assign pubTimeNovetatAgenda = ""> 
731								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
732								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
733									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
734								</#if> 
735 
736								<#assign despubDateNovetatAgenda = ""> 
737								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
738								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
739									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
740								</#if> 
741 
742								<#assign despubTimeNovetatAgenda = ""> 
743								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
744								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
745									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
746								</#if> 
747 
748								<#assign isExpiredNovetatAgenda = ""> 
749								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
750								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
751									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
752								</#if> 
753 
754								<#assign isPublishedNA = false> 
755								<#if (pubDateNovetatAgenda?has_content)> 
756									<#if pubTimeNovetatAgenda?has_content> 
757										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
758										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
759									<#else> 
760										<#assign timeActDate = ""> 
761										<#assign timeActFormat = ""> 
762									</#if> 
763									<#attempt>	 
764										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
765										 
766										<#if timeActFormat?has_content && timeActFormat != ""> 
767											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
768											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
769										</#if> 
770										<#assign dataActMil = dataAct?long> 
771										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
772										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
773									<#recover> 
774									</#attempt> 
775								</#if> 
776 
777								<#assign isDespublishedNA = false> 
778								<#if (despubDateNovetatAgenda?has_content)> 
779									<#if despubTimeNovetatAgenda?has_content> 
780										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
781										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
782									<#else> 
783										<#assign timeExpDate = ""> 
784										<#assign timeExpFormat = ""> 
785									</#if> 
786									<#attempt> 
787										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
788										 
789										<#if timeExpFormat?has_content && timeExpFormat != ""> 
790											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
791											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
792										</#if> 
793										<#assign dataExpMil = dataExp?long> 
794										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
795										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
796									<#recover> 
797									</#attempt> 
798								</#if> 
799 
800								<#assign isExpiredNA = false> 
801								<#if journalArticle.expirationDate??> 
802									<#assign dataExp = journalArticle.expirationDate?datetime> 
803									<#attempt> 
804										<#assign dataExpMil = dataExp?long> 
805										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
806										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
807									<#recover> 
808									</#attempt> 
809								</#if> 
810 
811								<#assign showNovetatAgenda = false> 
812								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
813									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
814								<#else> 
815									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
816								</#if> 
817 
818								<#if showNovetatAgenda> 
819									<#if title?has_content> 
820										<li class="hola-bcn-carrusel-standard_new-li"> 
821											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
822												<div class="hola-bcn-carrusel-standard__card-cover"> 
823													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
824													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
825													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
826														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
827													</div> 
828													<#if filterNovetatAgenda?has_content> 
829														<div class="hola-bcn-carrusel-standard-highlight"> 
830															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
831														</div> 
832													</#if> 
833												</div> 
834												<div class="hola-bcn-carrusel-standard-container"> 
835													<div> 
836														<h3 class="hola-bcn-carrusel-standard__card-title"> 
837															${title} 
838															<#if newwindow?? && newwindow?has_content> 
839																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
840															</#if> 
841														</h3> 
842														<span class="hola-bcn-carrusel-standard__card-description"> 
843															${subtitle} 
844														</span> 
845													</div> 
846													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
847														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
848															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
849																<div class="hola-bcn-carrusel-standard-date"> 
850																	<#if fromInitDateNovetatAgenda == "true"> 
851																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</span> 
852																	<#else> 
853																		<span><b><@liferay.language key='label.bloc.novetatagenda.when' /></b> <@liferay.language key='label.bloc.novetatagenda.from' /> ${initDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}<#if endDateNovetatAgenda?has_content> <@liferay.language key='label.bloc.novetatagenda.to' /> ${endDateNovetatAgenda?date["yyyy-MM-dd"]?string("dd/MM/yyyy")}</#if></span> 
854																	</#if> 
855																</div> 
856															</#if> 
857															<#if whereNovetatAgenda?has_content> 
858																<div class="hola-bcn-carrusel-standard-where"> 
859																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
860																</div> 
861															</#if> 
862														</div> 
863													</#if> 
864												</div> 
865											</a> 
866										</li> 
867									</#if> 
868								</#if> 
869							</#if> 
870						</#list> 
871					</ul> 
872				</div> 
873			</div> 
874		</div> 
875	</section> 
876 
877	<script type="text/javascript"> 
878 
879		$(document).ready(function() { 
880			initSliderBcnStandard(); 
881		}); 
882 
883		function initSliderBcnStandard() { 
884			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
885				$(".js__hola-bcn-standard-slider").slick("unslick"); 
886
887 
888			$('.js__hola-bcn-standard-slider').slick({ 
889				slidesToShow: 3, 
890				slidesToScroll: 1, 
891				arrows: false, 
892				dots: false, 
893				draggable: false, 
894				infinite: false, 
895				responsive: [ 
896
897						breakpoint: 767, 
898						settings: { 
899							variableWidth: true, 
900							slidesToShow: 2, 
901							slidesToScroll: 1, 
902							arrows: false, 
903							dots: true, 
904							draggable: true, 
905							infinite: true 
906
907
908
909			}); 
910
911 
912	</script> 
913</#if> 

Exposició QUINCE, a través de la mirada d’una generació

La Fundació Street Child dona visibilitat a les vides d’infants que sobreviuen en condicions terribles arreu del planeta.

Quan: 06.09.2024 a 31.12.2024


On: Espai Mercè Sala - Fundació TMB


Accés: Entrada gratuïta*

*Validant el títol de transport

La Fundació Street Child España i la Fundació TMB presenten l'exposició de fotografia QUINZE: A través de la mirada d'una generació a l'Espai Mercè.

Aquesta exposició és un projecte de fotografia participativa realitzada amb la col·laboració de fotògrafs locals de Bangla Desh, Nepal, Nigèria, Ucraïna i Uganda, que van dirigir tallers de creació fotogràfica amb joves de 15 anys en això racons tan particulars i complexos del món. Des de zones de conflicte actiu i camps de refugiats, fins a comunitats remotes, aquesta exposició explora allò que significa tenir 15 anys en contextos dràsticament diferents.

L'origen d'aquesta exposició es basa en un reeixit projecte pilot de fotografia participativa de la Fundació Street Child en col·laboració del fotògraf i cineasta independent nigerià Nelson Apochi Owoicho, que tenia com a objectiu apoderar i inspirar nenes en risc d'abandonar l'escola a Nigèria. Posteriorment, a cadascun dels països, Street Child va treballar amb fotògrafs i socis locals per organitzar tallers de fotografia participativa amb joves de 15 anys. Juntament amb els programes educatius de la fundació a aquestes comunitats, la formació els va brindar l'oportunitat d'expressar-se a través de la creativitat.

El valor afegit d'aquesta exposició rau en l'oportunitat d'oferir als nens, nenes i joves, que són el motor de canvi i la raó principal de l'existència de Street Child, una eina expressiva i un espai segur per explicar les vostres pròpies històries. Alhora, se subratlla la importància de la seva educació per al seu desenvolupament personal i el de les seves comunitats.

Amb aquesta proposta, la Fundació TMB dona a conèixer la tasca d’una entitat social que està desenvolupant projectes de cooperació i desenvolupament, alineant-se amb el projecte TMB Solidari i, a més a més, ho fa posant el focus en l’educació d’infants i adolescents, en la línia del projecte TMB Educa.