Air Traffic Control, more efficiency and safety in ATM environment
Ensuring efficient and reliable ATCO’s support
Financial highlights
Last trade 53.93€
Variation -1.80%
07/07/2026 - 05:37 PM
data source: Investis Digital
Overview
Over 150 countries worldwide are using our radar systems and control centres. We offer ATC systems, surveillance sensors, cyber security, communications, weather radars and navigation aids, ensuring efficient and reliable support to the Air Traffic Management.
Leading-edge technology for all flight phases
We design and provide primary and secondary radars, meteo sensors, operational centres based on distributed intelligence, multi-tracking systems, and aeronautical communication networks, integrating sensors, displays, processors, data communication for defence or commercial advanced automation systems.
Enhancing airport safety
Integrated solutions to cover all the ATM/CNS requirements for en-route, approach and terminal areas. A full range of modular and integrated products comply with the operational requirements to guarantee and increase airport safety and resilience, in accordance with the highest international standards.
Sky resilience
The Air Traffic Control needs to increase global security realizing cyber security infrastructures based on specific devices, systems and optional services. We provides a wide range of aviation specific cyber security services and solutions providing ATM and airport with an assured security strategy.
Syntax error in template "20115#20151#14304350" in line 216, column 141:
Encountered ")", but was expecting one of:
"."
".."
<DOT_DOT_LESS>
"..*"
"?"
"??"
"!"
"["
"("
"}"
<TERMINATING_EXCLAM>
1<#assign siteExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge() />
2<#assign new_restyle = (siteExpandoBridge.hasAttribute("new-restyle")?then(getterUtil.getBoolean(siteExpandoBridge.getAttribute("new-restyle", false)),false)) />
3<#if new_restyle?? && new_restyle>
4
5 <@leonardo.articleInfo .vars "(G1, H) Images Wall (tabbed)"/>
6 <#assign ns = randomNamespace>
7 <#assign portletId = themeDisplay.getPortletDisplay().getId()>
8 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
9
10 <#if NASTab.NASTabBrick.hideBg?? && getterUtil.getBoolean(NASTab.NASTabBrick.hideBg.getData())>
11 <#assign hidebg = 'hide-bg' />
12 <#else>
13 <#assign hidebg = '' />
14 </#if>
15
16 <#if Selezionamahu?? && Selezionamahu.getData() !=''>
17 <#assign bg = "${Selezionamahu.getData()}" />
18 <#if Selezionamahu.getData() == 'white'>
19 <#assign margin = "margin-top margin-bottom" />
20 <#assign buttonColor = "black">
21 <#elseif Selezionamahu.getData() == 'black'>
22 <#assign buttonColor = "white">
23 <#assign margin = "" />
24 <#else>
25 <#assign buttonColor = "black">
26 <#assign margin = "" />
27 </#if>
28 <#else>
29 <#assign bg = "grey" />
30 <#assign margin = "" />
31 </#if>
32
33
34 <#if NASTab.getSiblings()?has_content>
35 <#assign sizeContent = NASTab.getSiblings()?size />
36 <#list NASTab.getSiblings() as tab>
37 <#if tab.NASTabBrick.getSiblings()?has_content>
38 <#list tab.NASTabBrick.getSiblings() as tabBrick>
39 <#assign w = tabBrick.NASTabBrickWidth.getData() />
40 <#assign abstract = tabBrick.NASTabBrickAbstract.getData() />
41 <#if w == "1">
42 <#assign width = "container tight">
43 <#elseif w == "1.5" && abstract ==''>
44 <#assign width = "container">
45 <#elseif w == "1.5" && abstract !=''>
46 <#assign width = "container tight">
47 <#elseif w == "2">
48 <#assign width = "container">
49 <#elseif w == "3">
50 <#assign width = "container-full-width">
51 <#elseif w == "4">
52 <#assign width = "container">
53 <#elseif w == "card">
54 <#assign width = "container">
55 <#elseif w == "empty">
56 <#assign width = "container-full-width">
57 <#else>
58 <#assign width = "container-full-width">
59 </#if>
60 </#list>
61 </#if>
62 </#list>
63 </#if>
64
65 <#if NASTab.getSiblings()?has_content>
66 <#if (sizeContent > 1) && NASTab.NASTabTag.getData() !=''>
67 <!--Tabs-->
68 <#assign articleId = .vars['reserved-article-id'].data />
69 <section class="container-full-width padding-top padding-bottom ${bg}">
70 <div class="container overflow-visible <#if NASTitle.getData()?? && NASTitle.getData() != ''> component-with-title</#if>">
71 <#if NASTitle.getData()?? && NASTitle.getData() != ''>
72 <h2 class="title-extralarge">
73 <@leonardo.escapeTitle title=NASTitle.getData()/>
74 </h2>
75 </#if>
76 <div class="tabs tabs-pillow automatic" role="tablist">
77 <#list NASTab.getSiblings() as tab>
78 <button
79 class="tab label-regular ${(tab?is_first)?then('active', '')}"
80 id="tab-${tab?index + 1}-${articleId}"
81 type="button"
82 role="tab"
83 aria-selected="true"
84 aria-controls="tabpanel-pillow-${tab?index + 1}-${articleId}"
85 >
86 ${tab.NASTabTag.getData()}
87 </button>
88 </#list>
89 </div>
90
91 <div class="tab-panel-container">
92 <#list NASTab.getSiblings() as tab>
93 <#if tab.NASTabBrick.getSiblings()?has_content>
94 <div
95 id="tabpanel-pillow-${tab?index + 1}-${articleId}"
96 role="tabpanel"
97 tabindex="0"
98 aria-labelledby="tab-${tab?index + 1}-${articleId}"
99 >
100 <#assign size = NASTab.NASTabBrick.getSiblings()?size />
101 <#if (size <= 3)>
102 <#assign css = "pb-lg-0" />
103 <#else>
104 <#assign css = "" />
105 </#if>
106 <!--Start Module: Products Cards-->
107 <div class="swiper macro-category-swiper ${css}">
108 <#if (size > 3)>
109 <div class="swiper-navigation red">
110 <button class="swiper-button-prev" aria-label="previous slide" tabindex="0">
111 <img src="${themeDisplay.getPathThemeImages()}/img/generic/arrow-left-red-icon.svg" alt="navigation left">
112 </button>
113 <button class="swiper-button-next" aria-label="next slide" tabindex="0">
114 <img src="${themeDisplay.getPathThemeImages()}/img/generic/arrow-right-red-icon.svg" alt="navigation right">
115 </button>
116 </div>
117 </#if>
118 <div class="swiper-wrapper">
119 <#list tab.NASTabBrick.getSiblings() as tabBrick>
120 <#assign scalingDetails = {
121 "desktop": {"alternateImage": {}, "key": "h_560"},
122 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_560"},
123 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_560"},
124 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_400"} }>
125 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
126 <div class="swiper-slide">
127 <section class="macro-category-single-arrow">
128 <div class="content">
129 <a href="${leonardo.getTargetUrl(tabBrick.ExternalTargetURL!, tabBrick.NasTabBrickLink!)}" title="${tabBrick.NASTabBrickTitle.getData()}" target="${leonardo.getTarget(tabBrick.LinkTargetOpenIn!)}">
130 <h2 class="body-medium">
131 ${tabBrick.NASTabBrickTitle.getData()}
132 </h2>
133 <div class="image-container">
134
135 <picture>
136 <source
137 srcset="${dataImage.mobile?replace(" ", "%20")!}"
138 media="(max-width: 576px)"
139 />
140 <source
141 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
142 media="(max-width: 768px)"
143 >
144 <source
145 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
146 media="(max-width: 1024px)"
147 >
148 <img
149 class="img-fluid"
150 src="${dataImage.desktop?replace(" ", "%20")!}"
151 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
152 />
153 </picture>
154 </div>
155 </a>
156 </div>
157 </section>
158 </div>
159 </#list>
160 </div>
161 <div class="swiper-pagination ${buttonColor}"></div>
162 </div>
163 </div>
164 </#if>
165 </#list>
166 </div>
167 </div>
168 </section>
169 <#else>
170 <#list NASTab.getSiblings() as tab>
171 <#if tab.NASTabBrick.getSiblings()?has_content>
172 <#list tab.NASTabBrick.getSiblings() as tabBrick>
173 <#assign w = tabBrick.NASTabBrickWidth.getData() />
174 <#assign brick_index = tabBrick?index>
175 <#if w == "3">
176 <!--Card width full-->
177 <#if NASTab.NASTabBrick.NasTabBrickLink.getData() !='' || NASTab.NASTabBrick.ExternalTargetURL.getData() !=''>
178 <div class="container-full-width padding-top padding-bottom ${bg}">
179 <div class="component-newsletter ${margin} rounded-20">
180 <div class="container-full-width">
181 <div class="container">
182 <#if tabBrick.NASTabBrickImage.getData() !=''>
183 <div class="image-container">
184 <#assign scalingDetails = {
185 "desktop": {"alternateImage": {}, "key": "w_1440"},
186 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_460"},
187 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_325"},
188 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
189 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
190 <picture class="bg-picture">
191 <source
192 srcset="${dataImage.mobile?replace(" ", "%20")!}"
193 media="(max-width: 576px)"
194 />
195 <source
196 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
197 media="(max-width: 768px)"
198 >
199 <source
200 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
201 media="(max-width: 1024px)"
202 >
203 <img
204 class="img-fluid"
205 src="${dataImage.desktop?replace(" ", "%20")!}"
206 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
207 />
208 </picture>
209 </div>
210 </#if>
211 <div class="content ${hidebg} <#if tabBrick.NASTabBrickTitle.getData() =='' && tabBrick.NASTabBrickAbstract.getData() ==''>justify-content-end pb-5</#if>">
212 <#if tabBrick.NASTabBrickTitle.getData() !=''>
213 <p class="title title-banner">${tabBrick.NASTabBrickTitle.getData()}</p>
214 </#if>
215 <#if tabBrick.NASTabBrickAbstract.getData() !=''>
216 <p class="body-medium subtitle text-center">${tabBrick.NASTabBrickAbstract.getData())}</p>
217 </#if>
218 <#if tabBrick.ExternalTargetURL.getData() !=''>
219 <#assign linkUrl = tabBrick.ExternalTargetURL.getData() />
220 <#elseif tabBrick.NasTabBrickLink.getData() !=''>
221 <#assign linkUrl = tabBrick.NasTabBrickLink.getFriendlyUrl() />
222 </#if>
223 <#if tabBrick.LabelLink?? && tabBrick.LabelLink.getData() !=''>
224 <#assign linkLabel = tabBrick.LabelLink.getData() />
225 <#else>
226 <#assign linkLabel>
227 <@liferay.language key="discover-more" />
228 </#assign>
229 </#if>
230 <#assign linkTarget=leonardo.getTarget(tabBrick.LinkTargetOpenIn!)>
231 <a class="btn-primary-negative" href="${linkUrl}" target = "${linkTarget}" title ="${linkLabel}">${linkLabel}</a>
232 </div>
233 </div>
234 </div>
235 </div>
236 </div>
237 <#else>
238 <section class="component-with-title container-full-width ${bg} margin-top margin-bottom">
239 <#if NASTitle.getData()?? && NASTitle.getData() != ''>
240 <div class="container">
241 <h2 class="title-extralarge">
242 <@leonardo.escapeTitle title=NASTitle.getData()/>
243 </h2>
244 </div>
245 </#if>
246 <#list NASTab.getSiblings() as tab>
247 <#if tab.NASTabBrick.getSiblings()?has_content>
248 <#list tab.NASTabBrick.getSiblings() as tabBrick>
249 <div class="campaigns-section grid">
250 <#assign scalingDetails = {
251 "desktop": {"alternateImage": {}, "key": "h_959"},
252 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_959"},
253 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_959"},
254 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_959"} }>
255 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
256 <picture>
257 <source
258 srcset="${dataImage.mobile?replace(" ", "%20")!}"
259 media="(max-width: 576px)"
260 />
261 <source
262 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
263 media="(max-width: 768px)"
264 >
265 <source
266 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
267 media="(max-width: 1024px)"
268 >
269 <img
270 class="bg"
271 src="${dataImage.desktop?replace(" ", "%20")!}"
272 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
273 />
274 </picture>
275 <div class="container padding">
276 <p class="title-hero-02 title">
277 <#if tabBrick.NASTabBrickTitle.getData() !=''>
278 ${tabBrick.NASTabBrickTitle.getData()}
279 </#if>
280 </p>
281 <#if tabBrick.linkList.linkItem.linkTitle.getData() !=''>
282 <div class="flex">
283 <#list tabBrick.linkList.linkItem.getSiblings() as linkItem>
284 <#assign linkUrl=leonardo.getTargetUrl(linkItem.externalUrl!, linkItem.link!)>
285 <#assign linkTarget=leonardo.getTarget(linkItem.linkTarget!)>
286 <a href="${linkUrl}" target = "${linkTarget}" title ="${linkItem.linkTitle.data!}" class="body-medium">${linkItem.linkTitle.data!}</a>
287 </#list>
288 </div>
289 </#if>
290 </div>
291 </div>
292 </#list>
293 </#if>
294 </#list>
295 </section>
296 </#if>
297 <#elseif w == "1">
298 <#assign outer_index = tabBrick?index>
299 <#if outer_index == 1>
300 <div class="container-full-width <#if brick_index != 1>padding-top </#if> ${bg} newsletter-grid padding-bottom">
301 <div class="container">
302 <div class="grid">
303 <!--Card width full in grid-->
304 <#if NASTab.NASTabBrick.NasTabBrickLink.getData() !='' || NASTab.NASTabBrick.ExternalTargetURL.getData() !=''>
305 <div class="component-newsletter ${margin} small">
306 <div class="container-full-width">
307 <div class="container">
308 <#if tabBrick.NASTabBrickImage.getData() !=''>
309 <div class="image-container">
310 <#assign scalingDetails = {
311 "desktop": {"alternateImage": {}, "key": "h_460"},
312 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_300"},
313 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_300"},
314 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
315 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
316 <picture>
317 <source
318 srcset="${dataImage.mobile?replace(" ", "%20")!}"
319 media="(max-width: 576px)"
320 />
321 <source
322 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
323 media="(max-width: 768px)"
324 >
325 <source
326 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
327 media="(max-width: 1024px)"
328 >
329 <img
330 class="img-fluid"
331 src="${dataImage.desktop?replace(" ", "%20")!}"
332 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
333 />
334 </picture>
335 </div>
336 </#if>
337 <div class="content">
338 <#if tabBrick.NASTabBrickTitle.getData() !=''>
339 <p class="title title-regular">${tabBrick.NASTabBrickTitle.getData()}</p>
340 </#if>
341 <#if tabBrick.NASTabBrickAbstract.getData() !=''>
342 <p class="body-small subtitle text-center">${tabBrick.NASTabBrickAbstract.getData()}</p>
343 </#if>
344 <div class="flex">
345 <#if tabBrick.ExternalTargetURL.getData() !=''>
346 <#assign linkUrl = tabBrick.ExternalTargetURL.getData() />
347 <#elseif tabBrick.NasTabBrickLink.getData() !=''>
348 <#assign linkUrl = tabBrick.NasTabBrickLink.getFriendlyUrl() />
349 </#if>
350 <#if tabBrick.LabelLink?? && tabBrick.LabelLink.getData() !=''>
351 <#assign linkLabel = tabBrick.LabelLink.getData() />
352 <#else>
353 <#assign linkLabel>
354 <@liferay.language key="discover-more" />
355 </#assign>
356 </#if>
357 <#assign linkTarget=leonardo.getTarget(tabBrick.LinkTargetOpenIn!)>
358 <a class="btn-primary-negative" href="${linkUrl}" target = "${linkTarget}" title ="${linkLabel}">${linkLabel}</a>
359 </div>
360 </div>
361 </div>
362 </div>
363 </div>
364 </#if>
365 <#else>
366 <!--Card width full in grid-->
367 <#if NASTab.NASTabBrick.NasTabBrickLink.getData() !='' || NASTab.NASTabBrick.ExternalTargetURL.getData() !=''>
368 <div class="component-newsletter ${margin} small">
369 <div class="container-full-width">
370 <div class="container">
371 <#if tabBrick.NASTabBrickImage.getData() !=''>
372 <div class="image-container">
373 <#assign scalingDetails = {
374 "desktop": {"alternateImage": {}, "key": "h_460"},
375 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_300"},
376 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_300"},
377 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
378 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
379 <picture>
380 <source
381 srcset="${dataImage.mobile?replace(" ", "%20")!}"
382 media="(max-width: 576px)"
383 />
384 <source
385 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
386 media="(max-width: 768px)"
387 >
388 <source
389 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
390 media="(max-width: 1024px)"
391 >
392 <img
393 class="img-fluid"
394 src="${dataImage.desktop?replace(" ", "%20")!}"
395 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
396 />
397 </picture>
398 </div>
399 </#if>
400 <div class="content">
401 <#if tabBrick.NASTabBrickTitle.getData() !=''>
402 <p class="title title-regular">${tabBrick.NASTabBrickTitle.getData()}</p>
403 </#if>
404 <#if tabBrick.NASTabBrickAbstract.getData() !=''>
405 <p class="body-small subtitle text-center">${tabBrick.NASTabBrickAbstract.data!?replace(r"<[^>]*>", "", "r")}</p>
406 </#if>
407 <div class="flex">
408 <#if tabBrick.ExternalTargetURL.getData() !=''>
409 <#assign linkUrl = tabBrick.ExternalTargetURL.getData() />
410 <#elseif tabBrick.NasTabBrickLink.getData() !=''>
411 <#assign linkUrl = tabBrick.NasTabBrickLink.getFriendlyUrl() />
412 </#if>
413 <#if tabBrick.LabelLink?? && tabBrick.LabelLink.getData() !=''>
414 <#assign linkLabel = tabBrick.LabelLink.getData() />
415 <#else>
416 <#assign linkLabel>
417 <@liferay.language key="discover-more" />
418 </#assign>
419 </#if>
420 <#assign linkTarget=leonardo.getTarget(tabBrick.LinkTargetOpenIn!)>
421 <a class="btn-primary-negative" href="${linkUrl}" target = "${linkTarget}" title ="${linkLabel}">${linkLabel}</a>
422 </div>
423 </div>
424 </div>
425 </div>
426 </div>
427 </#if>
428 </#if>
429 <#elseif w == "empty">
430 <!--Card width full without button-->
431 <div class="${width} padding-top padding-bottom ${bg}">
432 <#list NASTab.getSiblings() as tab>
433 <#if tab.NASTabBrick.getSiblings()?has_content>
434 <#list tab.NASTabBrick.getSiblings() as tabBrick>
435 <div class="component-newsletter ${margin} rounded-20">
436 <div class="container-full-width">
437 <#if tabBrick.LabelLink?? && tabBrick.LabelLink.getData() !=''>
438 <div class="container">
439 <#if tabBrick.NASTabBrickImage.getData() !=''>
440 <div class="image-container">
441 <#assign scalingDetails = {
442 "desktop": {"alternateImage": {}, "key": "h_460"},
443 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_300"},
444 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_300"},
445 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
446 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
447 <picture>
448 <source
449 srcset="${dataImage.mobile?replace(" ", "%20")!}"
450 media="(max-width: 576px)"
451 />
452 <source
453 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
454 media="(max-width: 768px)"
455 >
456 <source
457 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
458 media="(max-width: 1024px)"
459 >
460 <img
461 class="img-fluid"
462 src="${dataImage.desktop?replace(" ", "%20")!}"
463 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
464 />
465 </picture>
466 </div>
467 </#if>
468 <div class="content">
469 <#if tabBrick.NASTabBrickTitle.getData() !=''>
470 <p class="title title-banner">${tabBrick.NASTabBrickTitle.getData()}</p>
471 </#if>
472 <#if tabBrick.NASTabBrickAbstract.getData() !=''>
473 <p class="body-medium subtitle text-center">${tabBrick.NASTabBrickAbstract.data!?replace(r"<[^>]*>", "", "r")}</p>
474 </#if>
475 <div class="flex">
476 <#if tabBrick.ExternalTargetURL.getData() !=''>
477 <#assign linkUrl = tabBrick.ExternalTargetURL.getData() />
478 <#elseif tabBrick.NasTabBrickLink.getData() !=''>
479 <#assign linkUrl = tabBrick.NasTabBrickLink.getFriendlyUrl() />
480 </#if>
481 <#if tabBrick.LabelLink?? && tabBrick.LabelLink.getData() !=''>
482 <#assign linkLabel = tabBrick.LabelLink.getData() />
483 <#else>
484 <#assign linkLabel = liferay.language key="discover-more" />
485 </#if>
486 <#assign linkTarget=leonardo.getTarget(tabBrick.LinkTargetOpenIn!)>
487 <a class="btn-primary-negative" href="${linkUrl}" target = "${linkTarget}" title ="${linkLabel}">${linkLabel}</a>
488 </div>
489 </div>
490 </div>
491 <#else>
492 <#if tabBrick.ExternalTargetURL.getData() !=''>
493 <#assign linkUrl = tabBrick.ExternalTargetURL.getData() />
494 <#elseif tabBrick.NasTabBrickLink.getData() !=''>
495 <#assign linkUrl = tabBrick.NasTabBrickLink.getFriendlyUrl() />
496 </#if>
497 <#assign linkTarget=leonardo.getTarget(tabBrick.LinkTargetOpenIn!)>
498 <a href="${linkUrl}" target = "${linkTarget}" class="container d-block">
499 <#if tabBrick.NASTabBrickImage.getData() !=''>
500 <div class="image-container">
501 <#assign scalingDetails = {
502 "desktop": {"alternateImage": {}, "key": "h_460"},
503 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_300"},
504 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_300"},
505 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
506 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
507 <picture>
508 <source
509 srcset="${dataImage.mobile?replace(" ", "%20")!}"
510 media="(max-width: 576px)"
511 />
512 <source
513 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
514 media="(max-width: 768px)"
515 >
516 <source
517 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
518 media="(max-width: 1024px)"
519 >
520 <img
521 class="img-fluid"
522 src="${dataImage.desktop?replace(" ", "%20")!}"
523 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
524 />
525 </picture>
526 </div>
527 </#if>
528 <div class="content">
529 <#if tabBrick.NASTabBrickTitle.getData() !=''>
530 <p class="title title-banner">${tabBrick.NASTabBrickTitle.getData()}</p>
531 </#if>
532 </div>
533 </a>
534 </#if>
535 </div>
536 </div>
537 </#list>
538 </#if>
539 </#list>
540 </div>
541 <#else>
542 <#if w == "4">
543 <#assign cardCol = 'business-areas' />
544 <#assign titleCol = 'title' />
545 <#elseif w == "1.5" && abstract =='' || w == "2" && abstract ==''>
546 <#assign cardCol = 'macro-category double-row' />
547 <#assign titleCol = 'title body-medium' />
548 <#elseif w == "card">
549 <#assign cardCol = 'macro-category' />
550 <#assign titleCol = 'title body-medium' />
551 <#else>
552 <#assign cardCol = 'macro-category' />
553 <#assign titleCol = 'title body-medium' />
554 </#if>
555 <section class="sant-anna-school-swiper-wrapper ${cardCol} with-title padding-top padding-bottom ${bg}">
556 <div class="container-full-width">
557 <div class="${width} <#if NASTitle.getData()?? && NASTitle.getData() != ''>component-with-title</#if>">
558 <#if NASTitle.getData()?? && NASTitle.getData() != ''>
559 <h2 class="title-extralarge">
560 <@leonardo.escapeTitle title=NASTitle.getData()/>
561 </h2>
562 </#if>
563
564 <#if w == "1.5" && abstract !=''>
565 <!--Card two column con layer -->
566 <section class="sant-anna-school-carousel">
567 <#assign size = NASTab.NASTabBrick.getSiblings()?size />
568 <div class="swiper sant-anna-school-swiper <#if (size < 3)>pb-md-0</#if>">
569 <#if (size > 2)>
570 <div class="swiper-navigation red">
571 <button class="swiper-button-prev" aria-label="previous slide" tabindex="0">
572 <img src="${themeDisplay.getPathThemeImages()}/img/generic/arrow-left-red-icon.svg" alt="navigation left">
573 </button>
574 <button class="swiper-button-next" aria-label="next slide" tabindex="0">
575 <img src="${themeDisplay.getPathThemeImages()}/img/generic/arrow-right-red-icon.svg" alt="navigation right">
576 </button>
577 </div>
578 </#if>
579 <div class="swiper-wrapper">
580 <#list NASTab.getSiblings() as tab>
581 <#if tab.NASTabBrick.getSiblings()?has_content>
582 <#list tab.NASTabBrick.getSiblings() as tabBrick>
583 <#assign scalingDetails = {
584 "desktop": {"alternateImage": {}, "key": "h_530"},
585 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_530"},
586 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_530"},
587 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_460"} }>
588 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
589 <div class="swiper-slide">
590 <#if tabBrick.ExternalTargetURL.getData() !='' || tabBrick.NasTabBrickLink.getData() !=''>
591 <a href="${leonardo.getTargetUrl(tabBrick.ExternalTargetURL!, tabBrick.NasTabBrickLink!)}" class="sant-anna-school-card" target="${leonardo.getTarget(tabBrick.LinkTargetOpenIn!)}">
592 <#else>
593 <div class="sant-anna-school-card">
594 </#if>
595 <picture>
596 <source
597 srcset="${dataImage.mobile?replace(" ", "%20")!}"
598 media="(max-width: 576px)"
599 />
600 <source
601 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
602 media="(max-width: 768px)"
603 >
604 <source
605 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
606 media="(max-width: 1024px)"
607 >
608 <img
609 class="management-card-image"
610 src="${dataImage.desktop?replace(" ", "%20")!}"
611 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
612 />
613 </picture>
614 <div class="sant-anna-school-card-title rounded-20">
615 <div class="sant-anna-school-card-title-content">
616 <#if tabBrick.NASTabBrickTitle.getData() !=''>
617 <span class="body-medium">${tabBrick.NASTabBrickTitle.getData()}
618 </span>
619 </#if>
620 <#if tabBrick.NASTabBrickTitle.getData() !=''>
621 <div class="body-small m-0">${tabBrick.NASTabBrickAbstract.getData()}
622 </div>
623 </#if>
624 </div>
625 </div>
626 <#if tabBrick.ExternalTargetURL.getData() !='' || tabBrick.NasTabBrickLink.getData() !=''>
627 </a>
628 <#else>
629 </div>
630 </#if>
631 </div>
632 </#list>
633 </#if>
634 </#list>
635 </div>
636 <div class="swiper-pagination ${buttonColor}"></div>
637 </div>
638 </section>
639 <#else>
640 <!--Card two column card grid -->
641 <#if w == "1.5" && abstract =='' || w == "2" && abstract ==''>
642 <div class="flex-container">
643 <#assign counter = 0>
644 <#list NASTab.getSiblings() as tab>
645 <#if tab.NASTabBrick.getSiblings()?has_content>
646 <#assign sizeSlide = tab.NASTabBrick.getSiblings()?size />
647 <#list tab.NASTabBrick.getSiblings() as tabBrick>
648 <#if tabBrick?index == 0>
649 <div class="content hover-resize-columns">
650 <#elseif tabBrick?index % 2 == 0>
651 </div>
652 <div class="content hover-resize-columns">
653 </#if>
654
655 <#if tabBrick.NASTabBrickTitle?? && tabBrick.NASTabBrickTitle.getData() !=''>
656 <a href="${leonardo.getTargetUrl(tabBrick.ExternalTargetURL!, tabBrick.NasTabBrickLink!)}" title="${tabBrick.NASTabBrickTitle.getData()}" target="${leonardo.getTarget(tabBrick.LinkTargetOpenIn!)}">
657 <#assign scalingDetails = {
658 "desktop": {"alternateImage": {}, "key": "h_480"},
659 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_325"},
660 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_325"},
661 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_325"} }>
662 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
663 <div class="image-container">
664 <picture>
665 <source
666 srcset="${dataImage.mobile?replace(" ", "%20")!}"
667 media="(max-width: 576px)"
668 />
669 <source
670 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
671 media="(max-width: 768px)"
672 >
673 <source
674 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
675 media="(max-width: 1024px)"
676 >
677 <img
678 class="img-fluid"
679 src="${dataImage.desktop?replace(" ", "%20")!}"
680 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
681 />
682 </picture>
683 </div>
684 <div class="${titleCol}">${tabBrick.NASTabBrickTitle.getData()}</div>
685 </a>
686 </#if>
687 <#if tabBrick?index == sizeSlide - 1>
688 </div>
689 </#if>
690 </#list>
691 </#if>
692 </#list>
693 </div>
694 <#else>
695 <div class="content hover-resize-columns <#if w == "card">four-per-row</#if>">
696 <#list NASTab.getSiblings() as tab>
697 <#if tab.NASTabBrick.getSiblings()?has_content>
698 <#list tab.NASTabBrick.getSiblings() as tabBrick>
699 <#if tabBrick.NASTabBrickTitle?? && tabBrick.NASTabBrickTitle.getData() !=''>
700 <a href="${leonardo.getTargetUrl(tabBrick.ExternalTargetURL!, tabBrick.NasTabBrickLink!)}" title="${tabBrick.NASTabBrickTitle.getData()}" target="${leonardo.getTarget(tabBrick.LinkTargetOpenIn!)}">
701 <#if w == "4">
702 <#assign scalingDetails = {
703 "desktop": {"alternateImage": {}, "key": "h_325"},
704 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_325"},
705 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_325"},
706 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_325"} }>
707 <#else>
708 <#assign scalingDetails = {
709 "desktop": {"alternateImage": {}, "key": "h_480"},
710 "tl": {"alternateImage": tabBrick.NASTabBrickImage.ImageTl!, "key": "h_325"},
711 "tp": {"alternateImage": tabBrick.NASTabBrickImage.ImageTp!, "key": "h_325"},
712 "mobile": {"alternateImage": tabBrick.NASTabBrickImage.ImageM!, "key": "h_325"} }>
713 </#if>
714 <#assign dataImage = leonardo.adaptImage(tabBrick.NASTabBrickImage!, scalingDetails )>
715 <div class="image-container">
716 <picture>
717 <source
718 srcset="${dataImage.mobile?replace(" ", "%20")!}"
719 media="(max-width: 576px)"
720 />
721 <source
722 srcset="${dataImage.tablet_portrait?replace(" ", "%20")!}"
723 media="(max-width: 768px)"
724 >
725 <source
726 srcset="${dataImage.tablet_landscape?replace(" ", "%20")!}"
727 media="(max-width: 1024px)"
728 >
729 <img
730 class="img-fluid"
731 src="${dataImage.desktop?replace(" ", "%20")!}"
732 alt="${dataImage.alt_desktop!}" loading="lazy" decoding="async"
733 />
734 </picture>
735 </div>
736 <div class="${titleCol}">${tabBrick.NASTabBrickTitle.getData()}</div>
737 </a>
738 </#if>
739 </#list>
740 </#if>
741 </#list>
742 </div>
743 </#if>
744 </#if>
745 </div>
746 </div>
747 </section>
748 <#break />
749 </#if>
750 </#list>
751 </#if>
752 </#list>
753 </#if>
754 </#if>
755<#else>
756 <@leonardo.articleInfo .vars "(G1, H) Images Wall (tabbed)"/>
757 <#assign ns = randomNamespace>
758 <#assign portletId = themeDisplay.getPortletDisplay().getId()>
759
760 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
761 <#assign currentGroupExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge()>
762 <#assign isDarkTheme = false>
763
764 <#if currentGroupExpandoBridge.hasAttribute("dark-theme")>
765 <#assign isDarkTheme = currentGroupExpandoBridge.getAttribute("dark-theme", false)>
766 </#if>
767
768 <!--Start Module: Products Cards-->
769 <div class="section-container section-container--fixed">
770 <div class='products-cards-tabs ${((NASTab.getSiblings()?size) > 1)?then("","collapsedPadding")}'>
771 <#if NASTitle.getData()?? && NASTitle.getData() != ''>
772
773 ${(getterUtil.getBoolean(NASTitle.isH1Flag.getData()))?then('<h1','<h2')} class="products-cards-tabs--heading section-heading section-heading--center"
774 ${(getterUtil.getBoolean(isAnchorBarHide.getData())!)?then('','id="${portletId}"')}
775 >
776 <@leonardo.escapeTitle title=NASTitle.getData()/>
777 ${(getterUtil.getBoolean(NASTitle.isH1Flag.getData()))?then('</h1>','</h2>')}
778 </#if>
779 <div class="products-cards-tabs--content">
780 <#if NASTab.getSiblings()?has_content>
781 <#if ((NASTab.getSiblings()?size) > 1)>
782 <ul class="nav nav-tabs" role="tablist">
783 <#list NASTab.getSiblings() as tab>
784 <li class="${(tab?is_first)?then('active', '')}" role="presentation">
785 <a href="#${ns}_${tab?index}" aria-controls="${ns}_${tab?index}" role="tab" data-toggle="tab">${tab.NASTabTag.getData()}</a>
786 </li>
787 </#list>
788 </ul>
789 </#if>
790 <div class="tab-content">
791 <#list NASTab.getSiblings() as tab>
792 <div class="tab-pane ${(tab?is_first)?then('active', '')}" id="${ns}_${tab?index}" role="tabpanel">
793 <!--Start Module: Products Cards-->
794 <div class="section-container section-container--fixed">
795 <div class="products-cards">
796 <div class="products-cards--cards">
797 <#if tab.NASTabBrick.getSiblings()?has_content>
798 <#assign count = 0>
799 <#list tab.NASTabBrick.getSiblings() as tabBrick>
800 <#if count == 0>
801 <div class="section-grid layout--m-col">
802 </#if>
803 <#assign w = getterUtil.getFloat(tabBrick.NASTabBrickWidth.getData(), 0)>
804 <#assign count = count + w>
805 <#if w == 1>
806 <#assign width = "33">
807 <#elseif w == 1.5>
808 <#assign width = "50">
809 <#elseif w == 2>
810 <#assign width = "67">
811 <#else>
812 <#assign width = "100">
813 </#if>
814 <#if w == 1>
815 <#assign scalingDetails = {
816 "desktop": {"alternateImage": {}, "key": "w_480"},
817 "tl": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTl)!, "key": "h_285"},
818 "tp": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTp)!, "key": "h_335"},
819 "mobile": {"alternateImage": (tabBrick.NASTabBrickImage.ImageM)!, "key": "h_335"}
820 }>
821 <#elseif w == 1.5>
822 <#assign scalingDetails = {
823 "desktop": {"alternateImage": {}, "key": "w_720"},
824 "tl": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTl)!, "key": "h_285"},
825 "tp": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTp)!, "key": "h_335"},
826 "mobile": {"alternateImage": (tabBrick.NASTabBrickImage.ImageM)!, "key": "h_335"}
827 }>
828 <#else>
829 <#assign scalingDetails = {
830 "desktop": {"alternateImage": {}, "key": "w_1440"},
831 "tl": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTl)!, "key": "h_285"},
832 "tp": {"alternateImage": (tabBrick.NASTabBrickImage.ImageTp)!, "key": "h_335"},
833 "mobile": {"alternateImage": (tabBrick.NASTabBrickImage.ImageM)!, "key": "h_335"}
834 }>
835 </#if>
836 <#assign brickImg=leonardo.adaptImage((tabBrick.NASTabBrickImage)!, scalingDetails)>
837 <div class="grid grid--m100p grid--d${width}p grid--tp${width}p">
838 <div class="products-cards--cards--card">
839 <!--Start Module: Service Offering Cards-->
840 <#if (isDarkTheme)&& (tabBrick.linkList??) &&
841 (tabBrick.linkList.linkItem.getSiblings()[0].linkTitle.getData()?has_content) &&
842 (leonardo.getTargetUrl(tabBrick.linkList.linkItem.getSiblings()[0].externalUrl!,tabBrick.linkList.linkItem.getSiblings()[0].link!)?has_content)
843 >
844 <!--Start linkListType -->
845 <div class="service-offerings-card"
846 data-img-url-d="${brickImg.desktop!}"
847 data-img-url-tl="${brickImg.tablet_landscape!}"
848 data-img-url-tp="${brickImg.tablet_portrait!}"
849 data-img-url-m="${brickImg.mobile!}"
850 title="${tabBrick.NASTabBrickTitle.getData()}">
851 <div class="service-offerings-card--overlay"></div>
852 <div class="service-offerings-card--content ${tabBrick.NASTabBrickTextLightOrDark.getData()} has-description multi-link-type">
853 <div class="service-offerings-card--content--heading">${tabBrick.NASTabBrickTitle.getData()}</div>
854 <div class="service-offerings-card--content--description">
855 ${tabBrick.NASTabBrickAbstract.getData()}
856 <#list tabBrick.linkList.linkItem.getSiblings() as linkItem>
857
858 <#assign linkUrl=leonardo.getTargetUrl(linkItem.externalUrl!, linkItem.link!)>
859 <#assign linkTarget=leonardo.getTarget(linkItem.linkTarget!)>
860
861 <div class="button-link">
862 <a class="link-arrow"
863 href="${linkUrl}"
864 target = "${linkTarget}"
865 title ="${linkItem.linkTitle.data!}"
866 >
867 ${linkItem.linkTitle.data!}
868 </a>
869 </div>
870 </#list>
871 </div>
872 </div>
873 </div>
874 <!--End linkListType -->
875 <#else>
876 <!--Start Single Link -->
877 <a class="service-offerings-card"
878 href="${leonardo.getTargetUrl(tabBrick.ExternalTargetURL!, tabBrick.NasTabBrickLink!)}"
879 target="${leonardo.getTarget(tabBrick.LinkTargetOpenIn!)}"
880 data-img-url-d="${brickImg.desktop!}"
881 data-img-url-tl="${brickImg.tablet_landscape!}"
882 data-img-url-tp="${brickImg.tablet_portrait!}"
883 data-img-url-m="${brickImg.mobile!}"
884 title="${tabBrick.NASTabBrickTitle.getData()}">
885 <div class="service-offerings-card--overlay"></div>
886 <div class="service-offerings-card--content ${tabBrick.NASTabBrickTextLightOrDark.getData()} has-description">
887 <div class="service-offerings-card--content--heading">${tabBrick.NASTabBrickTitle.getData()}</div>
888 <div class="service-offerings-card--content--description">${tabBrick.NASTabBrickAbstract.getData()}</div>
889 </div>
890 </a>
891 <noscript>
892 <img src="${brickImg.desktop!}" alt='${brickImg.alt_desktop!}'>
893 <img src="${brickImg.tablet_landscape!}" alt='${brickImg.alt_tablet_landscape!}'>
894 <img src="${brickImg.tablet_portrait!}" alt='${brickImg.alt_tablet_portrait!}'>
895 <img src="${brickImg.mobile!}" alt='${brickImg.alt_mobile!}'>
896 </noscript>
897 <!--End Single Link -->
898 </#if>
899 <!--End Module: Service Offering Cards-->
900 </div>
901 </div>
902 <#if ((count > 2) || tabBrick?is_last)>
903 <#assign count = 0>
904 </div>
905 </#if>
906 </#list>
907 </#if>
908 </div>
909 </div>
910 </div>
911 <!--End Module: Products Cards-->
912 </div>
913 </#list>
914 </div>
915 </#if>
916 </div>
917 </div>
918 </div>
919 <!--End Module: Products Cards-->
920
921 <!--Start Module: Free Area-->
922 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
923 <#assign languageId = languageUtil.getLanguageId(locale) />
924
925 <#if AreaLibera?has_content>
926 <#list AreaLibera.getSiblings() as cur_AreaLibera>
927 <div class="section-container section-container--fixed wall-tab-free-area">
928 <#if (cur_AreaLibera.HTML.getData())?has_content>
929 ${cur_AreaLibera.HTML.getData()}
930 </#if>
931 <#if (cur_AreaLibera.WebContent.getData())?has_content>
932 <#assign data = cur_AreaLibera.WebContent.getData()/>
933 <#assign json = jsonFactoryUtil.createJSONObject(data) />
934 <#assign classPK = json.getLong("classPK") />
935 <#if (classPK >0) >
936 <#assign ja = journalArticleLocalService.getLatestArticle(classPK) />
937 <#assign jad = journalArticleLocalService.getArticleDisplay(ja,
938 ja.getTemplateId(), "", languageId,
939 1, null, themeDisplay) />
940 ${jad.getContent()}
941 </#if>
942 </#if>
943 </div>
944 </#list>
945 </#if>
946 <!--End Module: Free Area-->
947</#if>
Customer focused services
We supply customers with integrated services from logistic studies and obsolescence management to III and IV levels maintenance. Computer Based Training provide customer with independency at every operational level. Remote monitoring, control, diagnosis, configuration and collaboration are foreseen.
Meteorology and Environment
With more than fifty years of experience in the design, manufacture, sales and service of meteorological systems, we are a leading provider of weather radar systems, meteorological sensors and integrated system solutions. We have installed more than 400 weather radar systems in over 80 different countries worldwide. Our customer base comprises an international clientele from the meteorology, hydrology and aviation sectors.
2026-07-07T22:37:05Z
cookie_disclaimer:true
page_disclaimer :false