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
REAL-TIME ANOMALY DETECTION
Health & Usage Monitoring System (HUMS) provides Customers with data storage and infrastructure to deal with specific fleet HUMS and maintenance management, driving down operating costs and increasing aircraft availability.
The following has evaluated to null or missing:
==> Links [in template "20115#20151#10383429" at line 195, column 30]
----
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#10383429" at line 195, column 25]
----
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": "h_560"},
19 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
20 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "h_400"},
21 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "h_300"} }>
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_720"},
61 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
62 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
63 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
64 }>
65 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
66
67 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
68 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
69
70 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
71 <#assign videoStr = VideoInfo.CantoUrl.getData()>
72 <#elseif VideoInfo.YoutubeId.getData() != "">
73 <#assign videoStr = VideoInfo.YoutubeId.getData()>
74 <#elseif VideoInfo.Video.getSiblings()?has_content>
75 <#assign videoStr = "">
76 <#list VideoInfo.Video.getSiblings() as cur_Video>
77 <#assign videoFile = cur_Video.getData()>
78 <#assign videoFileType = cur_Video.VideoType.getData()>
79 <#if videoStr?? && videoStr != "">
80 <#assign videoStr = videoStr + ",">
81 </#if>
82 <#assign videoStr = videoStr + "${themeDisplay.getPortalURL()}" + videoFile>
83 </#list>
84 </#if>
85
86 <!--Start Module: Plan Highlights-->
87 <div class="container-full-width padding-bottom padding-top">
88 <div class="container">
89 <div class="flex-grid-plus-cards video">
90 <div class="left <#if VideoInfo.ImagePosition.getData() == "right">order-lg-2</#if>">
91 <#if VideoInfo.YoutubeId.getData() != "">
92 <div class="video-full-width-container-rounded">
93 <#assign videoId = VideoInfo.YoutubeId.getData()>
94 <button
95 type="button"
96 class="video-full-width video-yt"
97 title="play report video"
98 data-video="${videoId}"
99 id="button-video-${videoId}"
100 >
101 <div class="cover rounded-20">
102 <#if VideoInfo.Image.getData()?? && VideoInfo.Image.getData() != "">
103 <#assign scalingDetails = {
104 "desktop": {"alternateImage": {}, "key": "h_560"},
105 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_400"},
106 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "h_400"},
107 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "h_300"} }>
108 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
109 <picture>
110 <source
111 srcset="${posterImg.mobile?replace(" ", "%20")!}"
112 media="(max-width: 576px)"
113 />
114 <source
115 srcset="${posterImg.tablet_portrait?replace(" ", "%20")!}"
116 media="(max-width: 768px)"
117 >
118 <source
119 srcset="${posterImg.tablet_landscape?replace(" ", "%20")!}"
120 media="(max-width: 1024px)"
121 >
122 <img class="img-fluid" alt="${posterImg.alt_desktop!}" src="${posterImg.desktop?replace(" ", "%20")!}" />
123 </picture>
124 </#if>
125
126 <div class="btn-play">
127 <img
128 class="icon"
129 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play.svg"
130 alt="play"
131 />
132 <img
133 class="icon-hover"
134 src="${themeDisplay.getPathThemeImages()}/img/generic/button-play-hover.svg"
135 alt="play"
136 />
137 </div>
138 </div>
139 </button>
140 <div id="video-${videoId}" class="embed-responsive embed-responsive-16by9" style="display:none;">
141 <iframe
142 id="youtube-player-${videoId}"
143 width="100%"
144 height="100%"
145 frameborder="0"
146 allow="autoplay; fullscreen; encrypted-media"
147 allowfullscreen
148 playsinline
149 title="<#if TextInfo.Title.getData() != ''><@leonardo.escapeTitle title=TextInfo.Title.getData()/><#else>video youtube</#if>"
150 ></iframe>
151 </div>
152 </div>
153 <script>
154 (function() {
155 const button = document.getElementById("button-video-${videoId}");
156 const overlay = document.getElementById("video-${videoId}");
157 const iframe = document.getElementById("youtube-player-${videoId}");
158
159 button.addEventListener("click", function() {
160 const videoId = button.dataset.video;
161
162 iframe.src = "https://www.youtube.com/embed/" + videoId + "?autoplay=1&rel=0";
163 overlay.style.display = "block";
164 button.style.display = "none";
165 });
166 })();
167 </script>
168 <#else>
169 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
170 </#if>
171 </div>
172 <div class="right component-with-title">
173 <!--Start Module: Highlights Pitch-->
174 <div>
175 <#if TextInfo.Title.getData() != "" >
176 <p class="title title-regular"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></p>
177 </#if>
178 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
179 <p class="description body-small"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
180 </#if>
181 </div>
182 <#if TextInfo.Title.Attach.getData() !=''>
183 <div class="card-interview centered download">
184 <#list TextInfo.Title.Attach.getSiblings() as node>
185 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "" && TextInfo.Title.Attach.Label.getData() != "">
186 <div class="card">
187 <a href="${TextInfo.Title.Attach.getData()}" target="_blank" class="label-regular" title="${TextInfo.Title.Attach.Label.getData()}">
188 <span>${TextInfo.Title.Attach.Label.getData()}</span>
189 </a>
190 </div>
191 </#if>
192 </#list>
193 </div>
194 </#if>
195 <#if Links.ExternalTargetURL.getData() !='' || Links.LinkTargetPage.getFriendlyUrl() !=''>
196 <div class="flex flex-col gap-4">
197 <#list Links.getSiblings() as node>
198 <#if node.ExternalTargetURL.getData() !='' && node.LinkText.getData() !=''>
199 <#assign url = node.ExternalTargetURL.getData() />
200 </#if>
201 <#if node.LinkTargetPage.getFriendlyUrl() !='' && node.LinkText.getData() !=''>
202 <#assign url = node.LinkTargetPage.getFriendlyUrl() />
203 </#if>
204 <a href="${url}" target ="${node.LinkTargetOpenIn.getData()}" title="${node.LinkText.getData()}" class="card-text-arrow">
205 <p class="body-medium">${node.LinkText.getData()}</p>
206 </a>
207 </#list>
208 </div>
209 </#if>
210 <!--End Module: Highlights Pitch-->
211 </div>
212 </div>
213 </div>
214 </div>
215 <!--End Module: Plan Highlights-->
216 <#else>
217 <!-- No video selected -->
218 </#if>
219<#else>
220 <@leonardo.articleInfo .vars "(I3) Video Launch"/>
221 <#assign rndNamespace = randomNamespace>
222 <#assign currentLayoutFriendlyURL = themeDisplay.getLayout().getFriendlyURL()?remove_beginning("/") />
223
224 <#if currentLayoutFriendlyURL == "home">
225 <#assign cssForTitle = "plan-highlights">
226 <#else>
227 <#assign cssForTitle = "plan-highlights--investors">
228 </#if>
229
230 <#macro downloadIcon>
231 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18">
232 <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"/>
233 </svg>
234 </#macro>
235 <#macro videoBox yt canto video poster>
236 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
237 <div class="plan-highlights--wrapper">
238 <#if canto>
239 <div class="leo-video canto-video"
240 data-video-data='{
241 "showControls":true,
242 "videoSources":[
243 "${video}"
244 ],
245 "posters":{
246 "desktop":"${poster.desktop!}",
247 "tabletLandscape":"${poster.tablet_landscape!}",
248 "tabletPortrait":"${poster.tablet_portrait!}",
249 "mobile":"${poster.mobile!}"
250 }}'
251 data-img-url-d="${poster.desktop!}"
252 data-img-url-tl="${poster.tablet_landscape!}"
253 data-img-url-tp="${poster.tablet_portrait!}"
254 data-img-url-m="${poster.mobile!}">
255 </div>
256 <#elseif yt>
257 <div class="youtube-player-container "
258 data-video-id="${video}"
259 data-div-id = "${randomNamespace}${video}"
260 data-img-url-d="${poster.desktop!}"
261 data-img-url-tl="${poster.tablet_landscape!}"
262 data-img-url-tp="${poster.tablet_portrait!}"
263 data-img-url-m="${poster.mobile!}"
264 data-use-no-cookie-domain="true"
265 data-play-fullscreen="true"
266 data-video-controls="true"
267 tabindex="1">
268 <div class="youtube-player" id="${randomNamespace}${video}"></div>
269 </div>
270 <#else>
271 <div class="leo-video"
272 data-video-data="{
273 "showControls":true,
274 "videoSources":[
275 ${video}
276 ],
277 "posters":{
278 "desktop":"${poster.desktop!}",
279 "tabletLandscape":"${poster.tablet_landscape!}",
280 "tabletPortrait":"${poster.tablet_portrait!}",
281 "mobile":"${poster.mobile!}"
282 }}"
283 data-img-url-d="${poster.desktop!}"
284 data-img-url-tl="${poster.tablet_landscape!}"
285 data-img-url-tp="${poster.tablet_portrait!}"
286 data-img-url-m="${poster.mobile!}">
287 </div>
288 </#if>
289 </div>
290 </div>
291 </#macro>
292
293 <#if VideoInfo.Video.getData() != "" || VideoInfo.YoutubeId.getData() != "" || VideoInfo.CantoUrl.getData() != "" >
294
295 <#assign isLeft = (VideoInfo.ImagePosition?? && VideoInfo.ImagePosition.getData() != "" && !(VideoInfo.ImagePosition.getData())?contains("right")) >
296
297 <#assign scalingDetails = {
298 "desktop": {"alternateImage": {}, "key": "w_720"},
299 "tl": {"alternateImage": VideoInfo.Image.ImageTl!, "key": "h_695"},
300 "tp": {"alternateImage": VideoInfo.Image.ImageTp!, "key": "w_768"},
301 "mobile": {"alternateImage": VideoInfo.Image.ImageM!, "key": "w_375"}
302 }>
303 <#assign posterImg = leonardo.adaptImage(VideoInfo.Image!, scalingDetails )>
304
305 <noscript>
306 <img src="${posterImg.desktop!}" alt='${posterImg.alt_desktop!}'>
307 <img src="${posterImg.tablet_landscape!}" alt='${posterImg.alt_tablet_landscape!}'>
308 <img src="${posterImg.tablet_portrait!}" alt='${posterImg.alt_tablet_portrait!}'>
309 <img src="${posterImg.mobile!}" alt='${posterImg.alt_mobile!}'>
310 </noscript>
311
312 <#assign isYt = (VideoInfo.YoutubeId.getData() != "") >
313 <#assign isCanto = (VideoInfo.CantoUrl.getData())?has_content && (VideoInfo.CantoUrl.getData() != "") >
314
315 <#if (VideoInfo.CantoUrl.getData())?has_content && VideoInfo.CantoUrl.getData() != "">
316 <#assign videoStr = VideoInfo.CantoUrl.getData()>
317 <#elseif VideoInfo.YoutubeId.getData() != "">
318 <#assign videoStr = VideoInfo.YoutubeId.getData()>
319 <#elseif VideoInfo.Video.getSiblings()?has_content>
320 <#assign videoStr = "">
321 <#list VideoInfo.Video.getSiblings() as cur_Video>
322 <#assign videoFile = cur_Video.getData()>
323 <#assign videoFileType = cur_Video.VideoType.getData()>
324 <#if videoStr?? && videoStr != "">
325 <#assign videoStr = videoStr + ",">
326 </#if>
327 <#assign videoStr = videoStr + "{"src":"" + videoFile + "","type":"" + videoFileType + ""}">
328 </#list>
329 </#if>
330
331 <!--Start Module: Plan Highlights-->
332 <div class="section-container section-container--fixed">
333 <#if TextInfo.Title.isAnchorEnabled?? && getterUtil.getBoolean(TextInfo.Title.isAnchorEnabled.getData())>
334 <#assign labelIsLeft = ((TextInfo.Title.isAnchorEnabled.AnchorText.LabelPosition.getData())!"left") == "left">
335 <div class="section-grid layout--tp-col layout--m-col">
336 <#if !labelIsLeft >
337 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
338 </#if>
339 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
340 <!--Start Module: Goto-->
341 <#if TextInfo.Title.isAnchorEnabled.AnchorText.getData() != "" >
342 <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>
343 </#if>
344 <!--End Module: Goto-->
345 </div>
346 <#if labelIsLeft>
347 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p"></div>
348 </#if>
349 </div>
350 </#if>
351 <div class="${cssForTitle}">
352 <div class="section-grid ${(!isLeft)?then('layout--tp-col-reverse layout--m-col-reverse','layout--tp-col layout--m-col')}">
353 <#if isLeft >
354 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
355 </#if>
356 <div class="grid grid--d50p grid--tl50p grid--tp100p grid--m100p">
357 <!--Start Module: Highlights Pitch-->
358 <div class="highlights-pitch">
359 <#if TextInfo.Title.getData() != "" >
360 <#if TextInfo.Title.isH1?? && getterUtil.getBoolean(TextInfo.Title.isH1.getData())>
361 <h1 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h1>
362 <#else>
363 <h2 class="highlights-pitch--title"><@leonardo.escapeTitle title=TextInfo.Title.getData()/></h2>
364 </#if>
365 <#if TextInfo.Title.Description?? && TextInfo.Title.Description.getData() != "" >
366 <p class="highlights-pitch--description"><@leonardo.escapeTitle title=TextInfo.Title.Description.getData()/></p>
367 </#if>
368 </#if>
369 <#if TextInfo.Title.Attach?? && TextInfo.Title.Attach.getData() != "">
370 <div class="highlights-pitch--file-downloads">
371 <#list TextInfo.Title.Attach.getSiblings() as cur_file>
372 <#assign file_info = leonardo.findFileEntryInfo(cur_file.getData()) >
373 <div class="highlights-pitch--file">
374 <a class="file"
375 href="${file_info.downloadUrl}"
376 target="_blank">
377 <@downloadIcon />
378 <span class="highlights-pitch--file--filename">
379 ${(cur_file.Label.getData())!(file_info.title)!}
380 </span>
381 </a>
382 </div>
383 </#list>
384 </div>
385 </#if>
386 <#assign opened = false>
387 <#if Links?has_content>
388 <#list Links.getSiblings() as cur_Link>
389 <#assign targetUrl=leonardo.getTargetUrl(cur_Link.ExternalTargetURL, cur_Link.LinkTargetPage)!>
390 <#if targetUrl?has_content>
391 <#assign target=leonardo.getTarget(cur_Link.LinkTargetOpenIn!)!>
392 <#if opened = false>
393 <div class="section-hero-card--targets" >
394 <#assign opened = true>
395 </#if>
396 <div class="section-hero-card--target">
397 <a class="section-hero-card--target--link"
398 href="${targetUrl}"
399 target = "${target}"
400 title="${cur_Link.LinkText.data!}" >
401 ${cur_Link.LinkText.data!}
402 <span class="icon--read-more"></span>
403 </a>
404 </div>
405 </#if>
406 </#list>
407 <#if opened>
408 </div>
409 </#if>
410 </#if>
411 </div>
412 <!--End Module: Highlights Pitch-->
413 </div>
414 <#if !isLeft >
415 <@videoBox yt=isYt canto=isCanto video=videoStr poster=posterImg />
416 </#if>
417 </div>
418 </div>
419 </div>
420 <!--End Module: Plan Highlights-->
421 <#else>
422 <!-- No video selected -->
423 </#if>
424</#if>
2026-04-06T22:43:22Z
cookie_disclaimer:true
page_disclaimer :false