Meet Suraj and Vijay from IPG
Globally connected, locally empowered
In 2024, we shared how IPG leverages its international network to serve customers in the Netherlands more efficiently and intelligently. A lot has happened since then. Our team in India has grown and now plays an integral role in both technical and commercial support.
Sales engineer Suraj Sonawane has become a familiar face within our team, and as of July, we’re proud to welcome Vijay Sharma as our new product specialist.
Together, they provide fast technical support, smart calculations, and act as a true extension of our Dutch team all with the same IPG mindset: down-to-earth, reliable, and always focused on the customer.
HOW DOES OUR INTERNATIONAL COLLABORATION WORK?
To support our customers in the best possible way, IPG operates with a core team in the Netherlands and an extended technical team at our international office in India. This setup allows us to respond to email inquiries more quickly during business days – even outside Dutch office hours.
From India, our sales engineers assist with pump selection, preparing quotations, processing requests, and handling the technical preparation of projects.
This collaboration is seamlessly integrated into our processes: customers experience the same high level of service and quality, while benefiting from faster turnaround times, specialized knowledge, and a team that truly works together across the globe.
MEET SURAJ SONAWANE
Suraj has been working as a Sales Engineer for IPG for two years from our international office in India. In his role, he combines technical analysis with customer-focused advice – a combination he greatly enjoys:
"What I enjoy most about my work as a Sales Engineer at IPG is the blend of technical problem-solving and customer interaction. I am able to build long-term relationships with clients while also staying close to engineering – it keeps my work both challenging and rewarding. I also get exposure to multiple pump brands such as Xylem, KSB, Sulzer, Ebara, Grundfos, etc."
A typical day for Suraj involves processing customer inquiries, preparing technical and commercial quotations, and coordinating with suppliers and colleagues. He plays a key role in connecting customer needs with technical execution:
"It’s a good mix of technical analysis, customer interaction, and project follow-up."
According to Suraj, the collaboration with the Dutch team is particularly strong:
"The collaboration with the team in the Netherlands is effective because of the open communication, clear roles, and shared technical understanding. There’s a strong culture of support and accountability, with mutual respect and a shared focus on quality solutions."
WELCOME VIJAY SHARMA
Since June 2025, Vijay Sharma has joined IPG as a Sales Engineer (Product Specialist). He brings solid experience in sales support within water utility domain i.e. water and wastewater treatment, smart cities and industrial applications. His decision to join IPG is a deliberate step toward further specialization.
"I chose pumps due to my growing interest and experience in this field. What attracted me to IPG is the opportunity to work with a diverse range of pump technologies and after sales service which will allow me to gain exposure to global markets and products from multiple OEMs."
Vijay’s first impressions of the team are very positive:
"All team members, including the management, are approachable and supportive. Even though we function as individual contributors, the team often collaborates and supports one another like a close-knit family."
At IPG, he aims to deepen his knowledge of centrifugal pumps and their applications in areas such as industrial, building, mining and water & wastewater treatment:
"These segments offer a wide range of technical challenges and learning opportunities that align well with my interests and career goals."
International collaboration with substance
With the addition of Suraj and Vijay, IPG demonstrates that international collaboration goes far beyond being available in a different time zone. It’s about technical expertise, dedication, and reliable service – no matter where in the world.
Our colleagues in India are not just an extension, but an integral part of the team. Their support enables us to respond faster, handle more complex requests, and serve our customers more effectively – without compromising on quality or personal attention.
At IPG, we continue to build a strong and flexible team that helps our customers move forward: today, tomorrow, and in the future.
Error executing template "Designs/IPG_generated/Paragraph/CTAParagraph.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at Bluedesk.DynamicWeb.ItemTypes.CTAButton.GetLink(PageView pv, String navigationtag) at CompiledRazorTemplates.Dynamic.RazorEngine_53d718180a294b21acf326b79d995e48.Execute() in D:\dynamicweb.net\Solutions\IPG\Production\files\Templates\Designs\IPG_generated\Paragraph\CTAParagraph.cshtml:line 49 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Dynamicweb; 3 @using Dynamicweb.Content.Items; 4 @using Bluedesk.DynamicWeb.ItemTypes; 5 6 @using System.Runtime.Caching; 7 8 9 @{ 10 var paragraphID = Pageview.CurrentParagraph.ID; 11 CTAParagraph _data = new CTAParagraph(); 12 13 int CacheTime = 5; 14 MemoryCache memCache = MemoryCache.Default; 15 string cacheKey = $"CTAParagraph_{paragraphID}-{Pageview.AreaID}"; 16 17 if (Pageview.IsVisualEditorMode) 18 { 19 var cache = MemoryCache.Default; 20 memCache.Remove($"CTAParagraph_{paragraphID}-{Pageview.AreaID}"); 21 } 22 23 if (memCache.Contains(cacheKey)) 24 { 25 _data = memCache.Get(cacheKey) as CTAParagraph; 26 27 if (_data == null) 28 { 29 _data = Dynamicweb.Content.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph(); 30 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 31 32 } 33 34 } 35 else 36 { 37 _data = Dynamicweb.Content.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph(); 38 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 39 } 40 41 List<string> BackgroundConfigIdList = ((List<string>)Dynamicweb.Context.Current.Items["BackgroundConfigIdList"]) ?? new List<string>(); 42 BackgroundConfigIdList.Add(_data.BackgroundConfigurationID); 43 Dynamicweb.Context.Current.Items["BackgroundConfigIdList"] = BackgroundConfigIdList; 44 45 string contentRightClass = _data.ImagePosition.Equals("right") ? "image-right" : "image-left"; 46 47 string newWindow = _data.Button.NewWindow ? "target='_blank'" : ""; 48 string ariaLabel = !string.IsNullOrWhiteSpace(_data.Button.ButtonAriaLabel) ? "aria-label='" + _data.Button.ButtonAriaLabel + "'" : ""; 49 bool clickableBlock = !string.IsNullOrWhiteSpace(_data.Button.GetLink(Pageview)) && _data.Clickable; 50 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : ""; 51 string ctaHasBackgroundImageClass = _data.ImageAsBackground ? "cta-paragraph--hasbackgroundimg" : ""; 52 53 bool hasContent = !string.IsNullOrWhiteSpace(_data.Button.ButtonText) || !string.IsNullOrWhiteSpace(_data.Content.Text) || !string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted()); 54 double ColumnWidthSize = hasContent ? 0.5 : 1; 55 56 // string backgroundClass = getbackgroundclass(_data.BackgroundConfiguration.BackgroundClass); 57 58 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 59 bool AnimateHalfBlock = false; 60 int AnimationDuration = _data.AnimateDuration; 61 string DataAosValue = ""; 62 63 switch (AnimateDirection) 64 { 65 case "left": 66 DataAosValue = "fade-left"; 67 break; 68 69 case "right": 70 DataAosValue = "fade-right"; 71 break; 72 73 case "up": 74 DataAosValue = "fade-up"; 75 break; 76 77 case "down": 78 DataAosValue = "fade-down"; 79 break; 80 81 case "center": 82 AnimateHalfBlock = true; 83 break; 84 85 case "": 86 case "none": 87 // No action 88 break; 89 } 90 91 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px"; 92 93 } 94 95 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 96 @using Dynamicweb; 97 @using Dynamicweb.Content.Items; 98 @using Bluedesk.DynamicWeb.ItemTypes; 99 100 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 101 @using Dynamicweb; 102 @using Dynamicweb.Content.Items; 103 @using Bluedesk.DynamicWeb.ItemTypes; 104 105 @functions { 106 107 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration) 108 { 109 var colorService = new ColorSwatchService(); 110 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ; 111 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor; 112 Dictionary<string, string> FontConfig = new Dictionary<string, string>() { 113 { "textColor" , TextColor }, 114 { "fontSize" , FontConfiguration.FontSize }, 115 { "lineHeight", FontConfiguration.LineHeight}, 116 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily }, 117 { "fontWeight" , FontConfiguration.FontWeight }, 118 { "fontStyle" , FontConfiguration.FontStyle } 119 }; 120 return FontConfig; 121 } 122 123 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId) 124 { 125 string ButtonLabelAlignment = BC.ButtonLabelAlignment; 126 switch (ButtonLabelAlignment) 127 { 128 case "align-left": 129 ButtonLabelAlignment = "flex-start"; 130 break; 131 case "align-center": 132 ButtonLabelAlignment = "center"; 133 break; 134 case "align-right": 135 ButtonLabelAlignment = "flex-end"; 136 break; 137 case "align-full": 138 ButtonLabelAlignment = "space-between"; 139 break; 140 default: 141 ButtonLabelAlignment = "flex-start"; 142 break; 143 } 144 145 var btnStyleBlock = new System.Text.StringBuilder(); 146 147 // General Config 148 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px")); 149 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px")); 150 151 // Button Config 152 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px")); 153 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment)); 154 155 // Button Config Tab 156 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId))); 157 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId))); 158 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId))); 159 160 // Button Config Hover tab 161 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId))); 162 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId))); 163 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId))); 164 165 // Button Config Font Config 166 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize)); 167 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId))); 168 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight)); 169 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily)); 170 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight)); 171 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle)); 172 173 return btnStyleBlock.ToString(); 174 } 175 176 public string GenerateCssVar(string name, string value) 177 { 178 if (!string.IsNullOrWhiteSpace(value)) { 179 return $"--{name}: {value};"; 180 } else { 181 return ""; 182 } 183 } 184 } 185 186 187 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 188 @using Dynamicweb; 189 @using Dynamicweb.Content.Items; 190 @using Bluedesk.DynamicWeb.ItemTypes; 191 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 192 193 194 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 195 @using Dynamicweb; 196 @using Dynamicweb.Content.Items; 197 @using Bluedesk.DynamicWeb.ItemTypes; 198 @using Bluedesk.DynamicWeb.ItemTypes.Extensions; 199 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 200 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration; 201 @using Dynamicweb; 202 @using Dynamicweb.Frontend 203 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution; 204 205 @helper RenderButton(CTAButton button, PageView Pageview) 206 { 207 208 if (!string.IsNullOrWhiteSpace(button.GetLink(Pageview))) 209 { 210 string Template = button.GetButtonTemplate().Replace("{{ ButtonLink }}", button.GetLink(Pageview)); 211 @Template; 212 } 213 } 214 215 216 @{ 217 218 var colorService = new ColorSwatchService(); 219 220 string fullWidthContainerClass = _data.Fullwidth ? "" : "container"; 221 222 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : ""; 223 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : ""; 224 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : ""; 225 226 // string backgroundClass = "null"; 227 // string backgroundStyle = ""; 228 } 229 230 231 @functions { 232 //string getbackgroundclass(string backgroundClass) 233 //{ 234 // return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : ""; 235 //} 236 } 237 238 @helper CTAParagraphImage( 239 ParagraphImageResizable Image, 240 bool hasContent, 241 bool ImageAsBackground, 242 string ImagePosition, 243 bool ParallaxImage, 244 bool Fullwidth, 245 string imagesHeight, 246 double ColumnWidthSize, 247 int AnimationDuration = 300, 248 bool AnimateHalfBlock = false 249 ) 250 { 251 if (!string.IsNullOrWhiteSpace(Image.Image)) 252 { 253 254 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null; 255 imagesHeight = hasContent ? imagesHeight : "100%"; 256 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 257 258 string imageParrallax = ParallaxImage ? "rellax" : ""; 259 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : ""; 260 double imageWidth = 2000; 261 262 imageWidth = Fullwidth ? imageWidth : 1200; 263 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth; 264 265 string strImageWidth = imageWidth + "px"; 266 string strImageWidthSize = imageWidth + "w"; 267 268 string ImageUrl; 269 if (image.EndsWith(".gif")) 270 { 271 ImageUrl = image; 272 } 273 else 274 { 275 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80"; 276 ImageUrl = ImageUrl.Replace("?x", "&x"); 277 } 278 279 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : ""; 280 281 if (!string.IsNullOrWhiteSpace(Image.Image)) 282 { 283 284 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 285 286 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax"> 287 @if (ImageUrl.EndsWith(".gif")) 288 { 289 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 290 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 291 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 292 } 293 else 294 { 295 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 296 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 297 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 298 } 299 </picture> 300 301 </figure> 302 } 303 } 304 } 305 306 @helper CTAParagraphContent( 307 int paragraphID, 308 ParagraphHeader Header, 309 ParagraphHeader SubHeader, 310 ParagraphContent Content, 311 CTAButton Button, 312 CTAButton ExtraButton, 313 ParagraphImage Image, 314 bool strCenterVertical, 315 string ImagePosition = "", 316 int AnimationDuration = 300, 317 bool AnimateHalfBlock = false 318 ) 319 { 320 321 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false; 322 string noImageClass = hasImage ? "" : "no-image"; 323 324 string centerTextClass = strCenterVertical ? "text-center" : ""; 325 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center"; 326 327 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID; 328 329 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : ""; 330 331 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 332 { 333 334 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 335 336 <article class="cta-paragraph__content-container @noImageClass"> 337 338 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 339 { 340 <header class="cta-paragraph__header @centerTextClass"> 341 @if (SubHeader != null) 342 { 343 @SubHeader.HeaderFormatted("cta-paragraph__subheader") 344 } 345 @Header.HeaderFormatted("cta-paragraph__header") 346 </header> 347 } 348 349 @if (!string.IsNullOrWhiteSpace(Content.Text)) 350 { 351 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div> 352 } 353 354 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText)) 355 { 356 <nav class="cta-paragraph__btn-navigation @centerTextClass"> 357 @RenderButton(Button, Pageview) 358 @RenderButton(ExtraButton, Pageview) 359 </nav> 360 } 361 362 </article> 363 </section> 364 365 } 366 367 } 368 369 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight) 370 { 371 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink)) 372 { 373 string YoutubeID = Video.YoutubeId; 374 string YoutubeLink = Video.YoutubeLink; 375 376 string VimeoID = Video.VimeoId; 377 string VimeoLink = Video.VimeoLink; 378 379 int CleanVideo = Video.Clean ? 1 : 0; 380 int ShowControls = Video.ShowControls ? 1 : 0; 381 int AutoPlay = Video.AutoPlay ? 1 : 0; 382 int LoopVideo = Video.LoopVideo ? 1 : 0; 383 int MuteAudio = Video.MuteAudio ? 1 : 0; 384 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : ""; 385 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain(); 386 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 387 388 if (!string.IsNullOrWhiteSpace(YoutubeLink)) 389 { 390 if(AutoPlay == 1) 391 { 392 <section class="cta-paragraph__video-container" style="@imagesHeight"> 393 <div class=""> 394 <div class="video-player-wrapper @hideControlsClass"> 395 <iframe class="video-player" loading="lazy" data-video="@YoutubeID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/@YoutubeID?autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></iframe> 396 </div> 397 </div> 398 </section> 399 } 400 else 401 { 402 <lite-youtube videoid="@YoutubeID" params="controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></lite-youtube> 403 } 404 } 405 if (!string.IsNullOrWhiteSpace(VimeoLink)) 406 { 407 <section class="cta-paragraph__video-container" style="@imagesHeight"> 408 <div class=""> 409 <div class="video-player-wrapper"> 410 <iframe class="video-player" loading="lazy" data-video="@VimeoID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="Vimeo video player" src="https://player.vimeo.com/video/@VimeoID?title=0&byline=0&portrait=0&autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&muted=@MuteAudio"></iframe> 411 </div> 412 </div> 413 </section> 414 } 415 } 416 } 417 418 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical) 419 { 420 if (!string.IsNullOrWhiteSpace(Icon.FaIcon)) 421 { 422 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start"; 423 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize); 424 425 <div class="cta-paragraph__icon-container"> 426 <div class="cta-paragraph__icon-inner-container @centerIconClass"> 427 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span> 428 </div> 429 </div> 430 } 431 } 432 433 @helper RenderContentAlignment(BackgroundConfiguration data) 434 { 435 436 switch (data.ContentElementAlign) 437 { 438 case "align-left": 439 <text> 440 align-items: flex-start; 441 text-align: left; 442 </text> 443 break; 444 case "align-center": 445 <text> 446 align-items: center; 447 text-align: center; 448 </text> 449 break; 450 case "align-right": 451 <text> 452 align-items: flex-end; 453 text-align: right; 454 </text> 455 break; 456 case "align-full": 457 <text> 458 align-items: flex-start; 459 text-align: justify; 460 </text> 461 break; 462 } 463 464 } 465 466 467 <style> 468 469 @@media screen and (min-width: 991px) { 470 .cta-paragraph__container--@paragraphID { 471 height: @ParagraphHeight !important; 472 } 473 } 474 475 </style> 476 477 @if (_data != null) 478 { 479 480 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding; 481 482 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false; 483 if (!string.IsNullOrWhiteSpace(contentRightClass)) 484 { 485 contentRightClass = Containerfit ? "" : contentRightClass; 486 } 487 488 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat; 489 string backgroundImageSizeClass = ""; 490 491 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX; 492 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY; 493 494 495 string BackgroundImagePositionClass = ""; 496 497 if (backgroundImageRepeatClass == "no-repeat") 498 { 499 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX; 500 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize; 501 } 502 503 string shadowClass = _data.BackgroundConfiguration.contentShadow ? "contentShadow" : ""; 504 505 <section class="cta-paragraph cta-paragraph--@paragraphID config--@_data.BackgroundConfigurationID @backgroundClass @_data.CssClass @backgroundImageRepeatClass @BackgroundImagePositionClass @backgroundImageSizeClass @BackgroundPadding @ctaHasBackgroundImageClass" style="@backgroundStyle" data-paragraphid="@paragraphID" id="@paragraphID" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration"> 506 507 <div class="cta-paragraph__container cta-paragraph__container--@paragraphID @fullWidthContainerClass @clickableClass @contentRightClass @shadowClass"> 508 509 <style> 510 511 .cta-paragraph--@paragraphID .cta-paragraph__content { 512 @if (Containerfit) 513 { 514 <text> 515 flex-grow: 0; 516 </text> 517 } 518 } 519 520 .cta-paragraph--@paragraphID .cta-paragraph__image-container { 521 @if (Containerfit) 522 { 523 <text> 524 position: absolute; 525 top: 0; 526 left: 0; 527 right: 0; 528 bottom: 0; 529 </text> 530 } 531 } 532 533 </style> 534 535 @CTAParagraphImage( 536 _data.Image, 537 true, 538 _data.ImageAsBackground, 539 _data.ImagePosition, 540 _data.ParallaxImage, 541 _data.Fullwidth, 542 "", 543 ColumnWidthSize, 544 AnimationDuration, 545 AnimateHalfBlock 546 ) 547 @CTAParagraphContent( 548 paragraphID, 549 _data.Header, 550 _data.SubHeader, 551 _data.Content, 552 _data.Button, 553 _data.ExtraButton, 554 _data.Image, 555 _data.CenterVertical, 556 _data.ImagePosition, 557 AnimationDuration, 558 AnimateHalfBlock 559 ) 560 561 @if (clickableBlock) 562 { 563 <a href="@_data.Button.GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a> 564 } 565 566 </div> 567 568 </section> 569 } 570