De 8 Nageltrenderna för 2025

Trend #1

Metallic Effects - Chrome naglar

Efter Brat-sommaren är flytande metallic det hetaste just nu. Ta trenden till dina naglar och lägg till kromade virvlar med Metallic Liner Gel i reflekterande silver ovanpå din färg, eller kör på helkromade naglar med Liquid Pearl för en riktig techno-rave-look.

Metallic Liner gel
Nail art trends 2025
Chrome nails

Trend #1

Metallic Effects - Chrome naglar

Efter Brat-sommaren är flytande metallic det hetaste just nu. Ta trenden till dina naglar och lägg till kromade virvlar med Metallic Liner Gel i reflekterande silver ovanpå din färg, eller kör på helkromade naglar med Liquid Pearl för en riktig techno-rave-look.

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

Trend #2

Cat Eye Specialeffekter

Otaliga variationer av Cat Eye-looks. Efter Galaxy Cosmic Cat Eye-gelerna lanserar vi nu Sheer Cat Eye-gel. Vill du skapa en cool 90-talslook? Förläng nageln med en transparent tipp och applicera det genomskinliga gelen över hela nageln. Cat Eye-geler blir aldrig tråkiga – de glänser alltid som diamanter.

 

Metallic Liner gel
Metallic Liner gel
Nail art trends 2025

Trend #3

Rena och hälsosamma naglar med Rysk Manikyr

Skönhetsentusiaster fokuserar mer än någonsin på att stärka naglarna med närande produkter och att prioritera kvalitet och hållbarhet i manikyrbehandlingar.
En rysk manikyr – känd som Baby Manikyr hos ProNails – med elfilning betonar precision, vilket ger en felfri finish och mer hållbara resultat runt nagelbanden.

Använder veganska och syrafria nagelprodukter, som ProNails B System. Introducera alltid Vitamina Cuticle Oil till varje kund, så att nagelbanden hålls näringsrika även mellan behandlingarna.

Russian Manicure
Russian Manicure
Russian Manicure

Trend #4

PANTONE färg 2025: Mocha Mousse

För 2025 väljer Pantone Color Institute nyansen 'Mocha Mousse', en varm brun färg full av rikedom. Denna antydan om de läckra egenskaperna hos choklad och kaffe ger oss näring och tillfredsställer vårt behov av komfort.
Inom ProNails omfattande färgområde hittar du många nyanser i denna färgskala, såsom Close ContactOut GlampingBaby It's Cold Outside och Emanuelle Naturelle

Trend #5

Glass Nails Manikyr

Denna saftiga glas-effektgel är något genomskinlig och vacker på egen hand eller i kombination med de nya Sheer Cat Eye Gels. Perfekt för att lägga lager på lager eller att bäras solo.

Metallic Liner gel
Glass Gels
Nail art trends 2025

Trend #6

Quiet Luxury Soap Nails

För att uppnå den här effekten får de nakna naglarna en superglansig topcoat som ger naglarna en nästan våtlook med en ren finish. Du kan dock anpassa soap nail-trenden efter din egen smak genom att lägga ett lager av transparenta rosa toner eller mjölkiga nyanser under.

Clean Girl Nail-trenden är fortfarande populär: knappt synliga med en naturlig lyster. Du kan skapa denna look med de nya BFLEX-nudes och Sopolish Sheers.

Soap nails
Soap nails
Soap nails

Trend #7

90-talsvibbar med nagelklistermärken

Nagelklistermärken är en snabb och enkel lösning. Dessa små minimalistiska designer är långvariga klistermärken och din ultimata nagelkonst om du har ont om tid. Så tänd din kreativitet med nagelklistermärken! Den perfekta inspirationen för din kreativitet!

Metallic Liner gel
Metallic Liner gel
Nail art trends 2025

Trend #8

Kritaktig textur med Sand Gel 3D

Detta skapar ett iögonfallande kritliknande utseende på dina naglar, perfekt för en modern, matt finish med en taktil dimension. Dess grova textur och ljusa, matta vita nyans gör det till en mångsidig produkt för unika, kantiga designer som direkt drar blickarna till sig. Denna 3D-kritgel ger naglarna ett ruffigt, målat utseende, liknande texturen på en nyss målad vägg.

Metallic Liner gel
Sandy Gel nail art
Nail art trends 2025
To Top