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
Who we are and what we do. Our people tell us about it
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:15:41Z
GUEST_LANGUAGE_ID - en_US
JSESSIONID - AEF7F579120004AC5A3BBE12DEE36DBE.lcsgepalsv146
COOKIE_SUPPORT - true
NSC_Qppm-ovpwp-tjup-qspe - ffffffff0919141845525d5f4f58455e445a4a423660
cookie_disclaimer:true
page_disclaimer :false