Financial highlights
Last trade 54.42€
Variation 0.00%
29/05/2026 - 05:38 PM
data source: Investis Digital
Financial highlights
Last trade 54.42€
Variation 0.00%
29/05/2026 - 05:38 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>
‘Flight, the appearance of absent things, a word heard in the same, random tone of whoever uttered it unhindered by distance of time and place, the deep seas crossed, [...] all the fabulous wonders of One Thousand and One Nights, and many others, have come true, machines make them come true. These are no longer leaps into impossible fantasies and feelings, dreams, symbols of the boundless freedom of poetry. They have become the effects of man-made instruments.’
There is an indissoluble thread linking the history of Italy with that of Leonardo. This began in the second half of the 19th century, and then, in the 20th century, during the country’s industrial development, it weaved the fabric of a history marked by innovation and made up of new discoveries, extraordinary projects and advanced production processes.
Formerly known as Finmeccanica, and since 2017 Leonardo, the company has embraced the legacy, systemic thinking and ingenuity of Leonardo da Vinci. Many of the areas (in terms of both analysis and execution) explored by Leonardo’s genius have turned out, over time, to offer inspiration and insight to the workers, technicians and engineers who, with their ideas and ambitions, lived through the industrial fortunes of the companies that later became part of the Group's history.
Leonardo SpA’s legacy is one of industrial vision, synergies built through participation in strategic international programmes, and continuous investment in research and in the people who work there. These people are guardians of a wealth of expertise, from shipbuilding to electronics, from mechanics to engineering, from aerospace to artificial intelligence and the new frontiers of supercomputing.
It is with them that the company is today creating a new ‘grammar of innovation’ to keep pace with the digital revolution. A mix of science and technology, invention and application, factories and skills, Leonardo’s is a legacy that, by its very nature, looks to the future and is one of which everyone, every day, is a witness.
Video banner : Compagnia Generale di Elettricità factories, Milan, 1955 - 1956,
Courtesy Fondazione Ansaldo
2026-05-29T18:59:57Z
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919140e45525d5f4f58455e445a4a423660
COOKIE_SUPPORT - true
GUEST_LANGUAGE_ID - en_US
JSESSIONID - C26488660D6F2389BAFF8BD41E2239C7.lcsgepalsv050
cookie_disclaimer:true
page_disclaimer :false