Financial highlights
Ultima quotazione 62,26€
Variazione -0,61%
02/04/2026 - 17:38
data source: Investis Digital
Financial highlights
Ultima quotazione 62,26€
Variazione -0,61%
02/04/2026 - 17:38
data source: Investis Digital
Financial Results & Reports
Press releases
Leonardo offre soluzioni integrate a supporto delle operazioni di sorveglianza marittima in tutto il mondo. Il Sistema di Missione ATOS integra diverse suite di sensori Leonardo garantendo l’interoperabilità di sistemi manned, come l’ATR72, e uncrewed, come il Falco, per un’efficace sorveglianza del Mediterraneo.
Un aereo da pattugliamento marittimo in volo sul Canale di Sicilia, individua indizi di attività sospette a 200 miglia dalla costa. Il velivolo inizia l’attività di sorveglianza, ma è quasi al termine della sua autonomia e dovrà presto rientrare per garantire il necessario riposo all’equipaggio e agli operatori alle console. Potrebbero volerci molte ore di sorveglianza per raccogliere le prove degli illeciti in mare, quindi viene richiesto l’intervento di un velivolo uncrewed Falco EVO, in grado di svolgere missioni della durata di oltre 18 ore, con una completa suite di sorveglianza marittima e connessione satellitare. Da un’altitudine di 3.000 piedi, tenendosi a 6 o 7 chilometri di distanza dal suo obiettivo grazie all’alta definizione del suo sistema elettro-ottico, il Falco è virtualmente invisibile e, grazie ad un’impronta sonora dell’ordine dei 43 decibel, i trafficanti non lo sentiranno. Nelle ore successive, il velivolo a controllo remoto raccoglierà le prove degli illeciti, documentando le attività in mare in ogni dettaglio, senza che la sua presenza sia notata.
Falco Evo
Questo è solo un esempio delle sinergie possibili fra velivoli con equipaggio a bordo e sistemi a controllo remoto: l’interoperabilità tra le due categorie di sistemi e la complementarietà delle caratteristiche operative permettono di migliorare l’efficienza delle missioni di sorveglianza più complesse . Se da un lato, un grande pattugliatore pilotato come un ATR della Guardia di Finanza può spostarsi a velocità anche tre volte superiori a quelle di un velivolo uncrewed, i velivoli senza pilota offrono una persistenza sull’obiettivo fino a tre o quattro volte più lunga rispetto ad un velivolo tradizionale. D’altra parte, se un ATR può contare su di carico di sensori più vasto e la presenza a bordo di operatori specializzati, un velivolo non pilotato non soffre dei problemi di affaticamento dell’equipaggio ed ha un’autonomia di missione molto maggiore, così da poter pattugliare una vasta area per molte ore, senza interruzioni. In entrambi i casi, il Centro di Comando e Controllo a terra potrà contare su preziose informazioni raccolte sul campo e trasmesse in tempo reale dalle piattaforme di sorveglianza. Questo scenario, che si ripete regolarmente nei cieli del canale di Sicilia, è anche un chiaro esempio della capacità, praticamente unica a livello globale, che Leonardo ha di offrire soluzioni complete che coprono ogni elemento della sorveglianza: dai velivoli uncrewed a quelli pilotati, passando per la sensoristica e per tutti i servizi accessori che consentono l’esecuzione della missione.

Falco Xplorer – Ground Control station
Data la complessità delle esigenze dei clienti, Leonardo concorda la soluzione che meglio si adatta alle esigenze del cliente stesso. Il sistema ISR può essere venduto così com'è, op-pure Leonardo può impostare un servizio completo, fornendo all'acquirente informazioni già processate, pronte per supportare i responsabili dei processi decisionali. Leonardo è in gra-do di fornire un'ampia gamma di soluzioni di servizi, dal noleggio del sistema al pay-for-information, dove Leonardo è responsabile di qualsiasi aspetto operativo dalla manutenzio-ne alla gestione e disseminazione delle informazioni.
Oltre alle opzioni sopra descritte, è disponibile una grande varietà di soluzioni specifiche per il cliente, adatte ad ogni esigenza operativa. Infatti, Leonardo non è solo un OEM, ma un vero e proprio partner per implementare le più complesse soluzioni ISRbasate su piattafor-me proprie o di terze parti. Leonardo può fornire soluzioni completamente autosviluppate e sistemi aerei di sorveglianza basati su velivoli “green” commerciali edequipaggiati con qual-siasi tipo di sensore o suite di missione basati su un modello di business “one-stop-shop”.
Il fatto che Leonardo possa offrire una soluzione operativa completa in cui rappresenta la Design Authority per tutti gli elementi, dal velivolo al sensore, rende l'azienda praticamente unica al mondo e rappresenta un grande vantaggio per il cliente.
Avere competenze d’eccellenza in ogni settore genera anche altri vantaggi: quando i velivoli senza pilota hanno iniziato a trovare un ruolo nella sorveglianza marittima, i sensori, soprattutto radar, erano troppo grandi e pesanti perché pensati solo per le grandi piattaforme manned. Leonardo ha risolto il problema in casa, miniaturizzando i sensori il cui peso, ingombro e assorbimento sono stati ridotti mantenendone costanti, se non migliorandone, le prestazioni. Ne è un esempio il radar Gabbiano il cui peso si è ridotto di oltre la metà versione standard, arrivando a raggiungere soli 25 Kg. Questa trasformazione ha colmato un vuoto nel mercato dei sensori e ha permesso di maturare soluzioni uncrewed di grandissima efficacia, come i già citati velivoli FALCO. E da questo sviluppo, in un circolo virtuoso, i sensori miniaturizzati sviluppati per gli Uncrewed Air Vehicles hanno trovato poi applicazione in un ulteriore segmento di mercato, quello dei velivoli da sorveglianza pilotati leggeri. Leonardo ha stretto accordi con diversi produttori di velivoli leggeri, realizzando soluzioni di sorveglianza marittima piccole ed economiche ma completo di radar, camera elettro-ottica e suite di missione ATOS. Lo svolgimento di missioni di sorveglianza aerea con velivoli leggeri è oggi una solida realtà, eppure, fino a qualche anno fa, nessuno avrebbe pensato fosse possibile.

Atos
The following has evaluated to null or missing:
==> Links [in template "20115#20151#8694053" at line 194, column 29]
----
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 Links.ExternalTargetURL.getData()... [in template "20115#20151#8694053" at line 194, column 24]
----
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 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
5
6 <#macro videoBox yt canto video poster>
7
8 <div class="video-full-width-container-rounded">
9 <button
10 class="video-full-width"
11 title="play report video"
12 onclick="playSingleVideo(this)"
13 data-video="${video}"
14 >
15 <div class="cover rounded-20">
16 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
17 <#assign scalingDetails = {
18 "desktop": {"alternateImage": {}, "key": "w_768"},
19 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
20 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
21 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
22 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
23 <picture>
24 <source
25 srcset="${posterImg.mobile?replace(" ", "%20")!}"
26 media="(max-width: 576px)"
27 />
28 <source
29 srcset="${posterImg.tablet_portrait?replace(" ", "%20")!}"
30 media="(max-width: 768px)"
31 >
32 <source
33 srcset="${posterImg.tablet_landscape?replace(" ", "%20")!}"
34 media="(max-width: 1024px)"
35 >
36 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop?replace(" ", "%20")!}" />
37 </picture>
38 </#if>
39
40 <div class="btn-play">
41 <img
42 class="icon"
43 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
44 alt="play"
45 />
46 <img
47 class="icon-hover"
48 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
49 alt="play"
50 />
51 </div>
52 </div>
53 </button>
54 </div>
55 </#macro>
56
57 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
58
59 <#assign scalingDetails = {
60 "desktop": {"alternateImage": {}, "key": "w_768"},
61 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
62 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
63 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
64 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
65
66 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
67 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
68
69 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
70 <#assign videoStr = VideoInfo.CantoUrl.getData()>
71 <#elseif VideoInfo.YoutubeId.getData() != "">
72 <#assign videoStr = VideoInfo.YoutubeId.getData()>
73 <#elseif VideoInfo.Video.getSiblings()?has_content>
74 <#assign videoStr = "">
75 <#list VideoInfo.Video.getSiblings() as cur_Video>
76 <#assign videoFile = cur_Video.getData()>
77 <#assign videoFileType = cur_Video.VideoType.getData()>
78 <#if videoStr?? && videoStr != "">
79 <#assign videoStr = videoStr + ",">
80 </#if>
81 <#assign videoStr = videoStr + "${themeDisplay.getPortalURL()}" + videoFile>
82 </#list>
83 </#if>
84
85 <!--Start Module: Plan Highlights-->
86 <div class="container-full-width padding-bottom padding-top">
87 <div class="container">
88 <div class="flex-grid-plus-cards video">
89 <div class="left <#if VideoInfo.ImagePosition.getData() == "right">order-lg-2</#if>">
90 <#if VideoInfo.YoutubeId.getData() != "">
91 <div class="video-full-width-container-rounded">
92 <#assign videoId = VideoInfo.YoutubeId.getData()>
93 <button
94 type="button"
95 class="video-full-width video-yt"
96 title="play report video"
97 data-video="${videoId}"
98 id="button-video-${videoId}"
99 >
100 <div class="cover rounded-20">
101 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
102 <#assign scalingDetails = {
103 "desktop": {"alternateImage": {}, "key": "w_768"},
104 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
105 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
106 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
107 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
108 <picture>
109 <source
110 srcset="${posterImg.mobile?replace(" ", "%20")!}"
111 media="(max-width: 576px)"
112 />
113 <source
114 srcset="${posterImg.tablet_portrait?replace(" ", "%20")!}"
115 media="(max-width: 768px)"
116 >
117 <source
118 srcset="${posterImg.tablet_landscape?replace(" ", "%20")!}"
119 media="(max-width: 1024px)"
120 >
121 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop?replace(" ", "%20")!}" />
122 </picture>
123 </#if>
124
125 <div class="btn-play">
126 <img
127 class="icon"
128 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
129 alt="play"
130 />
131 <img
132 class="icon-hover"
133 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
134 alt="play"
135 />
136 </div>
137 </div>
138 </button>
139 <div id="video-${videoId}" class="embed-responsive embed-responsive-16by9" style="display:none;">
140 <iframe
141 id="youtube-player-${videoId}"
142 width="100%"
143 height="100%"
144 frameborder="0"
145 allow="autoplay; fullscreen; encrypted-media"
146 allowfullscreen
147 playsinline
148 title="<#if TextInfo.Title.getData() != '' ><@leonardo.escapeTitle title=TextInfo.Title.getData()/><#else>video youtube</#if>"
149 ></iframe>
150 </div>
151 </div>
152 <script>
153 (function() {
154 const button = document.getElementById("button-video-${videoId}");
155 const overlay = document.getElementById("video-${videoId}");
156 const iframe = document.getElementById("youtube-player-${videoId}");
157
158 button.addEventListener("click", function() {
159 const videoId = button.dataset.video;
160
161 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
162 overlay.style.display = "block";
163 button.style.display = "none";
164 });
165 })();
166 </script>
167 <#else>
168 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
169 </#if>
170 </div>
171 <div class="right component-with-title">
172 <!--Start Module: Highlights Pitch-->
173 <div>
174 <#if TextInfo.Title.getData() != "" >
175 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
176 </#if>
177 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
178 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
179 </#if>
180 </div>
181 <#if TextInfo.Title.Attach.getData() !=''>
182 <div class="card-interview centered download">
183 <#list TextInfo.Title.Attach.getSiblings() as node>
184 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
185 <div class="card">
186 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}">
187 <span>${TextInfo.Title.Attach.Label.getData()}</span>
188 </a>
189 </div>
190 </#if>
191 </#list>
192 </div>
193 </#if>
194 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
195 <div class="flex flex-col gap-4">
196 <#list Links.getSiblings() as node>
197
198 <#assign externalUrl = node.ExternalTargetURL.getData()!"" />
199 <#assign internalUrl = node.LinkTargetPage.getFriendlyUrl()!"" />
200 <#assign linkText = node.LinkText.getData()!"" />
201
202 <#if linkText?has_content && (externalUrl?has_content || internalUrl?has_content)>
203
204 <#assign url = externalUrl?has_content?then(externalUrl, internalUrl) />
205
206 <a href="${url}"
207 target="${node.LinkTargetOpenIn.getData()!}"
208 title="${linkText}"
209 class="card-text-arrow">
210 <p class="body-medium">${linkText}</p>
211 </a>
212
213 </#if>
214 </#list>
215 </div>
216 </#if>
217 <!--End Module: Highlights Pitch-->
218 </div>
219 </div>
220 </div>
221 </div>
222 <!--End Module: Plan Highlights-->
223 <#else>
224 <!-- No video selected -->
225 </#if>
226<#else>
227 <#assign siteExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge() />
228 <#assign new_restyle = (siteExpandoBridge.hasAttribute("new-restyle")?then(getterUtil.getBoolean(siteExpandoBridge.getAttribute("new-restyle", false)),false)) />
229 <#if new_restyle?? && new_restyle>
230 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
231
232 <#macro videoBox yt canto video poster>
233
234 <div class="video-full-width-container-rounded">
235 <button
236 class="video-full-width"
237 title="play report video"
238 onclick="playSingleVideo(this)"
239 data-video="${video}"
240 >
241 <div class="cover rounded-20">
242 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
243 <#assign scalingDetails = {
244 "desktop": {"alternateImage": {}, "key": "w_768"},
245 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
246 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
247 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
248 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
249 <picture>
250 <source
251 srcset="${posterImg.mobile!}"
252 media="(max-width: 576px)"
253 />
254 <source
255 srcset="${posterImg.tablet_portrait!}"
256 media="(max-width: 768px)"
257 >
258 <source
259 srcset="${posterImg.tablet_landscape!}"
260 media="(max-width: 1024px)"
261 >
262 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
263 </picture>
264 </#if>
265
266 <div class="btn-play">
267 <img
268 class="icon"
269 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
270 alt="play"
271 />
272 <img
273 class="icon-hover"
274 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
275 alt="play"
276 />
277 </div>
278 </div>
279 </button>
280 </div>
281 </#macro>
282
283 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
284
285 <#assign scalingDetails = {
286 "desktop": {"alternateImage": {}, "key": "w_768"},
287 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
288 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
289 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
290 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
291 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
292
293 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
294 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
295
296 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
297 <#assign videoStr = VideoInfo.CantoUrl.getData()>
298 <#elseif VideoInfo.YoutubeId.getData() != "">
299 <#assign videoStr = VideoInfo.YoutubeId.getData()>
300 <#elseif VideoInfo.Video.getSiblings()?has_content>
301 <#assign videoStr = "">
302 <#list VideoInfo.Video.getSiblings() as cur_Video>
303 <#assign videoFile = cur_Video.getData()>
304 <#assign videoFileType = cur_Video.VideoType.getData()>
305 <#if videoStr?? && videoStr != "">
306 <#assign videoStr = videoStr + ",">
307 </#if>
308 <#assign videoStr = videoStr + "${themeDisplay.getPortalURL()}" + videoFile>
309 </#list>
310 </#if>
311
312 <!--Start Module: Plan Highlights-->
313 <div class="container-full-width padding-bottom padding-top">
314 <div class="container">
315 <div class="flex-grid-plus-cards video">
316 <div class="left <#if VideoInfo.ImagePosition.getData() == "right">order-2</#if>">
317 <#if VideoInfo.YoutubeId.getData() != "">
318 <div class="video-full-width-container-rounded">
319 <#assign videoId = VideoInfo.YoutubeId.getData()>
320 <button
321 type="button"
322 class="video-full-width video-yt"
323 title="play report video"
324 data-video="${videoId}"
325 id="button-video-${videoId}"
326 >
327 <div class="cover rounded-20">
328 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
329 <#assign scalingDetails = {
330 "desktop": {"alternateImage": {}, "key": "w_768"},
331 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
332 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
333 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
334 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
335 <picture>
336 <source
337 srcset="${posterImg.mobile!}"
338 media="(max-width: 576px)"
339 />
340 <source
341 srcset="${posterImg.tablet_portrait!}"
342 media="(max-width: 768px)"
343 >
344 <source
345 srcset="${posterImg.tablet_landscape!}"
346 media="(max-width: 1024px)"
347 >
348 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
349 </picture>
350 </#if>
351
352 <div class="btn-play">
353 <img
354 class="icon"
355 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
356 alt="play"
357 />
358 <img
359 class="icon-hover"
360 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
361 alt="play"
362 />
363 </div>
364 </div>
365 </button>
366 <div id="video-${videoId}" class="embed-responsive embed-responsive-16by9" style="display:none;">
367 <iframe
368 id="youtube-player-${videoId}"
369 width="100%"
370 height="100%"
371 frameborder="0"
372 allow="autoplay; fullscreen; encrypted-media"
373 allowfullscreen
374 playsinline
375 ></iframe>
376 </div>
377 </div>
378 <script>
379 (function() {
380 const button = document.getElementById("button-video-${videoId}");
381 const overlay = document.getElementById("video-${videoId}");
382 const iframe = document.getElementById("youtube-player-${videoId}");
383
384 button.addEventListener("click", function() {
385 const videoId = button.dataset.video;
386
387 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
388 overlay.style.display = "block";
389 button.style.display = "none";
390 });
391 })();
392 </script>
393 <#else>
394 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
395 </#if>
396 </div>
397 <div class="right component-with-title">
398 <!--Start Module: Highlights Pitch-->
399 <div>
400 <#if TextInfo.Title.getData() != "" >
401 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
402 </#if>
403 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
404 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
405 </#if>
406 </div>
407 <#if TextInfo.Title.Attach.getData() !=''>
408 <div class="card-interview centered download">
409 <#list TextInfo.Title.Attach.getSiblings() as node>
410 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
411 <div class="card">
412 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}" download>
413 <span>${TextInfo.Title.Attach.Label.getData()}</span>
414 </a>
415 </div>
416 </#if>
417 </#list>
418 </div>
419 </#if>
420 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
421 <div class="flex flex-col gap-4">
422 <#list Links.getSiblings() as node>
423 <#if node.ExternalTargetURL.getData() !='' && node.LinkText.getData() !=''>
424 <#assign url = node.ExternalTargetURL.getData() />
425 </#if>
426 <#if node.LinkTargetPage.getFriendlyUrl() !='' && node.LinkText.getData() !=''>
427 <#assign url = node.LinkTargetPage.getFriendlyUrl() />
428 </#if>
429 <a href="${url}" target ="${node.LinkTargetOpenIn.getData()}" title="${node.LinkText.getData()}" class="card-text-arrow">
430 <p class="body-medium">${node.LinkText.getData()}</p>
431 </a>
432 </#list>
433 </div>
434 </#if>
435 <!--End Module: Highlights Pitch-->
436 </div>
437 </div>
438 </div>
439 </div>
440 <!--End Module: Plan Highlights-->
441 <#else>
442 <!-- No video selected -->
443 </#if>
444 <#else>
445 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
446 <#assign rndNamespace = randomNamespace>
447 <#assign currentLayoutFriendlyURL = themeDisplay.getLayout().getFriendlyURL()?remove_beginning("/") />
448
449 <#if currentLayoutFriendlyURL == "home">
450 <#assign cssForTitle = "plan-highlights">
451 <#else>
452 <#assign cssForTitle = "plan-highlights--investors">
453 </#if>
454
455 <#macro downloadIcon>
456 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18">
457 <path fill="#000" fill-rule="nonzero" d="M6.61 12.763l-2.145-2.24a.58.58 0 0 1 0-.796c.211-.22.551-.22.762 0l1.235 1.29V6.75c0-.31.24-.563.538-.563.297 0 .538.252.538.563v4.267l1.235-1.29c.21-.22.551-.22.762 0a.58.58 0 0 1 0 .796l-2.145 2.24a.526.526 0 0 1-.78 0zM12.62 18H1.383C.62 18 0 17.368 0 16.592V5.037c0-.49.19-.968.52-1.314L3.565.544A1.728 1.728 0 0 1 4.82 0h7.797C13.38 0 14 .631 14 1.407v15.186C14 17.37 13.38 18 12.619 18zM4.82 1.125a.682.682 0 0 0-.496.214L1.282 4.52a.755.755 0 0 0-.205.518v11.555c0 .156.137.283.306.283h11.235c.168 0 .305-.127.305-.282V1.407c0-.155-.137-.282-.305-.282H4.821zm-.783 4.5H2.154a.551.551 0 0 1-.539-.563c0-.31.242-.562.539-.562h1.884c.15 0 .27-.126.27-.281V2.25c0-.31.24-.563.538-.563.297 0 .539.252.539.563v1.969c0 .775-.605 1.406-1.347 1.406zm6.193 9.563H3.769a.55.55 0 0 1-.538-.563.55.55 0 0 1 .538-.563h6.462a.55.55 0 0 1 .538.563.55.55 0 0 1-.538.563z"/>
458 </svg>
459 </#macro>
460 <#macro videoBox yt canto video poster>
461 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
462 <div class="plan-highlights--wrapper">
463 <#if canto>
464 <div class="leo-video canto-video"
465 data-video-data='{
466 "showControls":true,
467 "videoSources":[
468 "${video}"
469 ],
470 "posters":{
471 "desktop":"${poster.desktop!}",
472 "tabletLandscape":"${poster.tablet_landscape!}",
473 "tabletPortrait":"${poster.tablet_portrait!}",
474 "mobile":"${poster.mobile!}"
475 }}'
476 data-img-url-d="${poster.desktop!}"
477 data-img-url-tl="${poster.tablet_landscape!}"
478 data-img-url-tp="${poster.tablet_portrait!}"
479 data-img-url-m="${poster.mobile!}">
480 </div>
481 <#elseif yt>
482 <div class="youtube-player-container "
483 data-video-id="${video}"
484 data-div-id = "${randomNamespace}${video}"
485 data-img-url-d="${poster.desktop!}"
486 data-img-url-tl="${poster.tablet_landscape!}"
487 data-img-url-tp="${poster.tablet_portrait!}"
488 data-img-url-m="${poster.mobile!}"
489 data-use-no-cookie-domain="true"
490 data-play-fullscreen="true"
491 data-video-controls="true"
492 tabindex="1">
493 <div class="youtube-player" id="${randomNamespace}${video}"></div>
494 </div>
495 <#else>
496 <div class="leo-video"
497 data-video-data="{
498 "showControls":true,
499 "videoSources":[
500 ${video}
501 ],
502 "posters":{
503 "desktop":"${poster.desktop!}",
504 "tabletLandscape":"${poster.tablet_landscape!}",
505 "tabletPortrait":"${poster.tablet_portrait!}",
506 "mobile":"${poster.mobile!}"
507 }}"
508 data-img-url-d="${poster.desktop!}"
509 data-img-url-tl="${poster.tablet_landscape!}"
510 data-img-url-tp="${poster.tablet_portrait!}"
511 data-img-url-m="${poster.mobile!}">
512 </div>
513 </#if>
514 </div>
515 </div>
516 </#macro>
517
518 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
519
520 <#assign isLeft = (VideoInfo.ImagePosition?? && VideoInfo.ImagePosition.getData() != "" && !(VideoInfo.ImagePosition.getData())?contains("right")) >
521
522 <#assign scalingDetails = {
523 "desktop": {"alternateImage": {}, "key": "w_720"},
524 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
525 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
526 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
527 }>
528 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
529
530 <noscript>
531 <img src="${posterImg.desktop!}" alt='${posterImg.alt_desktop!}'>
532 <img src="${posterImg.tablet_landscape!}" alt='${posterImg.alt_tablet_landscape!}'>
533 <img src="${posterImg.tablet_portrait!}" alt='${posterImg.alt_tablet_portrait!}'>
534 <img src="${posterImg.mobile!}" alt='${posterImg.alt_mobile!}'>
535 </noscript>
536
537 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
538 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
539
540 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
541 <#assign videoStr = VideoInfo.CantoUrl.getData()>
542 <#elseif VideoInfo.YoutubeId.getData() != "">
543 <#assign videoStr = VideoInfo.YoutubeId.getData()>
544 <#elseif VideoInfo.Video.getSiblings()?has_content>
545 <#assign videoStr = "">
546 <#list VideoInfo.Video.getSiblings() as cur_Video>
547 <#assign videoFile = cur_Video.getData()>
548 <#assign videoFileType = cur_Video.VideoType.getData()>
549 <#if videoStr?? && videoStr != "">
550 <#assign videoStr = videoStr + ",">
551 </#if>
552 <#assign videoStr = videoStr + "{"src":"" + videoFile + "","type":"" + videoFileType + ""}">
553 </#list>
554 </#if>
555
556 <!--Start Module: Plan Highlights-->
557 <div class="section-container section-container--fixed">
558 <#if TextInfo.Title.isAnchorEnabled?? && getterUtil.getBoolean(TextInfo.Title.isAnchorEnabled.getData())>
559 <#assign labelIsLeft = ((TextInfo.Title.isAnchorEnabled.AnchorText.LabelPosition.getData())!"left") == "left">
560 <div class="section-grid layout--tp-col layout--m-col">
561 <#if !labelIsLeft >
562 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
563 </#if>
564 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
565 <!--Start Module: Goto-->
566 <#if TextInfo.Title.isAnchorEnabled.AnchorText.getData() != "" >
567 <a class='goto ${(!labelIsLeft)?then("goto--icon-left","")}' href="javascript:void(0)" title="Scroll to next section">${TextInfo.Title.isAnchorEnabled.AnchorText.getData()}<span class="icon--goto"></span></a>
568 </#if>
569 <!--End Module: Goto-->
570 </div>
571 <#if labelIsLeft>
572 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
573 </#if>
574 </div>
575 </#if>
576 <div class="${cssForTitle}">
577 <div class="section-grid ${(!isLeft)?then('layout--tp-col-reverse layout--m-col-reverse','layout--tp-col layout--m-col')}">
578 <#if isLeft >
579 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
580 </#if>
581 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
582 <!--Start Module: Highlights Pitch-->
583 <div class="highlights-pitch">
584 <#if TextInfo.Title.getData() != "" >
585 <#if TextInfo.Title.isH1?? && getterUtil.getBoolean(TextInfo.Title.isH1.getData())>
586 <h1 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h1>
587 <#else>
588 <h2 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h2>
589 </#if>
590 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
591 <p class="highlights-pitch--description"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
592 </#if>
593 </#if>
594 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "">
595 <div class="highlights-pitch--file-downloads">
596 <#list TextInfo.Title.Attach.getSiblings() as cur_file>
597 <#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) >
598 <div class="highlights-pitch--file">
599 <a class="file"
600 href="${file_info.downloadUrl}"
601 target="_blank">
602 <@downloadIcon />
603 <span class="highlights-pitch--file--filename">
604 ${(cur_file.Label.getData())!(file_info.title)!}
605 </span>
606 </a>
607 </div>
608 </#list>
609 </div>
610 </#if>
611 <#assign opened = false>
612 <#if Links?has_content>
613 <#list Links.getSiblings() as cur_Link>
614 <#assign targetUrl=leonardo.getTargetUrl(cur_Link.ExternalTargetURL, cur_Link.LinkTargetPage)!>
615 <#if targetUrl?has_content>
616 <#assign target=leonardo.getTarget(cur_Link.LinkTargetOpenIn!)!>
617 <#if opened = false>
618 <div class="section-hero-card--targets" >
619 <#assign opened = true>
620 </#if>
621 <div class="section-hero-card--target">
622 <a class="section-hero-card--target--link"
623 href="${targetUrl}"
624 target = "${target}"
625 title="${cur_Link.LinkText.data!}" >
626 ${cur_Link.LinkText.data!}
627 <span class="icon--read-more"></span>
628 </a>
629 </div>
630 </#if>
631 </#list>
632 <#if opened>
633 </div>
634 </#if>
635 </#if>
636 </div>
637 <!--End Module: Highlights Pitch-->
638 </div>
639 <#if !isLeft >
640 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
641 </#if>
642 </div>
643 </div>
644 </div>
645 <!--End Module: Plan Highlights-->
646 <#else>
647 <!-- No video selected -->
648 </#if>
649 </#if>
650</#if>
Ricevi gli ultimi aggiornamenti su Leonardo
Iscriviti2026-04-06T01:38:40Z
cookie_disclaimer:true
page_disclaimer :false