Financial highlights
Last trade 52.47€
Variation -3.58%
01/06/2026 - 05:39 PM
data source: Investis Digital
Financial highlights
Last trade 52.47€
Variation -3.58%
01/06/2026 - 05:39 PM
data source: Investis Digital
Financial Results & Reports
Press releases
The following has evaluated to null or missing:
==> SeparatorBackground.CantoUrl.UrlEternalMobile [in template "20115#20151#196879" at line 151, column 34]
----
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 SeparatorBackground.CantoUrl.UrlE... [in template "20115#20151#196879" at line 151, column 29]
----
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 "(A, A1) Hero banner"/>
6 <section class="sticky-container">
7
8 <#if
9 (SeparatorBackground.YoutubeId.getData() == "") &&
10 (SeparatorBackground.Video.getData() == "") &&
11 !((SeparatorBackground.CantoUrl)?? && SeparatorBackground.CantoUrl.getData() != "") &&
12 (!(SeparatorBackground.Image.getData()??) || SeparatorBackground.Image.getData() == "")
13 >
14
15 <div class="container-full-width header-safe-area black">
16 <div class="container no-side-padding hero-image black">
17 <div class="text-content text-center hero-02-text-container">
18 <#if Title.getData() != "">
19 <h1 class="title-hero-02 m-0"><@leonardo.escapeTitle title=Title.getData()/></h1>
20 </#if>
21 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
22 <div class="body-medium text-center mt-4">
23 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
24 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
25 </#if>
26 <#if Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
27 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
28 </#if>
29 </div>
30 </#if>
31 </div>
32 </div>
33 </div>
34
35 <#else>
36
37 <#if SeparatorBackground.YoutubeId.getData() == "" && SeparatorBackground.Video.getData() == "" &&
38 !((SeparatorBackground.CantoUrl)?? && SeparatorBackground.CantoUrl.getData() != "") &&
39 SeparatorBackground.Image.getData()?? && SeparatorBackground.Image.getData() != "">
40 <#assign scalingDetails = {
41 "desktop": {"alternateImage": {}, "key": "h_560"},
42 "tl": {"alternateImage": SeparatorBackground.Image.ImageTl!, "key": "h_560"},
43 "tp": {"alternateImage": SeparatorBackground.Image.ImageTp!, "key": "h_560"},
44 "mobile": {"alternateImage": SeparatorBackground.Image.ImageM!, "key": "w_596"}
45 }>
46 <#assign slideImg = leonardo.adaptImage(SeparatorBackground.Image!, scalingDetails )>
47 <!-- Image Banner -->
48 <div class="container-full-width black hero-image-small <#if !(SeparatorBackground.Image.ImageM?has_content) || SeparatorBackground.Image.ImageM.getData() ==''>product</#if>">
49 <div class="hero-bottom-gradient">
50 <picture class="bg-picture">
51 <source
52 srcset="${slideImg.mobile?replace(" ", "%20")!}"
53 media="(max-width: 576px)"
54 >
55 <source
56 srcset="${slideImg.tablet_portrait?replace(" ", "%20")!}"
57 media="(max-width: 768px)"
58 >
59 <source
60 srcset="${slideImg.tablet_landscape?replace(" ", "%20")!}"
61 media="(max-width: 1024px)"
62 >
63 <img
64 class="img-fluid bg"
65 src="${slideImg.desktop?replace(" ", "%20")!}"
66 alt="${slideImg.alt_desktop!}" fetchpriority="high" loading="eager"
67 >
68 </picture>
69
70 <div class="text-content container">
71 <#if Title.getData() != "">
72 <h1 class="title-hero-02 mb-0"><@leonardo.escapeTitle title=Title.getData()/></h1>
73 </#if>
74 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
75 <div class="body-medium text-center mt-4">
76 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
77 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
78 </#if>
79 <#if Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
80 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
81 </#if>
82 </div>
83 </#if>
84 </div>
85 </div>
86 </div>
87 <#if SeparatorBackground.Image.ImageM.getData()?? && SeparatorBackground.Image.ImageM.getData() != "">
88 <script>
89 window.addEventListener("load", () => {
90 const EXPECTED_HEIGHT = 844;
91
92 const heroBlocks = document.querySelectorAll(
93 ".hero-image-small"
94 );
95
96 heroBlocks.forEach((heroBlock) => {
97 const picture = heroBlock.querySelector("picture.bg-picture");
98
99 if (!picture) return;
100
101 const mobileSource = Array.from(picture.querySelectorAll("source")).find(
102 (source) => source.media && source.media.includes("max-width: 576px")
103 );
104
105 if (!mobileSource) return;
106
107 const mobileSrc = (mobileSource.getAttribute("srcset") || "").trim();
108
109 const imageElement = new Image();
110
111 imageElement.onload = () => {
112 const height = imageElement.naturalHeight;
113 const isValidHeight = height >= EXPECTED_HEIGHT;
114
115 if (!isValidHeight) {
116 heroBlock.classList.add("product");
117 }
118
119 };
120
121 imageElement.onerror = () => {
122 console.warn("Errore nel caricamento della mobile image:", mobileSrc);
123 };
124
125 imageElement.src = mobileSrc;
126 });
127 });
128 </script>
129 </#if>
130
131 <#elseif (SeparatorBackground.CantoUrl.getData())?has_content>
132 <#assign autoplay = "" />
133 <#assign loop = "" />
134 <#assign bar = "" />
135 <#if (SeparatorBackground.CantoUrl.CantoAutoPlay.data)?has_content && getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoAutoPlay.getData())>
136 <#assign autoplay = "autoplay muted playsinline webkit-playsinline" />
137 </#if>
138 <#if (SeparatorBackground.CantoUrl.CantoLoop.data)?has_content && getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoLoop.getData())>
139 <#assign loop = "loop" />
140 </#if>
141 <#if (SeparatorBackground.CantoUrl.CantoControlBar.data)?has_content && getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoControlBar.getData())>
142 <#assign bar = "controls='controls'" />
143 </#if>
144
145
146 <!-- Canto Video Banner-->
147
148 <div class="container-full-width header-safe-area black">
149 <div class="hero-video hero-bottom-gradient <#if bar !=''>no-after</#if>">
150 <video preload="auto" ${autoplay} ${loop} ${bar} <#if bar !=''>style="z-index:4"</#if>>
151 <#if SeparatorBackground.CantoUrl.UrlEternalMobile.getData() !=''>
152 <source
153 src="${SeparatorBackground.CantoUrl.UrlEternalMobile.getData()}"
154 media="(max-width: 575.98px)"
155 type="video/mp4">
156 </#if>
157 <source
158 src="${SeparatorBackground.CantoUrl.getData()}"
159 media="(min-width: 576px)"
160 type="video/mp4">
161 </video>
162 <div class="text-content container">
163 <#if !(SeparatorBackground.CantoUrl.CantoControlBar.data?has_content
164 && getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoControlBar.getData()))>
165 <#if Title.getData() != "">
166 <h1 class="title-hero-01 mb-0">${Title.getData()}</h1>
167 </#if>
168 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
169 <div class="body-medium text-center mt-4">
170 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
171 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
172 </#if>
173 <#if Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
174 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
175 </#if>
176 </div>
177 </#if>
178 </#if>
179 </div>
180 </div>
181 </div>
182 <script>
183 const heroVideo = document.querySelector(".hero-video video");
184 heroVideo.muted = true;
185 heroVideo.playsInline = true;
186 heroVideo.play().catch(() => {});
187 </script>
188
189 <#elseif (SeparatorBackground.YoutubeId.getData())?has_content >
190 <!-- YT Video Banner -->
191 <div class="container-full-width black">
192 <div class="hero-video hero-bottom-gradient hero-yt <#if !getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData())>no-after</#if>">
193 <div class="yt-content">
194 <div class="embed-responsive embed-responsive-16by9">
195 <#assign autoplay = "" />
196 <#assign mute = "" />
197
198 <#if getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData())>
199 <#assign autoplay = "?autoplay=1&mute=1&controls=0&rel=0" />
200 <#elseif getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeMute.getData())>
201 <#assign autoplay = "?mute=1&controls=1&rel=0" />
202 <#else>
203 <#assign autoplay = "?controls=1&rel=0" />
204 </#if>
205 <iframe class="embed-responsive-item" width="100%"
206 height="100%"
207 title="<#if Title.getData() != ''>${Title.getData()}<#else>video youtube</#if>"
208 frameborder="0"
209 allow="autoplay; fullscreen; encrypted-media"
210 allowfullscreen
211 playsinline src="https://www.youtube.com/embed/${SeparatorBackground.YoutubeId.getData()}${autoplay}"
212 >
213 </iframe>
214 </div>
215
216 </div>
217 <#if Title.getData() != "" || Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
218 <#if getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData())>
219 <div class="text-content container">
220 <#if Title.getData() != "">
221 <h1 class="title-hero-01 mb-0"><@leonardo.escapeTitle title=Title.getData()/></h1>
222 </#if>
223 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
224 <div class="body-medium text-center mt-4">
225 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
226 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
227 </#if>
228 <#if Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
229 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
230 </#if>
231 </div>
232 </#if>
233 </div>
234 </#if>
235 </#if>
236 </div>
237 </div>
238
239 <#elseif SeparatorBackground.Video.getData() != "">
240 <!-- Video DM -->
241 <div class="container-full-width black header-safe-area">
242 <div class="hero-video hero-bottom-gradient">
243 <video preload="auto" src="${SeparatorBackground.Video.getData()}" <#if SeparatorBackground.Video.VideoType.getData() !=''>
244 type="${SeparatorBackground.Video.VideoType.getData()}"</#if> muted autoplay loop>
245 </video>
246 <div class="text-content container">
247 <#if Title.getData() != "">
248 <h1 class="title-hero-01 mb-0"><@leonardo.escapeTitle title=Title.getData()/></h1>
249 </#if>
250 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !='' || Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
251 <div class="body-medium text-center mt-4">
252 <#if Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
253 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
254 </#if>
255 <#if Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
256 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
257 </#if>
258 </div>
259 </#if>
260 </div>
261 </div>
262 </div>
263 </#if>
264 </#if>
265 <#if Title.TextUnderHero?? && Title.TextUnderHero.getData() !=''>
266 <div class="static-text">
267 <div class="container-full-width">
268 <div class="container">
269 <div class="title-medium">
270 <#if Title.TextUnderHero?? && Title.TextUnderHero.getData() !=''>
271 ${Title.TextUnderHero.getData()}
272 <#elseif Title.DescriptionLeft.getData()?? && Title.DescriptionLeft.getData() !=''>
273 <@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/><br />
274 <#elseif Title.DescriptionRight.getData()?? && Title.DescriptionRight.getData() !=''>
275 <@leonardo.escapeTitle title=Title.DescriptionRight.getData()/>
276 </#if>
277 </div>
278 </div>
279 </div>
280 </div>
281 </#if>
282 </section>
283 <#if Title.TextUnderHero?? && Title.TextUnderHero.getData() !=''>
284 <script>
285 window.addEventListener('load', () => {
286 const text = document.querySelector('.sticky-container .static-text');
287 const menu = document.querySelector('.menu-fixed-grey');
288
289 if (text && menu) {
290 const heightText = text.offsetHeight;
291 const currentBottom = parseFloat(getComputedStyle(menu).bottom) || 0;
292 menu.style.bottom = (currentBottom + heightText) + 'px';
293 }
294 });
295 </script>
296 </#if>
297
298<#else>
299 <@leonardo.articleInfo .vars "(A, A1) Hero banner"/>
300
301 <style>
302 html.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:hover,
303 html.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:active,
304 html.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:focus,
305 body.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:hover,
306 body.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:active,
307 body.leo18 .leonardocompany .hero-slide .hero-slide--content--title a.title-cta:focus {
308 text-decoration: inherit;
309 color: inherit;
310 }
311
312
313 </style>
314
315
316 <#assign noOpacity = "${randomNamespace}opacity">
317
318 <#if (SeparatorBackground.Image.disableOpacityFilter.data)?has_content && getterUtil.getBoolean(SeparatorBackground.Image.disableOpacityFilter.getData()) >
319 <style>
320 html.leo18.dark-theme body #wrapper.leonardocompany .hero .hero-slide.${noOpacity}::before {
321 background-color: rgba(0, 0, 0, 0);
322 }
323 </style>
324 </#if>
325
326 <#assign rndNamespace = randomNamespace>
327
328 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
329 <#assign currentGroupExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge()>
330 <#assign isDarkTheme = false>
331
332 <#if currentGroupExpandoBridge.hasAttribute("dark-theme")>
333 <#assign isDarkTheme = currentGroupExpandoBridge.getAttribute("dark-theme", false)>
334 </#if>
335
336 <div class="section-container section-container--fluid herobanner">
337
338 <#if SeparatorBackground.Image.getData()?? && SeparatorBackground.Image.getData() != "" >
339 <#if (SeparatorBackground.HalfSize.data)?has_content && getterUtil.getBoolean(SeparatorBackground.HalfSize.getData())>
340 <#assign scalingDetails = {
341 "desktop": {"alternateImage": {}, "key": "w_1440"},
342 "tl": {"alternateImage": SeparatorBackground.Image.ImageTl!, "key": "h_400"},
343 "tp": {"alternateImage": SeparatorBackground.Image.ImageTp!, "key": "h_1024"},
344 "mobile": {"alternateImage": SeparatorBackground.Image.ImageM!, "key": "h_560"}
345 }>
346 <#else>
347 <#assign scalingDetails = {
348 "desktop": {"alternateImage": {}, "key": "w_1440"},
349 "tl": {"alternateImage": SeparatorBackground.Image.ImageTl!, "key": "h_703"},
350 "tp": {"alternateImage": SeparatorBackground.Image.ImageTp!, "key": "h_959"},
351 "mobile": {"alternateImage": SeparatorBackground.Image.ImageM!, "key": "h_602"}
352 }>
353 </#if>
354 <#assign slideImg = leonardo.adaptImage(SeparatorBackground.Image!, scalingDetails )>
355 </#if>
356
357 <#if SearchBox?? && getterUtil.getBoolean(SearchBox.getData())>
358 <#if SeparatorBackground.Image.getData()?? && SeparatorBackground.Image.getData() != "" >
359 <div class="search-widget-local heroSearchWidget"
360 data-img-url-d="${slideImg.desktop!}"
361 data-img-url-tl="${slideImg.tablet_landscape!}"
362 data-img-url-tp="${slideImg.tablet_portrait!}"
363 data-img-url-m="${slideImg.mobile!}"
364 style=''
365 >
366 <noscript>
367 <img src="${slideImg.desktop!}" alt='${slideImg.alt_desktop!}'>
368 <img src="${slideImg.tablet_landscape!}" alt='${slideImg.alt_landscape! slideImg.alt_tablet_landscape!}'>
369 <img src="${slideImg.tablet_portrait!}" alt='${slideImg.alt_tablet_portrait! slideImg.alt_tablet_portrait!}'>
370 <img src="${slideImg.mobile!}" alt='${slideImg.alt_mobile! slideImg.alt_mobile!}'>
371 </noscript>
372 <#else>
373 <div class="search-widget-local">
374 </#if>
375 <#if isDarkTheme>
376 <#if Title.preTitle ?? && Title.preTitle.getData() != "">
377 <div class="hero-slide--content--pre-title">${Title.preTitle.getData()}</div>
378 </#if>
379 </#if>
380 <#if Title.getData() != "">
381 <#if Title.isH1?? && getterUtil.getBoolean(Title.isH1.getData())>
382 <h1 class="search-widget-local--title"><@leonardo.escapeTitle title=Title.getData()/></h1>
383 <#else>
384 <div class="search-widget-local--title"><@leonardo.escapeTitle title=Title.getData()/></div>
385 </#if>
386 </#if>
387 <div class="search-widget-local--content">
388 <label class="search-widget-local--content--search-label" for="inp-search-local">Enter search text</label>
389 <#if SearchBox.Placeholder?? && SearchBox.Placeholder.getData() != "" && SearchBox.ClusterID?? && SearchBox.ClusterID.getData() != "" >
390 <input autofocus class="search-widget-local--content--search-text" id="inp-search-local" type="text" maxlength="50"
391 placeholder="${SearchBox.Placeholder.getData()!}" data-cluster-id="${SearchBox.ClusterID.getData()!}"/>
392 <!-- Cluster ID: ${SearchBox.ClusterID.getData()!} -->
393 <a class="search-widget-local--content--search-icon" href="javascript: void(0)" title="Search" data-cluster-id="${SearchBox.ClusterID.getData()!}">
394 <svg xmlns="http://www.w3.org/2000/svg" width="17" height="16" viewBox="0 0 17 16">
395 <path fill="#FFF" fill-rule="evenodd" d="M6.88 1.729c2.784 0 5.047 2.103 5.047 4.69 0 2.585-2.263 4.689-5.046 4.689-2.783 0-5.047-2.104-5.047-4.69 0-2.586 2.264-4.69 5.047-4.69m9.953 12.79l-4.51-4.213.279-.352.007-.01c.05-.062.1-.124.148-.188l.004-.006c1.766-2.36 1.375-5.696-.961-7.867C10.495.668 8.759 0 6.913 0 5.066 0 3.33.668 2.025 1.881.719 3.095 0 4.708 0 6.424c0 1.716.719 3.329 2.025 4.542 1.302 1.21 3.034 1.877 4.876 1.877a7.396 7.396 0 0 0 3.189-.722c.11-.058.438-.235.702-.433l4.58 4.159a.6.6 0 0 0 .39.153.547.547 0 0 0 .371-.149l.23-.205c.174-.156.358-.32.49-.443.255-.238.131-.537-.019-.685"/>
396 </svg>
397 </a>
398 </#if>
399 </div>
400 </div>
401 <#elseif SeparatorBackground.YoutubeId.getData() == "" && SeparatorBackground.Video.getData() == "" &&
402 !((SeparatorBackground.CantoUrl)?? && SeparatorBackground.CantoUrl.getData() != "") &&
403 SeparatorBackground.Image.getData()?? && SeparatorBackground.Image.getData() != "">
404 <!-- Image Banner -->
405 <div class="hero">
406 <div class="hero-slide ${noOpacity} ${((SeparatorBackground.HalfSize.data)?has_content && getterUtil.getBoolean(SeparatorBackground.HalfSize.getData()))?then('hero-slide--internal','')}"
407 data-img-url-d="${slideImg.desktop!}"
408 data-img-url-tl="${slideImg.tablet_landscape!}"
409 data-img-url-tp="${slideImg.tablet_portrait!}"
410 data-img-url-m="${slideImg.mobile!}"
411 style=''
412 >
413 <noscript>
414 <img src="${slideImg.desktop!}" alt='${slideImg.alt_desktop!}'>
415 <img src="${slideImg.tablet_landscape!}" alt='${slideImg.alt_landscape! slideImg.alt_tablet_landscape!}'>
416 <img src="${slideImg.tablet_portrait!}" alt='${slideImg.alt_tablet_portrait! slideImg.alt_tablet_portrait!}'>
417 <img src="${slideImg.mobile!}" alt='${slideImg.alt_mobile! slideImg.alt_mobile!}'>
418 </noscript>
419
420 <#if Title.getData() != "" || LinkTitle.getData() != "" || (CountdownDate.data)?has_content>
421 <div class="hero-slide--content">
422 <#if isDarkTheme>
423 <#if Title.preTitle ?? && Title.preTitle.getData() != "">
424 <div class="hero-slide--content--pre-title">${Title.preTitle.getData()}</div>
425 </#if>
426 </#if>
427 <#if Title.getData() != "">
428 <#if Title.isH1?? && getterUtil.getBoolean(Title.isH1.getData())>
429 <h1 class="hero-slide--content--title">
430 <#else>
431 <div class="hero-slide--content--title">
432 </#if>
433 <#if LinkTitle.getData() != "" >
434 <a class="title-cta"
435 href="${leonardo.getTargetUrl(LinkTitle.LinkToUrl!, LinkTitle.LinkToPage!)}"
436 title="${LinkTitle.getData()}"
437 target="${leonardo.getTarget(LinkTitle.OpenLink!)}"
438 >
439 </#if>
440
441 <@leonardo.escapeTitle title=Title.getData()/>
442
443 <#if LinkTitle.getData() != "" >
444 </a>
445 </#if>
446
447 <#if Title.isH1?? && getterUtil.getBoolean(Title.isH1.getData())>
448 </h1>
449 <#else>
450 </div>
451 </#if>
452 <#if Title.DescriptionLeft.getData() != "" || Title.DescriptionRight.getData() != "">
453 <div class="hero-slide--content--descriptions">
454 <#if Title.DescriptionLeft.getData() != "">
455 <div class="hero-slide--content--description"><@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/></div>
456 </#if>
457 <#if Title.DescriptionRight.getData() != "">
458 <div class="hero-slide--content--description"><@leonardo.escapeTitle title=Title.DescriptionRight.getData()/></div>
459 </#if>
460 </div>
461 </#if>
462 </#if>
463 <#if LinkTitle.getData() != "" >
464 <div class="hero-slide--content--cta">
465 <a class="btn btn-leo btn-leo-transparent"
466 href="${leonardo.getTargetUrl(LinkTitle.LinkToUrl!, LinkTitle.LinkToPage!)}"
467 title="${LinkTitle.getData()}"
468 target="${leonardo.getTarget(LinkTitle.OpenLink!)}"
469 >
470 ${LinkTitle.getData()}
471 </a>
472 </div>
473 </#if>
474 </div>
475 </#if>
476 </div>
477 <#if (CountdownDate.data)?has_content >
478
479 <style>
480 @media (max-width: 767px){
481 .leo18 .hero .hero-share { bottom: 100px; }
482 }
483 </style>
484
485 <#assign currentDate = .now?long>
486 <#assign eventDate = CountdownDate.data?datetime("yyyy-MM-dd")?long>
487 <#if (CountdownDate.Hours)?has_content && (CountdownDate.Minutes)?has_content >
488 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Hours.getData())*60*60*1000))?long>
489 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Minutes.getData())*60*1000))?long>
490 </#if>
491 <#assign countdown = ((eventDate - currentDate)/(1000))?int >
492 <#if countdown gte 0 >
493 <div class="countdown-widget hidden" data-time-left="${countdown}">
494 <div class="section-container section-container--fluid">
495 <div class="countdown-widget--wrap">
496 <div class="countdown-widget--title"><@leonardo.escapeTitle title=CountdownDate.Text.data!/></div>
497 <div class="countdown-widget--counters">
498 <div class="countdown-widget--counters--counter days">
499 <div class="countdown-widget--counters--counter--val"> </div>
500 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "days")}</div>
501 </div>
502 <div class="countdown-widget--counters--counter hours">
503 <div class="countdown-widget--counters--counter--val"> </div>
504 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "hours")}</div>
505 </div>
506 <div class="countdown-widget--counters--counter minutes">
507 <div class="countdown-widget--counters--counter--val"> </div>
508 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "minutes")}</div>
509 </div>
510 <#if (CountdownDate.ShowSeconds)?has_content && getterUtil.getBoolean(CountdownDate.ShowSeconds.getData()) >
511 <div class="countdown-widget--counters--counter seconds">
512 <div class="countdown-widget--counters--counter--val"> </div>
513 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "seconds")}</div>
514 </div>
515 </#if>
516 </div>
517 </div>
518 </div>
519 </div>
520 </#if>
521 </#if>
522 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
523 <@leonardo.shareLinkHero/>
524 </#if>
525 </div>
526
527 <#elseif (SeparatorBackground.CantoUrl.getData())?has_content>
528 <!-- Canto Video Banner -->
529 <#assign scalingDetails = {
530 "desktop": {"alternateImage": {}, "key": "w_1440"},
531 "tl": {"alternateImage": SeparatorBackground.Image.ImageTl!, "key": "h_703"},
532 "tp": {"alternateImage": SeparatorBackground.Image.ImageTp!, "key": "h_959"},
533 "mobile": {"alternateImage": SeparatorBackground.Image.ImageM!, "key": "h_602"}
534 }>
535 <#assign slideImg = leonardo.adaptImage(SeparatorBackground.Image!, scalingDetails )>
536
537 <#if (CountdownDate.data)?has_content >
538 <style>
539 @media (max-width: 767px){
540 .leo18 .hero .hero-share { bottom: 100px; }
541 }
542 </style>
543 </#if>
544
545 <div class="hero">
546 <div class="leo-video canto-video ${((SeparatorBackground.HalfSize.data)?has_content && getterUtil.getBoolean(SeparatorBackground.HalfSize.getData()))?then('video-little-size','')} ${((!getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoControlBar.getData())) && (getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoAutoPlay.getData())))?then('no-pause','')}"
547 data-video-data='{
548 "type":"video",
549 "showControls":${(getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoControlBar.getData()))?then("1","0")},
550 "videoSources":[
551 "${SeparatorBackground.CantoUrl.getData()!}"
552 ],
553 "posters":{
554 "desktop":"${slideImg.desktop!}",
555 "tabletLandscape":"${slideImg.tablet_landscape!}",
556 "tabletPortrait":"${slideImg.tablet_portrait!}",
557 "mobile":"${slideImg.mobile!}"
558 },
559 "content":{
560 "heading":"<@leonardo.escapeTitle title=(Title.getData()!"")?html/>",
561 "descriptions":["${((Title.DescriptionLeft.getData())!"")?html?html}", "${((Title.DescriptionRight.getData())!"")?html?html}"],
562 "cta":{
563 "url":"${leonardo.getTargetUrl(LinkTitle.LinkToUrl!, LinkTitle.LinkToPage!)}",
564 "title":"${(LinkTitle.getData()!"")?html?html}",
565 "target":"${leonardo.getTarget(LinkTitle.OpenLink!)}"
566 }
567 <#if (CountdownDate.data)?has_content >
568 <#assign currentDate = .now?long>
569 <#assign eventDate = CountdownDate.data?datetime("yyyy-MM-dd")?long>
570 <#if (CountdownDate.Hours)?has_content && (CountdownDate.Minutes)?has_content >
571 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Hours.getData())*60*60*1000))?long>
572 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Minutes.getData())*60*1000))?long>
573 </#if>
574 <#assign countdown = ((eventDate - currentDate)/(1000))?int >
575 <#if countdown gte 0 >
576 ,"countdown":{
577 "countdown":"${countdown}",
578 "title":"<@leonardo.escapeTitle title=(CountdownDate.Text.data!)?html/>",
579 "days":"${languageUtil.get(locale, "days")}",
580 "hours":"${languageUtil.get(locale, "hours")}",
581 "minutes":"${languageUtil.get(locale, "minutes")}",
582 "seconds":"${languageUtil.get(locale, "seconds")}",
583 "showSeconds":${((CountdownDate.ShowSeconds)?has_content && getterUtil.getBoolean(CountdownDate.ShowSeconds.getData()))?then("1","0")}
584 }
585 </#if>
586 </#if>
587 }
588 }'
589 <#if (SeparatorBackground.CantoUrl.CantoAutoPlay.getData())?has_content>
590 data-autoplay="${(getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoAutoPlay.getData()))?then('1','0')}",
591 </#if>
592 <#if (SeparatorBackground.CantoUrl.CantoLoop.getData())?has_content>
593 data-loop="${(getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoLoop.getData()))?then('1','0')}",
594 </#if>
595 data-playsinline="1",
596 data-title-tag="div">
597
598 </div>
599 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
600 <@leonardo.shareLinkHero/>
601 </#if>
602 </div>
603 <#elseif (SeparatorBackground.YoutubeId.getData())?has_content >
604 <!-- YT Video Banner -->
605 <div class="hero">
606 <div class="hero-slide">
607 <div class="youtube-player-container"
608 data-img-url-d="${(slideImg.desktop)!}"
609 data-img-url-tl="${(slideImg.tablet_landscape)!}"
610 data-img-url-tp="${(slideImg.tablet_portrait)!}"
611 data-img-url-m="${(slideImg.mobile)!}"
612 data-div-id="${randomNamespace}${SeparatorBackground.YoutubeId.getData()!}"
613 data-video-id="${SeparatorBackground.YoutubeId.getData()!}"
614 <#if (SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData())?has_content>
615 data-video-autoplay="${(getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData()))?then('1','0')}"
616 </#if>
617 <#if (SeparatorBackground.YoutubeId.YoutubeMute.getData())?has_content>
618 data-video-mute="${(getterUtil.getBoolean(SeparatorBackground.YoutubeId.YoutubeMute.getData()))?then('1','0')}"
619 </#if>
620 data-use-no-cookie-domain="true">
621 <div class="youtube-player" id="${randomNamespace}${SeparatorBackground.YoutubeId.getData()!}" data-use-no-cookie-domain="true"></div>
622 </div>
623 <#if isDarkTheme>
624 <#if Title.preTitle ?? && Title.preTitle.getData() != "">
625 <div class="hero-slide--content--pre-title">${Title.preTitle.getData()}</div>
626 </#if>
627 </#if>
628 <#if Title.getData() != "">
629 <div class="hero-slide--content">
630 <#if Title.isH1?? && getterUtil.getBoolean(Title.isH1.getData())>
631 <h1 class="hero-slide--content--title"><@leonardo.escapeTitle title=Title.getData()/></h1>
632 <#else>
633 <div class="hero-slide--content--title"><@leonardo.escapeTitle title=Title.getData()/></div>
634 </#if>
635 </div>
636 </#if>
637 </div>
638 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
639 <@leonardo.shareLinkHero/>
640 </#if>
641 </div>
642
643 <#elseif SeparatorBackground.Video.getData() != "">
644 <!-- Internal Video Banner -->
645 <#assign scalingDetails = {
646 "desktop": {"alternateImage": {}, "key": "w_1440"},
647 "tl": {"alternateImage": SeparatorBackground.Image.ImageTl!, "key": "h_703"},
648 "tp": {"alternateImage": SeparatorBackground.Image.ImageTp!, "key": "h_959"},
649 "mobile": {"alternateImage": SeparatorBackground.Image.ImageM!, "key": "h_602"}
650 }>
651 <#assign slideImg = leonardo.adaptImage(SeparatorBackground.Image!, scalingDetails )>
652
653 <#if SeparatorBackground.Video.getSiblings()?has_content>
654 <#assign videoStr = "">
655 <#list SeparatorBackground.Video.getSiblings() as cur_Video>
656 <#assign videoFile = cur_Video.getData()>
657 <#assign videoFileType = cur_Video.VideoType.getData()>
658 <#if videoStr?? && videoStr != "">
659 <#assign videoStr = videoStr + ",">
660 </#if>
661 <#assign videoStr = videoStr + "{"src":"" + videoFile + "","type":"" + videoFileType + ""}">
662 </#list>
663 </#if>
664
665 <div class="hero">
666 <div class="leo-video ${((SeparatorBackground.HalfSize.data)?has_content && getterUtil.getBoolean(SeparatorBackground.HalfSize.getData()))?then('video-little-size','')}"
667 data-video-data="{
668 "type":"video",
669 "showControls":false,
670 "videoSources":[
671 ${videoStr}
672 ],
673 "posters":{
674 "desktop":"${slideImg.desktop!}",
675 "tabletLandscape":"${slideImg.tablet_landscape!}",
676 "tabletPortrait":"${slideImg.tablet_portrait!}",
677 "mobile":"${slideImg.mobile!}"
678 },
679 "content":{
680 "heading":"<@leonardo.escapeTitle title=(Title.getData()!"")?html/>"
681 }}"
682
683 <#if (SeparatorBackground.YoutubeId.YoutubeAutoPlay.getData())?has_content>
684 data-autoplay="true"
685 </#if>
686 data-title-tag="div">
687
688 </div>
689 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
690 <@leonardo.shareLinkHero/>
691 </#if>
692 </div>
693 <#else>
694 <!-- Black Banner -->
695 <div class="hero">
696 <div class="hero-slide ${((SeparatorBackground.HalfSize.data)?has_content && getterUtil.getBoolean(SeparatorBackground.HalfSize.getData()))?then('hero-slide--internal','')}"
697 style='background-color:#000000;'>
698 <#if Title.getData() != "" || LinkTitle.getData() != "" || (CountdownDate.data)?has_content>
699 <div class="hero-slide--content">
700 <#if isDarkTheme>
701 <#if Title.preTitle ?? && Title.preTitle.getData() != "">
702 <div class="hero-slide--content--pre-title">${Title.preTitle.getData()}</div>
703 </#if>
704 </#if>
705 <#if Title.getData() != "">
706 <#if Title.isH1?? && getterUtil.getBoolean(Title.isH1.getData())>
707 <h1 class="hero-slide--content--title"><@leonardo.escapeTitle title=Title.getData()/></h1>
708 <#else>
709 <div class="hero-slide--content--title"><@leonardo.escapeTitle title=Title.getData()/></div>
710 </#if>
711 <#if Title.DescriptionLeft.getData() != "" || Title.DescriptionRight.getData() != "">
712 <div class="hero-slide--content--descriptions">
713 <#if Title.DescriptionLeft.getData() != "">
714 <div class="hero-slide--content--description"><@leonardo.escapeTitle title=Title.DescriptionLeft.getData()/></div>
715 </#if>
716 <#if Title.DescriptionRight.getData() != "">
717 <div class="hero-slide--content--description"><@leonardo.escapeTitle title=Title.DescriptionRight.getData()/></div>
718 </#if>
719 </div>
720 </#if>
721 </#if>
722 <#if LinkTitle.getData() != "" >
723 <div class="hero-slide--content--cta">
724 <a class="btn btn-leo btn-leo-transparent"
725 href="${leonardo.getTargetUrl(LinkTitle.LinkToUrl!, LinkTitle.LinkToPage!)}"
726 title="${LinkTitle.getData()}"
727 target="${leonardo.getTarget(LinkTitle.OpenLink!)}"
728 >
729 ${LinkTitle.getData()}
730 </a>
731 </div>
732 </#if>
733 </div>
734 </#if>
735 </div>
736 <#if (CountdownDate.data)?has_content >
737 <#assign currentDate = .now?long>
738 <#assign eventDate = CountdownDate.data?datetime("yyyy-MM-dd")?long>
739 <#if (CountdownDate.Hours)?has_content && (CountdownDate.Minutes)?has_content >
740 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Hours.getData())*60*60*1000))?long>
741 <#assign eventDate = (eventDate + (getterUtil.getLong(CountdownDate.Minutes.getData())*60*1000))?long>
742 </#if>
743 <#assign countdown = ((eventDate - currentDate)/(1000))?int >
744 <#if countdown gte 0 >
745 <div class="countdown-widget hidden" data-time-left="${countdown}">
746 <div class="section-container section-container--fluid">
747 <div class="countdown-widget--wrap">
748 <div class="countdown-widget--title"><@leonardo.escapeTitle title=CountdownDate.Text.data!/></div>
749 <div class="countdown-widget--counters">
750 <div class="countdown-widget--counters--counter days">
751 <div class="countdown-widget--counters--counter--val"> </div>
752 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "days")}</div>
753 </div>
754 <div class="countdown-widget--counters--counter hours">
755 <div class="countdown-widget--counters--counter--val"> </div>
756 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "hours")}</div>
757 </div>
758 <div class="countdown-widget--counters--counter minutes">
759 <div class="countdown-widget--counters--counter--val"> </div>
760 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "minutes")}</div>
761 </div>
762 <#if (CountdownDate.ShowSeconds)?has_content && getterUtil.getBoolean(CountdownDate.ShowSeconds.getData()) >
763 <div class="countdown-widget--counters--counter seconds">
764 <div class="countdown-widget--counters--counter--val"> </div>
765 <div class="countdown-widget--counters--counter--label">${languageUtil.get(locale, "seconds")}</div>
766 </div>
767 </#if>
768 </div>
769 </div>
770 </div>
771 </div>
772 </#if>
773 </#if>
774 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
775 <@leonardo.shareLinkHero/>
776 </#if>
777 </div>
778 </#if>
779 </div>
780
781 <#if (ShareLink.data)?has_content && getterUtil.getBoolean(ShareLink.getData()) >
782 <!-- Social Sharing -->
783 <#assign imageFileName = (slideImg.desktop)!"" >
784 <#assign shareTitle = (Title.getData())!"">
785 <#assign shareDescription = ((Title.DescriptionLeft.getData())!"") + " " + ((Title.DescriptionRight.getData() )!"")>
786 <#assign ogType='article'>
787 <@leonardo.socialShareMetaAndLinks shareTitle=shareTitle shareDescription=shareDescription?trim imageFileName=imageFileName ogType=ogType />
788 </#if>
789</#if>
Sea, air, earth, space and cyberspace, the so-called ‘fifth dimension’, the new technological frontier and the theatre of confrontation between global powers. Increasingly integrated with the real world, the digital dimension is a new ecosystem to be protected with connected, multi-domain systems and solutions.
A driving asset of the country’s economy, Leonardo set off on the pathway to becoming an ‘Industry 4.0’ company in which manufacturing and digital converge. This marked the start of a new historical period based on the rationalisation and enhancement of the Group’s consolidated businesses in order to accelerate innovation, increase competitiveness, pursue internationalisation in the market and respond effectively to customer needs with a service-based offer. In a constantly evolving scenario, the Cyber & Security Solutions and Electronics business areas were created in 2018. The avionics, space systems, and land and naval defence electronics activities all converge in the latter.
Today, Leonardo is advancing the technological frontiers of the future - through artificial intelligence, digital twin and quantum technologies - by building interconnected and multi-domain systems, new platforms, and services based on big data and high levels of information analysis and integrability thanks to the supercomputing capabilities of the high performance computer davinci-1.
Open Innovation, training and the continuous updating of skills are the common denominators activating new investments in the Group: the International Flight Training School (IFTS), the Leonardo Labs, and the Cyber & Security Academy.
At Leonardo, innovation and the race towards the new frontiers of technology are keeping pace with the new challenges of a sustainable and circular economy model, all contributing to the well-being of people and the planet, and that of future generations.
Established under a cooperation agreement with the Italian Air Force, the International Flight Training School (IFTS) is a centre attended by military pilots from air forces worldwide. This is an advanced training system based on the M-346, a training jet equipped with the Embedded Tactical Training System (ETTS), which enables the aircraft to emulate sensors, armaments and Computer Generated Forces (CGF). It also enables pilots to operate simultaneously and in combination in Live, Virtual, Constructive (LVC) mode by also integrating the Ground Based Training System (GBTS) that brings together various flight and mission simulation systems. Initially operating at the Air Force base in Galatina (Lecce), the IFTS is now based at the new campus at Decimomannu, Cagliari.
Watch the video presentation of the IFTS at Decimomannu (Cagliari)
Ocean2020 (Open Cooperation for European mAritime awareNess), the largest European defence tender in maritime security technologies, is a military research programme promoted by the European Defence Fund with Leonardo as the lead partner, involving 15 countries and 42 partners.
The project enables the integration of maritime surveillance and interdiction missions, of uncrewed platforms of different types (fixed-wing, rotary-wing, surface and underwater) with ships’ command and control centres, and provides for satellite data exchange with command and control centres on land. The first demonstration took place in 2019 in the Mediterranean, also involving the AWHERO remotely piloted helicopter.
On 21 December, the first M-345 High Efficiency Trainer (HET), piloted by Project Test Pilot Trainers Quirino Bucci and Giacomo Iannelli, took off from Venegono Superiore Airport (Varese, Italy). The M-345 is the basic and basic-advanced training aircraft developed by Leonardo to progressively replace the MB-339 fleet and complement the M-346 aircraft used for the advanced training of Italian Air Force pilots.
A new player on the Italian cultural scene with a ‘Digital Humanism’ slant. Established in November 2018 during the Group’s 70th anniversary celebrations, the Leonardo-Civiltà delle Macchine Foundation was officially launched in Rome in May 2019. Through the sharing of skills and knowledge from the company’s industrial and technological heritage, the Foundation promotes the awareness of corporate culture. It contributes to the advancement of civil society and the development of local areas by nurturing a cultural exchange involving industry, technology and science.
With the creation of the Foundation of the same name, on 5 June 2019, at the Leonardo da Vinci National Museum of Science and Technology in Milan, the first issue of the new edition of ‘Civiltà delle Macchine’ was presented. Founded by Sinisgalli in 1953, the historic magazine, a ‘think tank of a modernity’ that supported the role of ‘machines’ and industrial progress, is now the Leonardo house organ. It features contributions from leading names on the contemporary scene and continues to nourish the debate between science, new technologies and the arts.
Read the first issue of the new edition of ‘Civiltà delle Macchine’
This new remotely piloted aircraft is unveiled in 2019 at the International Air and Space Exhibition in Le Bourget, Paris. Designed to perform military and civil missions, it is entirely developed and built by Leonardo: from the aircraft to the suite of sensors, from the mission management system to the ground control station. It is the latest evolution of the FALCO family of Remotely Piloted Air Systems (RPAS) with the following features: a maximum payload of 350 kg, over 24 hours of autonomy, a 30,000 ft ceiling and a satellite data link for operations outside terrestrial radio coverage, all with a maximum take-off weight of 1.3 tonnes.
Launched on 22 March 2019 from the European spaceport in Kourou (French Guiana) with a VEGA launch vehicle, PRISMA (PRecursor HyperSpectral Application Mission) is a satellite that looks at the Earth through the world’s most powerful hyperspectral sensor with a medium-resolution panchromatic (i.e. sensitive to all colours) camera. This technology can distinguish the geometric features of observed objects and provide data on the chemical and physical composition of the earth’s surface. The satellite was built by a Temporary Grouping of Companies (TGC) led by OHB Italia, in charge of the mission, and Leonardo which, as well as the electro-optical instrument, also produced the solar panel, the star compass, and the ground segment of the mission through Telespazio. Thales Alenia Space built the satellite’s onboard data transmission system. Coordinated by the Italian Space Agency, the mission monitors the planet’s health and studies the effects of climate change and the consequences of human activities on the Earth’s ecosystem.
This is an international programme, launched by the UK in 2018 and subsequently joined by Italy (in 2019) and Japan (in 2022), focusing on the design and implementation of a next-generation aircraft system that will enter operation by 2035 for multi-domain missions. It is the future air combat system: a ‘core platform’ connected with other peripheral systems, piloted and otherwise, which uses cloud architecture and powerful datalinks to process, analyse, prioritise and make available vast amounts of data.
A network of technology incubators launched in 2020 offers support across Leonardo’s various business areas in researching and developing frontier technologies. A true ‘engine’ of innovation, the Labs aim to investigate emerging technologies, anticipating future market demands.
Integrated with universities, research centres, companies and partners, they are a resource for the company and the entire national economic system for competing in the most technologically and industrially advanced sectors: artificial intelligence, HPC, Cloud, Big Data, Optronics and robotic applications. In these hubs, young research fellows, together with Leonardo experts and technicians, work on a daily basis to ensure the innovation of tomorrow.
Part of the Leonardo Labs ecosystem, the Aerotech Academy is a strategic pool for developing professional skills established in partnership with the University of Naples Federico II. Based at the company’s site at Pomigliano d'Arco (Naples), it offers advanced training courses on frontier engineering topics such as digitisation, Industry 4.0 and next-generation aircraft.
The Gabbiano family of mechanically scanned surveillance radars celebrates the delivery of its 100th unit. Manufactured by Leonardo in its Nerviano (Milan) factory, this radar boasts a long history of excellence dating back to the first unit developed for the ATR-42 aircraft. This technology can fulfil patrol and surveillance requirements in all weather conditions, on land, at sea and in the air, providing a full range of operational modes. Gabbiano radars are mainly used in Search and Rescue, national security and border control missions
At the heart of Leonardo’s digital transformation processes, the davinci-1 is composing a ‘new grammar’ of scientific and technological knowledge. This supercomputer is a knowledge accelerator equipped with 100 supercomputing units, a total power output of over 5PFlops (five million billion floating point operations per second), a high-performance network, and a cloud storage system using the latest hardware and software technologies for a storage capacity of around 20 million Gigabytes. With the davinci-1 Leonardo can accelerate its progress in the disruptive technologies, through Artificial Intelligence, Big Data Analytics, High-Performance Computing (HPC) and quantum technologies.
Leonardo set up the Med-Or Foundation in 2021 in order to promote cultural, research and scientific training activities to strengthen ties, exchanges, and international relations between Italy and the countries of the wider Mediterranean as far as the Sahel, Horn of Africa and Red Sea (‘Med’) and the Middle and Far East (‘Or’).
New of its kind, global and collaborative, the Foundation combines the industry’s expertise and capabilities with those of academia, fostering the development of geo-economic and socio-cultural partnerships.
The AW609 tiltrotor is a concentrate of technological innovation that surpasses the requisites of fixed wing and the performance of rotary wing aircraft. It has a top speed of over 500 km/h, a range of nearly 1,400 km extendable to over 2,000 km with auxiliary fuel tanks, and - through its ability to change the position of its two rotors in less than 60 seconds - can take off vertically like a helicopter and fly like a fixed-wing aircraft. The AW609 can perform different missions: passenger transport, medical assistance, civil defence, search and rescue. It was the star of the 2021 Dubai Expo inside the innovative ‘Casa Agusta’ terminal, built to relaunch the well-known brand as part of Leonardo.
For the first time, a remotely piloted helicopter obtained basic military certification from the Directorate of Aeronautical Armaments and Airworthiness (DAAA), including the aircraft’s ability to operate on board naval vessels. With this initial certification, the AWHERO paved the way for developing, integrating and validating further capabilities already designed and planned for this system.
The Group’s cutting-edge technologies integrate - within a single platform - data from satellites (Copernicus and PRISMA), telecommunications systems (Athena Fidus), drones, high-resolution fire-fighting systems, video-acoustic sensors, Artificial Intelligence, 5G networks and Big Data Analytics. The new X-2030, a so-called C5I solution, or ‘command, control, communication, computer, cyber and intelligence’, can correlate large quantities of data from various sources in real-time to enable situational awareness (necessary for managing significant events), the protection of an area at risk, and the security of an entire territory.
In the era of the data-driven economy, Leonardo created a national hub dedicated to the digitalisation of Italian industry in Genoa to contribute to the country’s digital transformation. It will host a Cyber Security Academy and Leonardo Labs, research laboratories on technological innovation in defence, security and aerospace, which will dialogue with the University of Genoa and the National Institute of Technology.
The Leonardo Cyber & Security Academy in Genoa is a centre for the advanced training, study and integration of cyber-security skills to support the digital transition. An educational resource geared towards bridging the training gap - of companies, institutions and citizens - related to the skills needed to face challenges and threats in the cyber environment. At the ‘technological heart’ of the Academy are the Cyber Range and Cyber Trainer platforms, which leverage virtualisation and interoperability to simulate immersive and complex operational scenarios by creating digital twins of networks, systems, and applications to be protected, as well as threats and tools for attack and defence.
An innovative naval cockpit commissioned by the Italian Navy as part of a modernisation programme for its fleet of Multipurpose Offshore Patrol Vessels (PPA). The integrated workstation, co-produced by Leonardo and Fincantieri NexTech, enables ship and airborne operations to be conducted by just two operators who can manage the machinery, rudders and platform systems as well as some functions of the Combat Management System (CMS). As well as radically cutting the number of personnel on the bridge, the cockpit enables the ship to remain in a high state of readiness for any sudden threats and gives access to all of its optical sensors from a single location, each of which provides a 360° view using day, night and infrared cameras.
A mission to return to the Moon and, for the first time, with a female astronaut. Leonardo’s capabilities and technology will enable Italy to play a leading role in the Artemis I mission. The Orion spacecraft will carry the capsule housing the astronauts during the journey, and the European Service Module (ESM) will provide electricity, propulsion, thermal control, air and water. At its Nerviano (Milan) factory, Leonardo will build the photovoltaic assemblies (PVAs) that make up the four ‘wings’ of the service module, and the electronic units (PCDUs) for controlling and distributing energy in the spacecraft. Thales Alenia Space will build the structure of the ESM module and critical subsystems, including the micrometeorite protection and thermal control system. Orion was launched on 16 November 2022 (without astronauts on board) for a test flight from the Kennedy Space Center in Cape Canaveral, Florida.
Athena MK2/U is a result of the technological innovation that is increasingly impacting the underwater sector. The new Combat Management System (CMS) with underwater capabilities will equip the Italian Navy’s U212 Near Future Submarines (NFS). In addition to the features of its predecessor ATHENA MK2, such as tactical situation management and organic sensors (adapted to sonar systems), situational awareness acquisition, interoperability, data logging and analysis, the new system has additional capabilities (Underwater Extended Capabilities): Target Motion Analysis (TMA) to understand the position in submarine space, and Video Processing to provide a more complex tactical situation that is processed using artificial intelligence and algorithms. The multifunctional consoles that make up the man-machine interface will use augmented reality for an improved visualisation of the data and better rendering of the tactical scenario.
Under a contract to complete the development and integration of the new European Common Radar System (ECRS) Mk2 radar for the Royal Air Force (RAF) Typhoon fleet, the first radar was delivered in April. Designed and manufactured by Leonardo UK at its Edinburgh and Luton facilities, the new sensor will transform airspace patrol capability by enabling aircraft to simultaneously detect, identify and track multiple ground and sea targets, providing enhanced defence capabilities and advanced self-protection capabilities for the skies.
Developed at Leonardo Electronics US in Arizona, this high-power laser diode system is a new technology for advanced photonics research. Installed at the Science and Technology Facilities Council (STFC) national research centre in Oxfordshire, UK, it will enable the scientific community to accelerate research projects conducted in various sectors, from the medical field (in cancer therapies) to imaging and green energy production.
Two optical instruments will be the technological backbone of PLATiNO (miniature High-Tech Space Platform), an Italian Space Agency programme using mini-satellites to support a wide range of missions in Earth observation, telecommunications and science. Leonardo will produce an ultra-compact, ultra-high resolution optical camera for PLATiNO 3, with a ground detail level (spatial resolution) of at least 50 cm. For PLATiNO 4, the company will supply - modelled on PRISMA, with the same performance but half the size and mass - a compact, lightweight, latest-generation hyperspectral camera. This will be used for the chemical-physical analysis of observed land surfaces and for gathering information to support natural and anthropogenic risk prevention activities.
Video banner : Compagnia Generale di Elettricità factories, Milan, 1955 - 1956,
Courtesy Fondazione Ansaldo
2026-06-01T17:55:53Z
cookie_disclaimer:true
page_disclaimer :false