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>
Eurofighter Typhoon in flight. Leonardo delivered about 36% of the value of the programme, with a key role in the aeronautics and electronics component.
“How did an Italian conglomerate that, until last year, was largely considered an also-ran in the cutting-edge defence and aerospace industry suddenly become the largest supplier of the most sophisticated parts of Europe’s premier military programme? The answer reveals one of the most remarkable reversals of fortune in the recent history of the European defence sector, one that signals a shift in who builds and sells the continent’s largest and most important weapons. Through a series of bold and sometimes costly restructurings and acquisitions – particularly in the UK, where over the past nine months it has spent more than £1.6bn ($2.9bn, €2.4bn) to become, by some measures, the second largest defence group in the country – Finmeccanica has thrust itself into the centre of what many expect to be the second large-scale consolidation the European sector has seen in a decade”.
Finmeccanica launched a policy of agreements and acquisitions, taking part in the reorganisation of the European aerospace industry and progressively emerging as a global player in Aerospace, Defence and Security. This included the takeover of the UK helicopter company Westland and of BAE Systems’ assets in defence electronics, and the Space Alliance with Thales for satellite services and space manufacturing. It gained further expertise in defence electronics with the US company DRS Technologies, and in helicopters with the Polish company PZL-Świdnik.
Following the 2009 international financial crisis, with shrinking budgets and intensifying global competition, the watchword became asset rationalisation. This decision led to the company’s exit from the energy and transport sectors and its reorganisation into One Company, transforming its subsidiaries into operating divisions. The aim was to strengthen competitiveness and investment capacity by moving towards innovative technology cycles in relation to the increasing digitisation in Space, cybersecurity and industrial design. The company’s rebranding as Leonardo in 2016 was the ideal culmination of this transformation.
The FALCO, progenitor of a family of Uncrewed Aerial Vehicles intended for reconnaissance, surveillance and intelligence missions, made its maiden flight from the Interforce Firing Range of Salto di Quirra in Sardinia. Its technological evolution led Finmeccanica to be the only European company capable of supplying end-to-end remote piloting solutions, also integrating platforms, radar and electro-optical sensors and ground mission and control systems.
The M-346 introduced innovations in its category, such as digital fly-by-wire controls and the ETTS (Embedded Tactical Training System) training system that enabled the aircraft to emulate sensors, armaments and CGFs (Computer Generated Forces). It also enabled pilots to operate simultaneously, and in combination, in Live (real flight), Virtual (various types of simulators) and Constructive (interfacing with any computer-generated force/threat) modes.
The AB139, renamed the AW139 in 2005, is a multi-role helicopter (rescue, medical intervention, public safety, offshore), the world’s best-in-class aircraft. Its strong point lies in the main rotor transmissions, fruit of a technological innovation launched in the 1970s and then extended to later models. In the event of a loss of lubricant, the transmissions provide the AW139 with sixty minutes of run-dry time, flying safely well beyond the minimum standard of thirty minutes set by the regulators.
The Passive Hydrogen Maser was launched in 2008 aboard Giove-B, the second experimental satellite of the Galileo constellation, Europe’s satellite navigation system. The PHM ‘marks the time’ of all satellites in the constellation with greater precision than any previous space clock, having a deviation of one second every three million years. This ensures maximum accuracy in Galileo’s ground-based geo-localisation and satellite navigation services.
The One Piece Barrel manufacturing process was first used in the aeronautical sector at the Monteiasi-Grottaglie plant in Puglia. This involves manufacturing the fuselage trunk of the Boeing 787 Dreamliner commercial aircraft as one piece entirely from Carbon Fibre Reinforced Plastic (CFRP) composite material.
Designed on the basis of experience gained with EMPAR radars, KRONOS is a three-dimensional, multi-mission radar for land and naval use. Based on Active Electronically Scanned Array (AESA) technology, KRONOS detects, identifies and tracks airborne and naval objects as well as providing information on targets and weapon systems. The development of AESA technology was enabled by research and investment in microelectronic components made of gallium arsenide (GaAs), which later evolved into gallium nitride (GaN), at the company’s in-house foundry, a distinctive asset at European level.
The first of four COSMO-SkyMed satellites, the most powerful and versatile space-based Earth observation system ever built, was launched. Unlike optical satellites, it features Synthetic Aperture Radar (SAR) sensors, an innovative technology allowing it to operate in all weather conditions. The constellation’s ‘four eyes’ can thus penetrate the clouds and also see in the dark.
Cupola, a module that allows astronauts to see directly outside, docks with the International Space Station (ISS). Manufactured in the Turin facilities of Thales Alenia Space, Cupola enables the monitoring of extra-vehicular activities, docking operations, and the mechanical arm of the International Space Station. It is from here that astronauts take photographs of the Earth and other celestial bodies.
The Galileo Control Centre, at the Telespazio Space Centre in Fucino (L’Aquila), operates in parallel with the Control Centre in Oberpfaffenhofen (Munich), built by DLR-GfR, a German Space Agency company, in managing the Galileo programme’s satellite constellation and mission. Galileo is the European Union’s satellite navigation system, which provides a reliable and highly accurate global navigation and localisation service. The Passive Hydrogen Maser (PHM) atomic clock, designed and built by Leonardo at the company’s site at Nerviano (Milan), provides accurate time measurement. In operation since 2010, the Italian Centre was expanded in 2021, with new control rooms and operational areas covering 6,000 square metres.
The Carlo Bergamini, the first Italian ship in the European FREMM (European Multi-Mission Frigate) programme built in joint venture with Fincantieri, was launched on 16 July at the Riva Trigoso shipyard (Genoa). It was equipped with the multifunction EMPAR Radar and Finmecanica’s world-leading defence systems, including the MU-90 torpedo and the 76/62 Super Rapid and 127/64 naval guns.
The ATR consortium, an equal joint venture between Finmeccanica and Airbus, is the world’s leading regional turboprop aircraft manufacturer. Alenia Aermacchi manufactures the entire fully equipped fuselage and vertical and horizontal tailpipes for all ATR aircraft, the latter with the highest percentage of advanced composite materials in its class. Thanks to the efficiency of their turboprop engines, ATRs consume up to 40% less fuel and emit up to 40% less CO2 than regional jets.
AgustaWestland introduced the Family Concept, the world’s first and only family of helicopters (AW139, AW169 and AW189) that shares a common design philosophy, certification and safety standards, components and instruments, plus maintenance and training systems.
The Cyber Security Centre of Excellence at Chieti comprises the Security Operation Centre (SOC) and the Open Source Intelligence Centre (OSIC) where the Supercalculator (high performance computer) is housed. Through these infrastructure, Finmeccanica - Selex ES provides security and cyber intelligence services for protection against cyber attacks. In action 24/7, the centre it protects critical infrastructures globally. Secure-by-design architectures and systems, Artificial Intelligence and Big Data analysis, virtualisation and supercomputing techniques play a central role in detection, cyber threat analysis, attack management and resolution.
The Rosetta space probe - the first to visit a comet (67P/Churyumov-Gerasimenko) - carried several Finmeccanica instruments with hyperspectral and electro-optical technology. These included A-STR (Autonomous Star Tracker), a star attitude sensor for orienting the antenna that sends signals back to Earth; NAV CAM (Navigational Camera), the probe’s space navigation camera; and VIRTIS (Visible and Infrared Thermal Imaging Spectrometer) to survey the comet’s thermal characteristics. It featured photovoltaic panels, the robotic Sample Drill & Distribution system, and the ‘drill’ installed on the lander, the latter designed to drill into the comet’s surface to acquire core samples.
Finmeccanica developed the Safe City & Main Operation Centre platform to ensure safety and security at the Milan Expo, an event of global importance. In order to monitor the event, the centre collected, integrated and represented information flows from heterogeneous systems to make them usable and interoperable.
Produced by AnsaldoBreda in partnership with Bombardier, this is the first ever mass-produced European high-speed train, with a top speed of 400 km/h. It is fully interoperable and adapts to Europe’s various types of electrical grids, power supplies and signalling systems. On board it is equipped with the ERTMS/ETCS (European Rail Traffic Management System/European Train Control System), the most advanced train control system that monitors journeys moment by moment, automatically intervening if necessary.
The ExoMars robotic probe to Mars was launched from the Baikonur space base in Kazakhstan. The aim of this programme is to search for traces of life on Mars, past and present, to build a geochemical picture of the planet, and to acquire knowledge on the environment and its geophysical aspects. For this mission Finmeccanica supplied photovoltaic generators, units for transforming and distributing electrical power to the satellite, attitude sensors for orientation in space, and an optronic observation system.
On 11 April, the Italian Air Force took delivery of the 500th Eurofighter Typhoon, an advanced multi-role fighter also used for NATO Air Policing missions, at the Turin Caselle plant. Leonardo realizes approximately 36% of the value of the entire program with a key role in the aeronautical and electronic component. In service since 2003, the Eurofighter is the backbone of the national air defense system and is undergoing constant improvement to acquire new capabilities. In particular, the advanced “beyond visual range” air-to-air missile Meteor, the high-precision Storm Shadow cruise missile and the high-precision Brimstone air-to-surface missile will be integrated. Eurofighter is the largest industrial collaboration program in Europe which generates thousands of highly specialized jobs.
Video banner : Compagnia Generale di Elettricità factories, Milan, 1955 - 1956,
Courtesy Fondazione Ansaldo
2026-06-01T17:55:42Z
JSESSIONID - BBA06670A66C469B996334630B2A99D9.lcsgepalsv146
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919141845525d5f4f58455e445a4a423660
GUEST_LANGUAGE_ID - it_IT
COOKIE_SUPPORT - true
cookie_disclaimer:true
page_disclaimer :false