¡Ven a tocar el piano a Diagonal!

Una prueba piloto para acoger un piano de forma fija y acercar la música a los usuarios.

Cuando: Desde 23.03.2025


Dónde: Estación Diagonal


Acceso: Acceso validando el billete de transporte

Transports Metropolitans de Barcelona (TMB) a través de su Fundación, ha colaborado un año más con el prestigioso Concurso de Piano Maria Canals, que se celebró del 23 de marzo al 3 de abril.

En esta edición se celebraron los 70 años del concurso con una exposición bajo el título Maria Canals, un concurso con alma y el Centenario del metro.

En el Espacio Mercè Sala se colocaron dos pianos: uno de media cola, como el que se ha instalado otros años, que estuvo a disposición de la ciudadanía, de coros y de escuelas de música durante 15 días, y un segundo piano de pared, que se instaló con la vocación de quedarse de manera permanente.

Una prueba para acercar la música a todos los usuarios y usuarias

Aprovechando sendas celebraciones, ambas entidades iniciaron la experiencia de dejar un piano de forma permanente en el vestíbulo de la L5 de la estación Diagonal.

El piano invita a los pasajeros a aceptar el reto de detenerse, sentarse y hacer sonar sus teclas. Si la iniciativa se evalúa como positiva, la previsión es que el piano de pared se quede de forma permanente en la red para que todo aquel que lo desee pueda tocarlo.

De momento, se trata de una prueba piloto que busca mejorar la experiencia de viaje. Esperamos que los resultados sean positivos y podamos disfrutar durante mucho tiempo de las intervenciones musicales de piano en el metro.

Abrimos el Espacio Mercè Sala en La Noche de los Museos

Visítanos la noche del 17 al 18 de mayo.

Cuando: 17.05.2025


Dónde: Espacio Mercè Sala (Estación Diagonal)


Acceso: Acceso libre con validación del billete de transporte.

Un año más, TMB se suma a La Noche de los Museos abriendo al público la sala de exposiciones de la estación Diagonal.

¿Alguna vez has entrado en un museo cuando cae la noche? El sábado, 17 de mayo, de 19:00 a 01:00 horas, ¡tienes la oportunidad de hacerlo! Llega La Noche de los Museos con una nueva edición llena de propuestas y experiencias en 94 espacios. Además de las puertas abiertas, encontrarás hasta 94 actividades extraordinarias, desde conciertos y recitales hasta mapping, talleres y actuaciones, así como visitas guiadas que darán una nueva dimensión a las colecciones y exposiciones.

Este año se incorporan equipamientos que no participaron el año pasado y también vuelven a participar espacios de Badalona, Cornellà de Llobregat, Esplugues de Llobregat, L'Hospitalet de Llobregat, Sant Adrià de Besòs, Santa Coloma de Gramenet y Sant Joan Despí, que abrirán sus puertas para hacer de esta velada un gran evento.

Así que ya lo sabes: consulta la programación, planifica la ruta y asegúrate de averiguar si es necesario reservar con antelación para alguna actividad.

Te presentamos la exposición Maria Canals, un cocurso con alma

El Concurso Internacional de Piano Maria Canals y TMB se unen para conmemorar, después de una larga colaboración, tres hitos importantes que llegan en 2025: los cien años del metro de Barcelona, los quince años del Espai Mercè Sala y el 70º aniversario del concurso musical.

Para celebrar, el Espacio Mercè Sala acoge una exposición conmemorativa del concurso Maria Canals que se puede visitar hasta el 21 de junio. La exposición repasa todas las actividades y logros alcanzados a lo largo del tiempo como promotor de intérpretes profesionales, además de destacar su labor educativa y social, resaltando la vitalidad del proyecto en la actualidad.

La visita a esta retrospectiva fotográfica incluye citas y breves audiovisuales que rinden homenaje a las personas que han formado parte de la historia del concurso, fundado en 1954 por la pianista y pedagoga Maria Canals.

Si quieres descubrir más detalles, visita la página de la exposición.

Ven a la exposición... ¡A tocar el piano!

Esta velada especial estará amenizada con la música del piano que la asociación Maria Canals ha cedido a TMB, y que está situado justo delante del Espai Mercè Sala.

Durante el evento, el piano contará con intérpretes espontáneos y con la participación de asociaciones de amigos y amantes de la música como Orpheus (de música clásica), AMUC (Músicos del Metro y de la Calle) y Taller de Músics. Todos juntos, formarán una jam session abierta a quien quiera unirse.

Será una ocasión fantástica para disfrutar de la música en un ambiente colaborativo y cercano. ¡Te esperamos!

Tarifas de los títulos de transporte vigentes a partir del 15 de enero de 2025

Las tarifas del 2024 son vigentes hasta el 14 de enero de 2025

Precios vigentes a partir del 15 de enero de 2025

Título 1 zona 2 zonas 3 zonas 4 zonas 5 zonas 6 zonas
Billete sencillo* 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 €

*En TMB, solo se pueden comprar billetes sencillos para metro y bus de Barcelona. Son billetes sencillos de zona única y tienen el precio de los billetes sencillos de una zona.

**El precio de la T-usual ya tiene aplicada la reducción del 50%.

Precio de otros títulos

T-4 (precio con la reducción del 50% ya aplicada): 2,15 €.

T-joven (precio único para todas las zonas y con la reducción del 50% ya aplicada): 44,00 €.

T-usual bonificada (precio único para todas las zonas y con la reducción del 50% ya aplicada): 5,50 €.

Billet Aeropuerto (solo se vende para metro de Barcelona): 5,70 €.

Consulta los precios de las modalidades para familias monoparentales y para familias numerosas en la página Reducción de precios de títulos de transporte.

Caducidad y canje de los títulos comprados entre el 15 de enero de 2024 y el 14 de enero de 2025

Caducidad

En general, los títulos adquiridos entre el 15 de enero de 2024 y el 14 de enero de 2025 (es decir, antes del cambio de tarifas), se pudieron utilizar hasta el 28 de febrero de 2025. La T-joven y la T-70/90, en todas sus modalidades, caducaron el 30 de abril de 2025.

Canje

Los títulos comprados entre el 15 de enero de 2024 y el 14 de enero de 2025 se pudieron canjear por títulos de tarifa 2025 hasta el 30 de abril de 2025.

Si te mueves en bus o en metro, tu opinión es importante

Participa en la encuesta y ayúdanos a mejorar el servicio.

Te llevará pocos minutos. ¡Ayúdanos a mejorar!

Un año más, Transports Metropolitans de Barcelona te proponemos participar en la recogida anual de datos de satisfacción de los usuarios de bus y de metro que forma parte de los estudios comparativos que llevan a cabo el International Bus Benchmarking Group (IBBG) y los grupos de metro CoMET y Nova.

Esta es la decimoséptima edición de esta experiencia internacional, en la que participan empresas de transporte público de grandes ciudades de todo el mundo, entre las cuales se encuentran Nueva York, Londres, Singapur, Berlín, Shenzhen, Bruselas, París y Madrid. 

Con este trabajo conjunto, queremos analizar el servicio de bus y metro y estudiar sus prácticas con el objetivo de mejorarlo a partir de las opiniones directas de los usuarios. 

En este cuestionario anónimo y confidencial podrás valorar tu experiencia de viaje e indicar tu grado de conformidad o disconformidad con algunos aspectos del servicio, como disponibilidad, accesibilidad, información, tiempo, atención al cliente, confort, seguridad e impacto ambiental. 

¡Empieza!

La comunidad TMB supera el millón y medio de seguidores

La comunidad de usuarios de TMB que nos siguen en las redes sociales y en JoTMBé ya suman más de un millón y medio de personas.

Redes sociales y JoTMBé

¡En TMB estamos de enhorabuena! Nuestra comunidad de usuarios sigue creciendo y las personas conectadas a través de nuestros perfiles en las redes sociales y en JoTMBé ya son más de un millón y medio.

Sois muchos los que nos seguís en Instagram, Facebook, X, LinkedIn, Spotify, YouTube y WeChat para estar al tanto de todas las novedades, servicios e iniciativas que ponemos en marcha. Y, desde el 31 de enero de 2025, también en TikTok.

Además, a través de JoTMBé, miles de vosotros disfrutáis de información actualizada del servicio, ventajas exclusivas y compráis y recargáis títulos de transporte con total agilidad. También los suscriptores del blog Hola Barcelona aprovecháis las mejores propuestas y consejos para no perderos nada de la ciudad.

Queremos agradeceros la confianza y el apoyo. Vuestra participación es clave para seguir mejorando día a día y ofreceros el mejor servicio posible.

¡Nos queda mucho camino por recorrer juntos!

Únete a la comunidad de TMB y vive el transporte público como nunca antes.

Síguenos en nuestras redes sociales, regístrate en JoTMBé y suscríbete al boletín del blog Hola Barcelona para descubrir todo lo que tenemos preparado para ti. Estarás al día de las novedades, podrás participar en concursos, recibirás consejos para tus trayectos, accederás a promociones exclusivas y muchos más beneficios por formar parte de ella.

45ª Carrera El Corte Inglés

¡Te explicamos cómo llegar!

Cuando: 11.05.2025


Dónde: Desde la avenida Diagonal


Si participas en la Carrera El Corte Inglés, llega en transporte público. En TMB te llevamos.

Recomendamos acceder al punto de salida en metro, en las estaciones Maria Cristina y Palau Reial de la línea 3.

Dispones de Cómo llegar para encontrar otras opciones de transporte.

Consulta las afectaciones en el servicio de bus y las recomendaciones de transporte.

Hasta primera hora de la tarde del domingo 11 de mayo, recomendamos usar el metro como medio de transporte principal. La amplitud del recorrido y la duración la carrera provocarán alteraciones en el servicio a varias líneas de autobús.

Billete de transporte exclusivo

Para esta edición, se han editado 30.000 billetes sencillos, que se incluyen en la bolsa de los corredores hasta agotar las existencias.

TMB, con los grandes eventos de la ciudad

Desde su primera edición en el año 1986, la Carrera El Corte Inglés es una de las más conocidas y consolidadas de la ciudad. En la edición de este año, los 40.000 corredores que participarán de forma gratuita recorrerán 10 km por las principales calles de Barcelona.

TMB, como principal operador de transporte público de Barcelona y su área metropolitana, trabaja en el impacto que una celebración de esta magnitud puede tener en la red de transporte. Además, también se involucra de forma activa con los eventos, estando presente de forma latente y colaborando a nivel logístico y de marca.

Se ha producido un error al procesar 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> 

Siempre estamos

El metro y los buses cuentan con cámaras de videovigilancia en tiempo real para que viajes con seguridad.

Gracias a los sistemas de videovigilancia, los profesionales de TMB velan por tu seguridad durante todas las horas del servicio, tanto en metro como en bus.

Videovigilancia en el metro

La red de metro cuenta con casi 10.000 cámaras que están repartidas por trenes y estaciones y también en cocheras, talleres y otras dependencias de TMB.

Estas cámaras permiten ver lo que está sucediendo en directo cuando un usuario pulsa el botón SOS o el de información en un tren o en una estación. Las imágenes captadas por estos dispositivos de videovigilancia se reciben en el Centro de Control de Metro y en el Centro de Seguridad y Protección Civil.

Videovigilancia en el bus

La red de bus dispone de más de 4.500 cámaras que actualmente cubren prácticamente todo el servicio regular de la flota.

Este sistema de videovigilancia permite al Centro de Control de Seguridad de Bus visualizar en tiempo real imágenes del interior de los vehículos, así como descargar al momento cualquiera de las grabaciones.

Imágenes a disposición de los cuerpos de seguridad

Las imágenes captadas por estos dispositivos de videovigilancia, tanto de la red de bus como la de metro, quedan grabadas y pueden ser revisadas cuando los Mossos d'Esquadra u otros cuerpos de seguridad lo requieran.

¡Mejor AMBici!

La bicicleta eléctrica metropolitana

Más de 200 estaciones que te conectan al transporte y a otros municipios, y más de 2.500 bicicletas 100% eléctricas para que pedalees cómodamente hasta tu destino.

De casa al trabajo

Moverse mejor es desplazarse de forma saludable manteniendo un estilo de vida activo, con bicicletas 100% eléctricas que incorporan asistencia al pedaleo.

Para conectar con el transporte público

Moverse mejor es desplazarse de forma económica y evitar atascos. Conecta con otras opciones de transporte público, viaja por 15 municipios del área metropolitana y, si quieres, pedalea hasta llegar a Barcelona.

Por una ciudad sin humo

Moverse mejor es desplazarse de forma sostenible, sin emisiones, y reducir el ruido y la contaminación del aire.

Cuando viajes en metro, hazlo de manera segura

Nosotros velamos por tu seguridad, pero tú también debes evitar acciones que pongan en peligro tu integridad y el buen funcionamiento del servicio.

Nunca bajes a las vías

No lo hagas bajo ningún concepto.

  • Si necesitas cruzar a la otra plataforma, usa las escaleras o los ascensores.
  • Si algún objeto cae a la vía, utiliza el interfono SOS de la plataforma y te ayudaremos a recuperarlo cuando sea seguro.
  • Actúa cívicamente y respeta las instalaciones.

Bajar a la vía es peligroso y puede ser mortal.

No subas al tren cuando se estén cerrando las puertas

Cuando se active la señal de cierre de puertas, no podrás entrar ni salir del vagón.

  • Si llegas a la plataforma y suena la señal de cierre (sonora y visual), debes respetarla y esperar el siguiente tren.

Una vez que la señal sonora/visual se inicie, ya no podrás subir ni bajar.

  • Si estás a bordo del tren y te das cuenta tarde de que necesitas bajar, debes esperar a la siguiente estación. Al llegar allí, podrás bajar y regresar hasta donde querías ir.

Una vez que se inicie la señal sonora/visual, ya no se podrá bajar.

  • Nunca intentes forzar las puertas del tren. Podrías quedar atrapado y sufrir un accidente grave.

Si te sientes mal en el metro, pide ayuda

Tanto si estás en la plataforma como dentro del vagón, utiliza el interfono SOS. El metro dispone de 2.300 interfonos distribuidos por todas las plataformas y vestíbulos de las estaciones.

  • Cuando empieces a sentirte mal, sal del tren lo antes posible y pide ayuda a través del interfono SOS en la plataforma, o mira si alguien puede hacerlo por ti.
  • Si los síntomas aparecen antes de subir al tren, quédate en la plataforma y presiona el botón SOS del interfono.
  • Si sospechas que una persona está sufriendo un paro cardíaco, localiza el desfibrilador en la plataforma y sigue las instrucciones. La red de metro está cardioprotegida.

Más información

Encontrarás más información en Cómo se viaja en metro.

Ponte en su piel, no en su lugar

Respeta la prioridad absoluta en el transporte público.

¡Atención!

En el bus y el metro, los espacios reservados para sillas de ruedas están reservados para sillas de ruedas. Además, las personas con discapacidad o movilidad reducida tienen prioridad absoluta para sentarse en los asientos de uso preferente y para utilizar el ascensor.

Ponte en su piel, no en su lugar.

 

En el bus y en el metro, da prioridad absoluta a quien lo necesite

Desde Transports Metropolitans de Barcelona y el Instituto Municipal de Personas con Discapacidad fomentamos el uso correcto de los asientos preferentes, los espacios reservados para sillas de ruedas y los ascensores de la red de transporte público de la ciudad.

Al dar más visibilidad al colectivo de personas con movilidad reducida y personas con discapacidad, esperamos llegar a la conciencia de los usuarios que no respetan estos espacios, no siempre de manera intencionada.

Los testimonios de esta campaña son reales, ya que su problemática también lo es.

 

 

Se ha producido un error al procesar 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> 
Se ha producido un error al procesar 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> 

Cuando viajes en autobús, hazlo fácil

Tu trayecto sea más ágil y práctico, además de facilitar la labor al conductor.

Levanta la mano cuando quieras subir al autobús

Cuando estés en la parada y el autobús se acerque, levanta la mano con suficiente antelación para avisar al conductor.

Este activará la intermitente derecha y abrirá las puertas para que tú y los demás pasajeros podáis subir.

Presiona el botón cuando quieras bajar

Cuando el autobús se acerque a tu parada, presiona el botón de Stop con suficiente antelación para avisar al conductor que deseas bajarte.

Sonará una alerta acústica y el mensaje Parada solicitada se iluminará dentro del vehículo. De esta manera, el conductor sabrá que hay pasajeros que bajarán en la próxima parada y procederá a detenerse.

Más información

Encontrarás más información en Cómo se viaja en bus.

Líneas de bus 100% eléctricas

La H16 y la V15, las líneas de cero emisiones.

Las marquesinas de las líneas H16 y V15 lucen unos vinilos específicos que informan de que las líneas están servidas con autobuses cero emisiones.

Las líneas H16 y V15 son las primeras íntegramente de cero emisiones. La línea H16 fue la primera de la ciudad en reconvertirse íntegramente a la emisión cero, en el año 2016. A principios del 2023 también se reconvirtió la línea V15.  

Los autobuses eléctricos son autónomos y están plenamente operativos a lo largo de toda la jornada, sin necesidad de baterías voluminosas y pesadas.
Lo más destacado es el sistema de carga de los vehículos, que están equipados con un pantógrafo plegable sobre el techo que se acopla a los puntos de recarga rápida situados en los extremos de la línea. La carga rápida en ruta se combina con la carga lenta durante la noche en la cochera, donde también se ha instalado el equipamiento correspondiente. 

Además de estar preparados para la carga rápida en ruta, los autobuses de estas líneas incorporan destacados avances tecnológicos y marcan el camino de un salto hacia adelante tanto en la calidad ambiental como en la seguridad y el confort del transporte público urbano.

La electrificación es uno de los grandes ejes para renovar y actualizar ambientalmente a los autobuses urbanos de Barcelona.

También te pueden interesar