PageSourceSearch

https://dugas-park-mnb.webflow.io/event/norrofest

html dugas-park-mnb.webflow.io collected 2026-10-03 13:00:17 UTC 49,537 bytes, 564 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Fri Sep 25 2026 14:52:11 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="dugas-park-mnb.webflow.io" data-wf-page="698cb900e0bc7b7d105a505c" data-wf-site="698cb8fee0bc7b7d105a4e80" lang="en" data-wf-collection="698cb900e0bc7b7d105a5003" data-wf-item-slug="norrofest"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Norrofest 2026 | Dugas Park</title><meta content="Oct 17, 2026 Join us on Saturday, October 17 at Dugas Park in Scottsville, Kentucky, for an incredible lineup featuring The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser, along with food vendors, local brews, festival experiences, and more." name="description"/><meta content="Norrofest 2026 | Dugas Park" property="og:title"/><meta content="Oct 17, 2026 Join us on Saturday, October 17 at Dugas Park in Scottsville, Kentucky, for an incredible lineup featuring The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser, along with food vendors, local brews, festival experiences, and more." property="og:description"/><meta content="https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled.jpg" property="og:image"/><meta content="Norrofest 2026 | Dugas Park" name="twitter:title"/><meta content="Oct 17, 2026 Join us on Saturday, October 17 at Dugas Park in Scottsville, Kentucky, for an incredible lineup featuring The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser, along with food vendors, local brews, festival experiences, and more." name="twitter:description"/><meta content="https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled.jpg" name="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="eENZYEwfV-oAjYvRPZyVqT7qOGyBoGzPWE6HFqryTpY" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/css/dugas-park-mnb.shared.2f189e192.min.css" rel="stylesheet" type="text/css" integrity="sha384-LxieGSoVE/WseUwfNYg/jjel758Boy5HlWyE0+j8lfqUoF6Stk1itLWGFM1RR3Mm" crossorigin="anonymous"/>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69c466496546dc70da521a47_dp-favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69c437225d9e0af0e9e453e5_dp-webclip.jpeg" rel="apple-touch-icon"/><link href="https://www.dugaspark.org/event/norrofest" rel="canonical"/><meta name="apple-mobile-web-app-title" content="Dugas Park">
2<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69c43b865dae874dc198c46b_dp-web-app-icon.png">
3
4<link rel="stylesheet" href="https://use.typekit.net/uie2hba.css">
5
6<link rel="preconnect" href="https://fonts.googleapis.com">
7<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8<link rel="preload" as="style"
9  href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500&display=swap"
10  onload="this.onload=null;this.rel='stylesheet'">
11<noscript>
12  <link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500&display=swap" rel="stylesheet">
13</noscript>
14
15<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 15-16
15
16<script async src="https://www.googletagmanager.com/gtag/js?id=
16G-PB568CXJ14
vendor: 12 bytes, line 16
16"></script>
17<script>
18  
vendor: 134 bytes, lines 18-22
18window.dataLayer = window.dataLayer || [];
19  function gtag(){dataLayer.push(arguments);}
20  gtag('js', new Date());
21
22  gtag('config', '
22G-PB568CXJ14
vendor: 4 bytes, line 22
22');
23</script>
23
24
25<script>
26function trimStringFromEnd(str) {
27  if (str.length <= 100) {
28    return str;
29  } else {
30    return str.slice(-100);
31  }
32}
33  
34window.onerror = function(message, source, lineno, colno, error) {
35  const errorString = `${source}:${lineno}:${colno}`;
36  
37  gtag("event","js_error",
38    {
39      event_category: "js_error",
40      event_label: message,
41      value: trimStringFromEnd(errorString)
42  	}
43  );
44};
45</script>
45
46
47<script>
48(()=>{const t=6048e5,e=o=>`alert_hide_until:${o}`,n=()=>Date.now(),l=o=>{try{const t=localStorage.getItem(e(o));if(!t)return 0;const n=Number(t);return Number.isFinite(n)?n:0}catch{return 0}},i=(o,l=t)=>{try{localStorage.setItem(e(o),String(n()+l))}catch{}},r=o=>{try{localStorage.removeItem(e(o))}catch{}},c=o=>{const t=l(o);return t<=0||t<=n()?(t>0&&r(o),!0):!1},s=o=>{o.setAttribute("hidden",""),o.setAttribute("aria-hidden","true")},a=o=>{o.removeAttribute("hidden"),o.setAttribute("aria-hidden","false")},d=o=>{const t=o.getAttribute("data-alert-slug")?.trim();if(!t)return;c(t)?a(o):s(o),o.addEventListener("click",e=>{if(!e.target.closest("[data-alert-close]"))return;e.preventDefault(),i(t),s(o)})},u=()=>{document.querySelectorAll("[data-alert]").forEach(d)};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",u):u()})();
49</script>
49
50
51<style>
52  body {
53    font-family: Ubuntu,Helvetica,sans-serif;
54  }
55  
56  h1, h2,h3, h4, h5, h6 {
57  	font-family: polymath, system-ui, sans-serif;  
58  }
59
60  .navbar:not(.navbar[data-wf--navbar--variant="dark"]) .menu-wrap:hover .nav-dropdown-toggle,
61  .navbar:not(.navbar[data-wf--navbar--variant="dark"]) .menu-wrap:hover .nav-link {
62    color: var(--gray);
63  }
64
65  .navbar:not(.navbar[data-wf--navbar--variant="dark"]) .menu-wrap .nav-dropdown-toggle:hover,
66  .navbar:not(.navbar[data-wf--navbar--variant="dark"]) .menu-wrap .nav-dropdown-toggle.w--open,
67  .navbar:not(.navbar[data-wf--navbar--variant="dark"]) .menu-wrap .nav-link:hover {
68    color: var(--white);
69  }
70
71  .nav-dropdown-list:hover a.nav-dropdown-link {
72    color: var(--dark-gray);
73  }
74
75  .nav-dropdown-list a.nav-dropdown-link:hover {
76    color: var(--white);
77  }
78  
79  .w-nav-overlay {
80    overflow: visible;
81  }
82  
83  .weather-widget svg {
84    height: 25px;
85    width: 25px;
86  }
87  
88  .home-video-banner, .map {
89    min-height: 100vh;
90    min-height: 100svh;
91  }
92</style>
92<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/global/luxon.min.js" integrity="sha256-iwHGzfeSAG3GVYJLvrpKaSk5cHAIlwWIJGYGBbeX49U=" crossorigin="anonymous" defer=""></script>
92
93
94<style>
95.ical-button:hover .ical-options {
96	display: flex;
97}
98
99.ical-options:hover {
100	display: flex;
101}
102</style>
103
104
105<script type="text/javascript">window.__WEBFLOW_CURRENCY_SETTINGS = {"currencyCode":"USD","symbol":"$","decimal":".","fractionDigits":2,"group":",","template":"{{wf {\"path\":\"symbol\",\"type\":\"PlainText\"} }} {{wf {\"path\":\"amount\",\"type\":\"CommercePrice\"} }} {{wf {\"path\":\"currencyCode\",\"type\":\"PlainText\"} }}","hideDecimalForWholeNumbers":false};</script>
105</head><body><div data-animation="over-left" class="navbar w-nav" data-wf--navbar--variant="base" data-easing2="ease" data-easing="ease" data-collapse="medium" role="banner" data-duration="400" data-doc-height="1"><div data-wf--alerts--variant="base" class="alerts-wrapper w-dyn-list"><div role="list" class="w-dyn-items"><div role="listitem" class="w-dyn-item"><section id="alert-notice" data-alert-slug="norrofest-2026" data-alert="" hidden="" data-alert-closed="false" class="section-alert"><div class="w-layout-blockcontainer nav-container w-container"><div data-w-id="815e062f-f574-2237-9a62-670df5fc05b9" class="alert-info"><div class="subtitle-alert">NorroFest 2026</div><a href="/event/norrofest" aria-current="page" class="alert-link w-inline-block w--current"><p class="paragraph-alert message">Come see The Kentucky Headhunters live October 17th. Get tickets now!</p></a><img data-w-id="815e062f-f574-2237-9a62-670df5fc05bc" data-alert-close="" alt="icon" src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/698cb900e0bc7b7d105a51bd_close-btn.svg" loading="lazy" class="close-alert"/></div></div></section></div></div></div><div class="nav-shadow"><div class="nav-container w-container"><div class="nav-menu-wrapper"><a href="/" class="brand w-nav-brand"><img src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69b9b916a9e8f5d91248f7b6_DP-Nav2.svg" loading="eager" alt="Dugas Park Header Logo" class="nav-logo"/></a><nav role="navigation" class="nav-menu w-nav-menu"><div class="tablet-menu"><a href="/" class="brand-tablet w-nav-brand"><img src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69b9b916a9e8f5d91248f7b6_DP-Nav2.svg" loading="lazy" alt="Mobile Menu Logo"/></a><div class="close-menu-button w-nav-button"><img src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/698cb900e0bc7b7d105a51bd_close-btn.svg" loading="lazy" alt="icon" class="nav-close-icon"/></div></div><div class="menu-wrap"><div data-hover="true" data-delay="0" class="nav-dropdown w-dropdown"><div class="nav-dropdown-toggle w-dropdown-toggle"><div class="nav-dropdown-icon w-icon-dropdown-toggle"></div><div>Visit</div></div><nav class="nav-dropdown-list w-dropdown-list"><div class="nav-dropdown-link-wrapper"><a href="/guide" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Park Guide</div></a><a href="/trails" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Trails</a><a href="/events" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Events/Calendar</a><a href="/things-for-kids" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Things for Kids</a><a href="/alerts" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Alerts &amp; Closures</div></a><a href="/map" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Map</a></div></nav></div><div data-hover="true" data-delay="0" class="nav-dropdown w-dropdown"><div class="nav-dropdown-toggle w-dropdown-toggle"><div class="nav-dropdown-icon w-icon-dropdown-toggle"></div><div>Discover</div></div><nav class="nav-dropdown-list w-dropdown-list"><div class="w-dyn-list"><div role="list" class="nav-dropdown-link-wrapper w-dyn-items"><div role="listitem" class="nav-dropdown-collection-item w-dyn-item"><a href="/discover/amphitheater" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Amphitheater</div></a></div><div role="listitem" class="nav-dropdown-collection-item w-dyn-item"><a href="/discover/pavilion" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Pavilion</div></a></div><div role="listitem" class="nav-dropdown-collection-item w-dyn-item"><a href="/discover/oxbow-campground" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Oxbow Campground</div></a></div><div role="listitem" class="nav-dropdown-collection-item w-dyn-item"><a href="/discover/civil-war-artillery" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Civil War Artillery</div></a></div><div role="listitem" class="nav-dropdown-collection-item w-dyn-item"><a href="/discover/dog-park" class="nav-dropdown-link w-inline-block"><div class="nav-dropdown-link-line"></div><div class="nav-dropdown-text">Dog Park (Coming Soon)</div></a></div></div></div><div class="nav-dropdown-link-wrapper"><a href="/trails" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Trails</a></div></nav></div><div data-hover="true" data-delay="0" class="nav-dropdown w-dropdown"><div class="nav-dropdown-toggle w-dropdown-toggle"><div class="nav-dropdown-icon w-icon-dropdown-toggle"></div><div>Resources</div></div><nav class="nav-dropdown-list w-dropdown-list"><div class="nav-dropdown-link-wrapper"><a href="/rentals" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Rentals</a><a href="/vendors" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Vendors</a><a href="/press" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>Press/Media</a></div></nav></div><div data-hover="true" data-delay="0" class="nav-dropdown w-dropdown"><div class="nav-dropdown-toggle w-dropdown-toggle"><div class="nav-dropdown-icon w-icon-dropdown-toggle"></div><div>About</div></div><nav class="nav-dropdown-list w-dropdown-list"><div class="nav-dropdown-link-wrapper"><a href="/about-us" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>About Us</a><a href="/history" class="nav-dropdown-link w-dropdown-link"><span class="nav-dropdown-link-line"> </span>History</a></div></nav></div><a href="/get-involved" class="nav-link">Get Involved</a><div class="nav-button-hidden-desktop">
105<a href="/contact" class="primary-button nav w-button">Contact Us</a></div></div></nav><div class="nav-cta-wrapper"><div class="nav-button-hidden-tablet"><a href="/contact" class="primary-button nav w-button">Contact</a></div><div class="menu-button w-nav-button"><img src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/698cb900e0bc7b7d105a51b6_menu-btn.svg" loading="lazy" alt="icon" height="16" class="image-burger"/></div></div></div></div></div></div><div class="event-banner"><img alt="" src="https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled.jpg" sizes="100vw" srcset="https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled-p-500.jpg 500w, https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled-p-800.jpg 800w, https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled-p-1080.jpg 1080w, https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled-p-1600.jpg 1600w, https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled-p-2000.jpg 2000w, https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled.jpg 2560w" class="pages-banner-image"/><div class="bkg-overlay _30perc"></div><div class="event-banner-content"><div data-w-id="36522c69-96c3-67e5-996b-cdf46b8c3cc5" style="opacity:0" class="home-baner-content-columns"><div><h1 class="event-banner-title title-shadow">Norrofest 2026</h1></div></div><div class="home-baner-content-columns right"></div></div></div><div class="section"><div class="container w-container"><div class="event-sidebar-wrapper"><div class="event-details-content-wrapper"><div data-w-id="36522c69-96c3-67e5-996b-cdf46b8c3ccb" style="opacity:0" class="info-event-contacts"><div data-w-id="36522c69-96c3-67e5-996b-cdf46b8c3cd1" style="opacity:0" class="info-sidebar-wrap"><p class="info-icon"></p><p data-ticket-link="" data-event-starttime="10/17/2026 3:00 PM" data-event-endtime="" class="field-lable event-date">October 17, 2026</p><p class="field-lable starttime">3:00 pm</p></div><div data-w-id="36522c69-96c3-67e5-996b-cdf46b8c3ccc" style="opacity:0" class="info-sidebar-wrap"><p class="info-icon"></p><p id="location" class="field-lable">Amphitheater</p></div></div><div data-w-id="cfaac9d6-44da-dafa-afad-1ea4d4969195" style="opacity:0" class="info-sidebar-wrap"><div data-title="Norrofest 2026" data-start="2026-10-17 3:00 pm" data-end="" data-description="Join us on Saturday, October 17 at Dugas Park in Scottsville, Kentucky, for an incredible lineup featuring The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser, along with food vendors, local brews, festival experiences, and more." class="primary-button small ical-button"><div>Add to Calendar</div><div class="ical-options"><div class="ical-options-wrapper"><a href="#" class="ical-option w-inline-block"><div>Apple</div></a><a href="#" class="ical-option w-inline-block"><div>Google</div></a><a href="#" class="ical-option w-inline-block"><div>Outlook</div></a><a href="#" class="ical-option w-inline-block"><div>ICS</div></a></div></div></div><a href="#" class="primary-button small share-button w-button">Share</a></div><div class="detail-page-rich-text w-richtext"><p>Get ready for one unforgettable day of live music, great food, and Kentucky hospitality at <strong>NorroFest 2026</strong>!</p><p>Join us on <strong>Saturday, October 17</strong> at <strong>Dugas Park in Scottsville, Kentucky</strong>, for an incredible lineup featuring <strong>The Kentucky Headhunters</strong>, <strong>Woodbox Heroes</strong>, and <strong>Jonell Mosser</strong>, along with food vendors, local brews, festival experiences, and more.</p><p>Whether you&#x27;re a longtime fan or discovering your next favorite artist, NorroFest brings together nationally recognized talent and the welcoming spirit of South Central Kentucky for a festival experience you won&#x27;t want to miss in the beautiful, scenic Dugas Park.</p><p><strong>General Admission Includes:</strong></p><ul role="list"><li>Full-day access to NorroFest 2026</li><li>Live performances by The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser</li><li>Access to food trucks, vendors, and festival activities</li><li>Free parking</li></ul><p>Upgrade your experience with <strong>The Back Porch Experience</strong>
105 for premium viewing, exclusive hospitality, and VIP amenities.</p><p>Grab your tickets now and join us for one of Kentucky&#x27;s can&#x27;t-miss music events of the year!</p><figure style="max-width:1819px" class="w-richtext-align-fullwidth w-richtext-figure-type-image"><div><img alt="" src="https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4ebb2756e79d6b7b16f4dc_2026-NORROFEST-LINEUP%404x.jpg" loading="lazy"/></div></figure></div><div class="rich-results-embed w-embed w-script">
105<script>
106document.addEventListener("DOMContentLoaded",function(){
107  function setRichEvent() {
108    const eventDateEl = document.querySelector('.event-date');
109    const eventStartTime = eventDateEl.getAttribute('data-event-starttime');
110    const { DateTime } = luxon;
111  	const strucDataEventStart = DateTime.fromFormat(eventStartTime, "M/d/yyyy h:mm a", { zone: "America/Chicago" }).toUTC().toISO();
112    const eventEndTime = eventDateEl.getAttribute('data-event-endtime');
113    const strucAddress = "336 North Bedelia Street";
114    const strucCity = "Scottsville";
115    const strucState = "Ky";
116    const description = "Join us on Saturday, October 17 at Dugas Park in Scottsville, Kentucky, for an incredible lineup featuring The Kentucky Headhunters, Wood Box Heroes, and Jonell Mosser, along with food vendors, local brews, festival experiences, and more.";
117    const previewImage = "https://cdn.prod.website-files.com/698cb900e0bc7b7d105a4fb8/6a4c298a24e9776dd282241e_KYHH_byAshNewell_b-w_lrg-scaled.jpg";
118    const ticketLink = eventDateEl.getAttribute('data-ticket-link');
119
120    const eventStructure = {
121      "@context": "https://schema.org",
122      "@type": "Event",
123      "name": "Norrofest 2026",
124      "startDate": strucDataEventStart,
125      "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
126      "eventStatus": "https://schema.org/EventScheduled",
127      "location": {
128        "@type": "Place",
129        "name": "Dugas Park Amphitheater",
130        "address": {
131          "@type": "PostalAddress",
132          "streetAddress": strucAddress,
133          "addressLocality": strucCity,
134          "addressRegion": strucState,
135          "postalCode": "42164",
136          "addressCountry": "US"
137        }
138      },
139      "image": [previewImage],
140      "description": description
141    };
142
143    if (eventEndTime) {
144      eventStructure["endDate"] = DateTime.fromFormat(eventEndTime, "M/d/yyyy h:mm a", { zone: "America/Chicago" }).toUTC().toISO();
145    }
146    
147    if (ticketLink) {
148      eventStructure["offers"] = {
149        "@type": "Offer",
150        "url": ticketLink,
151        "availability": "https://schema.org/InStock"
152      };
153    }
154
155    const eventScript = document.createElement("script");
156    eventScript.type = "application/ld+json";
157    eventScript.textContent = JSON.stringify(eventStructure, null, 2);
158
159    document.querySelector('.rich-results-embed').appendChild(eventScript);
160  }
161  setRichEvent();
162});
163</script>
163</div></div><div class="event-sidebar-right-wrapper"><div class="event-sidebar-sticky"><div class="event-sidebar-richtext"><div class="w-richtext"><div class="w-embed w-script"><!-- Ticket Tailor Widget. Paste this into your website where you want the widget to appear. Do not change the code or the widget may not work properly. -->
164<div class="tt-widget"><div class="tt-widget-fallback"><p><a href="https://tickets.acsarts.org/checkout/new-session/id/8617902/chk/521c24726e164d703df8ba4c4505214b/?ref=website_widget&show_search_filter=true&show_date_filter=true&show_sort=true&show_event_filter=false" target="_blank">Click here to buy tickets</a><br /><small><a href="https://www.tickettailor.com?rf=wdg_103445" class="tt-widget-powered">Sell tickets online with Ticket Tailor</a></small></p></div>
164<script src="https://cdn.tickettailor.com/js/widgets/min/widget.js" data-url="https://tickets.acsarts.org/checkout/new-session/id/8617902/chk/521c24726e164d703df8ba4c4505214b/?ref=website_widget&show_search_filter=true&show_date_filter=true&show_sort=true&show_event_filter=false" data-type="inline" data-inline-minimal="true" data-inline-show-logo="false" data-inline-bg-fill="true" data-inline-inherit-ref-from-url-param="" data-inline-ref="website_widget"></script>
164</div><!-- End of Ticket Tailor Widget --></div></div></div></div></div></div></div></div><section data-wf--calendar--variant="base" class="section white"><div class="w-layout-blockcontainer container w-container"><div class="calender-heading-flex"><h2>Calendar</h2></div><div class="w-embed w-iframe w-script"><div style="position:relative;min-height:75vh">
165  <iframe style="position:absolute;inset:0;width:100%;height:100%;border:1px solid #aaa;border-radius:12px;"
166          frameborder="0" scrolling="no"
167    	  loading="lazy"
168    	  title="Google Calendar"
169    	  id="calendarFrame"
170    	  data-src="https://calendar.google.com/calendar/embed?height=600&wkst=1&ctz=America%2FChicago&showPrint=0&src=Y185OTZhODYwY2QwM2Y5MTIxY2JjYjk4MGIzMTUyODk1MTFhYWJiYTJiZWE0NjU1ZWI4NzFkMzFhODJmMzNkNzQ4QGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20&mode=AGENDA"></iframe>
171</div>
172<!--
173<script>
174document.addEventListener("DOMContentLoaded", function () {
175  const iframe = document.getElementById("calendarFrame");
176  if (!iframe) return;
177
178  const observer = new IntersectionObserver((entries, obs) => {
179    entries.forEach(entry => {
180      if (!entry.isIntersecting) return;
181
182      iframe.src = iframe.dataset.src;
183      obs.unobserve(iframe);
184    });
185  }, {
186    root: null,
187    rootMargin: "400px 0px",
188    threshold: 0
189  });
190
191  observer.observe(iframe);
192});
193</script>
193
194--></div></div></section><section class="section review"><img sizes="(max-width: 1439px) 100vw, 1440px" srcset="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb63f764a5170b8e9f9535_dp-fog-p-500.jpg 500w, https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb63f764a5170b8e9f9535_dp-fog-p-800.jpg 800w, https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb63f764a5170b8e9f9535_dp-fog-p-1080.jpg 1080w, https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb63f764a5170b8e9f9535_dp-fog.jpg 1440w" alt="Foggy landscape with a wooden fence, green grass, and a covered wooden pavilion on the right." src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb63f764a5170b8e9f9535_dp-fog.jpg" loading="lazy" class="bkg-image"/><div class="bkg-overlay"></div><div class="w-layout-blockcontainer container w-container"><div class="review-flex"><h2 class="text-white title-shadow">Love the Park?</h2><p class="text-white title-shadow">Leave us a review on Google, it helps more people find us.</p><a href="https://search.google.com/local/writereview?placeid=ChIJ0TzxCxl3ZogR9fLrflAjIuM" target="_blank" class="primary-button outline-white w-button">Leave a Review</a></div></div></section><div class="footer"><div class="container w-container"><div class="footer-wrapper"><div id="w-node-f1debaa1-143f-58ac-f2dd-d3abe99c2d7d-634f2c73" class="footer-column footer-brand-col"><a href="/" class="footer-brand w-nav-brand"><img src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/69bb0f94feed9daed162d980_DP-FooterNav_1.svg" loading="lazy" alt="Dugas Park Footer Logo"/></a><p class="paragraph-footer">A 346-acre nonprofit park established in 2014 by the Dugas Family in Scottsville Kentucky.<br/></p></div><div class="footer-column menu"><div class="footer-menu-left"><div class="subtitle-footer">Site Links</div><div class="footer-links-wrapper"><a href="/press" class="footer-link">Press/Media</a><a href="https://search.google.com/local/writereview?placeid=ChIJ0TzxCxl3ZogR9fLrflAjIuM" target="_blank" class="footer-link">Leave Review</a><a href="/policies" class="footer-link">Terms &amp; Privacy</a><a href="/alerts" class="footer-link">Alerts</a><a href="https://forms.gle/zhqiW9tgbR6Sn44MA" target="_blank" class="footer-link">Submit Photos</a></div></div><div class="footer-menu-right"><div class="subtitle-footer">Get Involved</div><div class="w-dyn-list"><div role="list" class="footer-links-wrapper w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/get-involved#donate" class="footer-link">Donate</a></div><div role="listitem" class="w-dyn-item"><a href="/get-involved#volunteer" class="footer-link">Volunteer</a></div><div role="listitem" class="w-dyn-item"><a href="/get-involved#be-a-friend" class="footer-link">Be a Friend</a></div><div role="listitem" class="w-dyn-item"><a href="/get-involved#tribute-and-memorials" class="footer-link">Tribute &amp; Memorial Gifts</a></div><div role="listitem" class="w-dyn-item"><a href="/get-involved#in-kind-donations" class="footer-link">In-Kind Donations</a></div></div></div></div></div><div class="footer-column contact"><div class="subtitle-footer">Contacts</div><div class="footer-links-wrapper"><div class="footer-location-wrapper"><div class="contacts-detail"><p class="contacts-icon mobile-p-hidden"></p><a href="https://maps.app.goo.gl/3gT3S8Mr3BUKjVTBA" target="_blank" class="links-footer">336 North Bedelia Street<br/>Scottsville, Ky  42164</a></div><div class="contacts-detail"><p class="contacts-icon mobile-p-hidden"></p><a href="https://maps.app.goo.gl/xzHF1ZJzM1Kir1L88" target="_blank" class="links-footer">Office:  480 New Glasgow Road<br/>Scottsville, KY  42164</a></div><div class="contacts-detail"><p class="contacts-icon mobile-p-hidden"></p><a href="tel:270-622-4029" class="links-footer">(270) 622-4029</a></div><div class="contacts-detail"><p class="contacts-icon mobile-p-hidden"></p><a href="mailto:[email protected]" class="links-footer">[email protected]</a></div></div></div></div></div><div class="footer-bottom-wrapper"><div class="footer-copyright">© Friends of Dugas Community Park Inc.</div><div class="footer-social-icons-wrapper"><a href="https://www.facebook.com/DugasPark" target="_blank" class="footer-social-icon"></a><a href="https://www.instagram.com/dugaspark/" target="_blank" class="footer-social-icon"></a><a href="https://www.linkedin.com/company/dugaspark/" target="_blank" class="footer-social-icon"></a></div><div class="footer-rights-wrapper"><div class="footer-rights">Site by<a href="https://www.olivercreative.co/" target="_blank" class="footer-copyright-link">Oliver Creative</a></div></div></div></div></div>
194<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=698cb8fee0bc7b7d105a4e80" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
194<script src="https://cdn.prod.website-files.com/698cb8fee0bc7b7d105a4e80/js/dugas-park-mnb.a3815cb6.7416fc7e43a6754b.js" type="text/javascript" integrity="sha384-n4lCa7WQAIuAUS6fk3sMRDFQVhQXuNvOzXHmAB5+zJKF6qFuYF+CxOzQiT2S4a5m" crossorigin="anonymous"></script>
194<script>
195function checkWeather(){let e=document.querySelector(".weather-widget");if(!e)return;let t=document.querySelector(".weather-temp"),i=document.querySelector(".weather-image");if(!t||!i)return;let r={sun:`
196    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
197      <circle cx="12" cy="12" r="4.6" fill="#F6C945"/>
198      <path d="M12 3v2.2M12 18.8V21M3 12h2.2M18.8 12H21
199               M5.2 5.2l1.6 1.6M17.2 17.2l1.6 1.6
200               M18.8 5.2l-1.6 1.6M6.8 17.2l-1.6 1.6"
201        stroke="#F2B705" stroke-width="2" stroke-linecap="round"/>
202    </svg>`,moon:`
203    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
204      <path d="M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8Z"
205        fill="#6FA8FF"
206        stroke="#4F83E3"
207        stroke-width="1.5"
208        stroke-linejoin="round"/>
209    </svg>`,cloud:`
210    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
211      <path d="M7.6 18.5h9.3a4.1 4.1 0 0 0 .4-8.2
212               A5.8 5.8 0 0 0 6.2 12.1
213               A3.5 3.5 0 0 0 7.6 18.5Z"
214        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
215    </svg>`,partly:`
216    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
217      <path d="M9.5 6.2a3.6 3.6 0 1 1 0 7.2a3.6 3.6 0 0 1 0-7.2Z" fill="#F6C945"/>
218      <path d="M9.5 4.5v1.4M9.5 13.1v1.4M4.5 9.8h1.4M13.1 9.8h1.4
219               M6.1 6.4l1 1M11.9 12.2l1 1
220               M12.9 6.4l-1 1M7.1 12.2l-1 1"
221        stroke="#F2B705" stroke-width="1.8" stroke-linecap="round"/>
222      <path d="M8.1 19h9.1a3.8 3.8 0 0 0 .3-7.6
223               A5.2 5.2 0 0 0 7.4 12.9
224               A3.2 3.2 0 0 0 8.1 19Z"
225        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
226    </svg>`,rain:`
227    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
228      <path d="M7.7 15.2h9a4 4 0 0 0 .4-8
229               A5.7 5.7 0 0 0 6.4 9.2
230               A3.5 3.5 0 0 0 7.7 15.2Z"
231        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
232      <path d="M9 18.2l-.6 1.6M13 18.2l-.6 1.6M17 18.2l-.6 1.6"
233        stroke="#3B82F6" stroke-width="2" stroke-linecap="round"/>
234    </svg>`,drizzle:`
235    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
236      <path d="M7.7 15.2h9a4 4 0 0 0 .4-8
237               A5.7 5.7 0 0 0 6.4 9.2
238               A3.5 3.5 0 0 0 7.7 15.2Z"
239        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
240      <path d="M10 18.2l-.35 1.0M14 18.2l-.35 1.0M18 18.2l-.35 1.0"
241        stroke="#60A5FA" stroke-width="2" stroke-linecap="round"/>
242    </svg>`,thunder:`
243    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
244      <path d="M7.7 14.8h9a4 4 0 0 0 .4-8
245               A5.7 5.7 0 0 0 6.4 8.8
246               A3.5 3.5 0 0 0 7.7 14.8Z"
247        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
248      <path d="M12.6 14.6l-2.2 4.2h2.1l-1.1 3.4 3.2-5h-2.2l1.2-2.6Z"
249        fill="#F6C945" stroke="#F2B705" stroke-width="0.8" stroke-linejoin="round"/>
250    </svg>`,hail:`
251    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
252      <path d="M7.7 14.8h9a4 4 0 0 0 .4-8
253               A5.7 5.7 0 0 0 6.4 8.8
254               A3.5 3.5 0 0 0 7.7 14.8Z"
255        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
256      <circle cx="10" cy="19" r="1.2" fill="#93C5FD"/>
257      <circle cx="14" cy="19.6" r="1.2" fill="#93C5FD"/>
258      <circle cx="18" cy="18.9" r="1.2" fill="#93C5FD"/>
259    </svg>`,fog:`
260    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
261      <path d="M7.8 11.8h9a3.8 3.8 0 0 0 .2-7.6
262               A5.2 5.2 0 0 0 7 6.2
263               A3.2 3.2 0 0 0 7.8 11.8Z"
264        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
265      <path d="M6 15h12M4.5 18h15M7.5 21h9"
266        stroke="rgba(255,255,255,0.85)" stroke-width="2" stroke-linecap="round"/>
267    </svg>`,snow:`
268    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
269      <path d="M7.7 14.8h9a4 4 0 0 0 .4-8
270               A5.7 5.7 0 0 0 6.4 8.8
271               A3.5 3.5 0 0 0 7.7 14.8Z"
272        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
273      <path d="M10 18.5v3M14 18.5v3M18 18.5v3"
274        stroke="#93C5FD" stroke-width="2" stroke-linecap="round"/>
275      <path d="M9.4 19.6l1.2.6M10.6 19.6l-1.2.6M13.4 19.6l1.2.6M14.6 19.6l-1.2.6M17.4 19.6l1.2.6M18.6 19.6l-1.2.6"
276        stroke="#93C5FD" stroke-width="1.4" stroke-linecap="round"/>
277    </svg>`,ice:`
278    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
279      <path d="M7.7 14.8h9a4 4 0 0 0 .4-8
280               A5.7 5.7 0 0 0 6.4 8.8
281               A3.5 3.5 0 0 0 7.7 14.8Z"
282        fill="#FFFFFF" stroke="rgba(255,255,255,0.75)" stroke-width="1.5" stroke-linejoin="round"/>
283      <path d="M9.2 18.6l1.2 1.2l-1.2 1.2l-1.2-1.2l1.2-1.2Z
284               M14.2 18.2l1.4 1.4l-1.4 1.4l-1.4-1.4l1.4-1.4Z
285               M18.2 18.6l1.2 1.2l-1.2 1.2l-1.2-1.2l1.2-1.2Z"
286        fill="#93C5FD" opacity="0.9"/>
287    </svg>`,wind:`
288    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" style="display:block">
289      <path d="M4 10h10.5a2.5 2.5 0 1 0-2.4-3.2"
290        stroke="#93C5FD" stroke-width="2" stroke-linecap="round"/>
291      <path d="M4 14h14.2a2.2 2.2 0 1 1-2.1 2.8"
292        stroke="#60A5FA" stroke-width="2" stroke-linecap="round"/>
293      <path d="M4 18h8.2"
294        stroke="#93C5FD" stroke-width="2" stroke-linecap="round"/>
295    </svg>`}
295,n="parkWeather:36.759,-86.198";function l({temp:n,code:l,isDay:o,gustMph:a}){t.textContent=`${Math.round(n)}\xb0`,i.innerHTML=function e({code:t,isDay:i,gustMph:n}){return"number"==typeof n&&n>=25?r.wind:0===t?i?r.sun:r.moon:1===t||2===t?i?r.partly:r.cloud:3===t?r.cloud:45===t||48===t?r.fog:51===t||53===t||55===t?r.drizzle:56===t||57===t?r.ice:61===t||63===t||65===t?r.rain:66===t||67===t?r.ice:71===t||73===t||75===t||77===t?r.snow:80===t||81===t||82===t?r.rain:85===t||86===t?r.snow:95===t?r.thunder:96===t||99===t?r.hail:r.cloud}({code:l,isDay:o,gustMph:a}),e.classList.add("active")}async function o(){let e=function e(){try{let t=localStorage.getItem(n);if(!t)return null;let{ts:i,data:r}=JSON.parse(t);if(!i||!r||Date.now()-i>6e5)return null;return r}catch{return null}}();e&&l(e);let t=`https://api.open-meteo.com/v1/forecast?latitude=${encodeURIComponent(36.7586193)}&longitude=${encodeURIComponent(-86.1977269)}&current=temperature_2m,weather_code,is_day,wind_gusts_10m&temperature_unit=fahrenheit&wind_speed_unit=mph&timezone=auto`,i=await fetch(t,{cache:"no-store"});if(!i.ok)throw Error("Weather fetch failed");let r=await i.json(),o=r?.current?.temperature_2m,a=r?.current?.weather_code,s=r?.current?.is_day===1,_=r?.current?.wind_gusts_10m;if("number"==typeof o&&"number"==typeof a){let d={temp:o,code:a,isDay:s,gustMph:"number"==typeof _?_:void 0};l(d),function e(t){try{localStorage.setItem(n,JSON.stringify({ts:Date.now(),data:t}))}catch{}}(d)}}o().catch(()=>{}),setInterval(()=>o().catch(()=>{}),6e5)}function getManualClosure(e="#park-closure"){let t=document.querySelector(e);if(!t)return null;let i=(t.dataset.alertClosed||"").toLowerCase();return"true"===i||"1"===i||"yes"===i?{status:"closed",reason:"manual",message:t.dataset.message?.trim()||"The park is temporarily closed. <a href='/alerts' style='color:#fff;text-decoration:underline'>Learn more</a>."}:null}function ymdInTimeZone(e=new Date,t="America/Chicago"){let i=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),r=i.find(e=>"year"===e.type).value,n=i.find(e=>"month"===e.type).value,l=i.find(e=>"day"===e.type).value;return`${r}-${n}-${l}`}function addDaysInTimeZone(e=new Date,t=1){let i=new Date(e);return i.setHours(12,0,0,0),i.setDate(i.getDate()+t),i}function getCacheKey(e,t,i){return`civil_twilight_${e}_${t}_${i}`}function getCachedTwilight(e){try{let t=localStorage.getItem(e);if(!t)return null;let i=JSON.parse(t);return{dawn:new Date(i.dawn),dusk:new Date(i.dusk),dateStr:i.dateStr}}catch{return null}}function setCachedTwilight(e,t){try{localStorage.setItem(e,JSON.stringify({dawn:t.dawn.toISOString(),dusk:t.dusk.toISOString(),dateStr:t.dateStr}))}catch{}}function cleanOldTwilightCache(e,t,i="America/Chicago"){let r=ymdInTimeZone(new Date,i),n=ymdInTimeZone(addDaysInTimeZone(new Date,1),i);Object.keys(localStorage).forEach(i=>{!i.startsWith(`civil_twilight_${e}_${t}_`)||i.includes(r)||i.includes(n)||localStorage.removeItem(i)})}async function getCivilTwilight(e,t,{timeZone:i="America/Chicago",dayOffset:r=0}={}){let n=0===r?new Date:addDaysInTimeZone(new Date,r),l=ymdInTimeZone(n,i),o=getCacheKey(e,t,l),a=getCachedTwilight(o);if(a)return a;let s=`https://api.sunrise-sunset.org/json?lat=${e}&lng=${t}&date=${l}&formatted=0`,_=await fetch(s),d=await _.json(),$={dawn:new Date(d.results.civil_twilight_begin),dusk:new Date(d.results.civil_twilight_end),dateStr:l};return setCachedTwilight(o,$),$}function formatTime(e,t="America/Chicago"){return e.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0,timeZone:t})}async function getParkStatus({lat:e,lng:t,timeZone:i="America/Chicago",closureSelector:r="#alert-notice"}={}){let n=getManualClosure(r);if(n)return n;let l=new Date,o=await getCivilTwilight(e,t,{timeZone:i,dayOffset:0}),a=formatTime(o.dawn,i),s=formatTime(o.dusk,i);if(l<o.dawn)return{status:"closed",reason:"before_dawn",opensAt:a,closesAt:s,message:`Park is currently closed. Opens at ${a}.`};if(l>=o.dusk){let _=await getCivilTwilight(e,t,{timeZone:i,dayOffset:1}),d=formatTime(_.dawn,i);return{status:"closed",reason:"after_dusk",opensAt:a,closesAt:s,message:`Park is now closed. Opens tomorrow at ${d}.`}}let $=o.dusk-l,c=Math.ceil($/6e4);return c<=60?{status:"open",reason:"closing_soon",opensAt:a,closesAt:s,minutesUntilClose:c,message:`Park is open. Closing soon in ${c} minute${1===c?"":"s"}.`}:{status:"open",reason:"open",opensAt:a,closesAt:s,message:`Park is open. Closes at ${s} today.`}}async function renderParkStatus(){let e=document.querySelector("#park-status");if(!e)return;let t="America/Chicago";cleanOldTwilightCache(36.762277,-86.200504,t);let i=await getParkStatus({lat:36.762277,lng:-86.200504,timeZone:t,closureSelector:"#alert-notice"}),r=document.querySelector("#map-welcome-tag");"closed"===i.status&&r&&(r.style.display="none"),e.innerHTML=`Gates open from 7:30 AM to dusk (${i.closesAt}).`,e.classList.add("active")}document.addEventListener("DOMContentLoaded",function(){let e=document.querySelector(".section-alert"),t=document.querySelector(".pages-banner");if(e&&t){let i=parseFloat(window.getComputedStyle(t).paddingTop),r=e.offsetHeight;t.style.paddingTop=i+r+"px"}let n=document.querySelector(".navbar"),l=document.querySelector(".menu-button"),o=window.pageYOffset||document.documentElement.scrollTop,a=Date.now(),s,_,d;function $(){d=Math.abs((s=window.pageYOffset||document.documentElement.scrollTop)-o)/((_=Date.now())-a),s<300||l&&l.classList.contains("w--open")?n.classList.remove("hide"):s>o?n.classList.add("hide"):d>1.3&&n.classList.remove("hide"),o=s,a=_}n&&($(),window.addEventListener("scroll",$)),renderParkStatus(),checkWeather()});
296</script>
vendor: 1 bytes, line 296
296
297<script>
298document.addEventListener("DOMContentLoaded", function () {
299  const lazyElements = document.querySelectorAll("[data-src]");
300
301  if (!lazyElements.length) return;
302
303  const observer = new IntersectionObserver((entries, obs) => {
304    entries.forEach(entry => {
305      if (!entry.isIntersecting) return;
306
307      const el = entry.target;
308
309      // Set src
310      if (el.dataset.src) {
311        el.src = el.dataset.src;
312      }
313
314      // Optional: handle srcset
315      if (el.dataset.srcset) {
316        el.srcset = el.dataset.srcset;
317      }
318
319      // Optional: background images
320      if (el.dataset.bg) {
321        el.style.backgroundImage = `url(${el.dataset.bg})`;
322      }
323
324      el.removeAttribute("data-src");
325      obs.unobserve(el);
326    });
327  }, {
328    root: null,
329    rootMargin: "300px 0px", // start loading before visible
330    threshold: 0
331  });
332
333  lazyElements.forEach(el => observer.observe(el));
334});
335</script>
335<script>
336document.addEventListener("DOMContentLoaded",function(){
337
338    const { DateTime } = luxon;
339
340    function isWebView() {
341        let ua = navigator.userAgent || navigator.vendor || window.opera;
342
343        // Detect popular WebView browsers
344        return /FBAN|FBAV|Instagram|Snapchat|TikTok|Twitter|LinkedIn|Discord|Reddit|WeChat|Line|Pinterest/i.test(ua);
345    }
346
347    function isChromeOnIOS() {
348        let ua = navigator.userAgent;
349        return /CriOS/i.test(ua) && /iPhone|iPad|iPod/i.test(ua);
350    }
351
352    function formatICSMulti(description, maxLength = 75) {
353        // Escape required special characters per RFC 5545
354        let escapedText = description
355            .replace(/\\/g, '\\\\')
356            .replace(/;/g, '\\;')
357            .replace(/,/g, '\\,')
358            .replace(/\n/g, '\\n');
359
360        // Apply line folding (75 characters max per line)
361        let result = "";
362        for (let i = 0; i < escapedText.length; i += maxLength) {
363            result += (i > 0 ? " " : "") + escapedText.substring(i, i + maxLength) + "\r\n";
364        }
365        
366        return result.trim(); // Remove last newline
367    }
368
369    function addToCalendar(eventData, buttonType) {
370        if (isWebView()) {
371            gtag("event","calendar_disabled",
372              {
373                event_category: "calendar_disabled",
374                event_label: 'WebView',
375                value: navigator.userAgent
376              }
377            );
378      
379            return alert("⚠️ To add calendar event, tap three dots in corner for external browser.");
380        }
381
382
383        let { title, start, end, location, description } = eventData;
384
385        // Convert dates to iCalendar format (YYYYMMDDTHHMMSSZ)
386        const startUTC = new Date(start).toISOString().replace(/[-:]/g, "").split(".")[0] + "Z";
387        const endUTC = new Date(end).toISOString().replace(/[-:]/g, "").split(".")[0] + "Z";
388        const icsDescription = formatICSMulti(description);
389        const icsLocation = formatICSMulti(location);
390        const icsTitle = formatICSMulti(title);
391        const version = buttonType.toLowerCase();
392
393        const outlookStart = DateTime.fromISO(start).toFormat("yyyy-MM-dd'T'HH:mm:ss");
394        const outlookEnd = DateTime.fromISO(end).toFormat("yyyy-MM-dd'T'HH:mm:ss");
395
396
397        // Google Calendar Link (Best for online use)
398        let googleCalURL = `https://www.google.com/calendar/render?action=TEMPLATE&text=${encodeURIComponent(title)}&dates=${startUTC}/${endUTC}&details=${encodeURIComponent(description)}&location=${encodeURIComponent(location)}`;
399
400        // Outlook (Live & Office365) Link
401        let outlookCalURL = `https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&subject=${encodeURIComponent(title)}&startdt=${outlookStart}&enddt=${outlookEnd}&location=${encodeURIComponent(location)}&body=${encodeURIComponent(description)}`;
402
403        // Generate .ICS content
404        let icsData = `BEGIN:VCALENDAR\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nSUMMARY:${icsTitle}\r\nDTSTART:${startUTC}\r\nDTEND:${endUTC}\r\nLOCATION:${icsLocation}\r\nDESCRIPTION:${icsDescription}\r\nEND:VEVENT\r\nEND:VCALENDAR`;
405
406        // Detect Browser & Platform
407        //let userAgent = navigator.userAgent.toLowerCase();
408
409        if (version == 'google') {
410            // Open Google Calendar (Best for Chrome & Android)
411            window.open(googleCalURL, "_blank", "noopener,noreferrer");
412        } else if (version == 'outlook') {
413            // Open Outlook (Best for Windows users)
414            window.open(outlookCalURL, "_blank", "noopener,noreferrer");
415        } else if (version == 'apple') {
416            // iPhone & Safari: Use `data:text/calendar` (iOS workaround)
417            let icsURL = "data:text/calendar;charset=utf8," + encodeURIComponent(icsData);
418            let link = document.createElement("a");
419            link.href = icsURL;
420            link.download = "event.ics";
421            document.body.appendChild(link);
422            link.click();
423            document.body.removeChild(link);
424        } else {
425            // Default (Chrome, Firefox, MacOS, Edge): Download .ICS file
426            let blob = new Blob([icsData], { type: "text/calendar" });
427            let icsFileURL = URL.createObjectURL(blob);
428            let link = document.createElement("a");
429            link.href = icsFileURL;
430            link.download = "event.ics";
431            document.body.appendChild(link);
432            link.click();
433            document.body.removeChild(link);
434        }
435    }
436
437    function convertTo24HourISO(dateString, defaultEnd = false) {
438        // Extract date and time components
439        let [datePart, timePart, period] = dateString.split(' ');
440        let [year, month, day] = datePart.split("-");
441        let [hours, minutes] = timePart.split(':').map(Number);
442
443        if (defaultEnd) {
444            //hours = (hours == 11 && period.toLowerCase() === "pm") ? hours : hours+1;
445            
446            if (hours == 11 && period.toLowerCase() === "pm") {
447                minutes = 59;
448            } else {
449                hours = hours + 1;
450
451                if (hours === 12)  period = 'pm';
452            }
453        }
454
455        // Convert 12-hour format to 24-hour format
456        if (period.toLowerCase() === "pm" && hours !== 12) hours += 12;
457        if (period.toLowerCase() === "am" && hours === 12) hours = 0;
458
459        // Format output manually in "YYYY-MM-DDTHH:MM:SS"
460        let formattedDate = `${year}-${month}-${day}T${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:00`;
461
462        return formattedDate;
463    }
464
465    function getEndDate(endDate, luxonStart) {
466        if (endDate) {
467            const luxonEnd = DateTime.fromFormat(endDate, "yyyy-MM-dd h:mm a", { zone: "America/Chicago" });
468
469            if (luxonEnd > luxonStart) {
470                return luxonEnd.toUTC().toISO();
471            }
472        }
473
474        return luxonStart.plus({ hours: 1 }).toUTC().toISO();
475    }
476
477    function connectActionButtons() {
478
479        const calButton = document.querySelector('.ical-button');
480        const startDate = calButton.getAttribute('data-start');
481        const endDate = calButton.getAttribute('data-end');
482        const parkLocal = document.querySelector('#location').textContent;
483        const location = `Dugas Park ${parkLocal}, 336 North Bedelia Street, Scottsville, Ky 42164`;
484        const luxonStart = DateTime.fromFormat(startDate, 'yyyy-MM-dd h:mm a', { zone: "America/Chicago" });
485
486        // Example Event Data
487        const eventDetails = {
488            title: calButton.getAttribute('data-title'),
489            start: luxonStart.toUTC().toISO(),
490            end: getEndDate(endDate, luxonStart),
491            location: location,
492            description: calButton.getAttribute('data-description')
493        };
494
495        // Attach to Button Click
496        const iCalButtons = document.querySelectorAll('.ical-button .ical-option');
497
498        iCalButtons.forEach(btn => {
499            btn.addEventListener('click', function(e) {
500                addToCalendar(eventDetails, e.currentTarget.textContent);
501
502                gtag("event","calendar_add_click",
503                    {
504                      event_category: "calendar_add",
505                      event_label: e.currentTarget.textContent,
506                      value: eventDetails.title
507                    }
508                  );
509            });
510        });
511    }
512
513    connectActionButtons();
514    
515    const ticketButtons = document.querySelectorAll('.ticket-button');
516    
517    ticketButtons.forEach((btn) => {
518    	btn.target = "_blank";
519    });
520    
521    const shareButton = document.querySelector('.share-button');
522
523    if (shareButton && navigator.share) {
524      const data = {
525        title: document.title,
526        url: window.location.href
527      }
528
529      shareButton.addEventListener("click", async () => {
530        try {
531          await navigator.share(data);
532
533          gtag("event","share_click",
534            {
535              event_category: "share",
536              event_label: document.title,
537              value: window.location.pathname
538            }
539          );
540        } catch(error) {
541          console.log('Error sharing:', error);
542
543          gtag("event","share_error",
544            {
545              event_category: "share",
546              event_label: window.location.pathname,
547              value: error
548            }
549          );
550        }
551      });
552    } else if (shareButton) {
553      shareButton.style.display = 'none';
554
555      gtag("event","share_inactive",
556        {
557        event_category: "share",
558        event_label: 'browser_user_agent',
559        value: navigator.userAgent
560        }
561      );
562    }
563});
564</script>
564</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.