• Vegano
  • Per professioniste
  • Partner Affidabile
  • Prodotti innovativi

Tropical Vibes Collection

SS23

Inspired by dramatic statement colours like Valentino Pink, by the ultimate tropical vacation esthetique as seen on the Jacquemus show in Hawai, and by a deep love for the worlds’ oceans.

The ProNails TROPICAL VIBEScollection for summer ’23 is a mix of vibrant and energetic colours that make a massive fashion statement. We proudly present you straightforward, juicy and energetic colours like warm sunny orange, hot pink, lavendery lilac and oceanic blue and green hues. Together they create the ultimate tropical vacay vibe.

Like a Lavender Haze

Wisteria Waterfall

This trendy blueish lilac colour Wisteria Waterfall is like the lavender haze from a luscious tropical waterfall. This colour stands for digitalization and change with a natural essence.

Snooo-ooop!

Tropic Like it's Hot

The ultimate hot pink for a vibrant vacay vibe: Tropic Like It’s Hot! An absolute statement colour for a sultry sexy energetic nail look. This colour doesn’t need words, it just needs sunshine and the perfect (Snoop Dogg) song!

Co explore the world

Explore More

Explore more is a blueish turquoise version of the popular high fashion ‘Bottega’ green. This beautiful oceanic green inspires us to expand our horizons and go explore the world. Why not try a coloured French?

Error executing template "Designs/ProNails_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_98c95055b2f04ea1b8ed29e78a97dccd.Execute() in D:\dynamicweb.net\Solutions\Bluedesk\pronails.cloud.dynamicweb-cms.com\files\Templates\Designs\ProNails_generated\Paragraph\CTAParagraph.cshtml:line 22
   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 7 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 8 @using Dynamicweb; 9 @using Dynamicweb.Content.Items; 10 @using Bluedesk.DynamicWeb.ItemTypes; 11 12 @{ 13 14 var paragraphID = Pageview.CurrentParagraph.ID; 15 16 CTAParagraph _data = ItemManager.Storage.GetById<CTAParagraph>(Pageview.CurrentParagraph.ItemId ?? "0"); 17 18 string contentRightClass = _data.ImagePosition.Equals("right") ? "image-right" : "image-left"; 19 20 string newWindow = _data.Button.NewWindow ? "target='_blank'" : ""; 21 string ariaLabel = !string.IsNullOrWhiteSpace(_data.Button.ButtonAriaLabel) ? "aria-label='" + _data.Button.ButtonAriaLabel + "'" : ""; 22 bool clickableBlock = !string.IsNullOrWhiteSpace(_data.Button.GetLink(Pageview)) && _data.Clickable; 23 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : ""; 24 string ctaHasBackgroundImageClass = _data.ImageAsBackground ? "cta-paragraph--hasbackgroundimg" : ""; 25 26 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px"; 27 28 bool hasContent = !string.IsNullOrWhiteSpace(_data.Button.ButtonText) || !string.IsNullOrWhiteSpace(_data.Content.Text) || !string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted()); 29 double ColumnWidthSize = hasContent ? 0.5 : 1; 30 31 // string backgroundClass = getbackgroundclass(_data.BackgroundConfiguration.BackgroundClass); 32 33 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 34 bool AnimateHalfBlock = false; 35 int AnimationDuration = _data.AnimateDuration; 36 string DataAosValue = ""; 37 38 switch (AnimateDirection) 39 { 40 case "left": 41 DataAosValue = "fade-left"; 42 break; 43 44 case "right": 45 DataAosValue = "fade-right"; 46 break; 47 48 case "up": 49 DataAosValue = "fade-up"; 50 break; 51 52 case "down": 53 DataAosValue = "fade-down"; 54 break; 55 56 case "center": 57 AnimateHalfBlock = true; 58 break; 59 60 case "": 61 case "none": 62 // No action 63 break; 64 } 65 66 } 67 68 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 69 @using Dynamicweb; 70 @using Dynamicweb.Content.Items; 71 @using Bluedesk.DynamicWeb.ItemTypes; 72 73 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 74 @using Dynamicweb; 75 @using Dynamicweb.Content.Items; 76 @using Bluedesk.DynamicWeb.ItemTypes; 77 78 @functions { 79 80 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration) 81 { 82 var colorService = new ColorSwatchService(); 83 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ; 84 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor; 85 Dictionary<string, string> FontConfig = new Dictionary<string, string>() { 86 { "textColor" , TextColor }, 87 { "fontSize" , FontConfiguration.FontSize }, 88 { "lineHeight", FontConfiguration.LineHeight}, 89 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily }, 90 { "fontWeight" , FontConfiguration.FontWeight }, 91 { "fontStyle" , FontConfiguration.FontStyle } 92 }; 93 return FontConfig; 94 } 95 96 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId) 97 { 98 string ButtonLabelAlignment = BC.ButtonLabelAlignment; 99 switch (ButtonLabelAlignment) 100 { 101 case "align-left": 102 ButtonLabelAlignment = "flex-start"; 103 break; 104 case "align-center": 105 ButtonLabelAlignment = "center"; 106 break; 107 case "align-right": 108 ButtonLabelAlignment = "flex-end"; 109 break; 110 case "align-full": 111 ButtonLabelAlignment = "space-between"; 112 break; 113 default: 114 ButtonLabelAlignment = "flex-start"; 115 break; 116 } 117 118 var btnStyleBlock = new System.Text.StringBuilder(); 119 120 // General Config 121 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px")); 122 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px")); 123 124 // Button Config 125 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px")); 126 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment)); 127 128 // Button Config Tab 129 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId))); 130 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId))); 131 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId))); 132 133 // Button Config Hover tab 134 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId))); 135 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId))); 136 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId))); 137 138 // Button Config Font Config 139 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize)); 140 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId))); 141 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight)); 142 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily)); 143 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight)); 144 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle)); 145 146 return btnStyleBlock.ToString(); 147 } 148 149 public string GenerateCssVar(string name, string value) 150 { 151 if (!string.IsNullOrWhiteSpace(value)) { 152 return $"--{name}: {value};"; 153 } else { 154 return ""; 155 } 156 } 157 } 158 159 160 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 161 @using Dynamicweb; 162 @using Dynamicweb.Content.Items; 163 @using Bluedesk.DynamicWeb.ItemTypes; 164 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 165 166 167 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 168 @using Dynamicweb; 169 @using Dynamicweb.Content.Items; 170 @using Bluedesk.DynamicWeb.ItemTypes; 171 @using Bluedesk.DynamicWeb.ItemTypes.Extensions; 172 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 173 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration; 174 175 @helper RenderButton(ButtonConfiguration ButtonConfiguration, string btnLink, string btnClass, string btnText, string ariaLabel = "", bool newWindow = false, string btnIcon = "", string btnExtraClass = "", string btnTextClass = "", string btnIconClass = "") 176 { 177 string buttonID = ButtonConfiguration.Id; 178 var master_configuration = Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "MasterConfiguration"); 179 MasterConfig mc = master_configuration.Item.ToCodeFirstItem<MasterConfig>(); 180 181 string FontAwesomeLibrary = mc.GeneralConfiguration.fontawesomeStyle; 182 bool HideIcon = ButtonConfiguration.HideIcon; 183 string CustomIconClass = !string.IsNullOrWhiteSpace(ButtonConfiguration.CustomIcon) ? ButtonConfiguration.CustomIcon : !string.IsNullOrWhiteSpace(btnIcon) ? btnIcon : "fa-chevron-right"; 184 string IconPositionClass = HideIcon ? "default-btn--no-icon" : mc.GeneralConfiguration.IconPosition == "left" ? "default-btn--icon-left" : ""; 185 186 string target = newWindow ? "_blank" : "_self"; 187 string ariaText = !string.IsNullOrWhiteSpace(ariaLabel) ? "aria-label='" + ariaLabel + "'" : ""; 188 189 string styleBlock = GenerateButtonConfigVariables(ButtonConfiguration, mc, Pageview.AreaID); 190 191 if (!string.IsNullOrWhiteSpace(btnLink) && !string.IsNullOrWhiteSpace(btnText)) 192 { 193 <a href="@btnLink" class="btn default-btn default-btn--@buttonID @IconPositionClass @btnClass @btnExtraClass" target="@target" @ariaText style="@styleBlock"> 194 <span class="btn__text @btnTextClass">@btnText</span> 195 @if (!HideIcon) 196 { 197 <i class="btn__icon @FontAwesomeLibrary @CustomIconClass @btnIconClass"></i> 198 } 199 </a> 200 } 201 } 202 203 @helper RenderFontConfig(Dictionary<string, string> FontConfig) 204 { 205 <text>color: @FontConfig["textColor"] !important;</text> 206 207 if (!string.IsNullOrWhiteSpace(FontConfig["textColor"])) 208 { 209 <text> 210 color: @FontConfig["textColor"] !important; 211 </text> 212 } 213 214 if (!string.IsNullOrWhiteSpace(FontConfig["fontSize"])) 215 { 216 <text>font-size: @FontConfig["fontSize"] !important;</text> 217 } 218 if (!string.IsNullOrWhiteSpace(FontConfig["lineHeight"])) 219 { 220 <text>line-height: @FontConfig["lineHeight"] !important;</text> 221 } 222 if (!string.IsNullOrWhiteSpace(FontConfig["fontFamily"])) 223 { 224 <text>font-family: @FontConfig["fontFamily"] !important;</text> 225 } 226 if (!string.IsNullOrWhiteSpace(FontConfig["fontWeight"])) 227 { 228 <text>font-weight: @FontConfig["fontWeight"] !important;</text> 229 } 230 if (!string.IsNullOrWhiteSpace(FontConfig["fontStyle"])) 231 { 232 if (FontConfig["fontStyle"] != "none") 233 { 234 <text>text-transform: @FontConfig["fontStyle"] !important;</text> 235 } 236 } 237 } 238 239 240 @{ 241 242 var colorService = new ColorSwatchService(); 243 244 string fullWidthContainerClass = _data.Fullwidth ? "" : "container"; 245 246 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : ""; 247 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : ""; 248 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : ""; 249 } 250 251 252 @functions { 253 string getbackgroundclass(string backgroundClass) 254 { 255 return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : ""; 256 } 257 } 258 259 @helper CTAParagraphImage( 260 ParagraphImageResizable Image, 261 bool hasContent, 262 bool ImageAsBackground, 263 string ImagePosition, 264 bool ParallaxImage, 265 bool Fullwidth, 266 string imagesHeight, 267 int paragraphHeight, 268 double ColumnWidthSize, 269 int AnimationDuration = 300, 270 bool AnimateHalfBlock = false 271 ) 272 { 273 if (!string.IsNullOrWhiteSpace(Image.Image)) 274 { 275 276 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null; 277 imagesHeight = hasContent ? imagesHeight : "100%"; 278 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 279 280 string imageParrallax = ParallaxImage ? "rellax" : ""; 281 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : ""; 282 double imageWidth = 2000; 283 284 imageWidth = Fullwidth ? imageWidth : 1200; 285 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth; 286 287 string strImageWidth = imageWidth + "px"; 288 string strImageWidthSize = imageWidth + "w"; 289 290 string ImageUrl; 291 if (image.EndsWith(".gif")) 292 { 293 ImageUrl = image; 294 } 295 else 296 { 297 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80"; 298 ImageUrl = ImageUrl.Replace("?x", "&x"); 299 } 300 301 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : ""; 302 303 if (!string.IsNullOrWhiteSpace(Image.Image)) 304 { 305 306 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 307 308 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax"> 309 @if (ImageUrl.EndsWith(".gif")) 310 { 311 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 312 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 313 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 314 } 315 else 316 { 317 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 318 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 319 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 320 } 321 </picture> 322 323 </figure> 324 } 325 } 326 } 327 328 @helper CTAParagraphContent( 329 int paragraphID, 330 string contentElementAlign, 331 ParagraphHeader Header, 332 ParagraphHeader SubHeader, 333 ParagraphContent Content, 334 CTAButton Button, 335 CTAButton ExtraButton, 336 ParagraphImage Image, 337 bool strCenterVertical, 338 Dictionary<string, string> subheaderFontConfig, 339 Dictionary<string, string> headerFontConfig, 340 Dictionary<string, string> contentFontConfig, 341 string ImagePosition = "", 342 int AnimationDuration = 300, 343 bool AnimateHalfBlock = false 344 ) 345 { 346 347 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false; 348 string noImageClass = hasImage ? "" : "no-image"; 349 350 string centerTextClass = strCenterVertical ? "text-center" : ""; 351 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center"; 352 353 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID; 354 355 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : ""; 356 357 //string button__fontfamily = !string.IsNullOrWhiteSpace(Button.Configuration.FontConfiguration.FontConfiguration.FontFamily) Button.Configuration.FontConfiguration.FontConfiguration.FontFamily ? : null; 358 359 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 360 { 361 362 <style> 363 364 .multicolumn--@paragraphID .cta-paragraph .cta-paragraph__subheader, 365 .cta-paragraph--@paragraphID .cta-paragraph__subheader { 366 @RenderFontConfig(subheaderFontConfig) 367 } 368 369 .@paragraphInstanceClass .cta-paragraph__header { 370 @RenderFontConfig(headerFontConfig) 371 } 372 373 .@paragraphInstanceClass .cta-paragraph__text p, 374 .@paragraphInstanceClass .cta-paragraph__text li { 375 @RenderFontConfig(contentFontConfig) 376 } 377 378 </style> 379 380 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 381 382 <article class="cta-paragraph__content-container @noImageClass"> 383 384 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 385 { 386 <header class="cta-paragraph__header @centerTextClass"> 387 @if (SubHeader != null) 388 { 389 @SubHeader.HeaderFormatted("cta-paragraph__subheader") 390 } 391 @Header.HeaderFormatted("cta-paragraph__header") 392 </header> 393 } 394 395 @if (!string.IsNullOrWhiteSpace(Content.Text)) 396 { 397 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div> 398 } 399 400 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText)) 401 { 402 <nav class="cta-paragraph__btn-navigation @centerTextClass"> 403 @RenderButton(Button.Configuration, Button.GetLink(Pageview), Button.Configuration.ButtonClass, Button.ButtonText, Button.ButtonAriaLabel, Button.NewWindow, "", "cta-paragraph__btn cta-paragraph__btn--first", "cta-paragraph__btn-label", "cta-paragraph__btn-icon") 404 @RenderButton(ExtraButton.Configuration, ExtraButton.GetLink(Pageview), ExtraButton.Configuration.ButtonClass, ExtraButton.ButtonText, ExtraButton.ButtonAriaLabel, ExtraButton.NewWindow, "", "cta-paragraph__btn cta-paragraph__btn--extra", "cta-paragraph__btn-label", "cta-paragraph__btn-icon") 405 </nav> 406 } 407 408 </article> 409 </section> 410 411 } 412 413 } 414 415 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight) 416 { 417 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink)) 418 { 419 string YoutubeID = Video.YoutubeId; 420 string YoutubeLink = Video.YoutubeLink; 421 422 string VimeoID = Video.VimeoId; 423 string VimeoLink = Video.VimeoLink; 424 425 int CleanVideo = Video.Clean ? 1 : 0; 426 int ShowControls = Video.ShowControls ? 1 : 0; 427 int AutoPlay = Video.AutoPlay ? 1 : 0; 428 int LoopVideo = Video.LoopVideo ? 1 : 0; 429 int MuteAudio = Video.MuteAudio ? 1 : 0; 430 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : ""; 431 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain(); 432 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 433 434 if (!string.IsNullOrWhiteSpace(YoutubeLink)) 435 { 436 if(AutoPlay == 1) 437 { 438 <section class="cta-paragraph__video-container" style="@imagesHeight"> 439 <div class=""> 440 <div class="video-player-wrapper @hideControlsClass"> 441 <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=1"></iframe> 442 </div> 443 </div> 444 </section> 445 } 446 else 447 { 448 <lite-youtube videoid="@YoutubeID" params="controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=1"></lite-youtube> 449 } 450 } 451 if (!string.IsNullOrWhiteSpace(VimeoLink)) 452 { 453 <section class="cta-paragraph__video-container" style="@imagesHeight"> 454 <div class=""> 455 <div class="video-player-wrapper"> 456 <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> 457 </div> 458 </div> 459 </section> 460 } 461 } 462 } 463 464 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical) 465 { 466 if (!string.IsNullOrWhiteSpace(Icon.FaIcon)) 467 { 468 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start"; 469 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize); 470 471 <div class="cta-paragraph__icon-container"> 472 <div class="cta-paragraph__icon-inner-container @centerIconClass"> 473 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span> 474 </div> 475 </div> 476 } 477 } 478 479 @helper RenderContentAlignment(BackgroundConfiguration data) 480 { 481 482 switch (data.ContentElementAlign) 483 { 484 case "align-left": 485 <text> 486 align-items: flex-start; 487 text-align: left; 488 </text> 489 break; 490 case "align-center": 491 <text> 492 align-items: center; 493 text-align: center; 494 </text> 495 break; 496 case "align-right": 497 <text> 498 align-items: flex-end; 499 text-align: right; 500 </text> 501 break; 502 case "align-full": 503 <text> 504 align-items: flex-start; 505 text-align: justify; 506 </text> 507 break; 508 } 509 510 } 511 512 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 513 @using Dynamicweb; 514 @using Dynamicweb.Content.Items; 515 @using Bluedesk.DynamicWeb.ItemTypes; 516 517 <style> 518 @@media screen and (min-width: 991px) { 519 .cta-paragraph__container--@paragraphID { 520 height: @ParagraphHeight !important; 521 } 522 } 523 524 .header--desktop.headerNew { 525 position: relative; 526 } 527 528 .header--desktop.headerNew.stickyheader { 529 position: fixed; 530 } 531 532 .full { 533 } 534 535 .divided { 536 537 } 538 539 </style> 540 541 542 @if (_data != null) 543 { 544 545 var subheaderFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTASubheaderTextColor, _data.BackgroundConfiguration.FontConfigurationSubheader); 546 var headerFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTAHeaderTextColor, _data.BackgroundConfiguration.FontConfigurationHeader); 547 var contentFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTAContentTextColor, _data.BackgroundConfiguration.FontConfigurationContent); 548 549 string contentBackgroundColor = _data.BackgroundConfiguration.contentBackgroundColor; 550 string contentBorderColor = _data.BackgroundConfiguration.contentBorderColor; 551 552 string contentBorderSize = _data.BackgroundConfiguration.contentBorderSize + "px"; 553 554 bool Shadow = _data.BackgroundConfiguration.contentShadow; 555 556 string ctaBackgroundColor = _data.BackgroundConfiguration.BackgroundColor; 557 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding; 558 559 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false; 560 if (!string.IsNullOrWhiteSpace(contentRightClass)) { 561 contentRightClass = Containerfit ? "" : contentRightClass; 562 } 563 564 565 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat; 566 string backgroundImageSizeClass = ""; 567 568 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX; 569 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY; 570 571 572 string BackgroundImagePositionClass = ""; 573 574 string BackgroundGradient = _data.BackgroundConfiguration.BackgroundGradient; 575 576 if (backgroundImageRepeatClass == "no-repeat") 577 { 578 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX; 579 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize; 580 } 581 582 string contentElementAlign = _data.BackgroundConfiguration.ContentElementAlign; 583 584 //subheaderFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, subheaderFontConfig["textColor"]); 585 //headerFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, headerFontConfig["textColor"]); 586 //contentFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, contentFontConfig["textColor"]); 587 588 ctaBackgroundColor = colorService.GetHexColor(Pageview.AreaID, ctaBackgroundColor); 589 contentBackgroundColor = colorService.GetHexColor(Pageview.AreaID, contentBackgroundColor); 590 contentBorderColor = colorService.GetHexColor(Pageview.AreaID, contentBorderColor); 591 592 string shadowClass = Shadow ? "contentShadow" : ""; 593 594 <section class="cta-paragraph cta-paragraph--@paragraphID @backgroundClass @_data.CssClass @backgroundImageRepeatClass @BackgroundImagePositionClass @backgroundImageSizeClass @BackgroundPadding @ctaHasBackgroundImageClass" data-paragraphid="@paragraphID" id="@paragraphID" style="@backgroundStyle" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration"> 595 596 <div class="cta-paragraph__container cta-paragraph__container--@paragraphID @fullWidthContainerClass @clickableClass @contentRightClass @shadowClass"> 597 598 <style> 599 .cta-paragraph--@paragraphID { 600 background-color: @ctaBackgroundColor; 601 @if (!string.IsNullOrWhiteSpace(BackgroundGradient)) 602 { 603 @BackgroundGradient 604 } 605 } 606 607 .cta-paragraph__container--@paragraphID 608 { 609 border: @contentBorderSize @contentBorderColor solid; 610 @if (!string.IsNullOrWhiteSpace(contentBackgroundColor)) { 611 612 <text>background-color: @contentBackgroundColor</text> 613 614 } 615 } 616 617 .cta-paragraph--@paragraphID .cta-paragraph__content-container 618 { 619 @RenderContentAlignment(_data.BackgroundConfiguration) 620 } 621 622 .cta-paragraph--@paragraphID .cta-paragraph__content { 623 @if (Containerfit) 624 { 625 <text> 626 flex-grow: 0; 627 </text> 628 } 629 } 630 631 .cta-paragraph--@paragraphID .cta-paragraph__image-container { 632 @if (Containerfit) 633 { 634 <text> 635 position: absolute; 636 top: 0; 637 left: 0; 638 right: 0; 639 bottom: 0; 640 </text> 641 } 642 } 643 644 .cta-paragraph--@paragraphID .cta-paragraph__btn-navigation, 645 .cta-paragraph--@paragraphID .cta-paragraph__container{ 646 @if (Containerfit) 647 { 648 649 switch (_data.BackgroundConfiguration.ContainerFitContentAlignment) { 650 case "TopLeft": 651 <text> 652 align-items: flex-start; 653 justify-content: flex-start; 654 </text> 655 break; 656 case "TopCenter": 657 <text> 658 align-items: flex-start; 659 justify-content: center; 660 </text> 661 break; 662 case "TopRight": 663 <text> 664 align-items: flex-start; 665 justify-content : flex-end; 666 </text> 667 break; 668 case "MiddleLeft": 669 <text> 670 align-items: center; 671 justify-content : flex-start; 672 </text> 673 break; 674 case "MiddleCenter": 675 <text> 676 align-items: center; 677 justify-content: center; 678 </text> 679 break; 680 case "MiddleRight": 681 <text> 682 align-items : center; 683 justify-content : flex-end; 684 </text> 685 break; 686 case "BottomLeft": 687 <text> 688 align-items : flex-end; 689 justify-content : flex-start; 690 </text> 691 break; 692 case "BottomCenter": 693 <text> 694 align-items: flex-end; 695 justify-content: center; 696 </text> 697 break; 698 case "BottomRight": 699 <text> 700 align-items: flex-end; 701 justify-content: flex-end; 702 </text> 703 break; 704 705 } 706 707 708 } 709 710 } 711 </style> 712 713 @CTAParagraphImage( 714 _data.Image, 715 true, 716 _data.ImageAsBackground, 717 _data.ImagePosition, 718 _data.ParallaxImage, 719 _data.Fullwidth, 720 "", 721 _data.Height, 722 ColumnWidthSize, 723 AnimationDuration, 724 AnimateHalfBlock 725 ) 726 @CTAParagraphContent( 727 paragraphID, 728 contentElementAlign, 729 _data.Header, 730 _data.SubHeader, 731 _data.Content, 732 _data.Button, 733 _data.ExtraButton, 734 _data.Image, 735 _data.CenterVertical, 736 subheaderFontConfig, 737 headerFontConfig, 738 contentFontConfig, 739 _data.ImagePosition, 740 AnimationDuration, 741 AnimateHalfBlock 742 ) 743 744 @if (clickableBlock) 745 { 746 <a href="@_data.Button.GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a> 747 } 748 749 </div> 750 751 <style> 752 .cta-paragraph--@paragraphID .cta-paragraph__gradient { 753 @BackgroundGradient 754 } 755 </style> 756 757 </section> 758 } 759

Refreshing Turquoise

Private Pool

Nothing says ‘vacation mode on’ like a beautiful tropical island swimming pool turquoise blue on your nails. With this colour on your nails you take that Private Pool feeling everywhere you go!

Error executing template "Designs/ProNails_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_98c95055b2f04ea1b8ed29e78a97dccd.Execute() in D:\dynamicweb.net\Solutions\Bluedesk\pronails.cloud.dynamicweb-cms.com\files\Templates\Designs\ProNails_generated\Paragraph\CTAParagraph.cshtml:line 22
   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 7 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 8 @using Dynamicweb; 9 @using Dynamicweb.Content.Items; 10 @using Bluedesk.DynamicWeb.ItemTypes; 11 12 @{ 13 14 var paragraphID = Pageview.CurrentParagraph.ID; 15 16 CTAParagraph _data = ItemManager.Storage.GetById<CTAParagraph>(Pageview.CurrentParagraph.ItemId ?? "0"); 17 18 string contentRightClass = _data.ImagePosition.Equals("right") ? "image-right" : "image-left"; 19 20 string newWindow = _data.Button.NewWindow ? "target='_blank'" : ""; 21 string ariaLabel = !string.IsNullOrWhiteSpace(_data.Button.ButtonAriaLabel) ? "aria-label='" + _data.Button.ButtonAriaLabel + "'" : ""; 22 bool clickableBlock = !string.IsNullOrWhiteSpace(_data.Button.GetLink(Pageview)) && _data.Clickable; 23 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : ""; 24 string ctaHasBackgroundImageClass = _data.ImageAsBackground ? "cta-paragraph--hasbackgroundimg" : ""; 25 26 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px"; 27 28 bool hasContent = !string.IsNullOrWhiteSpace(_data.Button.ButtonText) || !string.IsNullOrWhiteSpace(_data.Content.Text) || !string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted()); 29 double ColumnWidthSize = hasContent ? 0.5 : 1; 30 31 // string backgroundClass = getbackgroundclass(_data.BackgroundConfiguration.BackgroundClass); 32 33 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 34 bool AnimateHalfBlock = false; 35 int AnimationDuration = _data.AnimateDuration; 36 string DataAosValue = ""; 37 38 switch (AnimateDirection) 39 { 40 case "left": 41 DataAosValue = "fade-left"; 42 break; 43 44 case "right": 45 DataAosValue = "fade-right"; 46 break; 47 48 case "up": 49 DataAosValue = "fade-up"; 50 break; 51 52 case "down": 53 DataAosValue = "fade-down"; 54 break; 55 56 case "center": 57 AnimateHalfBlock = true; 58 break; 59 60 case "": 61 case "none": 62 // No action 63 break; 64 } 65 66 } 67 68 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 69 @using Dynamicweb; 70 @using Dynamicweb.Content.Items; 71 @using Bluedesk.DynamicWeb.ItemTypes; 72 73 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 74 @using Dynamicweb; 75 @using Dynamicweb.Content.Items; 76 @using Bluedesk.DynamicWeb.ItemTypes; 77 78 @functions { 79 80 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration) 81 { 82 var colorService = new ColorSwatchService(); 83 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ; 84 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor; 85 Dictionary<string, string> FontConfig = new Dictionary<string, string>() { 86 { "textColor" , TextColor }, 87 { "fontSize" , FontConfiguration.FontSize }, 88 { "lineHeight", FontConfiguration.LineHeight}, 89 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily }, 90 { "fontWeight" , FontConfiguration.FontWeight }, 91 { "fontStyle" , FontConfiguration.FontStyle } 92 }; 93 return FontConfig; 94 } 95 96 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId) 97 { 98 string ButtonLabelAlignment = BC.ButtonLabelAlignment; 99 switch (ButtonLabelAlignment) 100 { 101 case "align-left": 102 ButtonLabelAlignment = "flex-start"; 103 break; 104 case "align-center": 105 ButtonLabelAlignment = "center"; 106 break; 107 case "align-right": 108 ButtonLabelAlignment = "flex-end"; 109 break; 110 case "align-full": 111 ButtonLabelAlignment = "space-between"; 112 break; 113 default: 114 ButtonLabelAlignment = "flex-start"; 115 break; 116 } 117 118 var btnStyleBlock = new System.Text.StringBuilder(); 119 120 // General Config 121 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px")); 122 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px")); 123 124 // Button Config 125 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px")); 126 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment)); 127 128 // Button Config Tab 129 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId))); 130 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId))); 131 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId))); 132 133 // Button Config Hover tab 134 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId))); 135 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId))); 136 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId))); 137 138 // Button Config Font Config 139 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize)); 140 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId))); 141 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight)); 142 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily)); 143 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight)); 144 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle)); 145 146 return btnStyleBlock.ToString(); 147 } 148 149 public string GenerateCssVar(string name, string value) 150 { 151 if (!string.IsNullOrWhiteSpace(value)) { 152 return $"--{name}: {value};"; 153 } else { 154 return ""; 155 } 156 } 157 } 158 159 160 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 161 @using Dynamicweb; 162 @using Dynamicweb.Content.Items; 163 @using Bluedesk.DynamicWeb.ItemTypes; 164 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 165 166 167 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 168 @using Dynamicweb; 169 @using Dynamicweb.Content.Items; 170 @using Bluedesk.DynamicWeb.ItemTypes; 171 @using Bluedesk.DynamicWeb.ItemTypes.Extensions; 172 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 173 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration; 174 175 @helper RenderButton(ButtonConfiguration ButtonConfiguration, string btnLink, string btnClass, string btnText, string ariaLabel = "", bool newWindow = false, string btnIcon = "", string btnExtraClass = "", string btnTextClass = "", string btnIconClass = "") 176 { 177 string buttonID = ButtonConfiguration.Id; 178 var master_configuration = Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "MasterConfiguration"); 179 MasterConfig mc = master_configuration.Item.ToCodeFirstItem<MasterConfig>(); 180 181 string FontAwesomeLibrary = mc.GeneralConfiguration.fontawesomeStyle; 182 bool HideIcon = ButtonConfiguration.HideIcon; 183 string CustomIconClass = !string.IsNullOrWhiteSpace(ButtonConfiguration.CustomIcon) ? ButtonConfiguration.CustomIcon : !string.IsNullOrWhiteSpace(btnIcon) ? btnIcon : "fa-chevron-right"; 184 string IconPositionClass = HideIcon ? "default-btn--no-icon" : mc.GeneralConfiguration.IconPosition == "left" ? "default-btn--icon-left" : ""; 185 186 string target = newWindow ? "_blank" : "_self"; 187 string ariaText = !string.IsNullOrWhiteSpace(ariaLabel) ? "aria-label='" + ariaLabel + "'" : ""; 188 189 string styleBlock = GenerateButtonConfigVariables(ButtonConfiguration, mc, Pageview.AreaID); 190 191 if (!string.IsNullOrWhiteSpace(btnLink) && !string.IsNullOrWhiteSpace(btnText)) 192 { 193 <a href="@btnLink" class="btn default-btn default-btn--@buttonID @IconPositionClass @btnClass @btnExtraClass" target="@target" @ariaText style="@styleBlock"> 194 <span class="btn__text @btnTextClass">@btnText</span> 195 @if (!HideIcon) 196 { 197 <i class="btn__icon @FontAwesomeLibrary @CustomIconClass @btnIconClass"></i> 198 } 199 </a> 200 } 201 } 202 203 @helper RenderFontConfig(Dictionary<string, string> FontConfig) 204 { 205 <text>color: @FontConfig["textColor"] !important;</text> 206 207 if (!string.IsNullOrWhiteSpace(FontConfig["textColor"])) 208 { 209 <text> 210 color: @FontConfig["textColor"] !important; 211 </text> 212 } 213 214 if (!string.IsNullOrWhiteSpace(FontConfig["fontSize"])) 215 { 216 <text>font-size: @FontConfig["fontSize"] !important;</text> 217 } 218 if (!string.IsNullOrWhiteSpace(FontConfig["lineHeight"])) 219 { 220 <text>line-height: @FontConfig["lineHeight"] !important;</text> 221 } 222 if (!string.IsNullOrWhiteSpace(FontConfig["fontFamily"])) 223 { 224 <text>font-family: @FontConfig["fontFamily"] !important;</text> 225 } 226 if (!string.IsNullOrWhiteSpace(FontConfig["fontWeight"])) 227 { 228 <text>font-weight: @FontConfig["fontWeight"] !important;</text> 229 } 230 if (!string.IsNullOrWhiteSpace(FontConfig["fontStyle"])) 231 { 232 if (FontConfig["fontStyle"] != "none") 233 { 234 <text>text-transform: @FontConfig["fontStyle"] !important;</text> 235 } 236 } 237 } 238 239 240 @{ 241 242 var colorService = new ColorSwatchService(); 243 244 string fullWidthContainerClass = _data.Fullwidth ? "" : "container"; 245 246 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : ""; 247 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : ""; 248 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : ""; 249 } 250 251 252 @functions { 253 string getbackgroundclass(string backgroundClass) 254 { 255 return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : ""; 256 } 257 } 258 259 @helper CTAParagraphImage( 260 ParagraphImageResizable Image, 261 bool hasContent, 262 bool ImageAsBackground, 263 string ImagePosition, 264 bool ParallaxImage, 265 bool Fullwidth, 266 string imagesHeight, 267 int paragraphHeight, 268 double ColumnWidthSize, 269 int AnimationDuration = 300, 270 bool AnimateHalfBlock = false 271 ) 272 { 273 if (!string.IsNullOrWhiteSpace(Image.Image)) 274 { 275 276 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null; 277 imagesHeight = hasContent ? imagesHeight : "100%"; 278 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 279 280 string imageParrallax = ParallaxImage ? "rellax" : ""; 281 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : ""; 282 double imageWidth = 2000; 283 284 imageWidth = Fullwidth ? imageWidth : 1200; 285 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth; 286 287 string strImageWidth = imageWidth + "px"; 288 string strImageWidthSize = imageWidth + "w"; 289 290 string ImageUrl; 291 if (image.EndsWith(".gif")) 292 { 293 ImageUrl = image; 294 } 295 else 296 { 297 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80"; 298 ImageUrl = ImageUrl.Replace("?x", "&x"); 299 } 300 301 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : ""; 302 303 if (!string.IsNullOrWhiteSpace(Image.Image)) 304 { 305 306 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 307 308 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax"> 309 @if (ImageUrl.EndsWith(".gif")) 310 { 311 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 312 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 313 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 314 } 315 else 316 { 317 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 318 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 319 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 320 } 321 </picture> 322 323 </figure> 324 } 325 } 326 } 327 328 @helper CTAParagraphContent( 329 int paragraphID, 330 string contentElementAlign, 331 ParagraphHeader Header, 332 ParagraphHeader SubHeader, 333 ParagraphContent Content, 334 CTAButton Button, 335 CTAButton ExtraButton, 336 ParagraphImage Image, 337 bool strCenterVertical, 338 Dictionary<string, string> subheaderFontConfig, 339 Dictionary<string, string> headerFontConfig, 340 Dictionary<string, string> contentFontConfig, 341 string ImagePosition = "", 342 int AnimationDuration = 300, 343 bool AnimateHalfBlock = false 344 ) 345 { 346 347 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false; 348 string noImageClass = hasImage ? "" : "no-image"; 349 350 string centerTextClass = strCenterVertical ? "text-center" : ""; 351 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center"; 352 353 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID; 354 355 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : ""; 356 357 //string button__fontfamily = !string.IsNullOrWhiteSpace(Button.Configuration.FontConfiguration.FontConfiguration.FontFamily) Button.Configuration.FontConfiguration.FontConfiguration.FontFamily ? : null; 358 359 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 360 { 361 362 <style> 363 364 .multicolumn--@paragraphID .cta-paragraph .cta-paragraph__subheader, 365 .cta-paragraph--@paragraphID .cta-paragraph__subheader { 366 @RenderFontConfig(subheaderFontConfig) 367 } 368 369 .@paragraphInstanceClass .cta-paragraph__header { 370 @RenderFontConfig(headerFontConfig) 371 } 372 373 .@paragraphInstanceClass .cta-paragraph__text p, 374 .@paragraphInstanceClass .cta-paragraph__text li { 375 @RenderFontConfig(contentFontConfig) 376 } 377 378 </style> 379 380 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 381 382 <article class="cta-paragraph__content-container @noImageClass"> 383 384 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 385 { 386 <header class="cta-paragraph__header @centerTextClass"> 387 @if (SubHeader != null) 388 { 389 @SubHeader.HeaderFormatted("cta-paragraph__subheader") 390 } 391 @Header.HeaderFormatted("cta-paragraph__header") 392 </header> 393 } 394 395 @if (!string.IsNullOrWhiteSpace(Content.Text)) 396 { 397 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div> 398 } 399 400 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText)) 401 { 402 <nav class="cta-paragraph__btn-navigation @centerTextClass"> 403 @RenderButton(Button.Configuration, Button.GetLink(Pageview), Button.Configuration.ButtonClass, Button.ButtonText, Button.ButtonAriaLabel, Button.NewWindow, "", "cta-paragraph__btn cta-paragraph__btn--first", "cta-paragraph__btn-label", "cta-paragraph__btn-icon") 404 @RenderButton(ExtraButton.Configuration, ExtraButton.GetLink(Pageview), ExtraButton.Configuration.ButtonClass, ExtraButton.ButtonText, ExtraButton.ButtonAriaLabel, ExtraButton.NewWindow, "", "cta-paragraph__btn cta-paragraph__btn--extra", "cta-paragraph__btn-label", "cta-paragraph__btn-icon") 405 </nav> 406 } 407 408 </article> 409 </section> 410 411 } 412 413 } 414 415 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight) 416 { 417 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink)) 418 { 419 string YoutubeID = Video.YoutubeId; 420 string YoutubeLink = Video.YoutubeLink; 421 422 string VimeoID = Video.VimeoId; 423 string VimeoLink = Video.VimeoLink; 424 425 int CleanVideo = Video.Clean ? 1 : 0; 426 int ShowControls = Video.ShowControls ? 1 : 0; 427 int AutoPlay = Video.AutoPlay ? 1 : 0; 428 int LoopVideo = Video.LoopVideo ? 1 : 0; 429 int MuteAudio = Video.MuteAudio ? 1 : 0; 430 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : ""; 431 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain(); 432 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 433 434 if (!string.IsNullOrWhiteSpace(YoutubeLink)) 435 { 436 if(AutoPlay == 1) 437 { 438 <section class="cta-paragraph__video-container" style="@imagesHeight"> 439 <div class=""> 440 <div class="video-player-wrapper @hideControlsClass"> 441 <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=1"></iframe> 442 </div> 443 </div> 444 </section> 445 } 446 else 447 { 448 <lite-youtube videoid="@YoutubeID" params="controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=1"></lite-youtube> 449 } 450 } 451 if (!string.IsNullOrWhiteSpace(VimeoLink)) 452 { 453 <section class="cta-paragraph__video-container" style="@imagesHeight"> 454 <div class=""> 455 <div class="video-player-wrapper"> 456 <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> 457 </div> 458 </div> 459 </section> 460 } 461 } 462 } 463 464 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical) 465 { 466 if (!string.IsNullOrWhiteSpace(Icon.FaIcon)) 467 { 468 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start"; 469 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize); 470 471 <div class="cta-paragraph__icon-container"> 472 <div class="cta-paragraph__icon-inner-container @centerIconClass"> 473 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span> 474 </div> 475 </div> 476 } 477 } 478 479 @helper RenderContentAlignment(BackgroundConfiguration data) 480 { 481 482 switch (data.ContentElementAlign) 483 { 484 case "align-left": 485 <text> 486 align-items: flex-start; 487 text-align: left; 488 </text> 489 break; 490 case "align-center": 491 <text> 492 align-items: center; 493 text-align: center; 494 </text> 495 break; 496 case "align-right": 497 <text> 498 align-items: flex-end; 499 text-align: right; 500 </text> 501 break; 502 case "align-full": 503 <text> 504 align-items: flex-start; 505 text-align: justify; 506 </text> 507 break; 508 } 509 510 } 511 512 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 513 @using Dynamicweb; 514 @using Dynamicweb.Content.Items; 515 @using Bluedesk.DynamicWeb.ItemTypes; 516 517 <style> 518 @@media screen and (min-width: 991px) { 519 .cta-paragraph__container--@paragraphID { 520 height: @ParagraphHeight !important; 521 } 522 } 523 524 .header--desktop.headerNew { 525 position: relative; 526 } 527 528 .header--desktop.headerNew.stickyheader { 529 position: fixed; 530 } 531 532 .full { 533 } 534 535 .divided { 536 537 } 538 539 </style> 540 541 542 @if (_data != null) 543 { 544 545 var subheaderFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTASubheaderTextColor, _data.BackgroundConfiguration.FontConfigurationSubheader); 546 var headerFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTAHeaderTextColor, _data.BackgroundConfiguration.FontConfigurationHeader); 547 var contentFontConfig = GetFontConfiguration(_data.BackgroundConfiguration.CTAContentTextColor, _data.BackgroundConfiguration.FontConfigurationContent); 548 549 string contentBackgroundColor = _data.BackgroundConfiguration.contentBackgroundColor; 550 string contentBorderColor = _data.BackgroundConfiguration.contentBorderColor; 551 552 string contentBorderSize = _data.BackgroundConfiguration.contentBorderSize + "px"; 553 554 bool Shadow = _data.BackgroundConfiguration.contentShadow; 555 556 string ctaBackgroundColor = _data.BackgroundConfiguration.BackgroundColor; 557 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding; 558 559 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false; 560 if (!string.IsNullOrWhiteSpace(contentRightClass)) { 561 contentRightClass = Containerfit ? "" : contentRightClass; 562 } 563 564 565 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat; 566 string backgroundImageSizeClass = ""; 567 568 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX; 569 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY; 570 571 572 string BackgroundImagePositionClass = ""; 573 574 string BackgroundGradient = _data.BackgroundConfiguration.BackgroundGradient; 575 576 if (backgroundImageRepeatClass == "no-repeat") 577 { 578 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX; 579 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize; 580 } 581 582 string contentElementAlign = _data.BackgroundConfiguration.ContentElementAlign; 583 584 //subheaderFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, subheaderFontConfig["textColor"]); 585 //headerFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, headerFontConfig["textColor"]); 586 //contentFontConfig["textColor"] = colorService.GetHexColor(Pageview.AreaID, contentFontConfig["textColor"]); 587 588 ctaBackgroundColor = colorService.GetHexColor(Pageview.AreaID, ctaBackgroundColor); 589 contentBackgroundColor = colorService.GetHexColor(Pageview.AreaID, contentBackgroundColor); 590 contentBorderColor = colorService.GetHexColor(Pageview.AreaID, contentBorderColor); 591 592 string shadowClass = Shadow ? "contentShadow" : ""; 593 594 <section class="cta-paragraph cta-paragraph--@paragraphID @backgroundClass @_data.CssClass @backgroundImageRepeatClass @BackgroundImagePositionClass @backgroundImageSizeClass @BackgroundPadding @ctaHasBackgroundImageClass" data-paragraphid="@paragraphID" id="@paragraphID" style="@backgroundStyle" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration"> 595 596 <div class="cta-paragraph__container cta-paragraph__container--@paragraphID @fullWidthContainerClass @clickableClass @contentRightClass @shadowClass"> 597 598 <style> 599 .cta-paragraph--@paragraphID { 600 background-color: @ctaBackgroundColor; 601 @if (!string.IsNullOrWhiteSpace(BackgroundGradient)) 602 { 603 @BackgroundGradient 604 } 605 } 606 607 .cta-paragraph__container--@paragraphID 608 { 609 border: @contentBorderSize @contentBorderColor solid; 610 @if (!string.IsNullOrWhiteSpace(contentBackgroundColor)) { 611 612 <text>background-color: @contentBackgroundColor</text> 613 614 } 615 } 616 617 .cta-paragraph--@paragraphID .cta-paragraph__content-container 618 { 619 @RenderContentAlignment(_data.BackgroundConfiguration) 620 } 621 622 .cta-paragraph--@paragraphID .cta-paragraph__content { 623 @if (Containerfit) 624 { 625 <text> 626 flex-grow: 0; 627 </text> 628 } 629 } 630 631 .cta-paragraph--@paragraphID .cta-paragraph__image-container { 632 @if (Containerfit) 633 { 634 <text> 635 position: absolute; 636 top: 0; 637 left: 0; 638 right: 0; 639 bottom: 0; 640 </text> 641 } 642 } 643 644 .cta-paragraph--@paragraphID .cta-paragraph__btn-navigation, 645 .cta-paragraph--@paragraphID .cta-paragraph__container{ 646 @if (Containerfit) 647 { 648 649 switch (_data.BackgroundConfiguration.ContainerFitContentAlignment) { 650 case "TopLeft": 651 <text> 652 align-items: flex-start; 653 justify-content: flex-start; 654 </text> 655 break; 656 case "TopCenter": 657 <text> 658 align-items: flex-start; 659 justify-content: center; 660 </text> 661 break; 662 case "TopRight": 663 <text> 664 align-items: flex-start; 665 justify-content : flex-end; 666 </text> 667 break; 668 case "MiddleLeft": 669 <text> 670 align-items: center; 671 justify-content : flex-start; 672 </text> 673 break; 674 case "MiddleCenter": 675 <text> 676 align-items: center; 677 justify-content: center; 678 </text> 679 break; 680 case "MiddleRight": 681 <text> 682 align-items : center; 683 justify-content : flex-end; 684 </text> 685 break; 686 case "BottomLeft": 687 <text> 688 align-items : flex-end; 689 justify-content : flex-start; 690 </text> 691 break; 692 case "BottomCenter": 693 <text> 694 align-items: flex-end; 695 justify-content: center; 696 </text> 697 break; 698 case "BottomRight": 699 <text> 700 align-items: flex-end; 701 justify-content: flex-end; 702 </text> 703 break; 704 705 } 706 707 708 } 709 710 } 711 </style> 712 713 @CTAParagraphImage( 714 _data.Image, 715 true, 716 _data.ImageAsBackground, 717 _data.ImagePosition, 718 _data.ParallaxImage, 719 _data.Fullwidth, 720 "", 721 _data.Height, 722 ColumnWidthSize, 723 AnimationDuration, 724 AnimateHalfBlock 725 ) 726 @CTAParagraphContent( 727 paragraphID, 728 contentElementAlign, 729 _data.Header, 730 _data.SubHeader, 731 _data.Content, 732 _data.Button, 733 _data.ExtraButton, 734 _data.Image, 735 _data.CenterVertical, 736 subheaderFontConfig, 737 headerFontConfig, 738 contentFontConfig, 739 _data.ImagePosition, 740 AnimationDuration, 741 AnimateHalfBlock 742 ) 743 744 @if (clickableBlock) 745 { 746 <a href="@_data.Button.GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a> 747 } 748 749 </div> 750 751 <style> 752 .cta-paragraph--@paragraphID .cta-paragraph__gradient { 753 @BackgroundGradient 754 } 755 </style> 756 757 </section> 758 } 759

A tidal wave of blue

Ocean View

For next summer we have turned our gaze towards the oceans and it created a tidal
wave of blue: From fashion, to make-up to gadgets and design objects – This deep
ocean blue is the final but very important trend colour for spring summer 23. It’s the
perfect new nail colour to dive into the summer hands and feet first!

Tropical Vibes SS23

Get the look

To Top
Cookies

This website uses cookies to track your behavior and to improve your experience on the site.