Financial highlights
Last trade 63.80€
Variation -0.44%
16/03/2026 - 05:38 PM
data source: Investis Digital
Financial highlights
Last trade 63.80€
Variation -0.44%
16/03/2026 - 05:38 PM
data source: Investis Digital
Financial Results & Reports
Press releases
Leonardo aircraft and sensors are being integrated to support a variety of maritime surveillance missions around the world. Read how the ATR patrol aircraft fitted with Leonardo sensors and the ATOS mission management system and the Falco family of uncrewed Air Vehicles, are working together to secure the Mediterranean Sea.
A maritime surveillance aircraft flying over the Strait of Sicily, is looking for clues of suspicious activity 200 miles from the coast. The aircraft has just begun its surveillance mission when it in line with guidelines, it is directed to return to base to allow the crew and console operators to rest. It requires hours of further surveillance to collect evidence of unlawful activity at sea, so the crew requests the assistance of a Falco EVO uncrewed aircraft capable of conducting missions up to18 hours, with a complete maritime surveillance suite and a satellite connection.
From an altitude of 3,000 feet, the Falco can maintain a distance of 6 or 7 kilometres from its target. Thanks to its high performance electro-optical system and a 43 decibel sonic signature, is the uncrewed aircraft remains practically invisible to the smugglers. In the hours that follow, the remote-controlled aircraft will collect evidence of illegal activity, documenting every detail of what goes on at sea without allowing its presence to be detected.
This is only one example of the possible synergies between manned aircraft and remote-controlled systems: the interoperability of the two categories and their complementary operational features permit improved efficiency for the most complex surveillance missions.
While on one hand a big manned patrol craft such as the Guardia di Finanza’s ATR monitoring Italy’s coastline can move three times faster than an uncrewed aircraft, uncrewed craft have three to four times more persistence pursuing their target. After all, while an ATR can count on a bigger range of sensors and the on board presence of specialised operators, an uncrewed aircraft does not have to consider the issue of crew fatigue, so it has a much greater mission autonomy and can patrol a vast area for hours and hours on end. In both cases, the ground Command and Control Centre can count on valuable information collected in the field and sent from the surveillance platforms in real time. This scenario, repeated at regular intervals in the skies over the Strait of Sicily, is also a clear example of Leonardo’s unique ability to offer complete solutions covering all aspects of surveillance: from uncrewed to piloted flight, including sensors and all accessory services permitting execution of the mission.

Given the complexity of modern customers’ requirements, Leonardo is able to deliver a solution that best fits with each customers’ need. The ISR system can be sold as it is, or Leonardo can set up a full service, providing the buyer with exploited information, ready to support the decision makers. Leonardo can also deliver a wide range of service solution, from the dry lease to the pay-for-information, where Leonardo is charge of any operational aspect from the maintenance to the data exploitation.
In addition to the options described above, there is a great variety of customer specific solutions, tailored on any specific operational need. Leonardo is not only an original equipment manufacturer (OEM) but also a partner of choice to implement the most complex ISR solutions based on internal or third parties’ platforms. Leonardo can deliver completely self-developed solutions as well as fully equipped special missions aircrafts based on commercial green aircraft integrated with any kind of sensors or mission suites on a one-stop-shop model
As the Design Authority for almost all the elements, from the aircraft to the sensor, Leonardo can offer a complete solution with a great value for the customer,
Having outstanding know-how in every sector also offers additional benefits: when uncrewed aircraft first began to play a role in maritime surveillance, the sensors, especially radar, were too big and heavy as they had been designed for large manned platforms. Leonardo solved the problem in-house, miniaturising the sensors by reducing their weight, dimensions and power consumption keeping performance constant, or even improving it. One example is the company’s Gabbiano radar system, the weight of which was reduced to less than half that of the 100 kg standard version. This transformation filled a void in the sensor market and permitted development of highly effective uncrewed solutions such as the Falco. From this virtuous development circle, these miniaturised sensors developed for Uncrewed Air Vehicles have found an application in another market segment: light manned surveillance craft. Leonardo has signed agreements with a number of light aircraft manufacturers, coming up with small, economical maritime surveillance solutions which nonetheless include radar, electro-optical cameras and the ATOS mission suite. Conducting air surveillance missions with lightweight aircraft has now become an established reality, even though no one thought it would be possible until a few years ago!

The following has evaluated to null or missing:
==> Links [in template "20115#20151#8694053" at line 193, 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 193, 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!}"
26 media="(max-width: 576px)"
27 />
28 <source
29 srcset="${posterImg.tablet_portrait!}"
30 media="(max-width: 768px)"
31 >
32 <source
33 srcset="${posterImg.tablet_landscape!}"
34 media="(max-width: 1024px)"
35 >
36 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
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!}"
111 media="(max-width: 576px)"
112 />
113 <source
114 srcset="${posterImg.tablet_portrait!}"
115 media="(max-width: 768px)"
116 >
117 <source
118 srcset="${posterImg.tablet_landscape!}"
119 media="(max-width: 1024px)"
120 >
121 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
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 ></iframe>
149 </div>
150 </div>
151 <script>
152 (function() {
153 const button = document.getElementById("button-video-${videoId}");
154 const overlay = document.getElementById("video-${videoId}");
155 const iframe = document.getElementById("youtube-player-${videoId}");
156
157 button.addEventListener("click", function() {
158 const videoId = button.dataset.video;
159
160 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
161 overlay.style.display = "block";
162 button.style.display = "none";
163 });
164 })();
165 </script>
166 <#else>
167 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
168 </#if>
169 </div>
170 <div class="right component-with-title">
171 <!--Start Module: Highlights Pitch-->
172 <div>
173 <#if TextInfo.Title.getData() != "" >
174 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
175 </#if>
176 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
177 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
178 </#if>
179 </div>
180 <#if TextInfo.Title.Attach.getData() !=''>
181 <div class="card-interview centered download">
182 <#list TextInfo.Title.Attach.getSiblings() as node>
183 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
184 <div class="card">
185 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}" download>
186 <span>${TextInfo.Title.Attach.Label.getData()}</span>
187 </a>
188 </div>
189 </#if>
190 </#list>
191 </div>
192 </#if>
193 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
194 <div class="flex flex-col gap-4">
195 <#list Links.getSiblings() as node>
196
197 <#assign externalUrl = node.ExternalTargetURL.getData()!"" />
198 <#assign internalUrl = node.LinkTargetPage.getFriendlyUrl()!"" />
199 <#assign linkText = node.LinkText.getData()!"" />
200
201 <#if linkText?has_content && (externalUrl?has_content || internalUrl?has_content)>
202
203 <#assign url = externalUrl?has_content?then(externalUrl, internalUrl) />
204
205 <a href="${url}"
206 target="${node.LinkTargetOpenIn.getData()!}"
207 title="${linkText}"
208 class="card-text-arrow">
209 <p class="body-medium">${linkText}</p>
210 </a>
211
212 </#if>
213 </#list>
214 </div>
215 </#if>
216 <!--End Module: Highlights Pitch-->
217 </div>
218 </div>
219 </div>
220 </div>
221 <!--End Module: Plan Highlights-->
222 <#else>
223 <!-- No video selected -->
224 </#if>
225<#else>
226 <#assign siteExpandoBridge = themeDisplay.getScopeGroup().getExpandoBridge() />
227 <#assign new_restyle = (siteExpandoBridge.hasAttribute("new-restyle")?then(getterUtil.getBoolean(siteExpandoBridge.getAttribute("new-restyle", false)),false)) />
228 <#if new_restyle?? && new_restyle>
229 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
230
231 <#macro videoBox yt canto video poster>
232
233 <div class="video-full-width-container-rounded">
234 <button
235 class="video-full-width"
236 title="play report video"
237 onclick="playSingleVideo(this)"
238 data-video="${video}"
239 >
240 <div class="cover rounded-20">
241 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
242 <#assign scalingDetails = {
243 "desktop": {"alternateImage": {}, "key": "w_768"},
244 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
245 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
246 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
247 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
248 <picture>
249 <source
250 srcset="${posterImg.mobile!}"
251 media="(max-width: 576px)"
252 />
253 <source
254 srcset="${posterImg.tablet_portrait!}"
255 media="(max-width: 768px)"
256 >
257 <source
258 srcset="${posterImg.tablet_landscape!}"
259 media="(max-width: 1024px)"
260 >
261 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
262 </picture>
263 </#if>
264
265 <div class="btn-play">
266 <img
267 class="icon"
268 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
269 alt="play"
270 />
271 <img
272 class="icon-hover"
273 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
274 alt="play"
275 />
276 </div>
277 </div>
278 </button>
279 </div>
280 </#macro>
281
282 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
283
284 <#assign scalingDetails = {
285 "desktop": {"alternateImage": {}, "key": "w_768"},
286 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
287 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
288 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
289 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
290 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
291
292 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
293 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
294
295 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
296 <#assign videoStr = VideoInfo.CantoUrl.getData()>
297 <#elseif VideoInfo.YoutubeId.getData() != "">
298 <#assign videoStr = VideoInfo.YoutubeId.getData()>
299 <#elseif VideoInfo.Video.getSiblings()?has_content>
300 <#assign videoStr = "">
301 <#list VideoInfo.Video.getSiblings() as cur_Video>
302 <#assign videoFile = cur_Video.getData()>
303 <#assign videoFileType = cur_Video.VideoType.getData()>
304 <#if videoStr?? && videoStr != "">
305 <#assign videoStr = videoStr + ",">
306 </#if>
307 <#assign videoStr = videoStr + "${themeDisplay.getPortalURL()}" + videoFile>
308 </#list>
309 </#if>
310
311 <!--Start Module: Plan Highlights-->
312 <div class="container-full-width padding-bottom padding-top">
313 <div class="container">
314 <div class="flex-grid-plus-cards video">
315 <div class="left <#if VideoInfo.ImagePosition.getData() == "right">order-2</#if>">
316 <#if VideoInfo.YoutubeId.getData() != "">
317 <div class="video-full-width-container-rounded">
318 <#assign videoId = VideoInfo.YoutubeId.getData()>
319 <button
320 type="button"
321 class="video-full-width video-yt"
322 title="play report video"
323 data-video="${videoId}"
324 id="button-video-${videoId}"
325 >
326 <div class="cover rounded-20">
327 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
328 <#assign scalingDetails = {
329 "desktop": {"alternateImage": {}, "key": "w_768"},
330 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
331 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_720"},
332 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_596"} }>
333 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
334 <picture>
335 <source
336 srcset="${posterImg.mobile!}"
337 media="(max-width: 576px)"
338 />
339 <source
340 srcset="${posterImg.tablet_portrait!}"
341 media="(max-width: 768px)"
342 >
343 <source
344 srcset="${posterImg.tablet_landscape!}"
345 media="(max-width: 1024px)"
346 >
347 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop!}" />
348 </picture>
349 </#if>
350
351 <div class="btn-play">
352 <img
353 class="icon"
354 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
355 alt="play"
356 />
357 <img
358 class="icon-hover"
359 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
360 alt="play"
361 />
362 </div>
363 </div>
364 </button>
365 <div id="video-${videoId}" class="embed-responsive embed-responsive-16by9" style="display:none;">
366 <iframe
367 id="youtube-player-${videoId}"
368 width="100%"
369 height="100%"
370 frameborder="0"
371 allow="autoplay; fullscreen; encrypted-media"
372 allowfullscreen
373 playsinline
374 ></iframe>
375 </div>
376 </div>
377 <script>
378 (function() {
379 const button = document.getElementById("button-video-${videoId}");
380 const overlay = document.getElementById("video-${videoId}");
381 const iframe = document.getElementById("youtube-player-${videoId}");
382
383 button.addEventListener("click", function() {
384 const videoId = button.dataset.video;
385
386 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
387 overlay.style.display = "block";
388 button.style.display = "none";
389 });
390 })();
391 </script>
392 <#else>
393 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
394 </#if>
395 </div>
396 <div class="right component-with-title">
397 <!--Start Module: Highlights Pitch-->
398 <div>
399 <#if TextInfo.Title.getData() != "" >
400 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
401 </#if>
402 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
403 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
404 </#if>
405 </div>
406 <#if TextInfo.Title.Attach.getData() !=''>
407 <div class="card-interview centered download">
408 <#list TextInfo.Title.Attach.getSiblings() as node>
409 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
410 <div class="card">
411 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}" download>
412 <span>${TextInfo.Title.Attach.Label.getData()}</span>
413 </a>
414 </div>
415 </#if>
416 </#list>
417 </div>
418 </#if>
419 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
420 <div class="flex flex-col gap-4">
421 <#list Links.getSiblings() as node>
422 <#if node.ExternalTargetURL.getData() !='' && node.LinkText.getData() !=''>
423 <#assign url = node.ExternalTargetURL.getData() />
424 </#if>
425 <#if node.LinkTargetPage.getFriendlyUrl() !='' && node.LinkText.getData() !=''>
426 <#assign url = node.LinkTargetPage.getFriendlyUrl() />
427 </#if>
428 <a href="${url}" target ="${node.LinkTargetOpenIn.getData()}" title="${node.LinkText.getData()}" class="card-text-arrow">
429 <p class="body-medium">${node.LinkText.getData()}</p>
430 </a>
431 </#list>
432 </div>
433 </#if>
434 <!--End Module: Highlights Pitch-->
435 </div>
436 </div>
437 </div>
438 </div>
439 <!--End Module: Plan Highlights-->
440 <#else>
441 <!-- No video selected -->
442 </#if>
443 <#else>
444 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
445 <#assign rndNamespace = randomNamespace>
446 <#assign currentLayoutFriendlyURL = themeDisplay.getLayout().getFriendlyURL()?remove_beginning("/") />
447
448 <#if currentLayoutFriendlyURL == "home">
449 <#assign cssForTitle = "plan-highlights">
450 <#else>
451 <#assign cssForTitle = "plan-highlights--investors">
452 </#if>
453
454 <#macro downloadIcon>
455 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18">
456 <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"/>
457 </svg>
458 </#macro>
459 <#macro videoBox yt canto video poster>
460 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
461 <div class="plan-highlights--wrapper">
462 <#if canto>
463 <div class="leo-video canto-video"
464 data-video-data='{
465 "showControls":true,
466 "videoSources":[
467 "${video}"
468 ],
469 "posters":{
470 "desktop":"${poster.desktop!}",
471 "tabletLandscape":"${poster.tablet_landscape!}",
472 "tabletPortrait":"${poster.tablet_portrait!}",
473 "mobile":"${poster.mobile!}"
474 }}'
475 data-img-url-d="${poster.desktop!}"
476 data-img-url-tl="${poster.tablet_landscape!}"
477 data-img-url-tp="${poster.tablet_portrait!}"
478 data-img-url-m="${poster.mobile!}">
479 </div>
480 <#elseif yt>
481 <div class="youtube-player-container "
482 data-video-id="${video}"
483 data-div-id = "${randomNamespace}${video}"
484 data-img-url-d="${poster.desktop!}"
485 data-img-url-tl="${poster.tablet_landscape!}"
486 data-img-url-tp="${poster.tablet_portrait!}"
487 data-img-url-m="${poster.mobile!}"
488 data-use-no-cookie-domain="true"
489 data-play-fullscreen="true"
490 data-video-controls="true"
491 tabindex="1">
492 <div class="youtube-player" id="${randomNamespace}${video}"></div>
493 </div>
494 <#else>
495 <div class="leo-video"
496 data-video-data="{
497 "showControls":true,
498 "videoSources":[
499 ${video}
500 ],
501 "posters":{
502 "desktop":"${poster.desktop!}",
503 "tabletLandscape":"${poster.tablet_landscape!}",
504 "tabletPortrait":"${poster.tablet_portrait!}",
505 "mobile":"${poster.mobile!}"
506 }}"
507 data-img-url-d="${poster.desktop!}"
508 data-img-url-tl="${poster.tablet_landscape!}"
509 data-img-url-tp="${poster.tablet_portrait!}"
510 data-img-url-m="${poster.mobile!}">
511 </div>
512 </#if>
513 </div>
514 </div>
515 </#macro>
516
517 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
518
519 <#assign isLeft = (VideoInfo.ImagePosition?? && VideoInfo.ImagePosition.getData() != "" && !(VideoInfo.ImagePosition.getData())?contains("right")) >
520
521 <#assign scalingDetails = {
522 "desktop": {"alternateImage": {}, "key": "w_720"},
523 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
524 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
525 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
526 }>
527 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
528
529 <noscript>
530 <img src="${posterImg.desktop!}" alt='${posterImg.alt_desktop!}'>
531 <img src="${posterImg.tablet_landscape!}" alt='${posterImg.alt_tablet_landscape!}'>
532 <img src="${posterImg.tablet_portrait!}" alt='${posterImg.alt_tablet_portrait!}'>
533 <img src="${posterImg.mobile!}" alt='${posterImg.alt_mobile!}'>
534 </noscript>
535
536 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
537 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
538
539 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
540 <#assign videoStr = VideoInfo.CantoUrl.getData()>
541 <#elseif VideoInfo.YoutubeId.getData() != "">
542 <#assign videoStr = VideoInfo.YoutubeId.getData()>
543 <#elseif VideoInfo.Video.getSiblings()?has_content>
544 <#assign videoStr = "">
545 <#list VideoInfo.Video.getSiblings() as cur_Video>
546 <#assign videoFile = cur_Video.getData()>
547 <#assign videoFileType = cur_Video.VideoType.getData()>
548 <#if videoStr?? && videoStr != "">
549 <#assign videoStr = videoStr + ",">
550 </#if>
551 <#assign videoStr = videoStr + "{"src":"" + videoFile + "","type":"" + videoFileType + ""}">
552 </#list>
553 </#if>
554
555 <!--Start Module: Plan Highlights-->
556 <div class="section-container section-container--fixed">
557 <#if TextInfo.Title.isAnchorEnabled?? && getterUtil.getBoolean(TextInfo.Title.isAnchorEnabled.getData())>
558 <#assign labelIsLeft = ((TextInfo.Title.isAnchorEnabled.AnchorText.LabelPosition.getData())!"left") == "left">
559 <div class="section-grid layout--tp-col layout--m-col">
560 <#if !labelIsLeft >
561 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
562 </#if>
563 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
564 <!--Start Module: Goto-->
565 <#if TextInfo.Title.isAnchorEnabled.AnchorText.getData() != "" >
566 <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>
567 </#if>
568 <!--End Module: Goto-->
569 </div>
570 <#if labelIsLeft>
571 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
572 </#if>
573 </div>
574 </#if>
575 <div class="${cssForTitle}">
576 <div class="section-grid ${(!isLeft)?then('layout--tp-col-reverse layout--m-col-reverse','layout--tp-col layout--m-col')}">
577 <#if isLeft >
578 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
579 </#if>
580 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
581 <!--Start Module: Highlights Pitch-->
582 <div class="highlights-pitch">
583 <#if TextInfo.Title.getData() != "" >
584 <#if TextInfo.Title.isH1?? && getterUtil.getBoolean(TextInfo.Title.isH1.getData())>
585 <h1 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h1>
586 <#else>
587 <h2 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h2>
588 </#if>
589 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
590 <p class="highlights-pitch--description"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
591 </#if>
592 </#if>
593 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "">
594 <div class="highlights-pitch--file-downloads">
595 <#list TextInfo.Title.Attach.getSiblings() as cur_file>
596 <#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) >
597 <div class="highlights-pitch--file">
598 <a class="file"
599 href="${file_info.downloadUrl}"
600 target="_blank">
601 <@downloadIcon />
602 <span class="highlights-pitch--file--filename">
603 ${(cur_file.Label.getData())!(file_info.title)!}
604 </span>
605 </a>
606 </div>
607 </#list>
608 </div>
609 </#if>
610 <#assign opened = false>
611 <#if Links?has_content>
612 <#list Links.getSiblings() as cur_Link>
613 <#assign targetUrl=leonardo.getTargetUrl(cur_Link.ExternalTargetURL, cur_Link.LinkTargetPage)!>
614 <#if targetUrl?has_content>
615 <#assign target=leonardo.getTarget(cur_Link.LinkTargetOpenIn!)!>
616 <#if opened = false>
617 <div class="section-hero-card--targets" >
618 <#assign opened = true>
619 </#if>
620 <div class="section-hero-card--target">
621 <a class="section-hero-card--target--link"
622 href="${targetUrl}"
623 target = "${target}"
624 title="${cur_Link.LinkText.data!}" >
625 ${cur_Link.LinkText.data!}
626 <span class="icon--read-more"></span>
627 </a>
628 </div>
629 </#if>
630 </#list>
631 <#if opened>
632 </div>
633 </#if>
634 </#if>
635 </div>
636 <!--End Module: Highlights Pitch-->
637 </div>
638 <#if !isLeft >
639 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
640 </#if>
641 </div>
642 </div>
643 </div>
644 <!--End Module: Plan Highlights-->
645 <#else>
646 <!-- No video selected -->
647 </#if>
648 </#if>
649</#if>
Receive the latest
updates from leonardo
2026-03-16T23:09:51Z
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919144445525d5f4f58455e445a4a423660
JSESSIONID - 33E7FA91FCC28AEE052CE3F054425575.lcsgepalsv050
GUEST_LANGUAGE_ID - en_US
COOKIE_SUPPORT - true
cookie_disclaimer:true
page_disclaimer :false