Vine a tocar el piano a Diagonal!

Una prova pilot per acollir un piano de forma fixa i apropar la música als usuaris.

Quan: Des de 23.03.2025


On: Estació Diagonal


Accés: Accés validant el bitllet de transport

Transports Metropolitans de Barcelona (TMB) a través de la seva Fundació, ha col·laborat un any més amb el prestigiós Concurs de Piano Maria Canals, que es va celebrar del 23 de març al 3 d'abril.

En aquesta edició es van celebrar els 70 anys del concurs amb una exposició sota el títol Maria Canals, un concurs amb ànima i el Centenari del metro.

A l'Espai Mercè Sala s'hi van col·locar dos pianos: un de mitja cua, com el que s'hi ha instal·lat altres anys, que va estar a disposició de la ciutadania, de corals i d'escoles de música durant 15 dies, i un segon piano de paret, que es va instal·lar amb la vocació que hi quedi de manera permanent.

 

Una prova pilot per acostar la música a tots els usuaris i usuàries

Aprofitant sengles celebracions, ambdues entitats van iniciar l'experiència de deixar un piano de forma permanent al vestíbul de l'L5 de l'estació Diagonal.

El piano convida els passatgers a acceptar el repte d'aturar-s'hi, seure i fer sonar les seves tecles. Si la iniciativa s'avalua com a positiva, la previsió és que el piano de paret es quedi de forma permanent a la xarxa per tal que tothom qui ho vulgui el pugui tocar.

De moment, es tracta d'una prova pilot que vol millorar l'experiència de viatge. Esperem que els resultats siguin positius i puguem gaudir per molt de temps de les intervencions musicals de piano al metro.

Obrim l'Espai Mercè Sala per La Nit dels Museus

Visita'ns la nit del 17 al 18 de maig.

Quan: 17.05.2025


On: Espai Mercè Sala (Estació Diagonal)


Accés: Accés lliure amb validació del títol de transport

Un any més, TMB se suma a La Nit dels Museus obirnt al públic la sala d'exposicions de l'estació Diagonal.

Has entrat mai en un museu quan cau la nit? Dissabte, 17 de maig, de 19.00 a 01.00 hores, tens l’oportunitat de fer-ho! Arriba La Nit dels Museus amb una nova edició plena de propostes i experiències en 94 espais. A més de les portes obertes, trobaràs fins a 94 activitats extraordinàries, des de concerts i recitals fins a mapatges, tallers i actuacions, així com visites guiades que donaran una nova dimensió a les col·leccions i exposicions.

Enguany s’hi incorporen equipaments que no hi van participar l’any passat i també tornen a participar-hi espais de Badalona, Cornellà de Llobregat, Esplugues de Llobregat, l’Hospitalet de Llobregat, Sant Adrià de Besòs, Santa Coloma de Gramenet i Sant Joan Despí, que obriran les portes per fer d’aquesta vetllada un gran esdeveniment.

Així que ja ho saps: consulta la programació, planifica la ruta i assegura’t d’esbrinar si cal reserva prèvia per a alguna activitat. 

Et presentem l'exposició Maria Canals, un cocurs amb ànima

El Concurs Internacional de Piano Maria Canals i TMB celebren junts, després d’una llarga col·laboració, tres onomàstiques que arriben de la mà aquest 2025: els cent anys del metro de Barcelona, els quinze anys de l'Espai Mercè Sala i el 70è aniversari del certamen musical.

Per celebrar-ho, l'Espai Mercè Sala acull una exposició commemorativa del concurs Maria Canals que es pot veure fins al 21 de juny.

Aquesta exposició repassa totes les activitats i fites aconseguides al llarg del temps com a promotor d’intèrprets professionals, així com també la seva labor educativa i social, amb l'objectiu de posar de relleu la vitalitat del projecte en el present.

Visita aquesta retrospectiva fotogràfica inclou cites i breus audiovisuals que reten homenatge a les persones que han format part de la trajectòria del concurs, fundat el 1954 per la pianista i pedagoga Maria Canals.

Descobreix-ne més a la pàgina de l'exposició.

Vine a l'exposició... a tocar el piano!

Aquesta vetllada especial estarà amenitzada amb la música del piano que l’associació Maria Canals ha cedit a TMB, i que està situat al davant de l’Espai Mercè Sala.

Durant l'esdeveniment, el piano comptarà amb intèrprets espontanis i d’associacions d’amics i amants de la música com Orpheus (de música clàssica), AMUC (Músics del Metro i del Carrer) i Taller de Músics, generant una jam session oberta a tothom qui s’hi vulgui afegir.

T'hi esperem!

Tarifes dels títols de transport vigents a partir del 15 de gener de 2025

Les tarifes del 2024 són vigents fins al 14 de gener de 2025

Preus vigents a partir del 15 de gener de 2025

Títol 1 zona 2 zones 3 zones 4 zones 5 zones 6 zones
Bitllet senzill* 2,65 € 3,80 € 4,95 € 6,35 € 8,10 € 9,45 €
T-casual 12,55 € 24,65 € 33,55 € 43,15 € 49,55 € 52,70 €
T-usual** 22,00 € 29,65 € 41,60 € 50,90 € 58,35 € 62,55 €
T-dia 11,55 € 17,65 € 22,15 € 24,75 € 27,70 € 31,00 €
T-familiar 11,05 € 20,95 € 29,70 € 38,50 € 44,00 € 46,20 €
T-aire 2,30 € 4,45 € 6,05 € 7,80 € 8,95 € 9,50 €

*A TMB, només es poden comprar bitllets senzills per a metro i bus de Barcelona. Són bitllets senzills de zona única i tenen el preu dels bitllets senzills d'una zona.

**El preu de la T-usual ja té aplicada la reducció del 50%.

Preu d'altres títols

T-4 (preu amb la reducció del 50% ja aplicada): 2,15 €.

T-jove (preu únic per a totes les zones i amb la reducció del 50% ja aplicada): 44,00 €.

T-usual bonificada (preu únic per a totes les zones i amb la reducció del 50% ja aplicada): 5,50 €.

Bitllet aeroport (només es ven per a metro de Barcelona): 5,70 €.

Consulta els preus de les modalitats per a famílies monoparentals i per a famílies nombroses a la pàgina Reducció de preus de títols de transport.

Caducitat i bescanvi dels títols comprats entre el 15 de gener de 2024 i el 14 de gener de 2025

Caducitat

En general, els títols adquirits entre el 15 de gener de 2024 i el 14 de gener de 2025 (és a dir, abans del canvi de tarifes), es van poder fer servir fins al 28 de febrer de 2025. La T-jove i la T-70/90, en totes les seves modalitats, van caducar el 30 d'abril de 2025.

Bescanvi

Els títols comprats entre el 15 de gener de 2024 i el 14 de gener de 2025 es van poder bescanviar per títols de tarifa 2025 fins al 30 d'abril de 2025.

Si et mous amb bus o amb metro, la teva opinió és important

Participa en l’enquesta i ajuda’ns a millorar el servei.

Són pocs minuts. Ajuda’ns a millorar!

Un any més, Transports Metropolitans de Barcelona et proposem participar en la recollida anual de dades de satisfacció dels usuaris de bus i de metro que forma part dels estudis comparatius que porten a terme l’International Bus Benchmarking Group (IBBG) i els grups de metro CoMET i Nova.

Aquesta és la dissetena edició d’aquesta experiència internacional en què participen empreses de transport públic de grans ciutats d’arreu del món, entre les quals es troben Nova York, Londres, Singapur, Berlín, Shenzhen, Brussel·les, París i Madrid. 

Amb aquest treball conjunt volem analitzar el servei de bus i metro i estudiar-ne les pràctiques amb l’objectiu de millorar-lo a partir de les opinions directes dels usuaris. 

En aquest qüestionari anònim i confidencial podràs valorar la teva experiència de viatge i indicar el teu grau de conformitat o disconformitat amb alguns aspectes del servei, com la disponibilitat, l’accessibilitat, la informació, el temps, l’atenció al client, el confort, la seguretat i l’impacte ambiental. 

Un any més, Transports Metropolitans de Barcelona et proposem participar en la recollida anual de dades de satisfacció dels usuaris de bus i de metro que forma part dels estudis comparatius que porten a terme l’International Bus Benchmarking Group (IBBG) i els grups de metro CoMET i Nova.

Aquesta és la dissetena edició d’aquesta experiència internacional en què participen empreses de transport públic de grans ciutats d’arreu del món, entre les quals es troben Nova York, Londres, Singapur, Berlín, Shenzhen, Brussel·les, París i Madrid. 

Amb aquest treball conjunt volem analitzar el servei de bus i metro i estudiar-ne les pràctiques amb l’objectiu de millorar-lo a partir de les opinions directes dels usuaris. 

En aquest qüestionari anònim i confidencial podràs valorar la teva experiència de viatge i indicar el teu grau de conformitat o disconformitat amb alguns aspectes del servei, com la disponibilitat, l’accessibilitat, la informació, el temps, l’atenció al client, el confort, la seguretat i l’impacte ambiental. 

Comença!

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.

45a Cursa El Corte Inglés

T'expliquem com arribar-hi

Quan: 11.05.2025


On: Des de l'avinguda Diagonal


Si participes a la Cursa El Corte Inglés, arriba-hi amb transport públic. A TMB t'hi portem.

Recomanem accedir al punt de sortida amb metro a les estacions Maria Cristina i Palau Reial de la línia 3. 

Disposes de Vull anar per trobar altres opcions de transport.

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

Fins a primera hora de la tarda de diumenge 11 de maig aconsellem fer servir el metro com a mitjà de transport principal. L'amplitud del recorregut i la durada de la durada de la cursa comportaran alteracions a diverses línies de bus.

Bitllet de transport exclusiu

Per a aquesta edició, s'han editat 30.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

Des de la seva primera edició l'any 1986, la Cursa El Corte Inglés és una de les més conegudes i consolidades de la ciutat.  A l'edició d'enguany, els 40.000 corredors que hi participaran de forma gratuïta recorreran 10 km pels principals carrers de Barcelona.

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.

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#1502536" 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#1502536" 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.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"> 
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 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.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"> 
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 newwindow = ""> 
642								<#if !isFundacio> 
643									<#if articleURL?contains("/fundacio-tmb")> 
644										<#assign link1 = articleURL?split("fundacio-tmb")> 
645										<#if (getterUtil.getInteger(link1?size)>0)> 
646											<#assign newwindow = "target='_blank'"> 
647											<#if articleURL?contains("pre3")> 
648												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
649											<#else> 
650												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
651											</#if> 
652										<#elseif getterUtil.getInteger(link1?size) == 0> 
653											<#assign newwindow = "target='_blank'"> 
654											<#if articleURL?contains("pre3")> 
655												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage()> 
656											<#else> 
657												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage()> 
658											</#if> 
659										</#if> 
660									</#if> 
661								<#else> 
662									<#if articleURL?contains("/web/tmb")> 
663										<#assign link1 = articleURL?split("web/tmb")> 
664										<#if (getterUtil.getInteger(link1?size)>0)> 
665											<#assign newwindow = "target='_blank'"> 
666											<#if articleURL?contains("pre3")> 
667												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + link1[1]> 
668											<#else> 
669												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + link1[1]> 
670											</#if> 
671										<#elseif getterUtil.getInteger(link1?size) == 0> 
672											<#assign newwindow = "target='_blank'"> 
673											<#if articleURL?contains("pre3")> 
674												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage()> 
675											<#else> 
676												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage()> 
677											</#if> 
678										</#if> 
679									</#if> 
680								</#if> 
681 
682								<#assign title = ""> 
683								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
684								<#if titleSel.selectSingleNode(rootElement)?has_content> 
685									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
686								</#if> 
687								 
688								<#assign subtitle = ""> 
689								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
690								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
691									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
692								</#if> 
693 
694								<#assign initDateNovetatAgenda = ""> 
695								<#assign fromInitDateNovetatAgenda = ""> 
696								<#assign endDateNovetatAgenda = ""> 
697								<#assign whereNovetatAgenda = ""> 
698								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
699								<#if novetatAgendaSel?has_content> 
700									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
701 
702									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
703										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
704									</#if> 
705 
706									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
707										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
708									</#if> 
709 
710									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
711										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
712									</#if> 
713 
714									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
715									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
716										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
717									</#if> 
718								</#if> 
719 
720								<#assign typeNovetatAgenda = ""> 
721								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
722								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
723									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
724								</#if> 
725 
726								<#assign filterNovetatAgenda = ""> 
727								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
728								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
729									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
730								</#if> 
731								 
732								<#assign imageNovetatAgenda = ""> 
733								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
734								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
735									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
736									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
737									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
738								</#if> 
739 
740								<#assign imageAltNovetatAgenda = ""> 
741								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
742								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
743									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
744								</#if> 
745 
746								<#assign pubDateNovetatAgenda = ""> 
747								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
748								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
749									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
750								</#if> 
751 
752								<#assign pubTimeNovetatAgenda = ""> 
753								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
754								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
755									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
756								</#if> 
757 
758								<#assign despubDateNovetatAgenda = ""> 
759								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
760								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
761									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
762								</#if> 
763 
764								<#assign despubTimeNovetatAgenda = ""> 
765								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
766								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
767									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
768								</#if> 
769 
770								<#assign isExpiredNovetatAgenda = ""> 
771								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
772								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
773									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
774								</#if> 
775 
776								<#assign isPublishedNA = false> 
777								<#if (pubDateNovetatAgenda?has_content)> 
778									<#if pubTimeNovetatAgenda?has_content> 
779										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
780										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
781									<#else> 
782										<#assign timeActDate = ""> 
783										<#assign timeActFormat = ""> 
784									</#if> 
785									<#attempt>	 
786										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
787										 
788										<#if timeActFormat?has_content && timeActFormat != ""> 
789											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
790											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
791										</#if> 
792										<#assign dataActMil = dataAct?long> 
793										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
794										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
795									<#recover> 
796									</#attempt> 
797								</#if> 
798 
799								<#assign isDespublishedNA = false> 
800								<#if (despubDateNovetatAgenda?has_content)> 
801									<#if despubTimeNovetatAgenda?has_content> 
802										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
803										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
804									<#else> 
805										<#assign timeExpDate = ""> 
806										<#assign timeExpFormat = ""> 
807									</#if> 
808									<#attempt> 
809										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
810										 
811										<#if timeExpFormat?has_content && timeExpFormat != ""> 
812											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
813											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
814										</#if> 
815										<#assign dataExpMil = dataExp?long> 
816										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
817										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
818									<#recover> 
819									</#attempt> 
820								</#if> 
821 
822								<#assign isExpiredNA = false> 
823								<#if journalArticle.expirationDate??> 
824									<#assign dataExp = journalArticle.expirationDate?datetime> 
825									<#attempt> 
826										<#assign dataExpMil = dataExp?long> 
827										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
828										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
829									<#recover> 
830									</#attempt> 
831								</#if> 
832 
833								<#assign showNovetatAgenda = false> 
834								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
835									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
836								<#else> 
837									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
838								</#if> 
839 
840								<#if showNovetatAgenda> 
841									<#if title?has_content> 
842										<li class="hola-bcn-carrusel-standard_new-li"> 
843											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
844												<div class="hola-bcn-carrusel-standard__card-cover"> 
845													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
846													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
847													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
848														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
849													</div> 
850													<#if filterNovetatAgenda?has_content> 
851														<div class="hola-bcn-carrusel-standard-highlight"> 
852															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
853														</div> 
854													</#if> 
855												</div> 
856												<div class="hola-bcn-carrusel-standard-container"> 
857													<div> 
858														<h3 class="hola-bcn-carrusel-standard__card-title"> 
859															${title} 
860															<#if newwindow?? && newwindow?has_content> 
861																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
862															</#if> 
863														</h3> 
864														<span class="hola-bcn-carrusel-standard__card-description"> 
865															${subtitle} 
866														</span> 
867													</div> 
868													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
869														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
870															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
871																<div class="hola-bcn-carrusel-standard-date"> 
872																	<#if fromInitDateNovetatAgenda == "true"> 
873																		<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> 
874																	<#else> 
875																		<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> 
876																	</#if> 
877																</div> 
878															</#if> 
879															<#if whereNovetatAgenda?has_content> 
880																<div class="hola-bcn-carrusel-standard-where"> 
881																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
882																</div> 
883															</#if> 
884														</div> 
885													</#if> 
886												</div> 
887											</a> 
888										</li> 
889									</#if> 
890								</#if> 
891							</#if> 
892						</#list> 
893					</ul> 
894				</div> 
895			</div> 
896		</div> 
897	</section> 
898 
899	<script type="text/javascript"> 
900 
901		$(document).ready(function() { 
902			initSliderBcnStandard(); 
903		}); 
904 
905		function initSliderBcnStandard() { 
906			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
907				$(".js__hola-bcn-standard-slider").slick("unslick"); 
908
909 
910			$('.js__hola-bcn-standard-slider').slick({ 
911				slidesToShow: 3, 
912				slidesToScroll: 1, 
913				arrows: false, 
914				dots: false, 
915				draggable: false, 
916				infinite: false, 
917				responsive: [ 
918
919						breakpoint: 767, 
920						settings: { 
921							variableWidth: true, 
922							slidesToShow: 2, 
923							slidesToScroll: 1, 
924							arrows: false, 
925							dots: true, 
926							draggable: true, 
927							infinite: true 
928
929
930
931			}); 
932
933 
934	</script> 
935</#if> 

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. 

 

 

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#1502536" 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#1502536" 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.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"> 
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 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.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"> 
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 newwindow = ""> 
642								<#if !isFundacio> 
643									<#if articleURL?contains("/fundacio-tmb")> 
644										<#assign link1 = articleURL?split("fundacio-tmb")> 
645										<#if (getterUtil.getInteger(link1?size)>0)> 
646											<#assign newwindow = "target='_blank'"> 
647											<#if articleURL?contains("pre3")> 
648												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
649											<#else> 
650												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
651											</#if> 
652										<#elseif getterUtil.getInteger(link1?size) == 0> 
653											<#assign newwindow = "target='_blank'"> 
654											<#if articleURL?contains("pre3")> 
655												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage()> 
656											<#else> 
657												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage()> 
658											</#if> 
659										</#if> 
660									</#if> 
661								<#else> 
662									<#if articleURL?contains("/web/tmb")> 
663										<#assign link1 = articleURL?split("web/tmb")> 
664										<#if (getterUtil.getInteger(link1?size)>0)> 
665											<#assign newwindow = "target='_blank'"> 
666											<#if articleURL?contains("pre3")> 
667												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + link1[1]> 
668											<#else> 
669												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + link1[1]> 
670											</#if> 
671										<#elseif getterUtil.getInteger(link1?size) == 0> 
672											<#assign newwindow = "target='_blank'"> 
673											<#if articleURL?contains("pre3")> 
674												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage()> 
675											<#else> 
676												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage()> 
677											</#if> 
678										</#if> 
679									</#if> 
680								</#if> 
681 
682								<#assign title = ""> 
683								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
684								<#if titleSel.selectSingleNode(rootElement)?has_content> 
685									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
686								</#if> 
687								 
688								<#assign subtitle = ""> 
689								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
690								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
691									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
692								</#if> 
693 
694								<#assign initDateNovetatAgenda = ""> 
695								<#assign fromInitDateNovetatAgenda = ""> 
696								<#assign endDateNovetatAgenda = ""> 
697								<#assign whereNovetatAgenda = ""> 
698								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
699								<#if novetatAgendaSel?has_content> 
700									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
701 
702									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
703										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
704									</#if> 
705 
706									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
707										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
708									</#if> 
709 
710									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
711										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
712									</#if> 
713 
714									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
715									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
716										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
717									</#if> 
718								</#if> 
719 
720								<#assign typeNovetatAgenda = ""> 
721								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
722								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
723									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
724								</#if> 
725 
726								<#assign filterNovetatAgenda = ""> 
727								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
728								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
729									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
730								</#if> 
731								 
732								<#assign imageNovetatAgenda = ""> 
733								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
734								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
735									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
736									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
737									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
738								</#if> 
739 
740								<#assign imageAltNovetatAgenda = ""> 
741								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
742								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
743									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
744								</#if> 
745 
746								<#assign pubDateNovetatAgenda = ""> 
747								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
748								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
749									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
750								</#if> 
751 
752								<#assign pubTimeNovetatAgenda = ""> 
753								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
754								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
755									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
756								</#if> 
757 
758								<#assign despubDateNovetatAgenda = ""> 
759								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
760								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
761									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
762								</#if> 
763 
764								<#assign despubTimeNovetatAgenda = ""> 
765								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
766								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
767									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
768								</#if> 
769 
770								<#assign isExpiredNovetatAgenda = ""> 
771								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
772								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
773									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
774								</#if> 
775 
776								<#assign isPublishedNA = false> 
777								<#if (pubDateNovetatAgenda?has_content)> 
778									<#if pubTimeNovetatAgenda?has_content> 
779										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
780										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
781									<#else> 
782										<#assign timeActDate = ""> 
783										<#assign timeActFormat = ""> 
784									</#if> 
785									<#attempt>	 
786										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
787										 
788										<#if timeActFormat?has_content && timeActFormat != ""> 
789											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
790											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
791										</#if> 
792										<#assign dataActMil = dataAct?long> 
793										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
794										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
795									<#recover> 
796									</#attempt> 
797								</#if> 
798 
799								<#assign isDespublishedNA = false> 
800								<#if (despubDateNovetatAgenda?has_content)> 
801									<#if despubTimeNovetatAgenda?has_content> 
802										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
803										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
804									<#else> 
805										<#assign timeExpDate = ""> 
806										<#assign timeExpFormat = ""> 
807									</#if> 
808									<#attempt> 
809										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
810										 
811										<#if timeExpFormat?has_content && timeExpFormat != ""> 
812											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
813											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
814										</#if> 
815										<#assign dataExpMil = dataExp?long> 
816										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
817										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
818									<#recover> 
819									</#attempt> 
820								</#if> 
821 
822								<#assign isExpiredNA = false> 
823								<#if journalArticle.expirationDate??> 
824									<#assign dataExp = journalArticle.expirationDate?datetime> 
825									<#attempt> 
826										<#assign dataExpMil = dataExp?long> 
827										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
828										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
829									<#recover> 
830									</#attempt> 
831								</#if> 
832 
833								<#assign showNovetatAgenda = false> 
834								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
835									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
836								<#else> 
837									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
838								</#if> 
839 
840								<#if showNovetatAgenda> 
841									<#if title?has_content> 
842										<li class="hola-bcn-carrusel-standard_new-li"> 
843											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
844												<div class="hola-bcn-carrusel-standard__card-cover"> 
845													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
846													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
847													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
848														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
849													</div> 
850													<#if filterNovetatAgenda?has_content> 
851														<div class="hola-bcn-carrusel-standard-highlight"> 
852															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
853														</div> 
854													</#if> 
855												</div> 
856												<div class="hola-bcn-carrusel-standard-container"> 
857													<div> 
858														<h3 class="hola-bcn-carrusel-standard__card-title"> 
859															${title} 
860															<#if newwindow?? && newwindow?has_content> 
861																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
862															</#if> 
863														</h3> 
864														<span class="hola-bcn-carrusel-standard__card-description"> 
865															${subtitle} 
866														</span> 
867													</div> 
868													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
869														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
870															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
871																<div class="hola-bcn-carrusel-standard-date"> 
872																	<#if fromInitDateNovetatAgenda == "true"> 
873																		<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> 
874																	<#else> 
875																		<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> 
876																	</#if> 
877																</div> 
878															</#if> 
879															<#if whereNovetatAgenda?has_content> 
880																<div class="hola-bcn-carrusel-standard-where"> 
881																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
882																</div> 
883															</#if> 
884														</div> 
885													</#if> 
886												</div> 
887											</a> 
888										</li> 
889									</#if> 
890								</#if> 
891							</#if> 
892						</#list> 
893					</ul> 
894				</div> 
895			</div> 
896		</div> 
897	</section> 
898 
899	<script type="text/javascript"> 
900 
901		$(document).ready(function() { 
902			initSliderBcnStandard(); 
903		}); 
904 
905		function initSliderBcnStandard() { 
906			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
907				$(".js__hola-bcn-standard-slider").slick("unslick"); 
908
909 
910			$('.js__hola-bcn-standard-slider').slick({ 
911				slidesToShow: 3, 
912				slidesToScroll: 1, 
913				arrows: false, 
914				dots: false, 
915				draggable: false, 
916				infinite: false, 
917				responsive: [ 
918
919						breakpoint: 767, 
920						settings: { 
921							variableWidth: true, 
922							slidesToShow: 2, 
923							slidesToScroll: 1, 
924							arrows: false, 
925							dots: true, 
926							draggable: true, 
927							infinite: true 
928
929
930
931			}); 
932
933 
934	</script> 
935</#if> 
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#1502536" 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#1502536" 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.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"> 
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 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.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"> 
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 newwindow = ""> 
642								<#if !isFundacio> 
643									<#if articleURL?contains("/fundacio-tmb")> 
644										<#assign link1 = articleURL?split("fundacio-tmb")> 
645										<#if (getterUtil.getInteger(link1?size)>0)> 
646											<#assign newwindow = "target='_blank'"> 
647											<#if articleURL?contains("pre3")> 
648												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
649											<#else> 
650												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage() + link1[1]> 
651											</#if> 
652										<#elseif getterUtil.getInteger(link1?size) == 0> 
653											<#assign newwindow = "target='_blank'"> 
654											<#if articleURL?contains("pre3")> 
655												<#assign articleURL = "https://pre3-fundacio.tmb.cat/" + locale.getLanguage()> 
656											<#else> 
657												<#assign articleURL = "https://fundacio.tmb.cat/" + locale.getLanguage()> 
658											</#if> 
659										</#if> 
660									</#if> 
661								<#else> 
662									<#if articleURL?contains("/web/tmb")> 
663										<#assign link1 = articleURL?split("web/tmb")> 
664										<#if (getterUtil.getInteger(link1?size)>0)> 
665											<#assign newwindow = "target='_blank'"> 
666											<#if articleURL?contains("pre3")> 
667												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage() + link1[1]> 
668											<#else> 
669												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage() + link1[1]> 
670											</#if> 
671										<#elseif getterUtil.getInteger(link1?size) == 0> 
672											<#assign newwindow = "target='_blank'"> 
673											<#if articleURL?contains("pre3")> 
674												<#assign articleURL = "https://pre3.tmb.cat/" + locale.getLanguage()> 
675											<#else> 
676												<#assign articleURL = "https://www.tmb.cat/" + locale.getLanguage()> 
677											</#if> 
678										</#if> 
679									</#if> 
680								</#if> 
681 
682								<#assign title = ""> 
683								<#assign titleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='titleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
684								<#if titleSel.selectSingleNode(rootElement)?has_content> 
685									<#assign title = titleSel.selectSingleNode(rootElement).getStringValue()> 
686								</#if> 
687								 
688								<#assign subtitle = ""> 
689								<#assign subtitleSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='subtitleGlobal']/dynamic-content[@language-id='" + locale + "']")> 
690								<#if subtitleSel.selectSingleNode(rootElement)?has_content> 
691									<#assign subtitle = subtitleSel.selectSingleNode(rootElement).getStringValue()> 
692								</#if> 
693 
694								<#assign initDateNovetatAgenda = ""> 
695								<#assign fromInitDateNovetatAgenda = ""> 
696								<#assign endDateNovetatAgenda = ""> 
697								<#assign whereNovetatAgenda = ""> 
698								<#assign novetatAgendaSel = rootElement.selectSingleNode("dynamic-element[@field-reference='blocInfoAgenda']")!""> 
699								<#if novetatAgendaSel?has_content> 
700									<#assign dateNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whenBlocInfoAgenda']")!""> 
701 
702									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
703										<#assign initDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='initDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
704									</#if> 
705 
706									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
707										<#assign fromInitDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='fromInitDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
708									</#if> 
709 
710									<#if dateNovetatAgendaSelSel?has_content && dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
711										<#assign endDateNovetatAgenda = dateNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='endDateBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
712									</#if> 
713 
714									<#assign whereNovetatAgendaSelSel = novetatAgendaSel.selectSingleNode("dynamic-element[@field-reference='whereBlocInfoAgenda']")!""> 
715									<#if whereNovetatAgendaSelSel?has_content && whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']")?has_content> 
716										<#assign whereNovetatAgenda = whereNovetatAgendaSelSel.selectSingleNode("dynamic-element[@field-reference='textWhereBlocInfoAgenda']/dynamic-content[@language-id='" + locale + "']").getStringValue()> 
717									</#if> 
718								</#if> 
719 
720								<#assign typeNovetatAgenda = ""> 
721								<#assign typeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='typeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
722								<#if typeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
723									<#assign typeNovetatAgenda = typeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
724								</#if> 
725 
726								<#assign filterNovetatAgenda = ""> 
727								<#assign filterNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='filterNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
728								<#if filterNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
729									<#assign filterNovetatAgenda = filterNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
730								</#if> 
731								 
732								<#assign imageNovetatAgenda = ""> 
733								<#assign imageNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='imageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
734								<#if imageNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
735									<#assign image = imageNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
736									<#assign imageUuid = jsonFactoryUtil.createJSONObject(image).uuid!""> 
737									<#assign imageNovetatAgenda = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + groupId + "/" + imageUuid> 
738								</#if> 
739 
740								<#assign imageAltNovetatAgenda = ""> 
741								<#assign imageAltNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='altImageCardNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
742								<#if imageAltNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
743									<#assign imageAltNovetatAgenda = imageAltNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
744								</#if> 
745 
746								<#assign pubDateNovetatAgenda = ""> 
747								<#assign pubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
748								<#if pubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
749									<#assign pubDateNovetatAgenda = pubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
750								</#if> 
751 
752								<#assign pubTimeNovetatAgenda = ""> 
753								<#assign pubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='pubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
754								<#if pubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
755									<#assign pubTimeNovetatAgenda = pubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
756								</#if> 
757 
758								<#assign despubDateNovetatAgenda = ""> 
759								<#assign despubDateNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubDateNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
760								<#if despubDateNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
761									<#assign despubDateNovetatAgenda = despubDateNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
762								</#if> 
763 
764								<#assign despubTimeNovetatAgenda = ""> 
765								<#assign despubTimeNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='despubTimeNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
766								<#if despubTimeNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
767									<#assign despubTimeNovetatAgenda = despubTimeNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
768								</#if> 
769 
770								<#assign isExpiredNovetatAgenda = ""> 
771								<#assign isExpiredNovetatAgendaSel = saxReaderUtil.createXPath("dynamic-element[@field-reference='isExpiredNovetatAgenda']/dynamic-content[@language-id='" + locale + "']")> 
772								<#if isExpiredNovetatAgendaSel.selectSingleNode(rootElement)?has_content> 
773									<#assign isExpiredNovetatAgenda = isExpiredNovetatAgendaSel.selectSingleNode(rootElement).getStringValue()> 
774								</#if> 
775 
776								<#assign isPublishedNA = false> 
777								<#if (pubDateNovetatAgenda?has_content)> 
778									<#if pubTimeNovetatAgenda?has_content> 
779										<#assign timeActDate = pubTimeNovetatAgenda?date["HH:mm"]> 
780										<#assign timeActFormat = timeActDate?string["HH:mm"]> 
781									<#else> 
782										<#assign timeActDate = ""> 
783										<#assign timeActFormat = ""> 
784									</#if> 
785									<#attempt>	 
786										<#assign dataAct = pubDateNovetatAgenda?date["yyyy-MM-dd"]> 
787										 
788										<#if timeActFormat?has_content && timeActFormat != ""> 
789											<#assign dataActMil = miliSeconds(timeActFormat dataAct?long)> 
790											<#assign dataAct = dateUtil.newDate(getterUtil.getLong(dataActMil))> 
791										</#if> 
792										<#assign dataActMil = dataAct?long> 
793										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
794										<#assign isPublishedNA = (dataActMil - now ) < 0 /> 
795									<#recover> 
796									</#attempt> 
797								</#if> 
798 
799								<#assign isDespublishedNA = false> 
800								<#if (despubDateNovetatAgenda?has_content)> 
801									<#if despubTimeNovetatAgenda?has_content> 
802										<#assign timeExpDate = despubTimeNovetatAgenda?date["HH:mm"]> 
803										<#assign timeExpFormat = timeExpDate?string["HH:mm"]> 
804									<#else> 
805										<#assign timeExpDate = ""> 
806										<#assign timeExpFormat = ""> 
807									</#if> 
808									<#attempt> 
809										<#assign dataExp = despubDateNovetatAgenda?date["yyyy-MM-dd"]> 
810										 
811										<#if timeExpFormat?has_content && timeExpFormat != ""> 
812											<#assign dataExpMil = miliSeconds(timeExpFormat dataExp?long)> 
813											<#assign dataExp = dateUtil.newDate(getterUtil.getLong(dataExpMil))> 
814										</#if> 
815										<#assign dataExpMil = dataExp?long> 
816										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
817										<#assign isDespublishedNA = (dataExpMil - now) < 0 /> 
818									<#recover> 
819									</#attempt> 
820								</#if> 
821 
822								<#assign isExpiredNA = false> 
823								<#if journalArticle.expirationDate??> 
824									<#assign dataExp = journalArticle.expirationDate?datetime> 
825									<#attempt> 
826										<#assign dataExpMil = dataExp?long> 
827										<#assign now = .now?long+timeZoneUtil.getTimeZone("Europe/Madrid").getOffset(.now?long)> 
828										<#assign isExpiredNA = (dataExpMil - now) < 0 /> 
829									<#recover> 
830									</#attempt> 
831								</#if> 
832 
833								<#assign showNovetatAgenda = false> 
834								<#if typeNovetatAgenda?has_content && typeNovetatAgenda == "1"> 
835									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && !isDespublishedNA && isExpiredNovetatAgenda != "true"> 
836								<#else> 
837									<#assign showNovetatAgenda = isPublishedNA && !isExpiredNA && isExpiredNovetatAgenda != "true"> 
838								</#if> 
839 
840								<#if showNovetatAgenda> 
841									<#if title?has_content> 
842										<li class="hola-bcn-carrusel-standard_new-li"> 
843											<a ${newwindow} class="hola-bcn-carrusel-standard_new <#if isDespublishedNA>hola-bcn-carrusel-standard_new-finished</#if>" href="${articleURL}"> 
844												<div class="hola-bcn-carrusel-standard__card-cover"> 
845													<div class="hola-bcn-carrusel-standard__card-cover-filter"></div> 
846													<img class="hola-bcn-carrusel-standard__image" src="${imageNovetatAgenda}" <#if imageAltNovetatAgenda?has_content>alt="${imageAltNovetatAgenda}"<#else>alt=""</#if>> 
847													<div class="hola-bcn-carrusel-standard-finished-text" <#if isDespublishedNA>style="display: block;"</#if>> 
848														<span><@liferay.language key='label.bloc.novetatagenda.finished' /></span> 
849													</div> 
850													<#if filterNovetatAgenda?has_content> 
851														<div class="hola-bcn-carrusel-standard-highlight"> 
852															<span><@liferay.language key='label.bloc.novetatagenda.filter.${filterNovetatAgenda}' /></span> 
853														</div> 
854													</#if> 
855												</div> 
856												<div class="hola-bcn-carrusel-standard-container"> 
857													<div> 
858														<h3 class="hola-bcn-carrusel-standard__card-title"> 
859															${title} 
860															<#if newwindow?? && newwindow?has_content> 
861																<span class="icon-external-black" alt="Enllaç extern" title="(Obre una nova finestra)"></span> 
862															</#if> 
863														</h3> 
864														<span class="hola-bcn-carrusel-standard__card-description"> 
865															${subtitle} 
866														</span> 
867													</div> 
868													<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content || (whereNovetatAgenda?has_content)> 
869														<div class="hola-bcn-carrusel-standard_bottom-extra"> 
870															<#if initDateNovetatAgenda?has_content || endDateNovetatAgenda?has_content> 
871																<div class="hola-bcn-carrusel-standard-date"> 
872																	<#if fromInitDateNovetatAgenda == "true"> 
873																		<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> 
874																	<#else> 
875																		<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> 
876																	</#if> 
877																</div> 
878															</#if> 
879															<#if whereNovetatAgenda?has_content> 
880																<div class="hola-bcn-carrusel-standard-where"> 
881																	<span><b><@liferay.language key='label.bloc.novetatagenda.where' /> <span class="hola-bcn-carrusel-standard-where-inner">${whereNovetatAgenda}</span></b></span> 
882																</div> 
883															</#if> 
884														</div> 
885													</#if> 
886												</div> 
887											</a> 
888										</li> 
889									</#if> 
890								</#if> 
891							</#if> 
892						</#list> 
893					</ul> 
894				</div> 
895			</div> 
896		</div> 
897	</section> 
898 
899	<script type="text/javascript"> 
900 
901		$(document).ready(function() { 
902			initSliderBcnStandard(); 
903		}); 
904 
905		function initSliderBcnStandard() { 
906			if($(".js__hola-bcn-standard-slider").hasClass('slick-initialized')) { 
907				$(".js__hola-bcn-standard-slider").slick("unslick"); 
908
909 
910			$('.js__hola-bcn-standard-slider').slick({ 
911				slidesToShow: 3, 
912				slidesToScroll: 1, 
913				arrows: false, 
914				dots: false, 
915				draggable: false, 
916				infinite: false, 
917				responsive: [ 
918
919						breakpoint: 767, 
920						settings: { 
921							variableWidth: true, 
922							slidesToShow: 2, 
923							slidesToScroll: 1, 
924							arrows: false, 
925							dots: true, 
926							draggable: true, 
927							infinite: true 
928
929
930
931			}); 
932
933 
934	</script> 
935</#if> 

Quan viatgis en bus, fes-ho fàcil

El teu trajecte serà més àgil i pràctic, i també facilitaràs la feina al conductor.

Aixeca la mà quan vulguis pujar al bus

Quan et trobis a la parada i s’estigui apropant el teu bus, aixeca la mà amb antelació suficient per fer saber al conductor que hi vols pujar.

El conductor posarà l’intermitent dret per indicar que pararà i obrirà la primera porta, o la primera i segona porta, per a que tu i la resta d’usuaris hi pugueu pujar.

Prem el botó quan vulguis baixar

Quan el bus s’estigui apropant a la teva parada, prem el botó Stop amb la suficient antelació per fer saber al conductor que hi vols baixar.

Sonarà una alerta acústica i el missatge Parada sol·licitada s’il·luminarà a l’interior del vehicle. D’aquesta manera, el conductor sabrà que hi ha passatge que baixarà a la propera parada i procedirà a aturar-s’hi.

Més informació

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

Línies de bus 100% elèctriques

L’H16 i la V15, les línies de zero emissions.

Les marquesines de les línies H16 i V15 llueixen uns vinils específics que informen que les línies que s’hi aturen estan servides amb autobusos zero emissions.

Les línies H16 i V15 són les primers íntegrament de zero emissions. La línia H16 va ser la primera de la ciutat a reconvertir-se íntegrament a l’emissió zero, l’any 2016. A principis del 2023 també es va reconvertir la línia V15.

Els autobusos elèctrics són autònoms i estan plenament operatius al llarg de tota la jornada, sense necessitat de bateries voluminoses i pesants.

El més destacat és el sistema de càrrega dels vehicles, que estan equipats amb un pantògraf plegable sobre el sostre que s’acobla als punts de recàrrega ràpida situats als extrems de la línia. La càrrega ràpida en ruta es combina amb la càrrega lenta durant les nits a la cotxera, on també s’ha instal·lat l’equipament corresponent.

A més d’estar preparats per a la càrrega ràpida en ruta, els autobusos d’aquestes línies incorporen avenços tecnològics destacats i marquen el camí d’un salt endavant tant en la qualitat ambiental com en la seguretat i el confort del transport públic urbà.

L'electrificació és un dels grans eixos per renovar i actualitzar ambientalment els autobusos urbans de Barcelona.