This is a classic Black Mountain trail and was featured in Freehub Magazine's Pisgah Photo Book: Issue 6. There is an optional drop 1/2 way down. The trails all run parallel to the Fountain Place paved road so they can be shuttled by car. Flow trail is a bit tight at the top, but gets really fast as you transition to the lower Rush. The climb up from Marlette Lake trail is pretty tough, but relatively short. This new trail flows well and has multiple banked berms and small jumps that wind down the mountainside. You can find everyone out here having fun from people in body armor and downhill bikes to families testing their kids limits to xc racer types riding intervals. From the young (or not so young) beginner, to the downhill pro, a flow trail delivers smiles for riders of all ages and skill level. Do not ride when wet and not if you are not a skilled rider.
Drop in off a shallow rock slab and then whip through a few tight berms. This created a reroute of the single track. A few wet spots, but almost non-existent mud. It packs in a lot of excitement in a short amount of time. You'll need somebody to drop you off at the start and pick you up at the end. This is the third downhill only trail on the north side trail network. Two wheel drifting is likely if you have speed but are not riding the top few inches of the berms. Some wet/muddy creek crossings, but otherwise dry. You'll need somebody to drop you off at the start and pick you up at the end.
The climb to the top ends with a beautiful vista of Twin Lakes and the surrounding area. Ride to the top and then down and link it directly into Ridegeline (with some double track). Rocks for texture, obstacles for fun and some short fast downhils in this 2. The new state course removed any of the wooden features that were present on the original 16 mile trail and replaced the skinny singletrack with a machine cut ~4' wide track down the mountain. Plenty of kick ups, jumps, drops, and huge berms. Logs are gone! I need to learn how to jump! This trail is the cherry on top when riding Porcupine rim! It is typically maintained at a high level due to its popularity and use.
Technically you can go both directions but everyone typically starts from Guardsman and either drops down Desolation or continues to Mill Canyon or Ridgeline Connector. Other features include rock garden (that is rutted on the outer edges because XC peeps avoid it), skinny with twists and some other short elevated bridges. Few sniper rocks on the trail. Gnarly trail. You'll need somebody to drop you off at the start and pick you up at the end. So be careful with your carbon frames! The flowiest trails of the mountain! Logs are gone! The trail has good flow with some spicy sections.
Error executing template "Designs/Swift/Paragraph/Swift_ArticleList.cshtml" System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at Dynamicweb.Content.Items.Queries.Repository.IsPageAllowed(Page page) at Dynamicweb.Content.Items.Queries.Repository.GetPagesByIds(IEnumerable`1 parentIds, Boolean includeChildItems, Boolean checkPermissions, List`1& childPages) at Dynamicweb.Content.Items.Queries.Repository.SelectByParentPageIds(IEnumerable`1 parentIds, Query query, Boolean includeParagraphs, Boolean includeChildItems, Boolean checkPermissions, Boolean includeInheritedItems) at Dynamicweb.ItemPublisher.Frontend.GetItems() at Dynamicweb.ItemPublisher.Frontend.List() at Dynamicweb.ItemPublisher.Frontend.GetContent() at Dynamicweb.ItemPublisher.Frontend.GetContentBySettings(String settings) --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Dynamicweb.Extensibility.AddIns.AddInManager.InvokeFunction(Object instance, String functionName, Object[] arguments) at Dynamicweb.Rendering.TemplateBase`1.RenderItemList(Object settings) at CompiledRazorTemplates.Dynamic.RazorEngine_91283bf5b708462c9dfc4bb6ef0dae79.<>c__DisplayClass0_0.<RenderArticleList>b__0(TextWriter __razor_helper_writer) in C:\inetpub\wwwroot\SwiftDemo\Solutions\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList.cshtml:line 130 at CompiledRazorTemplates.Dynamic.RazorEngine_91283bf5b708462c9dfc4bb6ef0dae79.Execute() in C:\inetpub\wwwroot\SwiftDemo\Solutions\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList.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.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> @{ string listSource = Model.Item.GetRawValueString("ListSource", Model.PageID.ToString()); string listBehaviour = Model.Item.GetRawValueString("ListBehaviour", "articles"); string articleListSortOrder = Model.Item.GetRawValueString("ArticleListSortOrder", "Descending"); string articleListLayout = Model.Item.GetRawValueString("ArticleListLayout", "grid"); string columnTheme = Model.Item.GetRawValueString("ColumnTheme", string.Empty); string columnThemeClass = columnTheme != string.Empty ? " theme " + columnTheme + " p-3" + (articleListLayout == "carousel" ? " px-lg-4" : string.Empty) : string.Empty; int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; <div class="h-100@(columnThemeClass) [email protected]()"> <a id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></a> @switch (articleListLayout) { case "grid": { if (listBehaviour == "articles") {@RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } if (listBehaviour == "lists") { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } } break; case "carousel": var carouselSettings = Model.Item.GetRawValueString("CarouselSettings", "4"); string slidesPerPage = $"slider-item-show{carouselSettings}"; string navigationStyle = $"{Model.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; string navigationPlacement = $"{Model.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; string indicatorStyle = $"{Model.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; string revealSlides = Model.Item.GetRawValueString("RevealSlides", "reveal") == "reveal" ? "slider-item-reveal" : string.Empty; string sliderItemsGap = Model.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; string navigationAlwaysVisible = (Model.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; string navigationVisibleOnTouch = (Model.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; string navigationShowScrollbar = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; string scrollBarForceMobile = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; string navigationSmall = (Model.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; string navigationInvertColors = (Model.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; string navigationSlideEntirePage = (Model.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; string navigationNoLoop = (Model.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; string indicatorsOutsideSlider = (Model.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; string indicatorsHighlightActive = (Model.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; string indicatorsInvertColors = (Model.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; string indicatorsVisibleOnSmallDevices = (Model.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; string animation = Model.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {Model.Item.GetRawValueString("Animation")}" : string.Empty; string autoplay = (Model.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; string autoplayInterval = Model.Item.GetRawValueString("AutoplayInterval", string.Empty); bool hideSliderNavigation = false; if (navigationStyle == "slider-nav-none") { hideSliderNavigation = true; } <div id="[email protected]" class="swiffy-slider @(slidesPerPage) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(sliderItemsGap) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage) @(animation) @(autoplay) [email protected]()" style="--swiffy-slider-nav-light:var(--swift-foreground-color);--swiffy-slider-nav-dark:var(--swift-background-color);visibility:hidden;opacity:0;@(scrollBarForceMobile)" data-slider-nav-autoplay-interval="@(autoplayInterval)"> <div class="slider-container pb-3 py-lg-3 px-lg-3 mt-lg-n3 mx-lg-n3"> @{ if (listBehaviour == "articles") { @RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } if (listBehaviour == "lists") { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } } </div> @if (!hideSliderNavigation) { <button type="button" title="@Translate("Previous slide")" class="slider-nav" style="z-index:1;"> <span class="visually-hidden">@Translate("Previous slide")</span> </button> <button type="button" title="@Translate("Next slide")" class="slider-nav slider-nav-next" style="z-index:1;"> <span class="visually-hidden">@Translate("Next slide")</span> </button> } @if (indicatorStyle != "slider-indicators-hidden") { <div class="slider-indicators" style="z-index:1;"></div> } <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> <script type="module"> const slider = document.querySelector('#[email protected]'); swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); document.addEventListener('load.swift.assetloader', () => { swiffyslider.initSlider(slider); slider.style.opacity = 1; slider.style.visibility = "visible"; }); </script> @if (indicatorStyle != "slider-indicators-hidden") { <script type="module"> const slider = document.querySelector('#[email protected]'); const sliderContainer = slider.querySelector('.slider-container'); let slides = sliderContainer.querySelectorAll('article'); const sliderIndicators = slider.querySelector('.slider-indicators'); slides.forEach((slide,index) => { const indicator = document.createElement('template'); indicator.innerHTML = ` <button type="button" class="${index == 0 ? "active" : ""}" title='@Translate("Go to slide") ${index + 1}'> <span class="visually-hidden">@Translate("Go to slide") ${index + 1}</span> </button> `; sliderIndicators.appendChild(indicator.content); }); </script> } </div> break; } </div> } @helper RenderArticleList(string itemType, string listSource, int maxItemsInList, string articleListSortOrder) { var parent = Dynamicweb.Context.Current.Request.QueryString.Get("list"); var query = string.IsNullOrEmpty(parent) ? listSource : parent; var includeAllChildren = Model.Item.GetRawValueString("ListDepth", "all") == "all" ? true : false; var listContext = Model.Item?.GetRawValueString("ListContext", string.Empty).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); var filterString = string.Join(" or ", listContext.Select(item => $"Tags == \"{item}\" or Tags ends with \",{item}\" or Tags starts with \"{item},\" or Tags contains \",{item},\"")); @RenderItemList(new { ItemType = itemType, ListTemplate = "ItemPublisher/List/List.cshtml", ItemFieldsList = "*", ListSourceType = "Page", ListSourcePage = query, ListPageSize = maxItemsInList, IncludeParagraphItems = true, ListOrderBy = "PublishedDate", ListSecondOrderBy = "Updated", ListOrderByDirection = articleListSortOrder, IncludeAllChildItems = includeAllChildren, Filter = itemType == "Swift_Article" ? filterString : null // Filter only if "articles only" }) }