Financial highlights
Last trade 62.26€
Variation -0.61%
02/04/2026 - 05:38 PM
data source: Investis Digital
Financial highlights
Last trade 62.26€
Variation -0.61%
02/04/2026 - 05:38 PM
data source: Investis Digital
Financial Results & Reports
Press releases
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>
Receive the latest
updates from leonardo
2026-04-06T02:36:10Z
JSESSIONID - 3D326345C24E426507B701C82D5CA2D4.lcsgepalsv050
GUEST_LANGUAGE_ID - en_US
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919144445525d5f4f58455e445a4a423660
COOKIE_SUPPORT - true
cookie_disclaimer:true
page_disclaimer :false