An error occurred while processing the template.
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            &quot;type&quot;:&quot;video&quot;, 
549            &quot;showControls&quot;:${(getterUtil.getBoolean(SeparatorBackground.CantoUrl.CantoControlBar.getData()))?then("1","0")}, 
550            &quot;videoSources&quot;:[ 
551                "${SeparatorBackground.CantoUrl.getData()!}" 
552            ], 
553            &quot;posters&quot;:{ 
554              &quot;desktop&quot;:&quot;${slideImg.desktop!}&quot;, 
555              &quot;tabletLandscape&quot;:&quot;${slideImg.tablet_landscape!}&quot;, 
556              &quot;tabletPortrait&quot;:&quot;${slideImg.tablet_portrait!}&quot;, 
557              &quot;mobile&quot;:&quot;${slideImg.mobile!}&quot; 
558            }, 
559            &quot;content&quot;:{ 
560              &quot;heading&quot;:&quot;<@leonardo.escapeTitle title=(Title.getData()!"")?html/>&quot;, 
561              &quot;descriptions&quot;:[&quot;${((Title.DescriptionLeft.getData())!"")?html?html}&quot;, &quot;${((Title.DescriptionRight.getData())!"")?html?html}&quot;], 
562              &quot;cta&quot;:{ 
563                &quot;url&quot;:&quot;${leonardo.getTargetUrl(LinkTitle.LinkToUrl!, LinkTitle.LinkToPage!)}&quot;, 
564                &quot;title&quot;:&quot;${(LinkTitle.getData()!"")?html?html}&quot;, 
565                &quot;target&quot;:&quot;${leonardo.getTarget(LinkTitle.OpenLink!)}&quot; 
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                ,&quot;countdown&quot;:{ 
577                  &quot;countdown&quot;:&quot;${countdown}&quot;, 
578                  &quot;title&quot;:&quot;<@leonardo.escapeTitle title=(CountdownDate.Text.data!)?html/>&quot;, 
579                  &quot;days&quot;:&quot;${languageUtil.get(locale, "days")}&quot;, 
580                  &quot;hours&quot;:&quot;${languageUtil.get(locale, "hours")}&quot;, 
581                  &quot;minutes&quot;:&quot;${languageUtil.get(locale, "minutes")}&quot;, 
582                  &quot;seconds&quot;:&quot;${languageUtil.get(locale, "seconds")}&quot;, 
583                  &quot;showSeconds&quot;:${((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 + "{&quot;src&quot;:&quot;" + videoFile + "&quot;,&quot;type&quot;:&quot;" + videoFileType + "&quot;}"> 
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            &quot;type&quot;:&quot;video&quot;, 
669            &quot;showControls&quot;:false, 
670            &quot;videoSources&quot;:[ 
671              ${videoStr} 
672            ], 
673            &quot;posters&quot;:{ 
674              &quot;desktop&quot;:&quot;${slideImg.desktop!}&quot;, 
675              &quot;tabletLandscape&quot;:&quot;${slideImg.tablet_landscape!}&quot;, 
676              &quot;tabletPortrait&quot;:&quot;${slideImg.tablet_portrait!}&quot;, 
677              &quot;mobile&quot;:&quot;${slideImg.mobile!}&quot; 
678            }, 
679            &quot;content&quot;:{ 
680              &quot;heading&quot;:&quot;<@leonardo.escapeTitle title=(Title.getData()!"")?html/>&quot; 
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> 

History - Company

‘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.’

 

A legacy for the future

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

Search overlay background

Mobile navigation menu