PageSourceSearch

https://armstrongcreek.org/news-and-notices/

html armstrongcreek.org collected 2026-10-05 18:06:54 UTC 44,854 bytes, 975 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <title>News-and-notices | Town of Armstrong Creek</title>
5    <meta name="description" content="">
6    <meta name="keywords" content="">
7    <meta name="author" content="Town Web | SK">
8    <meta charset="UTF-8">
9    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10    <link rel="icon" type="image/x-icon" href="https://storage.googleapis.com/juniper-media-library/509/2026/04/faviocn-ac.png">
11    <meta property="og:title" content="News-and-notices | Town of Armstrong Creek">
12    <meta property="og:description" content="">
13    <meta property="og:site_name" content="Town of Armstrong Creek">
14    <meta property="og:type" content="website">
15    <link rel="canonical" href="https://armstrongcreek.org/news-and-notices/">
16    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" />
17    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css" integrity="sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf/nwasF0nqhPay5w/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==" crossorigin="anonymous" referrerpolicy="no-referrer" />
18    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css" integrity="sha512-tS3S5qG0BlhnQROyJXvNjeEM4UpMXHrQfTGmbQ1gKmelCxlSEBUaxhRBj/EFTzpbP4RVSrpEikbmdJobCvhE3g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
19    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.css" integrity="sha512-Woz+DqWYJ51bpVk5Fv0yES/edIMXjj3Ynda+KWTIkGoynAMHrqTcDUQltbipuiaD5ymEo9520lyoVOo9jCQOCA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
20    
20<script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
20
21    
21<script src="https://darkskyapp.github.io/skycons/skycons.js"></script>
21
22    
22<script src="/settings.js?v=f57aa3e4"></script>
22
23    <link rel="stylesheet" href="/setting.css" />
24    <style>
25@import url('https://fonts.googleapis.com/css?family=Roboto:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
26@import url('https://fonts.googleapis.com/css?family=Libre+Baskerville:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
27:root{--favicon-image:https://storage.googleapis.com/juniper-media-library/509/2026/04/faviocn-ac.png;--default-featured-image:https://storage.googleapis.com/juniper-media-library/509/2026/04/News-post-image.png;--primary-color:#b81922;--secondary-color:#0c8144;--tertiary-color:#fafafa;--primary-font:"Roboto";--hedings-font:"Libre Baskerville";--default-size:16px;--h1-size:36px;--h2-size:28px;--h3-size:24px;--h4-size:20px;--h5-size:16px;--h6-size:12px;--a-size:16px;--a-color:;}body .sk-page-content{font-family:var(--primary-font);font-size:var(--default-size);}body .sk-page-content h1,body .sk-page-content h2,body .sk-page-content h3,body .sk-page-content h4,body .sk-page-content h5,body .sk-page-content h6{font-family:var(--hedings-font);}body .sk-page-content h1{font-size:var(--h1-size);}body .sk-page-content h2{font-size:var(--h2-size);}body .sk-page-content h3{font-size:var(--h3-size);}body .sk-page-content h4{font-size:var(--h4-size);}body .sk-page-content h5{font-size:var(--h5-size);}body .sk-page-content h6{font-size:var(--h6-size);}body .sk-page-content a{font-size:var(--a-size);}body .sk-page-content a{color:var(--a-color);}
28</style>
29<link rel="stylesheet" href="/theme.css?v=09973c8b" />
30    <link rel="stylesheet" href="/style.css" />
31    
31<script>window.HeyGovApi = "https:\/\/api.heygov.com"</script>
31<script src="https://edge.heygov.com/heygov.js" data-heygov-jurisdiction="armstrongcreek.org"  data-heygov-button-text="Report an issue" data-heygov-button-show="false" data-heygov-button-style="bottom-right" ></script>
31<style>.heygov-widget-button{left:auto;right:15px;top:auto;bottom:15px}</style><style>.heygov-widget-button{display:none}</style><style>.userway_p3{left:auto!important;right:15px!important;top:auto!important;bottom:15px!important}</style><style>.userway_p3 .userway_buttons_wrapper{left:auto!important;right:15px!important;top:auto!important;bottom:15px!important;transform: none!important;}</style>
32     <!-- Google tag (gtag.js) -->
vendor: 96 bytes, lines 32-33
32
33                                <script async src='https://www.googletagmanager.com/gtag/js?id=
33G-6BPCKRV643
vendor: 44 bytes, lines 33-34
33'></script>
34                                
34<script>
35                                    
vendor: 235 bytes, lines 35-38
35window.dataLayer = window.dataLayer || [];
36                                    function gtag(){dataLayer.push(arguments);}
37                                    gtag('js', new Date());
38                                    gtag('config', '
38G-6BPCKRV643
vendor: 36 bytes, lines 38-39
38');
39                                
39</script>
39
40    
41    
41<script>
42        (function(d) {
43            var s = d.createElement("script");
44            /* uncomment the following line to override default position*/
45            s.setAttribute("data-position", 3);
46            /* uncomment the following line to override default size (values: small, large)*/
47            /* s.setAttribute("data-size", "large");*/
48            /* uncomment the following line to override default language (e.g., fr, de, es, he, nl, etc.)*/
49            /* s.setAttribute("data-language", "null");*/
50            /* uncomment the following line to override color set via widget (e.g., #053f67)*/
51            /*s.setAttribute("data-color", "#ccc");*/
52            /* uncomment the following line to override type set via widget (1=person, 2=chair, 3=eye, 4=text)*/
53            /* s.setAttribute("data-type", "1");*/
54            /* s.setAttribute("data-statement_text:", "Our Accessibility Statement");*/
55            /* s.setAttribute("data-statement_url", "http://www.example.com/accessibility";*/
56            /* uncomment the following line to override support on mobile devices*/
57            /* s.setAttribute("data-mobile", true);*/
58            /* uncomment the following line to set custom trigger action for accessibility menu*/
59            /* s.setAttribute("data-trigger", "triggerId")*/
60            s.setAttribute("data-account", "UILnNGMstU");
61            s.setAttribute("src", "https://cdn.userway.org/widget.js");
62            (d.body || d.head).appendChild(s);
63        })(document)
64    </script>
64
65    
65<script>
66        /* Third-party accessibility/gallery widget a11y patches. These run only when
67           the widget is present and only ADD attributes (labels / aria-hidden on
68           decorative icons / landmark wrappers) -- we never hide or remove a working
69           widget, so sites that use UserWay/accessiBe/Lightbox are unaffected. */
70        (function () {
71            var UW_SELECTOR = '[class*="userway"],[class*="uwaw"],[id*="userway"]';
72            function accessibleName(el) {
73                return el.getAttribute('aria-label') ||
74                    el.getAttribute('aria-labelledby') ||
75                    el.getAttribute('title') ||
76                    (el.textContent && el.textContent.trim());
77            }
78            function labelUserwayTriggers() {
79                var buttons = document.querySelectorAll('[role="button"]');
80                for (var i = 0; i < buttons.length; i++) {
81                    var el = buttons[i];
82                    if (!el.closest(UW_SELECTOR)) continue;
83                    if (!accessibleName(el)) el.setAttribute('aria-label', 'Accessibility menu');
84                }
85                /* The launcher's inner SVG icons are decorative once the button is
86                   named; hide them so they don't trip svg-has-no-accessible-name. */
87                var svgs = document.querySelectorAll(UW_SELECTOR + ' svg');
88                for (var j = 0; j < svgs.length; j++) {
89                    var svg = svgs[j];
90                    if (accessibleName(svg) || svg.querySelector('title')) continue;
91                    svg.setAttribute('aria-hidden', 'true');
92                    svg.setAttribute('focusable', 'false');
93                }
94                /* UserWay marks its launcher wrapper aria-hidden="true" yet leaves the
95                   launcher button tabbable (aria_hidden_nontabbable). The button is a
96                   real control, so un-hide the wrapper rather than remove keyboard
97                   access. Only touch wrappers that actually hold a focusable element. */
98                var hiddenWraps = document.querySelectorAll(UW_SELECTOR + '[aria-hidden="true"]');
99                for (var w = 0; w < hiddenWraps.length; w++) {
100                    if (hiddenWraps[w].querySelector('a[href],button,input,select,textarea,[tabindex],[role="button"]')) {
101                        hiddenWraps[w].removeAttribute('aria-hidden');
102                    }
103                }
104            }
105            /* accessiBe (paid ADA add-on some clients load) renders its launcher inside
106               open shadow roots on <access-widget-ui> hosts, with icon SVGs that have no
107               accessible name and occasionally an unnamed button. We keep the widget
108               working and just name/hide those so they stop failing the scanner. */
109            function patchAccessibe() {
110                /* accessiBe also drops a light-DOM trigger <div role="button"> with no
111                   text/label ("button role has no associated label"); name it. */
112                var triggers = document.querySelectorAll('.acsb-trigger,[class*="acsb"][role="button"]');
113                for (var t = 0; t < triggers.length; t++) {
114                    if (!accessibleName(triggers[t])) triggers[t].setAttribute('aria-label', 'Accessibility options');
115                }
116                var hosts = document.querySelectorAll('access-widget-ui');
117                for (var i = 0; i < hosts.length; i++) {
118                    var root = hosts[i].shadowRoot;
119                    if (!root) continue;
120                    var svgs = root.querySelectorAll('svg');
121                    for (var s = 0; s < svgs.length; s++) {
122                        if (accessibleName(svgs[s]) || svgs[s].querySelector('title')) continue;
123                        svgs[s].setAttribute('aria-hidden', 'true');
124                        svgs[s].setAttribute('focusable', 'false');
125                    }
126                    var btns = root.querySelectorAll('button,[role="button"]');
127                    for (var b = 0; b < btns.length; b++) {
128                        if (!accessibleName(btns[b])) btns[b].setAttribute('aria-label', 'Accessibility options');
129                    }
130                    /* The host sits directly under <body>, so its content is "not within
131                       a landmark". Make each visible, non-empty host a regi
131on landmark,
132                       labelled from its button when present else an index (kept unique
133                       to avoid the duplicate-landmark-label rule). */
134                    var host = hosts[i];
135                    if (!host.getAttribute('role') && root.childElementCount > 0 && getComputedStyle(host).display !== 'none') {
136                        var namer = root.querySelector('button,[role="button"]');
137                        host.setAttribute('role', 'region');
138                        host.setAttribute('aria-label', ((namer && accessibleName(namer)) || ('Accessibility widget ' + (i + 1))).slice(0, 60));
139                    }
140                }
141                /* accessiBe's screen-reader-only <a>/<span> helpers are also loose under
142                   <body>; gather them under one region landmark. */
143                var loose = document.querySelectorAll('body > a.acsb-sr-only, body > span.acsb-sr-alert, body > .acsb-sr-only');
144                if (loose.length) {
145                    var region = document.getElementById('acsb-sr-landmark');
146                    if (!region) {
147                        region = document.createElement('div');
148                        region.id = 'acsb-sr-landmark';
149                        region.setAttribute('role', 'region');
150                        region.setAttribute('aria-label', 'Accessibility screen reader helpers');
151                        loose[0].parentNode.insertBefore(region, loose[0]);
152                    }
153                    for (var l = 0; l < loose.length; l++) {
154                        if (loose[l].parentNode !== region) region.appendChild(loose[l]);
155                    }
156                }
157            }
158            /* Lightbox2 (image gallery lib) injects close/cancel controls as
159               <a role="button"> with no text -> "button role has no associated label". */
160            function patchLightbox() {
161                var map = [
162                    ['.lb-close', 'Close image'],
163                    ['.lb-cancel', 'Close image'],
164                    ['.lb-prev', 'Previous image'],
165                    ['.lb-next', 'Next image']
166                ];
167                for (var i = 0; i < map.length; i++) {
168                    var els = document.querySelectorAll(map[i][0]);
169                    for (var j = 0; j < els.length; j++) {
170                        if (!accessibleName(els[j])) els[j].setAttribute('aria-label', map[i][1]);
171                    }
172                }
173            }
174            function processOverlays() {
175                labelUserwayTriggers();
176                patchAccessibe();
177                patchLightbox();
178            }
179            function init() {
180                processOverlays();
181                var obs = new MutationObserver(processOverlays);
182                obs.observe(document.body, { childList: true, subtree: true });
183                /* Overlays load async and accessiBe fills an encapsulated shadow root
184                   the observer can't see, so poll for ~30s as well. */
185                var ticks = 0;
186                var poll = setInterval(function () {
187                    processOverlays();
188                    if (++ticks >= 15) { clearInterval(poll); obs.disconnect(); }
189                }, 2000);
190            }
191            if (document.readyState === 'loading') {
192                document.addEventListener('DOMContentLoaded', init);
193            } else {
194                init();
195            }
196        })();
197    </script>
197
198    <noscript>
199        Please ensure Javascript is enabled for purposes of
200        <a href="https://userway.org">website accessibility</a>
201    </noscript>
202<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
202
203</head>
204
205<body id="juniper">
206    <style>
207    section#sectionHero #heroSlider h1 {
208	font-size: 3.5rem;
209}
210
211section#tw-faq h3 {
212	font-size: 28px;
213}
214
215#subs_button {
216  	width: 100%;
217    border-radius: 4px;
218}
219
220#heroSlider > div.carousel-inner > div > div.slider-image-hero.\30  {
221	background-attachment: fixed!important;
222background-position: center!important;
223}
224
225#tw-subscribe {
226	margin-bottom: 0rem!important;
227}
228
229    @media (max-width: 767.99px) {
230        /* make menu font smaller */
231div#menuNewsDefault ul li a, div#menuHeroMobile ul li a {
232	font-size: 20px;
233	border-radius: 4px;
234}
235
236/* hide icons in Hero menu */
237div#menuHeroMobile ul li i {
238	display: none;
239}
240
241/* remove extra spacing between Hero menu and News */
242div#menuHeroMobile {
243  margin-bottom: -5rem!important;
244}
245
246section#sectionHero #heroSlider h1 {
247	font-size: 3rem;
248}
249    }
250</style>
251
252<header id="defaultHeader" class="default-header" role="banner">
253    <a href="#main-content" class="skip-to-main">Skip to main content</a>
254    <div id="topHeader" class="top-header">
255        <div class="container">
256            <div class="row mx-0">
257                <div class="col-md-3 d-flex align-items-center justify-content-center justify-content-md-start">
258                    <a href="/" class="navbar-brand custom-logo-link" rel="home" aria-current="page" aria-label="Home">
259                        <img src="https://storage.googleapis.com/juniper-media-library/509/2026/04/[email protected]" width="150px" height="" class="img-responsive" alt="Site Logo" decoding="async">
260                    </a>
261                </div>
262                <div class="col-md-9 justify-content-end d-flex align-items-center">
263                    <!-- Weather Widget -->
264                                        <div class="weather-widget d-flex me-2" role="region" aria-label="Current weather information">
265                                                <canvas class="icon-weather" data-icon="" role="img" aria-label="Weather icon"></canvas>
266                                                <span class="weather-temperature" aria-live="polite">NO DATA</span>
267                    </div>
268                                        <!-- Social Icons -->
269                    <div id="headerSocialMenuWrapper">
270    <ul id="headerSocialMenu" class="nav flex-nowrap">
271        
272    </ul>
273</div>
274                    <!-- Search and Translate -->
275                    <div class="search-container ">
276                        <form action="/search" method="get" role="search" aria-label="Site search" id="header-search-form">
277                            <input class="search expandright" id="searchright" type="search" name="q" placeholder="Search" aria-label="Search the website" title="Search the website">
278                            <button type="button" class="search-button searchbutton" aria-label="Toggle search" aria-expanded="false">
279                                <i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>
280                            </button>
281                        </form>
282                    </div>
283                    <div class="gtranslate_wrapper" role="region" aria-label="Language translator"></div>
284                </div>
285            </div>
286        </div>
287    </div>
288    <div id="bottomHeader" class="bottom-header w-100">
289        <div id="fixed-header-logo" class="d-none d-sm-none d-md-flex d-lg-flex d-xl-flex position-absolute align-items-center pb-4">
290            <a class="navbar-brand" rel="home" href="/" aria-label="Home">
291                <img src="https://storage.googleapis.com/juniper-media-library/509/2026/04/[email protected]" class="" alt="Site Logo" decoding="async">
292            </a>
293        </div>
294        <nav id="menuPrimary" class="navbar navbar-dark navbar-expand-lg">
295  <div class="container">
296    <button style="z-index: 9999;" class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#menuPrimaryContent" aria-controls="menuPrimaryContent" aria-expanded="false" aria-label="Toggle navigation">
297      <div class="tw-hamburger-animated-icon"><span></span><span></span><span></span></div>
298    </button>
299    <div class="collapse navbar-collapse" id="menuPrimaryContent">
300      <ul class="navbar-nav mb-2 mb-lg-0 menu-primary">
301        <li class="nav-item menu-level-one " role="listitem">  <a class="nav-link first-level-link "  aria-current="page"   rel="none" href="https://armstrongcreek.org"><span> <span class="visually-hidden">Navigate to </span>Home</span>  </a></li><li class="nav-item menu-level-one dropdown" role="listitem">  <a class="nav-link first-level-link dropdown-toggle "   rel="none" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span><span class="visually-hidden">Navigate to </span>Government</span></a>  <ul class="dropdown-menu"> <li><a class="dropdown-item"  rel="none" href="/agendas-minutes"><span>Agendas & Minutes</span></a></li><li><a class="dropdown-item"  rel="none" href="/town-board"><span>Town Board</span></a></li><li><a class="dropdown-item"  rel="none" href="/calendar"><span>Calendar of Events</span></a></li><li><a class="dropdown-item"  rel="none" href="/ordinances-resolutions"><span>Ordinances & Resolutions</span></a></li><li><a class="dropdown-item"  rel="none" href="/election-information"><span>Election Information</span></a></li><li><a class="dropdown-item"  rel="none" href="/news-and-notices"><span>News & Notices</span></a></li>  </ul></li><li class="nav-item menu-level-one " role="listitem">  <a class="nav-link first-level-link "  aria-current="page"   rel="none" href="/town-contacts"><span> <span class="visually-hidden">Navigate to </span>Town Contacts</span>  </a></li><li class="nav-item menu-level-one dropdown" role="listitem">  <a class="nav-link first-level-link dropdown-toggle "   rel="none" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span><span class="visually-hidden">Navigate to </span>Community</span></a>  <ul class="dropdown-menu"> <li><a class="dropdown-item"  rel="none" href="/businesses"><span>Business Directory</span></a></li><li><a class="dropdown-item"  rel="none" href="/community-center"><span>Community Center</span></a></li><li><a class="dropdown-item"  rel="none" href="/community-services"><span>Community Services</span></a></li><li><a class="dropdown-item"  rel="none" href="/cemetery"><span>Cemetery</span></a></li><li><a class="dropdown-item"  rel="none" href="/transfer-station"><span>Transfer Station</span></a></li><li><a class="dropdown-item"  rel="none" href="/meal-site"><span>Meal Site</span></a></li><li><a class="dropdown-item"  rel="none" href="/snow-removal"><span>Snow Removal</span></a></li><li><a class="dropdown-item"  rel="none" href="/subscribe-to-updates"><span>Subscribe to Updates</span></a></li>  </ul></li><li class="nav-item menu-level-one " role="listitem">  <a class="nav-link first-level-link "  aria-current="page"   rel="none" href="/contact-us"><span> <span class="visually-hidden">Navigate to </span>Contact Us</span>  </a></li>
302      </ul>
303    </div>
304  </div>
305</nav>
306        <div class="line"></div>
307    </div>
308</header>
309
310
311
312    <style>
313    /* Filters Section Styling */
314    .filters-section {
315        display: flex;
316        align-items: flex-start;
317        justify-content: space-between;
318        flex-wrap: wrap;
319        gap: 20px;
320        margin-bottom: 15px;
321        align-items: end;
322    }
323
324    .category-filters-wrapper {
325        flex: 1;
326        min-width: 300px;
327    }
328
329    .category-filters-title {
330        font-weight: 600;
331        font-size: 1.1rem;
332        margin-bottom: 10px;
333        color: #495057;
334    }
335
336    .category-filter {
337        display: inline-block;
338        padding: 6px 16px;
339        margin: 4px 8px 4px 0;
340        background-color: #ffffff;
341        border: 2px solid #dee2e6;
342        border-radius: 10px;
343        text-decoration: none;
344        color: #495057;
345        font-size: 0.9rem;
346        transition: all 0.3s ease;
347        cursor: pointer;
348    }
349
350    .category-filter:hover {
351        background-color: #e9ecef;
352        border-color: #adb5bd;
353        text-decoration: none;
354        color: #495057;
355    }
356
357    .category-filter.active {
358        background-color: #0056b3;
359        border-color: #0056b3;
360        color: #ffffff;
361    }
362
363    .category-filters-wrapper-mobile {
364        margin-bottom: 20px;
365    }
366
367    .category-filters-wrapper-mobile label,
368    .archive-filters-wrapper label {
369        font-weight: 600;
370        margin-bottom: 8px;
371        margin-right: 10px;
372        color: #495057;
373    }
374
375    .categories-select-list,
376    .archive-filters-wrapper select,
377    .archive-filters-wrapper input[type="date"] {
378        margin-right: 15px;
379        margin-bottom: 10px;
380        padding: 8px 12px;
381        border: 1px solid #ced4da;
382        border-radius: 4px;
383        font-size: 0.9rem;
384    }
385
386    .archive-filters-wrapper {
387        display: flex;
388        align-items: center;
389        gap: 10px;
390        flex-shrink: 0;
391    }
392
393    .date-range-filters {
394        display: none;
395    }
396
397    /* Card Styling for Even Height */
398    .archive-item {
399        height: 100%;
400        display: flex;
401        flex-direction: column;
402        border: 1px solid #dee2e6;
403        border-radius: 0px;
404        overflow: hidden;
405    }
406
407
408    .archive-item-image {
409        width: 100%;
410        height: 200px;
411        object-fit: cover;
412        border-bottom: 1px solid #dee2e6;
413    }
414
415    .archive-item-body {
416        flex: 1;
417        display: flex;
418        flex-direction: column;
419        padding: 20px;
420    }
421
422    .archive-item-title {
423        font-size: 1.1rem;
424        font-weight: 600;
425        margin-bottom: 10px;
426        line-height: 1.3;
427    }
428
429    .archive-item-title a,
430    a .archive-item-title {
431        text-decoration: none;
432        color: #212529;
433    }
434
435    .archive-item-title a:hover,
436    a:hover .archive-item-title {
437        color: #0056b3;
438        text-decoration: none;
439    }
440
441    .archive-item-snippet {
442        flex: 1;
443        font-size: 0.9rem;
444        color: #6c757d;
445        line-height: 1.5;
446        margin-bottom: 15px;
447    }
448
449    .archive-item-button {
450        margin-top: auto;
451        padding: 8px 0;
452        font-size: 0.9rem;
453        font-weight: 500;
454        color: #0056b3;
455    }
456
457    .archive-item-button:hover,
458    .archive-item-button:focus {
459        color: #004085;
460    }
461
462    /* No Image Placeholder */
463    .no-image-placeholder {
464        width: 100%;
465        height: 200px;
466        background-color: #e9ecef;
467        display: flex;
468        align-items: center;
469        justify-content: center;
470        color: #495057;
471        font-size: 0.9rem;
472        font-weight: 500;
473        border-bottom: 1px solid #dee2e6;
474        border-radius: 10px;
475    }
476
477    /* Pagination Styling */
478    .view-more-button {
479        background-color: #0056b3;
480        color: white;
481        border: none;
482        padding: 12px 24px;
483        border-radius: 6px;
484        font-size: 1rem;
485        font-weight: 500;
486        transition: background-color 0.3s ease;
487    }
488
489    .view-more-button:hover {
490        background-color: #004085;
491    }
492
493    .view-more-button i {
494        margin-right: 8px;
495    }
496
497    /* Responsive adjustments */
498    @media (max-width: 768px) {
499        .filters-section {
500            flex-direction: column;
501            gap: 0px;
502        }
503
504        .category-filters-wrapper {
505            display: none;
506            min-width: auto;
507        }
508
509        .category-filters-wrapper-mobile {
510            width: 100%;
511            display: block;
512            margin-bottom: 0px;
513        }
514
515        .category-filters-wrapper-mobile select,
516        .archive-filters-wrapper select {
517            width: 100%;
518            margin-right: 0;
519        }
520
521        .archive-filters-wrapper {
522            align-self: flex-start;
523            width: 100%;
524            flex-direction: column;
525            align-items: flex-start;
526        }
527
528        .archive-filters-wrapper label {
529            margin-bottom: 0%;
530            margin-right: 0;
531        }
532    }
533
534    @media (min-width: 769px) {
535        .category-filters-wrapper-mobile {
536            display: none;
537        }
538    }
539</style>
540
541<main id="main-content" class="juniper-news-archive news-archive option-1 mb-5">
542    <div class="container">
543        <div class="row">
544            <!-- Page heading -->
545            <div class="col-12">
546                <h1 class="page-heading">News & Notices</h1>
547            </div>
548            <!-- Filters -->
549            <div class="col-12 filters-section">
550                <div class="category-filters-wrapper">
551                    <div class="category-filters-title">Categories</div>
552                    <a class="category-filter active" data-category="all">View All</a>
553                    <!-- Dynamic News Categories -->
554                </div>
555                <div class="category-filters-wrapper-mobile">
556                    <label for="categoriesSelectList">Category</label>
557                    <select id="categoriesSelectList" class="categories-select-list">
558                        <option value="all">View All</option>
559                    </select>
560                </div>
561                <div class="archive-filters-wrapper">
562                    <div class="date-range-filters">
563                        <label for="dateFrom">Date Range</label>
564                        <input type="date" id="dateFrom" name="date-start" aria-label="Input start date in format month-day-year">
565                        <input type="date" id="dateTo" name="date-end" aria-label="Input end date in format month-day-year">
566                    </div>
567                    <label for="archiveYears">Archive</label>
568                    <select id="archiveYears" name="archive_years">
569                        <option value="">All</option><option value="2026">2026</option><option value="2025">2025</option><option value="2024">2024</option><option value="2023">2023</option>
570                    </select>
571                </div>
572            </div>
573            <!-- Content -->
574            <div class="col-12 py-3 ">
575                <div id="news-container" class="row">
576                    
577            </div>
578            <div id="loader" style="display:none; text-align:center; margin: 2rem 0;">
579                <div class="spinner-border" role="status"></div>
580            </div>
581        </div>
582        <!-- Pagination -->
583        <div class="col-12 pagination">
584            <button class="view-more-button"><i class="fa fa-refresh"></i><span class="button-text">View More</span></button>
585        </div>
586        <!-- JSON Pagination -->
587        <nav aria-label="Page navigation example">
588            <ul id="pagination" class="pagination"></ul>
589        </nav>
590        <!-- Default Pagination -->
591        <div id="newsPerPagePagination" class="col-12 pagination">
592            
593        </div>
594    </div>
595</div>
596</main>
597<script>
598    let itemsPerPage = parseInt(jNewsPerPage);
599    let currentIndex = 0;
600    let newsData = [];
601    let filteredNews = [];
602    let selectedCategory = 'all';
603
604    function getQueryParam(name) {
605        const urlParams = new URLSearchParams(window.location.search);
606        return urlParams.get(name);
607    }
608
609    function getQueryPage() {
610        const urlParams = new URLSearchParams(window.location.search);
611        const page = parseInt(urlParams.get('page'));
612        return isNaN(page) || page < 1 ? 1 : page;
613    }
614
615    function applyCategoryFilter(category, updateURL = true) {
616        selectedCategory = category;
617        currentIndex = 0;
618        $('#news-container').empty();
619
620        // Sync desktop and mobile category selection
621        $('.category-filter').removeClass('active');
622        $(`.category-filter[data-category="${category}"]`).addClass('active');
623        $('.categories-select-list').val(category);
624
625        if (updateURL) {
626            const params = new URLSearchParams(window.location.search);
627            if (category === 'all') {
628                params.delete('cat');
629            } else {
630                params.set('cat', category);
631            }
632            params.set('page', 1);
633            const newUrl = `${window.location.pathname}?${params.toString()}`;
634            history.pushState(null, '', newUrl);
635        }
636
637        filterAndRenderNews();
638    }
639
640    function renderCategoryFilters(categories) {
641        const categoryFromUrl = getQueryParam('cat');
642
643        const container = $('.category-filters-wrapper');
644        container.find('.category-filter:not([data-category="all"])').remove();
645        categories.forEach(category => {
646            const filter = $(`<a class="category-filter" data-category="${category}">${category}</a>`);
647            container.append(filter);
648        });
649        container.find('.category-filter').removeClass('active');
650        if (categoryFromUrl && categoryFromUrl !== '') {
651            container.find(`.category-filter[data-category="${categoryFromUrl}"]`).addClass('active');
652        } else {
653            container.find('.category-filter[data-category="all"]').addClass('active');
654        }
655
656        const selectListCategories = $('.categories-select-list');
657        categories.forEach(category => {
658            const filter = $(`<option value="${category}">${category}</option>`);
659            selectListCategories.append(filter);
660        });
661        selectListCategories.val(categoryFromUrl || 'all');
662    }
663
664    function getUniqueCategories(data) {
665        const categorySet = new Set();
666        data.forEach(item => {
667            let categories = [];
668            try {
669                categories = JSON.parse(item.categories);
670            } catch {
671                categories = ["News"];
672            }
673            categories.forEach(cat => categorySet.add(cat));
674        });
675        return Array.from(categorySet);
676    }
677
678    function filterAndRenderNews(updateURL = false, customPage = null) {
679        let category = selectedCategory;
680        let fromDate = $('#dateFrom').val();
681        let toDate = $('#dateTo').val();
682        let archiveYear = $('#archiveYears').val();
683
684        const params = new URLSearchParams(window.location.search);
685
686        if (updateURL) {
687            if (category !== 'all') params.set('cat', category);
688            else params.delete('cat');
689            if (fromDate) params.set('from', fromDate);
690            else params.delete('from');
691            if (toDate) params.set('to', toDate);
692            else params.delete('to');
693            if (archiveYear) params.set('year', archiveYear);
694            else params.delete('year');
695            if (customPage) params.set('page', customPage);
696            const newUrl = `${window.location.pathname}?${params.toString()}`;
697            history.pushState(null, '', newUrl);
698        }
699
700        const page = customPage || getQueryPage();
701        currentIndex = (page - 1) * itemsPerPage;
702
703        filteredNews = newsData.filter(item => {
704            let categories = [];
705            try {
706                categories = JSON.parse(item.categories);
707            } catch {
708                categories = ["News"];
709            }
710            const date = new Date(item.published_at);
711            const matchCategory = category === 'all' || categories.includes(category);
712            const matchFrom = !fromDate || new Date(fromDate) <= date;
713            const matchTo = !toDate || new Date(toDate) >= date;
714            const matchYear = !archiveYear || date.getFullYear().toString() === archiveYear;
715            return matchCategory && matchFrom && matchTo && matchYear;
716        });
717
718        const append = false;
719        renderNewsItems(filteredNews, currentIndex, itemsPerPage, append);
720
721        if (jNewsPaginationType === 'pages') {
722            renderPagination(filteredNews.length, itemsPerPage, page);
723        }
724    }
725
726    function renderNewsItems(data, start, count, append = false) {
727        const container = $('#news-container');
728        if (!append) container.empty();
729
730        for (let i = start; i < start + count && i < data.length; i++) {
731            const item = data[i];
732            let categories = [];
733            try {
734                categories = JSON.parse(item.categories);
735            } catch {
736                categories = ["News"];
737            }
738
739            const categoryHtml = categories.map(cat => `<span class="category">${cat}</span>`).join('');
740            const imageHtml = item.image && item.image.trim() !== '' ?
741                `<img alt="${item.title}" src="${item.image}" class="archive-item-image">` :
742                `<div class="no-image-placeholder">No Image</div>`;
743
744            const html = `
745      <div class="col-md-4 mb-3">
746        <div class="card archive-item">
747          ${imageHtml}
748          <div class="card-body archive-item-body">
749            <a href="${item.slug}" class="">
750              <h3 class="card-title archive-item-title">${item.title}</h3>
751            </a>
752            <p class="archive-item-snippet">${item.snippet || ''}</p>
753            <a href="${item.slug}" class="btn btn-link mt-2 archive-item-button">Read more</a>
754          </div>
755        </div>
756      </div>
757    `;
758            container.append(html);
759        }
760
761        currentIndex += count;
762
763        if (jNewsPaginationType === 'infinite') {
764            $('.view-more-button').toggle(currentIndex < data.length);
765        }
766    }
767
768    function renderPagination(totalItems, perPage, currentPage) {
769        const totalPages = Math.ceil(totalItems / perPage);
770        const container = $('#pagination');
771        container.empty();
772
773        if (totalPages <= 1) {
774            container.hide();
775            return;
776        }
777
778        container.show();
779
780        const ul = $('<ul class="pagination"></ul>');
781
782        // Previous button
783        const prevDisabled = currentPage === 1 ? 'disabled' : '';
784        ul.append(`
785    <li class="page-item ${prevDisabled}">
786      <a href="javascript:void(0)" class="page-link" data-page="${currentPage - 1}">«</a>
787    </li>
788  `);
789
790        // Calculate page range to show
791        const pageButtons = [];
792        if (totalPages <= 5) {
793            for (let i = 1; i <= totalPages; i++) {
794                pageButtons.push(i);
795            }
796        } else {
797            if (currentPage <= 3) {
798                pageButtons.push(1, 2, 3, 4, '...', totalPages);
799            } else if (currentPage >= totalPages - 2) {
800                pageButtons.push(1, '...', totalPages - 3, totalPages - 2, totalPages - 1, totalPages);
801            } else {
802                pageButtons.push(1, '...', currentPage - 1, currentPage, currentPage + 1, '...', totalPages);
803            }
804        }
805
806        for (let btn of pageButtons) {
807            if (btn === '...') {
808                ul.append(`<li class="page-item disabled"><span class="page-link">...</span></li>`);
809            } else {
810                const activeClass = btn === currentPage ? 'active' : '';
811                ul.append(`
812        <li class="page-item ${activeClass}">
813          <a href="javascript:void(0)" class="page-link" data-page="${btn}">${btn}</a>
814        </li>
815      `);
816            }
817        }
818
819        // Next button
820        const nextDisabled = currentPage === totalPages ? 'disabled' : '';
821        ul.append(`
822    <li class="page-item ${nextDisabled}">
823      <a href="javascript:void(0)" class="page-link" data-page="${currentPage + 1}">»</a>
824    </li>
825  `);
826
827        container.append(ul);
828    }
829
830
831    function fetchNewsItems() {
832        $('#loader').show();
833
834        fetch(jClientUrl + "/json/search/search.json")
835            .then(response => response.json())
836            .then(data => {
837                newsData = data
838                    .filter(item => item.type === "NewsNotice")
839                    .sort((a, b) => new Date(b.published_at) - new Date(a.published_at));
840                const uniqueCategories = getUniqueCategories(newsData);
841                renderCategoryFilters(uniqueCategories);
842
843                selectedCategory = getQueryParam('cat') || 'all';
844                $('#dateFrom').val(getQueryParam('from') || '');
845                $('#dateTo').val(getQueryParam('to') || '');
846                $('#archiveYears').val(getQueryParam('year') || '');
847
848                filterAndRenderNews(false);
849            })
850            .catch(error => {
851                console.error("Error fetching data:", error);
852            })
853            .finally(() => {
854                $('#loader').hide();
855            });
856    }
857
858    $(document).ready(function() {
859
860        // If JSON is enabled for News Archive Page
861        if (jNewsJSON == '1') {
862            if (jNewsPaginationType === "infinite") {
863                $('#pagination').hide();
864                $('.view-more-button').show();
865            } else {
866                $('#pagination').show();
867                $('.view-more-button').hide();
868            }
869
870
871
872            fetchNewsItems();
873
874            // Handle view more button click
875            $('.view-more-button').on('click', function() {
876                const button = $(this);
877                const icon = button.find('i');
878                const text = button.find('.button-text');
879
880                icon.addClass('fa-spin-custom');
881                text.text('Loading...');
882
883                setTimeout(() => {
884                    renderNewsItems(filteredNews, currentIndex, itemsPerPage, true); // APPEND
885                    icon.removeClass('fa-spin-custom');
886                    text.text('View More');
887                }, 300);
888            });
889
890            // Handle category filter click
891            $(document).on('click', '.category-filter', function() {
892                const category = $(this).data('category');
893                applyCategoryFilter(category, true);
894                filterAndRenderNews(false, 1);
895            });
896
897            // Handle category filter select list
898            $(document).on('change', '.categories-select-list', function() {
899                const category = $(this).val();
900                applyCategoryFilter(category, true);
901                filterAndRenderNews(false, 1);
902            });
903
904            // Handle date range and archive year changes
905            $('#dateFrom, #dateTo, #archiveYears').on('change', function() {
906                filterAndRenderNews(true, 1);
907            });
908
909            // Handle pagination click
910            $(document).on('click', '.page-link', function() {
911                const page = $(this).data('page');
912                filterAndRenderNews(true, page);
913            });
914
915        } else {
916            $('.view-more-button').hide();
917            $('.filters-section').hide();
918        }
919    });
920</script>
920
921
922
923    <footer id="footerDefault" class="footer w-100" role="contentinfo">
924  <div class="footer-top-line"></div>
925  <div class="container py-5">
926    <div class="row">
927      <div class="col-lg-3 col-md-3 col-sm-12 col-xs-12 p-3">
928        <img src="https://storage.googleapis.com/juniper-media-library/509/2026/04/[email protected]" width="90%" height="" alt="Site Logo" />
929        <div>
930          
931        </div>
932      </div>
933      <div class="col-lg-3 col-md-3 col-sm-12 col-xs-12 p-3">
934        <h2 class="footer-default-heading">Town of Armstrong Creek</h2>
935        <div>
936          <p>Mailing<br />PO Box 67, Armstrong Creek, WI 54103</p>
937<p>Address<br />7860 Old 101, Armstrong Creek, WI 5410</p>
938        </div>
939      </div>
940      <div class="col-lg-3 col-md-3 col-sm-12 col-xs-12 p-3">
941        <h2 class="footer-default-heading">Contact Information</h2>
942        <div>
943          <p>Phone: (715) 889-0817</p>
944<p>Email&nbsp;<a href="/cdn-cgi/l/email-protection#187b747d6a7358796a756b6c6a77767f7b6a7d7d7336776a7f"><span class="__cf_email__" data-cfemail="690a050c1b0229081b041a1d1b06070e0a1b0c0c0247061b0e">[email&#160;protected]</span></a></p>
945        </div>
946      </div>
947      <div class="col-lg-3 col-md-3 col-sm-12 col-xs-12 p-3">
948        <h2 class="footer-default-heading"></h2>
949        <div>
950          <p><a href="https://www.facebook.com/armstrongcreekwi" title="Facebook page link" target="_blank" rel="noopener">Give Us a Follow on Facebook!</a></p>
951        </div>
952      </div>
953    </div>
954    <div class="d-flex justify-content-center mt-3 bottom-footer" role="contentinfo" aria-label="Copyright and legal information">
955      © 2026 Designed &amp; Hosted by <a href="https://www.townweb.com/" class="mx-1" target="_blank" rel="noopener noreferrer" aria-label="Town Web (opens in new tab)">Town Web</a> | <a href="/accessibility" class="mx-1" aria-label="View accessibility statement">Accessibility</a> | <a href="/privacy-policy" class="ms-1" aria-label="View privacy policy">Privacy Policy</a>
956    </div>
957  </div>
958</footer>
959<style>
960  
961  @media (max-width: 767.99px) {
962      
963  }
964</style>
vendor: 115 bytes, lines 964-967
964
965
966
967    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
967<script src="/theme.js?v=99c0169a"></script>
967<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
vendor: 1 bytes, line 967
967
968<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js" integrity="sha512-bPs7Ae6pVvhOSiIcyUClR7/q2OAsRiovw4vAkX+zJbw3ShAeeqezq50RIIcIURq7Oa20rW2n2q+fyXBNcU9lrw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 968
968
969<script src="https://cdn.jsdelivr.net/npm/[email protected]/jquery.marquee.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 969
969
970<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/0.9.0/jquery.mask.min.js" integrity="sha512-oJCa6FS2+zO3EitUSj+xeiEN9UTr+AjqlBZO58OPadb2RfqwxHpjTU8ckIC8F4nKvom7iru2s8Jwdo+Z8zm0Vg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 970
970
971<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox.min.js" integrity="sha512-Ixzuzfxv1EqafeQlTCufWfaC6ful6WFqIz4G+dWvK0beHw0NVJwvCKSgafpy5gwNqKmgUfIBraVwkKI+Cz0SEQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 971
971
972<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"c3d48eea442040cfb72109ca74f4dfbc","r":1,"spa":2}' crossorigin="anonymous"></script>
972
973</body>
974
975</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.