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