The Best Nail LED lamp
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_257a7d9a2b914d07b02301eb0e01a0b8.Execute() in D:\dynamicweb.net\Solutions\Bluedesk\pronails.cloud.dynamicweb-cms.com\files\Templates\Designs\ProNails_generated\Paragraph\CTAParagraph.cshtml:line 58 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.Frontend; 4 @using Dynamicweb.Content.Items; 5 @using Bluedesk.DynamicWeb.ItemTypes; 6 @using Bluedesk.Tools.DynamicWeb.DataAccess; 7 8 @using System.Runtime.Caching; 9 10 11 @{ 12 /* var paragraphID = Pageview.CurrentParagraph.ID; 13 CTAParagraph _data = Dynamicweb.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph(); */ 14 15 /* Hack */ 16 17 var paragraphID = Pageview.CurrentParagraph.ID; 18 CTAParagraph _data = new CTAParagraph(); 19 20 int CacheTime = 5; 21 MemoryCache memCache = MemoryCache.Default; 22 string cacheKey = $"CTAParagraph_{paragraphID}-{Pageview.AreaID}"; 23 24 if (Pageview.IsVisualEditorMode) 25 { 26 var cache = MemoryCache.Default; 27 memCache.Remove($"CTAParagraph_{paragraphID}-{Pageview.AreaID}"); 28 } 29 30 if (memCache.Contains(cacheKey)) 31 { 32 _data = memCache.Get(cacheKey) as CTAParagraph; 33 34 if (_data == null) 35 { 36 _data = Dynamicweb.Content.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph(); 37 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 38 39 } 40 41 } 42 else 43 { 44 _data = Dynamicweb.Content.Services.Items.GetItem("CTAParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<CTAParagraph>() ?? new CTAParagraph(); 45 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 46 } 47 48 /* End Hack */ 49 50 List<string> BackgroundConfigIdList = ((List<string>)Dynamicweb.Context.Current.Items["BackgroundConfigIdList"]) ?? new List<string>(); 51 BackgroundConfigIdList.Add(_data.BackgroundConfigurationID); 52 Dynamicweb.Context.Current.Items["BackgroundConfigIdList"] = BackgroundConfigIdList; 53 54 string contentRightClass = _data.ImagePosition.Equals("right") ? "image-right" : "image-left"; 55 56 string newWindow = _data.Button.NewWindow ? "target='_blank'" : ""; 57 string ariaLabel = !string.IsNullOrWhiteSpace(_data.Button.ButtonAriaLabel) ? "aria-label='" + _data.Button.ButtonAriaLabel + "'" : ""; 58 bool clickableBlock = !string.IsNullOrWhiteSpace(_data.Button.GetLink(Pageview)) && _data.Clickable; 59 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : ""; 60 string ctaHasBackgroundImageClass = _data.ImageAsBackground ? "cta-paragraph--hasbackgroundimg" : ""; 61 62 bool hasContent = !string.IsNullOrWhiteSpace(_data.Button.ButtonText) || !string.IsNullOrWhiteSpace(_data.Content.Text) || !string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted()); 63 double ColumnWidthSize = hasContent ? 0.5 : 1; 64 65 // string backgroundClass = getbackgroundclass(_data.BackgroundConfiguration.BackgroundClass); 66 67 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 68 bool AnimateHalfBlock = false; 69 int AnimationDuration = _data.AnimateDuration; 70 string DataAosValue = ""; 71 72 switch (AnimateDirection) 73 { 74 case "left": 75 DataAosValue = "fade-left"; 76 break; 77 78 case "right": 79 DataAosValue = "fade-right"; 80 break; 81 82 case "up": 83 DataAosValue = "fade-up"; 84 break; 85 86 case "down": 87 DataAosValue = "fade-down"; 88 break; 89 90 case "center": 91 AnimateHalfBlock = true; 92 break; 93 94 case "": 95 case "none": 96 // No action 97 break; 98 } 99 100 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px"; 101 102 } 103 104 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 105 @using Dynamicweb; 106 @using Dynamicweb.Content.Items; 107 @using Bluedesk.DynamicWeb.ItemTypes; 108 109 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 110 @using Dynamicweb; 111 @using Dynamicweb.Content.Items; 112 @using Bluedesk.DynamicWeb.ItemTypes; 113 114 @functions { 115 116 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration) 117 { 118 var colorService = new ColorSwatchService(); 119 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ; 120 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor; 121 Dictionary<string, string> FontConfig = new Dictionary<string, string>() { 122 { "textColor" , TextColor }, 123 { "fontSize" , FontConfiguration.FontSize }, 124 { "lineHeight", FontConfiguration.LineHeight}, 125 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily }, 126 { "fontWeight" , FontConfiguration.FontWeight }, 127 { "fontStyle" , FontConfiguration.FontStyle } 128 }; 129 return FontConfig; 130 } 131 132 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId) 133 { 134 string ButtonLabelAlignment = BC.ButtonLabelAlignment; 135 switch (ButtonLabelAlignment) 136 { 137 case "align-left": 138 ButtonLabelAlignment = "flex-start"; 139 break; 140 case "align-center": 141 ButtonLabelAlignment = "center"; 142 break; 143 case "align-right": 144 ButtonLabelAlignment = "flex-end"; 145 break; 146 case "align-full": 147 ButtonLabelAlignment = "space-between"; 148 break; 149 default: 150 ButtonLabelAlignment = "flex-start"; 151 break; 152 } 153 154 var btnStyleBlock = new System.Text.StringBuilder(); 155 156 // General Config 157 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px")); 158 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px")); 159 160 // Button Config 161 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px")); 162 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment)); 163 164 // Button Config Tab 165 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId))); 166 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId))); 167 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId))); 168 169 // Button Config Hover tab 170 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId))); 171 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId))); 172 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId))); 173 174 // Button Config Font Config 175 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize)); 176 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId))); 177 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight)); 178 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily)); 179 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight)); 180 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle)); 181 182 return btnStyleBlock.ToString(); 183 } 184 185 public string GenerateCssVar(string name, string value) 186 { 187 if (!string.IsNullOrWhiteSpace(value)) { 188 return $"--{name}: {value};"; 189 } else { 190 return ""; 191 } 192 } 193 } 194 195 196 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 197 @using Dynamicweb; 198 @using Dynamicweb.Content.Items; 199 @using Bluedesk.DynamicWeb.ItemTypes; 200 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 201 202 203 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 204 @using Dynamicweb; 205 @using Dynamicweb.Content.Items; 206 @using Bluedesk.DynamicWeb.ItemTypes; 207 @using Bluedesk.DynamicWeb.ItemTypes.Extensions; 208 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 209 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration; 210 @using Dynamicweb; 211 @using Dynamicweb.Frontend 212 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution; 213 214 @helper RenderButton(CTAButton button, PageView Pageview) 215 { 216 217 if (!string.IsNullOrWhiteSpace(button.GetLink(Pageview))) 218 { 219 string Template = button.GetButtonTemplate().Replace("{{ ButtonLink }}", button.GetLink(Pageview)); 220 @Template; 221 } 222 } 223 224 225 @{ 226 227 var colorService = new ColorSwatchService(); 228 229 string fullWidthContainerClass = _data.Fullwidth ? "" : "container"; 230 231 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : ""; 232 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : ""; 233 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : ""; 234 235 // string backgroundClass = "null"; 236 // string backgroundStyle = ""; 237 } 238 239 240 @functions { 241 //string getbackgroundclass(string backgroundClass) 242 //{ 243 // return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : ""; 244 //} 245 } 246 247 @helper CTAParagraphImage( 248 ParagraphImageResizable Image, 249 bool hasContent, 250 bool ImageAsBackground, 251 string ImagePosition, 252 bool ParallaxImage, 253 bool Fullwidth, 254 string imagesHeight, 255 double ColumnWidthSize, 256 int AnimationDuration = 300, 257 bool AnimateHalfBlock = false 258 ) 259 { 260 if (!string.IsNullOrWhiteSpace(Image.Image)) 261 { 262 263 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null; 264 imagesHeight = hasContent ? imagesHeight : "100%"; 265 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 266 267 string imageParrallax = ParallaxImage ? "rellax" : ""; 268 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : ""; 269 double imageWidth = 2000; 270 271 imageWidth = Fullwidth ? imageWidth : 1200; 272 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth; 273 274 string strImageWidth = imageWidth + "px"; 275 string strImageWidthSize = imageWidth + "w"; 276 277 string ImageUrl; 278 if (image.EndsWith(".gif")) 279 { 280 ImageUrl = image; 281 } 282 else 283 { 284 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80"; 285 ImageUrl = ImageUrl.Replace("?x", "&x"); 286 } 287 288 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : ""; 289 290 if (!string.IsNullOrWhiteSpace(Image.Image)) 291 { 292 293 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 294 295 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax"> 296 @if (ImageUrl.EndsWith(".gif")) 297 { 298 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 299 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 300 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 301 } 302 else 303 { 304 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 305 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 306 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 307 } 308 </picture> 309 310 </figure> 311 } 312 } 313 } 314 315 @helper CTAParagraphContent( 316 int paragraphID, 317 ParagraphHeader Header, 318 ParagraphHeader SubHeader, 319 ParagraphContent Content, 320 CTAButton Button, 321 CTAButton ExtraButton, 322 ParagraphImage Image, 323 bool strCenterVertical, 324 string ImagePosition = "", 325 int AnimationDuration = 300, 326 bool AnimateHalfBlock = false 327 ) 328 { 329 330 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false; 331 string noImageClass = hasImage ? "" : "no-image"; 332 333 string centerTextClass = strCenterVertical ? "text-center" : ""; 334 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center"; 335 336 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID; 337 338 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : ""; 339 340 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 341 { 342 343 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 344 345 <article class="cta-paragraph__content-container @noImageClass"> 346 347 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 348 { 349 <header class="cta-paragraph__header @centerTextClass"> 350 @if (SubHeader != null) 351 { 352 @SubHeader.HeaderFormatted("cta-paragraph__subheader") 353 } 354 @Header.HeaderFormatted("cta-paragraph__header") 355 </header> 356 } 357 358 @if (!string.IsNullOrWhiteSpace(Content.Text)) 359 { 360 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div> 361 } 362 363 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText)) 364 { 365 <nav class="cta-paragraph__btn-navigation @centerTextClass"> 366 @RenderButton(Button, Pageview) 367 @RenderButton(ExtraButton, Pageview) 368 </nav> 369 } 370 371 </article> 372 </section> 373 374 } 375 376 } 377 378 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight) 379 { 380 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink)) 381 { 382 string YoutubeID = Video.YoutubeId; 383 string YoutubeLink = Video.YoutubeLink; 384 385 string VimeoID = Video.VimeoId; 386 string VimeoLink = Video.VimeoLink; 387 388 int CleanVideo = Video.Clean ? 1 : 0; 389 int ShowControls = Video.ShowControls ? 1 : 0; 390 int AutoPlay = Video.AutoPlay ? 1 : 0; 391 int LoopVideo = Video.LoopVideo ? 1 : 0; 392 int MuteAudio = Video.MuteAudio ? 1 : 0; 393 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : ""; 394 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain(); 395 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 396 397 if (!string.IsNullOrWhiteSpace(YoutubeLink)) 398 { 399 if(AutoPlay == 1) 400 { 401 <section class="cta-paragraph__video-container" style="@imagesHeight"> 402 <div class=""> 403 <div class="video-player-wrapper @hideControlsClass"> 404 <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> 405 </div> 406 </div> 407 </section> 408 } 409 else 410 { 411 <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> 412 } 413 } 414 if (!string.IsNullOrWhiteSpace(VimeoLink)) 415 { 416 <section class="cta-paragraph__video-container" style="@imagesHeight"> 417 <div class=""> 418 <div class="video-player-wrapper"> 419 <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> 420 </div> 421 </div> 422 </section> 423 } 424 } 425 } 426 427 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical) 428 { 429 if (!string.IsNullOrWhiteSpace(Icon.FaIcon)) 430 { 431 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start"; 432 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize); 433 434 <div class="cta-paragraph__icon-container"> 435 <div class="cta-paragraph__icon-inner-container @centerIconClass"> 436 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span> 437 </div> 438 </div> 439 } 440 } 441 442 @helper RenderContentAlignment(BackgroundConfiguration data) 443 { 444 445 switch (data.ContentElementAlign) 446 { 447 case "align-left": 448 <text> 449 align-items: flex-start; 450 text-align: left; 451 </text> 452 break; 453 case "align-center": 454 <text> 455 align-items: center; 456 text-align: center; 457 </text> 458 break; 459 case "align-right": 460 <text> 461 align-items: flex-end; 462 text-align: right; 463 </text> 464 break; 465 case "align-full": 466 <text> 467 align-items: flex-start; 468 text-align: justify; 469 </text> 470 break; 471 } 472 473 } 474 475 476 <style> 477 478 @@media screen and (min-width: 991px) { 479 .cta-paragraph__container--@paragraphID { 480 height: @ParagraphHeight !important; 481 } 482 } 483 484 </style> 485 486 @if (_data != null) 487 { 488 489 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding; 490 491 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false; 492 if (!string.IsNullOrWhiteSpace(contentRightClass)) 493 { 494 contentRightClass = Containerfit ? "" : contentRightClass; 495 } 496 497 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat; 498 string backgroundImageSizeClass = ""; 499 500 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX; 501 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY; 502 503 504 string BackgroundImagePositionClass = ""; 505 506 if (backgroundImageRepeatClass == "no-repeat") 507 { 508 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX; 509 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize; 510 } 511 512 string shadowClass = _data.BackgroundConfiguration.contentShadow ? "contentShadow" : ""; 513 514 <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"> 515 516 <div class="cta-paragraph__container cta-paragraph__container--@paragraphID @fullWidthContainerClass @clickableClass @contentRightClass @shadowClass"> 517 518 <style> 519 520 .cta-paragraph--@paragraphID .cta-paragraph__content { 521 @if (Containerfit) 522 { 523 <text> 524 flex-grow: 0; 525 </text> 526 } 527 } 528 529 .cta-paragraph--@paragraphID .cta-paragraph__image-container { 530 @if (Containerfit) 531 { 532 <text> 533 position: absolute; 534 top: 0; 535 left: 0; 536 right: 0; 537 bottom: 0; 538 </text> 539 } 540 } 541 542 </style> 543 544 @CTAParagraphImage( 545 _data.Image, 546 true, 547 _data.ImageAsBackground, 548 _data.ImagePosition, 549 _data.ParallaxImage, 550 _data.Fullwidth, 551 "", 552 ColumnWidthSize, 553 AnimationDuration, 554 AnimateHalfBlock 555 ) 556 @CTAParagraphContent( 557 paragraphID, 558 _data.Header, 559 _data.SubHeader, 560 _data.Content, 561 _data.Button, 562 _data.ExtraButton, 563 _data.Image, 564 _data.CenterVertical, 565 _data.ImagePosition, 566 AnimationDuration, 567 AnimateHalfBlock 568 ) 569 570 @if (clickableBlock) 571 { 572 <a href="@_data.Button.GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a> 573 } 574 575 </div> 576 577 </section> 578 } 579
Smart Leds for all your gels
The Smart Light uses two types of led light and ensures perfect curing of all ProNails LED and UV gels. Builder gels, Gellak, Sopolish, B Sytstem gels, Base or Gloss Gels: with the Smart Light you own the perfect machine for all your gels.
Smart sensors
Position the hand, automatic switch on, remove hand, automatic switch off. Super easy. Do you want to be in control? You are, with one push on the button!
Cure Smarter & Faster
Perfectly curing all 5 fingers at a time? Only with the Smart Light, thanks to the clever positioning of the leds and the clear indication for positioning your client’s hand.
Hand Position
Curing faster speeds up your service time. The Smart Light was developed to cure your gels as fast as possible. Work 4 or 5 fingers at a time and cure in 30 seconds per layer thanks to the clever positioning of the leds and the clear indication for positioning your client’s hand.
Tips & Tricks
Eliminate the heat sensation with soft function : Opt for 30 SOFT for all base and builder gels and 60 SOFT for sensitive clients or gel newbies.
The Smart Light has a wattage of 36W, we get a lot of questions concerning the wattage of our lamps. Wattage is NOT UV intensity. Wattage is ONLY how much electrical power the lamp consumes.
Warranty
Warranty = 1 year
In case of a defect within the year, it will be repaired free of charge. Take contact with your local dealer.