Good tyres offer lower weight, faster rolling resistance and better grip
Two wheel drifting is likely if you have speed but are not riding the top few inches of the berms. Brief passing showers are keeping it wet but the sun and wind are trying. Brief passing showers are keeping it wet but the sun and wind are trying. The trails have a decidedly old school vibe with lots of rocks, roots, tight turns and steep pitches and are sure to keep even the most experienced riders on their toes.
Good tyres offer lower weight, faster rolling resistance and better grip
Brief passing showers are keeping it wet but the sun and wind are trying.
From here the trail narrows and skirts a rocky hillside. after the jump you will enter the trail between two trees (fairly close together). Starts off flowy with some good jumps then gets into more technical rock gardens. The trail can ridden in an hour non stop, but most people take multiple hours to session the various steps and drops and take photos of the World famous views of Castle Valley. Ride to the top and then down and link it directly into Ridegeline (with some double track). There are actually three trails which make up the loop: Horse Creek-Cattle Creek-Lower Twin Lake. This is a classic Black Mountain trail and was featured in Freehub Magazine's Pisgah Photo Book: Issue 6. Landings are getting a little rotted but the overall condition is good.
Brief passing showers are keeping it wet but the sun and wind are trying.
This 40+ miles ride is packed full of stunning island views. Please watch your speed on this portion though as this is a popular destination for hikers as well. It is steep. This new trail flows well and has multiple banked berms and small jumps that wind down the mountainside. Lots of Flow!
There will be some short dismount sections for most riders, but overall, the trail is fast and fun. The bottom portion of the trail is fast, loose and tight. Otherwise dry. This is the third downhill only trail on the north side trail network. Third Divide makes up part of the classic Downieville downhill route.
At the bottom the trail joins Hide and Seek above a major creek crossing. Normally most of the hikers don't make it to Otero Upper so that section is a little more clear and you can let it hang out a little more. Riders need to be at a decent skill level to attempt this trail. Trail can be ridden in either direction. I'm slow and a little chicken top hit some of the gap jumps but this was super fun. Immediately the trail drops into medium rollers and doubles, winding it's way back down the mountain with steep downhills, and a brief rolling climb. Gets dry in the summer. It can be accessed from the base at Old Fort Picnic Grounds or the base of the upper climb.
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_9f69e9f5725548b584909bb2528f6e97.<>c__DisplayClass0_0.<RenderArticleList>b__0(TextWriter __razor_helper_writer) in D:\Dynamicweb.net\Solutions\twodayco3\js-komponenter.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList.cshtml:line 130 at CompiledRazorTemplates.Dynamic.RazorEngine_9f69e9f5725548b584909bb2528f6e97.Execute() in D:\Dynamicweb.net\Solutions\twodayco3\js-komponenter.cloud.dynamicweb-cms.com\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> 2 3 @{ 4 string listSource = Model.Item.GetRawValueString("ListSource", Model.PageID.ToString()); 5 string listBehaviour = Model.Item.GetRawValueString("ListBehaviour", "articles"); 6 string articleListSortOrder = Model.Item.GetRawValueString("ArticleListSortOrder", "Descending"); 7 string articleListLayout = Model.Item.GetRawValueString("ArticleListLayout", "grid"); 8 string columnTheme = Model.Item.GetRawValueString("ColumnTheme", string.Empty).ToString().Replace(" ", "").Trim().ToLower(); 9 string columnThemeClass = columnTheme != string.Empty ? " theme " + columnTheme + " p-3" + (articleListLayout == "carousel" ? " px-lg-4" : string.Empty) : string.Empty; 10 11 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 12 13 <div class="h-100@(columnThemeClass) item_@Model.Item.SystemName.ToLower()"> 14 <div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div> 15 16 @switch (articleListLayout) 17 { 18 case "grid": 19 20 { 21 if (listBehaviour == "articles") 22 {@RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } 23 if (listBehaviour == "lists") 24 { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } 25 } 26 27 break; 28 29 case "carousel": 30 var carouselSettings = Model.Item.GetRawValueString("CarouselSettings", "4"); 31 string slidesPerPage = $"slider-item-show{carouselSettings}"; 32 string navigationStyle = $"{Model.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 33 string navigationPlacement = $"{Model.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 34 string indicatorStyle = $"{Model.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; 35 string revealSlides = Model.Item.GetRawValueString("RevealSlides", "reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 36 string sliderItemsGap = Model.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; 37 string navigationAlwaysVisible = (Model.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 38 string navigationVisibleOnTouch = (Model.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 39 string navigationShowScrollbar = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 40 string scrollBarForceMobile = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; 41 string navigationSmall = (Model.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 42 string navigationInvertColors = (Model.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 43 string navigationSlideEntirePage = (Model.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 44 string navigationNoLoop = (Model.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 45 string indicatorsOutsideSlider = (Model.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 46 string indicatorsHighlightActive = (Model.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 47 string indicatorsInvertColors = (Model.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 48 string indicatorsVisibleOnSmallDevices = (Model.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 49 string animation = Model.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {Model.Item.GetRawValueString("Animation")}" : string.Empty; 50 string autoplay = (Model.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; 51 string autoplayInterval = Model.Item.GetRawValueString("AutoplayInterval", string.Empty); 52 bool hideSliderNavigation = false; 53 54 if (navigationStyle == "slider-nav-none") 55 { 56 hideSliderNavigation = true; 57 } 58 59 <div id="Slider_@Model.ID" class="swiffy-slider @(slidesPerPage) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(sliderItemsGap) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage) @(animation) @(autoplay) item_@Model.Item.SystemName.ToLower()" 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)"> 60 <div class="slider-container pb-3 py-lg-3 px-lg-3 mt-lg-n3 mx-lg-n3"> 61 @{ 62 if (listBehaviour == "articles") 63 { @RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } 64 if (listBehaviour == "lists") 65 { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } 66 } 67 </div> 68 69 @if (!hideSliderNavigation) 70 { 71 <button type="button" title="@Translate("Previous slide")" class="slider-nav" style="z-index:1;"> 72 <span class="visually-hidden">@Translate("Previous slide")</span> 73 </button> 74 <button type="button" title="@Translate("Next slide")" class="slider-nav slider-nav-next" style="z-index:1;"> 75 <span class="visually-hidden">@Translate("Next slide")</span> 76 </button> 77 } 78 @if (indicatorStyle != "slider-indicators-hidden") 79 { 80 <div class="slider-indicators" style="z-index:1;"></div> 81 } 82 83 <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 84 <script type="module"> 85 const slider = document.querySelector('#Slider_@Model.ID'); 86 87 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 88 document.addEventListener('load.swift.assetloader', () => { 89 swiffyslider.initSlider(slider); 90 slider.style.opacity = 1; 91 slider.style.visibility = "visible"; 92 }); 93 94 </script> 95 96 @if (indicatorStyle != "slider-indicators-hidden") 97 { 98 <script type="module"> 99 const slider = document.querySelector('#Slider_@Model.ID'); 100 const sliderContainer = slider.querySelector('.slider-container'); 101 let slides = sliderContainer.querySelectorAll('article'); 102 const sliderIndicators = slider.querySelector('.slider-indicators'); 103 104 slides.forEach((slide,index) => { 105 const indicator = document.createElement('template'); 106 indicator.innerHTML = ` 107 <button type="button" class="${index == 0 ? "active" : ""}" title='@Translate("Go to slide") ${index + 1}'> 108 <span class="visually-hidden">@Translate("Go to slide") ${index + 1}</span> 109 </button> 110 `; 111 sliderIndicators.appendChild(indicator.content); 112 }); 113 </script> 114 } 115 </div> 116 117 break; 118 } 119 </div> 120 } 121 122 @helper RenderArticleList(string itemType, string listSource, int maxItemsInList, string articleListSortOrder) 123 { 124 var parent = Dynamicweb.Context.Current.Request.QueryString.Get("list"); 125 var query = string.IsNullOrEmpty(parent) ? listSource : parent; 126 var includeAllChildren = Model.Item.GetRawValueString("ListDepth", "all") == "all" ? true : false; 127 var listContext = Model.Item?.GetRawValueString("ListContext", string.Empty).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); 128 var filterString = string.Join(" or ", listContext.Select(item => $"Tags == \"{item}\" or Tags ends with \",{item}\" or Tags starts with \"{item},\" or Tags contains \",{item},\"")); 129 130 @RenderItemList(new 131 { 132 ItemType = itemType, 133 ListTemplate = "ItemPublisher/List/List.cshtml", 134 ItemFieldsList = "*", 135 ListSourceType = "Page", 136 ListSourcePage = query, 137 ListPageSize = maxItemsInList, 138 IncludeParagraphItems = true, 139 ListOrderBy = "PublishedDate", 140 ListSecondOrderBy = "Updated", 141 ListOrderByDirection = articleListSortOrder, 142 IncludeAllChildItems = includeAllChildren, 143 Filter = itemType == "Swift_Article" ? filterString : null // Filter only if "articles only" 144 }) 145 } 146