1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <title>Keystone, CO</title> 7 <meta content="The Town of Keystone accepts payments only through our official Lodging Tax Portal and PayPort. Beware of fraudulent invoices. Verify all payment requests before submitting any payment." property="og:title" /> 8<meta content="https://www.keystoneco.gov/the-town-of-keystone-accepts-payments-only-through-our-official-lodging-tax-portal-and-payport-beware-of-fraudulent-invoices-verify-all-payment-requests-before-submitting-any-payment" property="og:url" /> 9<meta content="Keystone, CO" property="og:site_name" /> 10<meta content="en-US" property="og:locale" /> 11<meta content="The Town of Keystone accepts payments only through our official Lodging Tax Portal and PayPort. Beware of fraudulent invoices. Verify all payment requests before submitting any payment." name="twitter:title" /> 12<meta content="https://www.keystoneco.gov/the-town-of-keystone-accepts-payments-only-through-our-official-lodging-tax-portal-and-payport-beware-of-fraudulent-invoices-verify-all-payment-requests-before-submitting-any-payment" name="twitter:url" /> 13 <!-- Fav-icon --> 14 15 16 17 18 <link rel="icon" type="image/x-icon" href="/media/Favicon/favicon.ico?v=wu_aFMFKHCOGL_B4XU248dshe30fvUCOh7teqyoXITw" /> 19 20 21 22 23 24 <!-- Bootstrap core CSS and Javascripts --> 25 26 27
27<script crossorigin="anonymous" integrity="sha384-1H217gwSVyLSIfaLxHbE7dRb3v4mYCKbpQvzx0cegeju1MVsGrX5xXxAvs/HgeFs" src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
vendor: 2 bytes, line 27
27
28<script crossorigin="anonymous" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
28 29 30 <!-- Theme CSS and Js--> 31 32 33 34 35 36 <!-- Froala Editor Css and JS --> 37 38 39 <!-- Slick CSS and JS --> 40 41 42 43 44 <style> 45 :root { 46 --site-color: #b50000; 47 --fore-color: #0e131d; 48 --menu-background-color: #ffffff; 49 --menu-link-color: #0e131d; 50 --menu-link-hover-color: #b50000; 51 --site-link-colour: #0056b3; 52 --site-link-colour-hover: #0056b3; 53 --footer-color: #0e131d; 54 --footer-link-color: #858f99; 55 --footer-link-hover-color: #ffffff; 56 --white-color:#ffffff; 57 --text-color:#555555; 58 --radius:8px; 59 } 60 </style> 61 62 <!-- Theme/FE resources --> 63 64<style> 65 .tooltip-inner:has(.dynamic-tooltip-inner) { 66 width: auto !important; 67 max-width: none !important; 68 text-align: left !important; 69 } 70 71 .dynamic-tooltip { 72 margin-left: .5rem; 73 display: none; 74 } 75 76</style> 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 <template id="confirmRemoveModalMetadata" data-title="Delete" data-message="Are you sure you want to delete this element?" data-ok-text="Ok" data-cancel-text="Cancel" data-ok-class="btn-danger" data-cancel-class="btn-secondary"></template> 96 97 98 99 100 101 102 103 104 105 <!-- Optional head resources --> 106
106<script crossorigin="anonymous" integrity="sha384-1H217gwSVyLSIfaLxHbE7dRb3v4mYCKbpQvzx0cegeju1MVsGrX5xXxAvs/HgeFs" src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
106 107<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 107-108
107 108<script async src="https://www.googletagmanager.com/gtag/js?id=
108G-W0L9XM4ZV5
vendor: 12 bytes, line 108
108"></script>
109<script>
vendor: 127 bytes, line 109
109window.dataLayer = window.dataLayer || [];function gtag() { dataLayer.push(arguments); }gtag('js', new Date());gtag('config', '
109G-W0L9XM4ZV5
vendor: 2 bytes, line 109
109')
109</script>
109 110<!-- End Global site tag (gtag.js) - Google Analytics --> 111 <link href="https://www.keystoneco.gov/the-town-of-keystone-accepts-payments-only-through-our-official-lodging-tax-portal-and-payport-beware-of-fraudulent-invoices-verify-all-payment-requests-before-submitting-any-payment" rel="canonical" /> 112 <link href="/PublicTheme/css/theme-button.css?v=LdmoX78YTFePT5Y4_5R7KPMwXVwdS3BmCqZGjCLAPUI" rel="stylesheet" type="text/css" /> 113<link href="/GovBuilt.Resource/css/CommonButton.css?v=8y5MfKf91-UAaUTutDGS1AgkmjGpgl7r-AXVaMpoZ5I" rel="stylesheet" type="text/css" /> 114<link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" rel="stylesheet" type="text/css" /> 115<link href="/GovBuilt.Theme.RedSnow/css/style.min.css?v=j9PdXdUI0n34nb5OrX8WXU-Sx7GvXZW56mKFroCkXE8" rel="stylesheet" type="text/css" /> 116<link href="/GovBuilt.Theme.RedSnow/css/swiper-bundle.min.css?v=o7hkOMl0vcM4e_CGMjPxzELdw9musYiR2NGSwZm7EPI" rel="stylesheet" type="text/css" /> 117<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/css/froala_editor.pkgd.css" rel="stylesheet" type="text/css" /> 118<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/css/plugins.pkgd.css" rel="stylesheet" type="text/css" /> 119<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/tui-image-editor/tui-image-editor.min.css" rel="stylesheet" type="text/css" /> 120<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/tui-color-picker/tui-color-picker.min.css" rel="stylesheet" type="text/css" /> 121<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/css/third_party/image_tui.min.css" rel="stylesheet" type="text/css" /> 122<link href="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/prism/prism.min.css" rel="stylesheet" type="text/css" /> 123<link href="/GovBuilt.FroalaEditor/css/orchard-core-froala-editor.min.css?v=j1rQ1-3WGDUAu8dOrP5Kpz2C2OPClcJTUFlHFY6HqOQ" rel="stylesheet" type="text/css" /> 124<link href="/GovBuilt.Resource/css/slick/slick.css?v=vu28xouMTg_ecH6oquM4_AUp8P3Vu01p3jllD9h6UGA" rel="stylesheet" type="text/css" /> 125<link href="/GovBuilt.Resource/css/slick/slick-theme.css?v=0Yc10Vki7NxEDBidadTZbE0XcmbVZit14K5MMRo6zqU" rel="stylesheet" type="text/css" /> 126<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/fontawesome.min.css" rel="stylesheet" type="text/css" /> 127<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/solid.min.css" rel="stylesheet" type="text/css" /> 128<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/light.min.css" rel="stylesheet" type="text/css" /> 129<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/regular.min.css" rel="stylesheet" type="text/css" /> 130<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/brands.min.css" rel="stylesheet" type="text/css" /> 131<link href="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/css/v4-shims.min.css" rel="stylesheet" type="text/css" /> 132<link href="/GovBuilt.Resource/css/StandardDialogs.css?v=QmzyEZr6iWwMe3iXEgRmmbEhEbYI8G83yx8QF-wEmLY" rel="stylesheet" type="text/css" /> 133 <!-- Custom scripts for this template --> 134
134<script src="/GovBuilt.Resource/js/govbuilt-validations.min.js?v=2zyN04350Wkkyb6dnhqc-Yy8fechV_G72CTnrhyZOqw"></script>
134 135
135<script type="text/javascript"> 136 window.FontAwesomeConfig = window.FontAwesomeConfig || {}; 137 window.FontAwesomeConfig.autoReplaceSvg = false; 138 </script>
138 139 140 <meta name="google-site-verification" content="4XLYe-ybd4S7teZ7WrF8v89bVFP73RW265Mt8vAJPs4" /> 141<meta name="msvalidate.01" content="FAE3A1DD3C085351180499A219D161CC" />
142<script type="application/ld+json"> 143{ 144 "@context": "http://schema.org", 145 "@type": "GovernmentOffice", 146 "name": "Keystone, CO", 147 "image": "https://www.keystoneco.gov/media/images/keystone%20logo%20%281%29.png", 148 "telephone": "970-450-3500", 149 "email": "[email protected]", 150 "address": { 151 "@type": "PostalAddress", 152 "streetAddress": "1628 Saints John Rd", 153 "addressLocality": "Keystone", 154 "addressRegion": "CO", 155 "addressCountry": "USA", 156 "postalCode": "80435" 157 }, 158 "url": "https://www.keystoneco.gov/" 159} 160</script>
160 161<style> 162p { 163 text-align: left !important; 164} 165</style> 166 167 </head> 168<body class="fr-view"> 169 <a href="#main-div" class="skip-link" tabindex="0">Skip to Main Content</a> 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186<div class="alertbar-wrapper" role="region" aria-label="Alert notification" aria-live="polite" style="background-color:#000087;border-color:#000087;z-index: 1030;"> 187 <div class="container-size container"> 188 <div class="d-flex alertbar-flex-wrapper"> 189 <div class="alertbar-icon-wrapper"> 190 <i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i> 191 </div> 192 <a href="/the-town-of-keystone-accepts-payments-only-through-our-official-lodging-tax-portal-and-payport-beware-of-fraudulent-invoices-verify-all-payment-requests-before-submitting-any-payment" style="color:#ffffff;" class="alertbar-content-wrapper" aria-label="Read more about this alert"> 193 <h2>Alert: </h2> 194 <p>The Town of Keystone accepts payments only through our official Lodging Tax Collection Portal and PayPort, our secure online payment system.If you receive an invoice, payment request, or email claiming...</p> 195 </a> 196 <a href="/alerts" class="alertbar-view-btn" aria-label="View all alerts"> 197 View All 198 </a> 199 <div class="alertbar-close-wrapper"> 200 <button type="button" class="alertbar-close-btn border-0 bg-transparent" aria-label="Dismiss this alert"> 201 <i class="fa fa-regular fa-xmark" aria-hidden="true"></i> 202 </button> 203 </div> 204 </div> 205 </div> 206</div> 207 208 209 210 211 <!-- Header section start --> 212 213 <!-- Header section end --> 214 <!-- Navigation --> 215<header class="header main-header"> 216 <nav class="navbar navbar-expand-lg website-navbar p-0 d-block f-14" id="navbar"> 217 218 219<!-- Navigation --> 220 221<section class="bg-blue"> 222 <div class="container-size container"> 223 <div class="d-flex align-items-center justify-content-between w-100"> 224 225 <a class="navbar-brand navbar-logo p-0 m-0" href="/"> 226 <img src="/media/images/keystone%20logo%20%281%29.png" alt="Go to Homepage" class="img-fluid website-logo" /> 227 </a> 228 <div 229 class="collapse navbar-collapse justify-content-between" 230 id="navbarSupportedContent" 231 role="dialog" 232 aria-modal="true" 233 aria-label="Navigation menu dialog" 234 > 235 <div class="close-menu d-lg-none text-end position-sticky text-right text-end"> 236 <button 237 class="bg-transparent border-0 p-0 f-24 text-white" 238 type="button" 239 aria-label="close menu" 240 > 241 <i class="fa-light fa-xmark" aria-hidden="true"></i> 242 </button> 243 </div> 244 <ul class="navbar-nav m-auto"> 245 246 <li class="nav-item"> 247 <a 248 class="nav-link" 249 href="/" 250 target="" 251 ><span class="nav-span">Home</span></a 252 > 253 </li> 254 255 256 <li class="nav-item dropdown"> 257 <!-- FIXED: Removed aria-expanded and aria-controls --> 258 <a 259 class="nav-link dropdown-toggle dropdown-toggle-none d-flex gap-1 align-items-center" 260 href="/government" 261 target="" 262 role="button" 263 data-bs-toggle="dropdown" 264 data-bs-auto-close="outside" 265 aria-label="Government menu, expand to view options" 266 > 267 Government <i class="fa-solid fa-chevron-down f-12"></i> 268 </a> 269 270 <ul class="dropdown-menu" id="menu-4xh64sbhczfdgvcme03pbgcq42"> 271 272 <li class="dropend dropdown"> 273 <a 274 class="dropdown-item text-white d-inline-block" 275 href="/mayor-council" 276 target="" 277 > 278 Mayor and Council 279 </a> 280 <!-- FIXED: Removed aria-expanded and aria-controls --> 281 <button 282 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 283 type="button" 284 data-bs-toggle="dropdown" 285 aria-label="Mayor and Council menu, expand to view options" 286 > 287 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 288 </button> 289 290 <ul class="dropdown-menu" id="menu-49csh2njbffpgs56xd4xr9xb4p"> 291 292 <li> 293 <a 294 class="dropdown-item" 295 href="/council-meetings" 296 target="" 297 > 298 Council Meetings 299 </a> 300 </li> 301 302 </ul> 303 </li> 304 305 306 <li class="dropend dropdown"> 307 <a 308 class="dropdown-item text-white d-inline-block" 309 href="/boards-and-commissions" 310 target="" 311 > 312 Boards and Commissions 313 </a> 314 <!-- FIXED: Removed aria-expanded and aria-controls --> 315 <button 316 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 317 type="button" 318 data-bs-toggle="dropdown" 319 aria-label="Boards and Commissions menu, expand to view options" 320 > 321 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 322 </button> 323 324 <ul class="dropdown-menu" id="menu-4dvk6jg708a54wwzgzvpqmys5z"> 325 326 <li> 327 <a 328 class="dropdown-item" 329 href="/pz-meetings" 330 target="" 331 > 332 Planning and Zoning Commission 333 </a> 334 </li> 335 336 <li> 337 <a 338 class="dropdown-item" 339 href="/trails-and-open-space-advisory-board" 340 target="" 341 >
342 Trails and Open Space Advisory Board 343 </a> 344 </li> 345 346 <li> 347 <a 348 class="dropdown-item" 349 href="/business-advisory-board" 350 target="" 351 > 352 Business Advisory Board 353 </a> 354 </li> 355 356 </ul> 357 </li> 358 359 360 <li> 361 <a 362 class="dropdown-item" 363 href="/ordinances-and-resolutions" 364 target="" 365 >Resolutions and Ordinances</a 366 > 367 </li> 368 369 <li> 370 <a 371 class="dropdown-item" 372 href="/media/Town%20Charter/KeystoneCharter.pdf" 373 target="_blank" 374 >Town Charter</a 375 > 376 </li> 377 378 <li> 379 <a 380 class="dropdown-item" 381 href="/council-meetings" 382 target="" 383 >Council Meetings</a 384 > 385 </li> 386 387 <li> 388 <a 389 class="dropdown-item" 390 href="/public-notices" 391 target="_self" 392 >Public Notices</a 393 > 394 </li> 395 396 </ul> 397 </li> 398 399 400 <li class="nav-item dropdown"> 401 <!-- FIXED: Removed aria-expanded and aria-controls --> 402 <a 403 class="nav-link dropdown-toggle dropdown-toggle-none d-flex gap-1 align-items-center" 404 href="/department" 405 target="" 406 role="button" 407 data-bs-toggle="dropdown" 408 data-bs-auto-close="outside" 409 aria-label="Department menu, expand to view options" 410 > 411 Department <i class="fa-solid fa-chevron-down f-12"></i> 412 </a> 413 414 <ul class="dropdown-menu" id="menu-4d8pm54sfr7tk6z0xaz6jb04c3"> 415 416 <li> 417 <a 418 class="dropdown-item" 419 href="/staff-directory" 420 target="" 421 >Staff Directory</a 422 > 423 </li> 424 425 <li class="dropend dropdown"> 426 <a 427 class="dropdown-item text-white d-inline-block" 428 href="/town-manager" 429 target="" 430 > 431 Town Manager 432 </a> 433 <!-- FIXED: Removed aria-expanded and aria-controls --> 434 <button 435 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 436 type="button" 437 data-bs-toggle="dropdown" 438 aria-label="Town Manager menu, expand to view options" 439 > 440 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 441 </button> 442 443 <ul class="dropdown-menu" id="menu-4fxexxf9qamkm1f68wkesvsgx9"> 444 445 <li> 446 <a 447 class="dropdown-item" 448 href="/bear-safe-keystone" 449 target="_self" 450 > 451 Bear Safe Keystone 452 </a> 453 </li> 454 455 </ul> 456 </li> 457 458 459 <li class="dropend dropdown"> 460 <a 461 class="dropdown-item text-white d-inline-block" 462 href="/finance" 463 target="" 464 > 465 Finance 466 </a> 467 <!-- FIXED: Removed aria-expanded and aria-controls --> 468 <button 469 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 470 type="button" 471 data-bs-toggle="dropdown" 472 aria-label="Finance menu, expand to view options" 473 > 474 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 475 </button> 476 477 <ul class="dropdown-menu" id="menu-4fdbz0r2gdh8jybwa292pzjtn1"> 478 479 <li> 480 <a 481 class="dropdown-item" 482 href="/budget" 483 target="" 484 > 485 Budget 486 </a> 487 </li> 488 489 <li> 490 <a 491 class="dropdown-item" 492 href="/financials" 493 target="" 494 > 495 Financials 496 </a> 497 </li> 498 499 <li> 500 <a 501 class="dropdown-item" 502 href="/audit" 503 target="" 504 > 505 Audit 506 </a> 507 </li> 508 509 <li> 510 <a 511 class="dropdown-item" 512 href="/tax-information" 513 target="_self" 514 > 515 Sales and Lodging Tax Information 516 </a> 517 </li> 518 519 <li> 520 <a 521 class="dropdown-item" 522 href="/lodging-tax-information" 523 target="" 524 > 525 Lodging Tax 526 </a> 527 </li> 528 529 <li> 530 <a 531 class="dropdown-item" 532 href="/short-term-rentals" 533 target="" 534 >
535 Short-Term Rentals 536 </a> 537 </li> 538 539 </ul> 540 </li> 541 542 543 <li class="dropend dropdown"> 544 <a 545 class="dropdown-item text-white d-inline-block" 546 href="/clerk-office" 547 target="" 548 > 549 Clerk's Office 550 </a> 551 <!-- FIXED: Removed aria-expanded and aria-controls --> 552 <button 553 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 554 type="button" 555 data-bs-toggle="dropdown" 556 aria-label="Clerk's Office menu, expand to view options" 557 > 558 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 559 </button> 560 561 <ul class="dropdown-menu" id="menu-4hjp85vgk66cx6w3cc3hk2dwxs"> 562 563 <li> 564 <a 565 class="dropdown-item" 566 href="/public-records" 567 target="" 568 > 569 Accessing Public Records 570 </a> 571 </li> 572 573 <li> 574 <a 575 class="dropdown-item" 576 href="/liquor-licensing" 577 target="" 578 > 579 Liquor Licensing 580 </a> 581 </li> 582 583 <li> 584 <a 585 class="dropdown-item" 586 href="/tobacco-licensing" 587 target="" 588 > 589 Tobacco Licensing 590 </a> 591 </li> 592 593 <li> 594 <a 595 class="dropdown-item" 596 href="/vote" 597 target="" 598 > 599 Elections 600 </a> 601 </li> 602 603 <li> 604 <a 605 class="dropdown-item" 606 href="/council-meetings" 607 target="" 608 > 609 Council Meeting Materials 610 </a> 611 </li> 612 613 <li> 614 <a 615 class="dropdown-item" 616 href="/short-term-rentals" 617 target="" 618 >
619 Short-Term Rentals 620 </a> 621 </li> 622 623 <li> 624 <a 625 class="dropdown-item" 626 href="/business-license" 627 target="" 628 > 629 Business Licenses 630 </a> 631 </li> 632 633 <li> 634 <a 635 class="dropdown-item" 636 href="/public-notices" 637 target="_self" 638 > 639 Public Notices 640 </a> 641 </li> 642 643 </ul> 644 </li> 645 646 647 <li class="dropend dropdown"> 648 <a 649 class="dropdown-item text-white d-inline-block" 650 href="/community-development" 651 target="" 652 > 653 Community Development 654 </a> 655 <!-- FIXED: Removed aria-expanded and aria-controls --> 656 <button 657 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 658 type="button" 659 data-bs-toggle="dropdown" 660 aria-label="Community Development menu, expand to view options" 661 > 662 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 663 </button> 664 665 <ul class="dropdown-menu" id="menu-407cm2ttdeca5xabgyrvfk89np"> 666 667 <li> 668 <a 669 class="dropdown-item" 670 href="/pz-notices" 671 target="" 672 > 673 Active Land Use Application Notices 674 </a> 675 </li> 676 677 <li> 678 <a 679 class="dropdown-item" 680 href="https://www.keystoneco.gov/media/Community%20Development/KeystoneCompPlan_05012026%20%281%29.pdf" 681 target="_blank" 682 > 683 Comprehensive Plan 684 </a> 685 </li> 686 687 <li> 688 <a 689 class="dropdown-item" 690 href="/development-code" 691 target="" 692 > 693 Development Code 694 </a> 695 </li> 696 697 <li> 698 <a 699 class="dropdown-item" 700 href="/pz-meetings" 701 target="" 702 > 703 Planning and Zoning Commission 704 </a> 705 </li> 706 707 <li> 708 <a 709 class="dropdown-item" 710 href="/building-permit" 711 target="" 712 > 713 Apply for a Building Permit 714 </a> 715 </li> 716 717 <li> 718 <a 719 class="dropdown-item" 720 href="/trails-and-open-space-advisory-board" 721 target="_self" 722 >
723 Trails and Open Space Advisory Board 724 </a> 725 </li> 726 727 <li> 728 <a 729 class="dropdown-item" 730 href="/development-applications" 731 target="" 732 > 733 Development Review Permit Applications 734 </a> 735 </li> 736 737 </ul> 738 </li> 739 740 741 <li> 742 <a 743 class="dropdown-item" 744 href="https://www.dillonco.gov/departments/police" 745 target="_blank" 746 >Police/Public Safety</a 747 > 748 </li> 749 750 <li class="dropend dropdown"> 751 <a 752 class="dropdown-item text-white d-inline-block" 753 href="/public-works" 754 target="" 755 > 756 Public Works 757 </a> 758 <!-- FIXED: Removed aria-expanded and aria-controls --> 759 <button 760 class="dropdown-toggle dropdown-toggle-split text-white bg-transparent border-0" 761 type="button" 762 data-bs-toggle="dropdown" 763 aria-label="Public Works menu, expand to view options" 764 > 765 <i class="fa-solid fa-chevron-down f-12" aria-hidden="true"></i> 766 </button> 767 768 <ul class="dropdown-menu" id="menu-4gmykkpawaa9jybk9ftmvr1sm4"> 769 770 <li> 771 <a 772 class="dropdown-item" 773 href="/requests-for-proposals" 774 target="" 775 > 776 Requests for Proposals 777 </a> 778 </li> 779 780 <li> 781 <a 782 class="dropdown-item" 783 href="/utilities-and-services" 784 target="" 785 > 786 Utilities/Services 787 </a> 788 </li> 789 790 </ul> 791 </li> 792 793 794 <li> 795 <a 796 class="dropdown-item" 797 href="/external-services" 798 target="_self" 799 >External Services</a 800 > 801 </li> 802 803 </ul> 804 </li> 805 806 807 <li class="nav-item dropdown"> 808 <!-- FIXED: Removed aria-expanded and aria-controls --> 809 <a 810 class="nav-link dropdown-toggle dropdown-toggle-none d-flex gap-1 align-items-center" 811 href="/services" 812 target="" 813 role="button" 814 data-bs-toggle="dropdown"
815 data-bs-auto-close="outside" 816 aria-label="Services menu, expand to view options" 817 > 818 Services <i class="fa-solid fa-chevron-down f-12"></i> 819 </a> 820 821 <ul class="dropdown-menu" id="menu-4kkwhc38g7pe8zsrxdw1dw0dct"> 822 823 <li> 824 <a 825 class="dropdown-item" 826 href="/short-term-rentals" 827 target="" 828 >Short-Term Rentals</a 829 > 830 </li> 831 832 <li> 833 <a 834 class="dropdown-item" 835 href="/development-applications" 836 target="" 837 >Development Review Permit Applications</a 838 > 839 </li> 840 841 <li> 842 <a 843 class="dropdown-item" 844 href="/public-records" 845 target="" 846 >Records Requests</a 847 > 848 </li> 849 850 <li> 851 <a 852 class="dropdown-item" 853 href="/lodging-tax-information" 854 target="" 855 >Lodging Tax Collection</a 856 > 857 </li> 858 859 <li> 860 <a 861 class="dropdown-item" 862 href="/business-license" 863 target="" 864 >Business Licenses</a 865 > 866 </li> 867 868 <li> 869 <a 870 class="dropdown-item" 871 href="/building-permit" 872 target="_self" 873 >Building and Development Permit</a 874 > 875 </li> 876 877 <li> 878 <a 879 class="dropdown-item" 880 href="/requests-for-proposals" 881 target="" 882 >Requests for Proposals (RFPs)</a 883 > 884 </li> 885 886 </ul> 887 </li> 888 889 890 <li class="nav-item"> 891 <a 892 class="nav-link" 893 href="/contact-us" 894 target="" 895 ><span class="nav-span">Contact Us</span></a 896 > 897 </li> 898 899 900 <li class="nav-item"> 901 <a class="nav-link" href="/Profile"> 902 <span class="nav-span">My Profile</span> 903 </a> 904 </li> 905 906 </ul> 907 </div> 908 909 <div class="navbar-actions d-flex align-items-center"> 910 <button 911 type="button" 912 class="search-btn border-0" 913 aria-label="open search input" 914 data-bs-toggle="modal" 915 data-bs-target="#searchModal" 916 data-toggle="modal" 917 data-target="#searchModal" 918 > 919 <i class="fa-regular fa-magnifying-glass"></i> 920 </button> 921 922 <button 923 type="button" 924 aria-label="open menu" 925 class="collapse-navbar-btn d-lg-none d-md-block border-0 text-center" 926 data-bs-toggle="collapse" 927 data-bs-target="#navbarSupportedContent" 928 >
929 <span class="bar1"></span> 930 <span class="bar2"></span> 931 <span class="bar3"></span> 932 </button> 933 934 935 <div class="website-btn d-lg-block d-none"> 936 <a 937 href="/videos" 938 class="custom-btn d-inline-flex" 939 aria-label="Watch Town Videos" 940 > 941 <span class="btn-content d-inline-block"> 942 Town Videos 943 </span> 944 <span class="btn-arrow bg-transparent text-white"> 945 <i class="fa-solid fa-circle-play play-btn" aria-hidden="true"></i> 946 </span> 947 </a> 948 </div> 949 950 </div> 951 </div> 952 </div> 953</section> 954 955<!-- Navigation --> 956 957 958 959 </nav> 960</header> 961<!-- Navigation --> 962 <!--Searchh Modal --> 963 <div class="modal fade" id="searchModal" tabindex="-1" aria-labelledby="searchModalLabel" aria-hidden="true"> 964 <div class="modal-dialog"> 965 <div class="modal-content"> 966 <div class="modal-header p-0 border-0"> 967 <h2 id="searchModalLabel" class="visually-hidden">Search</h2> 968<form autocomplete="off" action="/search" method="get" class="header-searchbox searchbar-form"> 969 <div class="input-wrapper"> 970 <i class="fa-light fa-magnifying-glass search-icon" aria-hidden="true"></i> 971 972 <input class="searchbox search-input form-control" 973 type="text" 974 name="Terms" 975 id="searchInput" 976 placeholder="Search..." 977 aria-label="Search" 978 aria-describedby="search-instructions" 979 aria-autocomplete="list" 980 aria-controls="autocomplete-list" 981 aria-haspopup="listbox" 982 aria-expanded="false" 983 autocomplete="off" 984 /> 985 986 <!-- Instructions for screen readers --> 987 <span id="search-instructions" class="visually-hidden"> 988 Type at least 3 characters to search. Use down and up arrow keys to navigate results. Press Enter to select an option. Press Escape to close. 989 </span> 990 991 <button type="button" class="remove-input-content" data-bs-dismiss="modal" data-dismiss="modal" aria-label="Close"> 992 <i class="fa-light fa-xmark" aria-hidden="true"></i> 993 </button> 994 </div> 995</form> 996 997<!-- Screen reader status --> 998<div id="search-status" class="visually-hidden" aria-live="polite" aria-atomic="true"></div> 999 1000 </div> 1001 </div> 1002 </div> 1003 </div> 1004 <!--Searchh Modal --> 1005 <main> 1006 <div class="container" id="main-div" tabindex="-1"> 1007 <style> 1008 .shape_render>div{ 1009 display:none; 1010 } 1011 1012 .field-name-news-article{ 1013 display: block !important; 1014 } 1015</style> 1016 1017<div class="container"> 1018 <div class="row"> 1019 <div class="col-md-12"> 1020 <h3> 1021 <a class="pull-right" href="alerts">View All Alerts</a> 1022 </h3> 1023 <h3>The Town of Keystone accepts payments only through our official Lodging Tax Portal and PayPort. Beware of fraudulent invoices. Verify all payment requests before submitting any payment.</h3> 1024 </div> 1025 <div class="col-md-12"> 1026 <label>Mon, Apr 06, 2026 - Sat, Oct 31, 2026</label> 1027 </div> 1028 <div class="col-md-12 shape_render" style="text-align: justify;"> 1029 1030 </div> 1031 <div class="col-md-12 shape_render" style="text-align: justify;"> 1032 <p data-pasted="true"><span style="font-size: 18px;">The Town of Keystone accepts payments only through our official Lodging Tax Collection Portal and PayPort, our secure online payment system.</span></p><p><span style="font-size: 18px;">If you receive an invoice, payment request, or email claiming to be from the Town of Keystone, please verify that it was sent by an authorized Town representative before submitting any payment.</span></p><p><span style="font-size: 18px;">For your security, do not make payments through any links, websites, or methods other than those listed on the Town’s official website.</span></p><p><span style="font-size: 18px;">If you are unsure about the authenticity of an invoice, please contact the Town of Keystone directly for confirmation.</span></p> 1033 </div> 1034 </div> 1035</div> 1036 1037 1038 1039 </div> 1040 </main> 1041 1042<!-- Footer Section Start --> 1043 <style> 1044.quick-links-heading { 1045 margin-bottom: .5rem !important; 1046} 1047@media screen and (max-width: 767px) { 1048 .footer-bottom-links { 1049 justify-content: center; 1050 } 1051} 1052</style> 1053<footer class="footer-section text-white f-14 position-relative">
1054 <!-- Background Image --> 1055 <img 1056 src="/GovBuilt.Theme.RedSnow/images/footer-bg-shape-img.png" 1057 class="img-fluid bg-shape-img position-absolute z-0 start-0 bottom-0 top-0 end-0 m-auto" 1058 alt="" 1059 /> 1060 1061 <div class="container body-container-size p-60 z-1 position-relative"> 1062 <div class="row"> 1063 <!-- Footer Logo --> 1064 <div class="col-12 col-sm-12 col-md-12 col-lg-4"> 1065 <div class="footer-logo-wrapper"> 1066 <a href="/home-page" class="d-block"> 1067 <img 1068 src="/media/images/footer-white-logo.png" 1069 class="img-fluid footer-logo" 1070 alt="Go to Homepage" 1071 /> 1072 </a> 1073 </div> 1074 </div> 1075 1076 <!-- Footer Links --> 1077 <div class="col-12 col-sm-12 col-md-12 col-lg-8"> 1078 <div class="d-flex footer-flex-wrapper flex-wrap justify-content-end"> 1079 <!-- Follow Us --> 1080 <div class="footer-links-wrapper"> 1081 <div class="m-auto"> 1082 <h2 class="quick-links-heading medium f-16">Follow Us</h2> 1083 <ul class="footer-links-list no-list-style list-unstyled"> 1084 <li class="footer-links"> 1085 <a 1086 href="https://www.facebook.com/TownofKeystone" 1087 aria-label="Visit our Facebook page" 1088 target="_blank" 1089 > 1090 <i class="fa-brands fa-facebook" aria-hidden="true"></i> 1091 <span class="footer-content">Facebook</span> 1092 </a> 1093 </li> 1094 <li class="footer-links"> 1095 <a 1096 href="https://www.instagram.com/townofkeystone/" 1097 aria-label="Visit our Instagram profile" 1098 target="_blank" 1099 > 1100 <i class="fa-brands fa-instagram" aria-hidden="true"></i> 1101 <span class="footer-content">Instagram</span> 1102 </a> 1103 </li> 1104 <li class="footer-links"> 1105 <a 1106 href="https://www.youtube.com/@keystonecogov" 1107 aria-label="Visit our YouTube profile" 1108 target="_blank" 1109 > 1110 <i class="fa-brands fa-youtube" aria-hidden="true"></i> 1111 <span class="footer-content">YouTube</span> 1112 </a> 1113 </li> 1114 <li class="footer-links"> 1115 <a 1116 href="https://www.linkedin.com/company/town-of-keystone-colorado/" 1117 aria-label="Visit our LinkedIn profile" 1118 target="_blank" 1119 > 1120 <i class="fa-brands fa-linkedin-in" aria-hidden="true"></i> 1121 <span class="footer-content">LinkedIn</span> 1122 </a> 1123 </li> 1124 </ul> 1125 </div> 1126 </div> 1127 1128 <!-- Connect With Us --> 1129 <div class="footer-links-wrapper"> 1130 <div class="m-auto"> 1131 <h2 class="quick-links-heading medium f-16">Connect With Us</h2> 1132 <ul class="footer-links-list no-list-style list-unstyled"> 1133 <li class="footer-links"> 1134 <a href="/contact-us" aria-label="Contact us">
1135 <span class="footer-content">Contact Us</span> 1136 </a> 1137 </li> 1138 <li class="footer-links"> 1139 <a href="https://recruiting.paylocity.com/recruiting/jobs/All/4023e154-2b49-4f59-8f23-f93d9d40e08a/Town-of-Keystone" aria-label="Careers"> 1140 <span class="footer-content">Careers</span> 1141 </a> 1142 </li> 1143 <li class="footer-links"> 1144 <a 1145 href="https://cdn.forms-content-1.sg-form.com/0f383a8b-ddd9-11ef-b6d0-3e2ad497ca02" 1146 aria-label="Join our email list" 1147 target="_blank" 1148 > 1149 <span class="footer-content">Join Our Email List</span> 1150 </a> 1151 </li> 1152 </ul> 1153 </div> 1154 </div> 1155 1156 <!-- Contact Information --> 1157 <div class="footer-links-wrapper"> 1158 <div class="m-auto"> 1159 <h2 class="quick-links-heading medium f-16">Contact Information</h2> 1160 <ul class="footer-links-list no-list-style list-unstyled"> 1161 <li class="footer-links"> 1162 <a href="tel:9704503500" aria-label="Call 970-450-3500"> 1163 <i class="fa-light fa-phone" aria-hidden="true"></i> 1164 <span class="footer-content">970-450-3500</span> 1165 </a> 1166 </li> 1167 <li class="footer-links"> 1168 <a href="/cdn-cgi/l/email-protection#d7beb9b1b897bcb2aea4a3b8b9b2b4b8f9b0b8a1" aria-label="Email [email protected]"> 1169 <i class="fa-light fa-envelope" aria-hidden="true"></i> 1170 <span class="footer-content"><span class="__cf_email__" data-cfemail="650c0b030a250e001c16110a0b00060a4b020a13">[email protected]</span></span> 1171 </a> 1172 </li> 1173 <li class="footer-links"> 1174 <a 1175 href="https://www.google.com/maps/search/1628+Saints+John+Rd+Keystone,+CO+80435" 1176 aria-label="Open location in Google Maps: 1628 Saints John Road, Keystone, Colorado 80435" 1177 target="_blank" 1178 > 1179 <i class="fa-light fa-location-dot" aria-hidden="true"></i> 1180 <span class="footer-content">1628 Saints John Rd Keystone, CO 80435</span> 1181 </a> 1182 </li> 1183 </ul> 1184 </div> 1185 </div> 1186 </div> 1187 </div> 1188 </div> 1189 1190 <!-- Footer Bottom Links --> 1191 <div class="d-flex flex-wrap justify-content-between footer-links-color"> 1192 <div class="copyright-content"> 1193 <span>© 2025 State of Colorado</span> 1194 <span class="link-divider"> | </span> 1195 <a href="https://mccinnovations.com/solution/government-websites/" target="_blank" 1196 >Powered by MCCi Government Websites</a 1197 > 1198 </div> 1199 <div class="footer-term-links"> 1200 <ul class="footer-bottom-links no-list-style d-flex flex-wrap gap-2 list-unstyled"> 1201 <li class="d-flex gap-2 flex-nowrap"><a href="/privacypolicy">Privacy Policy</a> |</li> 1202 <li class="d-flex gap-2 flex-nowrap"><a href="/termsofuse">Terms & Conditions</a> |</li> 1203 <li class="d-flex gap-2 flex-nowrap"> 1204 <a href="/digital-accessibility-statement">Digital Accessibility Statement</a> | 1205 </li> 1206 <li class="d-flex gap-2 flex-nowrap"> 1207 <a href="https://data.colorado.gov/stories/s/fjyf-bdat" target="_blank">Transparency Online</a> 1208 | 1209 </li> 1210 <li class="d-flex gap-2 flex-nowrap"> 1211 <a href="https://www.colorado.gov/general-notices" target="_blank">General Notices</a> | 1212 </li> 1213 <li class="d-flex gap-2 flex-nowrap"><a href="/sitemap.xml">Sitemap</a> |</li> 1214 <li class="d-flex gap-2 flex-nowrap"> 1215 <a 1216 class="logo-cogov" 1217 aria-label="Colorado Official State Web Portal" 1218 href="https://www.colorado.gov" 1219 target="_blank" 1220 >Colorado Official State Web Portal</a 1221 > 1222 </li> 1223 </ul> 1224 </div> 1225 </div> 1226 </div> 1227</footer> 1228<!-- Footer Section End -->
vendor: 111 bytes, lines 1228-1231
1228 1229 1230 1231<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1231<script src="/GovBuilt.Theme.RedSnow/js/app.min.js?v=GCZ9pwN85Q7CMxnvfku_tBC_GH3bdE4m6H_-p5XfQjo"></script>
vendor: 2 bytes, line 1231
1231
1232<script src="/GovBuilt.Theme.RedSnow/js/swiper-bundle.min.js?v=eNvDLFmLlOkuJBRYmOyrqcrpW1JXEt4ZjWqtel88c1s"></script>
vendor: 2 bytes, line 1232
1232
1233<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/js/froala_editor.pkgd.min.js"></script>
vendor: 2 bytes, line 1233
1233
1234<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/js/plugins.pkgd.min.js"></script>
vendor: 2 bytes, line 1234
1234
1235<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/fabric/fabric.min.js"></script>
vendor: 2 bytes, line 1235
1235
1236<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/tui-code-snippet/tui-code-snippet.js"></script>
vendor: 2 bytes, line 1236
1236
1237<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/tui-color-picker/tui-color-picker.min.js"></script>
vendor: 2 bytes, line 1237
1237
1238<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/tui-image-editor/tui-image-editor.min.js"></script>
vendor: 2 bytes, line 1238
1238
1239<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/froala-editor/js/third_party/image_tui.min.js"></script>
vendor: 2 bytes, line 1239
1239
1240<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/prism/prism-core.min.js"></script>
vendor: 2 bytes, line 1240
1240
1241<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/prism/prism-autoloader.min.js"></script>
vendor: 2 bytes, line 1241
1241
1242<script src="https://cdn.govbuilt.com/contents/froala-editor/5.4.0/mammoth-browser/mammoth_browser.min.js"></script>
vendor: 2 bytes, line 1242
1242
1243<script src="/GovBuilt.FroalaEditor/js/orchard-core-froala-editor.min.js?v=esZrhAfuznKgBJzhGxz3wfAErzcFOLZoaHV2TLsAidA"></script>
vendor: 2 bytes, line 1243
1243
1244<script src="/GovBuilt.Resource/Scripts/slick/slick.js?v=w5pICtpS1Y3Vp_1pn7CNpIt4WF0t9c4RxX-981vdJCY"></script>
vendor: 2 bytes, line 1244
1244
1245<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/fontawesome.min.js"></script>
vendor: 2 bytes, line 1245
1245
1246<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/solid.min.js"></script>
vendor: 2 bytes, line 1246
1246
1247<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/regular.min.js"></script>
vendor: 2 bytes, line 1247
1247
1248<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/light.min.js"></script>
vendor: 2 bytes, line 1248
1248
1249<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/brands.min.js"></script>
vendor: 2 bytes, line 1249
1249
1250<script src="https://cdn.govbuilt.com/contents/fontawesome/7.2.0/js/v4-shims.min.js"></script>
vendor: 2 bytes, line 1250
1250
1251<script src="/GovBuilt.Resource/js/StandardDialogs.min.js?v=_qBoYEN-Xu419TaJ_lO3pFVxrP7LnfIxNX82uUTKmQA"></script>
vendor: 2 bytes, line 1251
1251
1252<script src="/GovBuilt.Resource/js/FECommon.min.js?v=BBOumJEKZYxR96WiPBwdPakzWrMXypwNzBLzyxJXUXE"></script>
vendor: 2 bytes, line 1252
1252
1253<script> 1254 // Define a custom jQuery event 1255 $.event.special.DOMSubtreeModified = { 1256 setup: function () { 1257 var targetNode = this; 1258 var config = { childList: true, subtree: true }; 1259 1260 var observer = new MutationObserver(function (mutations) { 1261 $(targetNode).trigger('DOMSubtreeModified'); 1262 }); 1263 1264 observer.observe(this, config); 1265 1266 // Store observer instance so it can be later disconnected if needed 1267 $(this).data('DOMSubtreeModifiedObserver', observer); 1268 }, 1269 teardown: function () { 1270 var observer = $(this).data('DOMSubtreeModifiedObserver'); 1271 if (observer) { 1272 observer.disconnect(); 1273 } 1274 } 1275 }; 1276</script>
vendor: 2 bytes, line 1276
1276
1277<script> 1278 $(document).ready(function () { 1279 var pagerLabelMap = { 1280 '«': 'Go to first page', '<<': 'Go to first page', 1281 'â¹': 'Go to previous page', '<': 'Go to previous page', 1282 'âº': 'Go to next page', '>': 'Go to next page', 1283 '»': 'Go to last page', '>>': 'Go to last page', 1284 'â¦': 'More pages', '...': 'More pages' 1285 }; 1286 $('ul.pager a, ul.pagination a, nav[aria-label] a').each(function () { 1287 var text = $(this).text().trim(); 1288 if (pagerLabelMap[text] && !$(this).attr('aria-label')) { 1289 $(this).attr('aria-label', pagerLabelMap[text]); 1290 } 1291 }); 1292 }); 1293</script>
1293 1294<button class="back-to-top bg-transparent border-0" aria-label="Back to top"><i class="fa-solid fa-chevron-up"></i></button>
1295<script> 1296$(document).ready(function () { 1297 let debounceTimer; 1298 let activeIndex = -1; 1299 const $searchInput = $(".search-input"); 1300 if (!$searchInput.length) return; 1301 $("#searchModal").on("shown.bs.modal", function () { 1302 $(".search-input").focus(); 1303 }); 1304 $(document).on("keyup", ".search-input", function (e) { 1305 if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'Enter' || e.key === 'Escape') { 1306 return; 1307 } 1308 clearTimeout(debounceTimer); 1309 debounceTimer = setTimeout(fetchResults, 500); 1310 }); 1311 $(document).on("keydown", ".search-input", handleKeyboardNavigation); 1312 $(document).on("focus", ".search-input", showInstructions); 1313 $(document).on("blur", ".search-input", hideInstructions); 1314 $("#searchModal").on("hidden.bs.modal", function () { 1315 closeAutocomplete(); 1316 }); 1317 $("button.close-searchbox").click(function () { 1318 $(".autocomplete-items").remove(); 1319 }); 1320}); 1321 1322window.hostUrl = window.location.origin + "/"; 1323 1324function escapeHtml(str) { 1325 if (!str) return ''; 1326 return String(str) 1327 .replace(/&/g, '&') 1328 .replace(/</g, '<') 1329 .replace(/>/g, '>') 1330 .replace(/"/g, '"') 1331 .replace(/'/g, '''); 1332} 1333 1334function escapeAttr(str) { 1335 if (!str) return ''; 1336 return String(str) 1337 .replace(/&/g, '&') 1338 .replace(/"/g, '"') 1339 .replace(/'/g, '''); 1340} 1341 1342function safeUrl(url) { 1343 if (!url) return '#'; 1344 const allowedSchemes = ['http:', 'https:', 'mailto:', 'tel:']; 1345 try { 1346 const parsedUrl = new URL(url, window.location.origin); 1347 if (allowedSchemes.includes(parsedUrl.protocol)) { 1348 return escapeAttr(url); 1349 } 1350 } catch (e) { 1351 if (url.startsWith('/') || (!url.includes(':') && !url.startsWith('#'))) { 1352 return escapeAttr(url); 1353 } 1354 } 1355 return '#'; 1356} 1357 1358function showInstructions() {} 1359function hideInstructions() {} 1360 1361function fetchResults() { 1362 const $searchInput = $(".search-input"); 1363 if (!$searchInput.length) return; 1364 const searchStr = $searchInput.val().trim(); 1365 closeAutocomplete(); 1366 if (searchStr.length < 3) return; 1367 1368 const $list = $('<ul id="autocomplete-list" role="listbox" class="autocomplete-items list-unstyled" aria-labelledby="searchInput"></ul>'); 1369 $searchInput.after($list); 1370 $searchInput.attr({ 1371 'aria-autocomplete': 'list', 1372 'aria-controls': 'autocomplete-list', 1373 'aria-haspopup': 'listbox', 1374 'aria-expanded': 'true' 1375 }); 1376 1377 $list.append(` 1378 <li id="divResultLoader"> 1379 <img src="${window.hostUrl}OrchardCore.Case/Images/indicator.gif" alt="" aria-hidden="true"> 1380 </li> 1381 `); 1382 1383 $("#search-status").text("Loading search results"); 1384 1385 $.ajax({ 1386 url: window.hostUrl + "SearchRecommendations?Terms=" + encodeURIComponent(searchStr), 1387 method: "GET", 1388 success: function (data) { 1389 renderResults(data, searchStr); 1390 }, 1391 error: function () { 1392 $("#divResultLoader").remove(); 1393 $("#search-status").text("Error loading search results"); 1394 } 1395 }); 1396} 1397 1398function decodeHtmlEntities(html) { 1399 if (!html) return ''; 1400 var txt = document.createElement('textarea'); 1401 txt.innerHTML = html; 1402 return txt.value; 1403} 1404 1405function renderResults(data, searchStr) { 1406 const $list = $("#autocomplete-list"); 1407 if (!$list.length) return; 1408 1409 $("#divResultLoader").remove(); 1410 $list.empty(); 1411 activeIndex = -1; 1412 1413 if (!data || data.statusCode !== 200 || !Array.isArray(data.searchResult) || data.searchResult.length === 0) { 1414 $("#search-status").text("No results found"); 1415 $(".search-input").attr("aria-expanded", "false"); 1416 $list.append('<li role="option"><span class="hint">No result found</span></li>'); 1417 hideInstructions(); 1418 return; 1419 } 1420 1421 $("#search-status").text(`${data.searchResult.length} results available. Use up and down arrow keys to navigate.`); 1422 $(".search-input").attr("aria-expanded", "true"); 1423 1424 data.searchResult.forEach((item, index) => { 1425 const rawTitle = decodeHtmlEntities(item.title); 1426 const rawSummary = decodeHtmlEntities(item.summary); 1427 const plainTitle = rawTitle.replace(/<[^>]*>/g, ''); 1428 const plainSummary = rawSummary ? rawSummary.replace(/<[^>]*>
1428/g, '') : ''; 1429 const safeUrlValue = safeUrl(item.url || '#'); 1430 1431 const $li = $('<li>', { 1432 id: 'autocomplete-option-' + index, 1433 role: 'option', 1434 'aria-selected': 'false', 1435 class: 'autocomplete-option', 1436 tabindex: '-1', 1437 'data-url': safeUrlValue 1438 }); 1439 1440 const $a = $('<a>', { 1441 href: safeUrlValue 1442 }).text(plainTitle); 1443 1444 $li.append($a); 1445 1446 if (plainSummary) { 1447 const $span = $('<span>', { 1448 class: 'hint d-block' 1449 }).text(plainSummary); 1450 $li.append($span); 1451 } 1452 1453 $list.append($li); 1454 }); 1455 1456 const safeViewMoreUrl = safeUrl(window.hostUrl + "Search?Terms=" + encodeURIComponent(searchStr)); 1457 const $viewMoreLi = $('<li>', { 1458 role: 'option', 1459 tabindex: '-1', 1460 'data-url': safeViewMoreUrl 1461 }); 1462 1463 const $viewMoreA = $('<a>', { 1464 class: 'searchResultMoreBtn', 1465 href: safeViewMoreUrl 1466 }).text('View more results'); 1467 1468 $viewMoreLi.append($viewMoreA); 1469 $list.append($viewMoreLi); 1470} 1471 1472function handleKeyboardNavigation(e) { 1473 const $options = $("#autocomplete-list [role='option']"); 1474 if (!$options.length) return; 1475 1476 switch (e.key) { 1477 case "ArrowDown": 1478 e.preventDefault(); 1479 activeIndex = (activeIndex + 1) % $options.length; 1480 updateActiveOption($options); 1481 break; 1482 case "ArrowUp": 1483 e.preventDefault(); 1484 activeIndex = (activeIndex - 1 + $options.length) % $options.length; 1485 updateActiveOption($options); 1486 break; 1487 case "Enter": 1488 if (activeIndex >= 0) { 1489 e.preventDefault(); 1490 const $active = $options.eq(activeIndex); 1491 const url = $active.data("url"); 1492 if (url && url !== '#') window.location.href = url; 1493 closeAutocomplete(); 1494 } 1495 break; 1496 case "Escape": 1497 e.preventDefault(); 1498 closeAutocomplete(); 1499 break; 1500 } 1501} 1502 1503function updateActiveOption($options) { 1504 $options.removeClass("active").attr("aria-selected", "false"); 1505 $options.css("background-color", ""); 1506 const $active = $options.eq(activeIndex); 1507 if (!$active.length) return; 1508 $active.addClass("active").attr("aria-selected", "true"); 1509 $active.css("background-color", "#e9ecef"); 1510 $(".search-input").attr("aria-activedescendant", $active.attr("id")); 1511 $("#search-status").text($active.find('a').first().text().trim()); 1512} 1513 1514function closeAutocomplete() { 1515 $("#autocomplete-list").remove(); 1516 $(".search-input").attr("aria-expanded", "false").removeAttr("aria-activedescendant"); 1517} 1518</script>
vendor: 1 bytes, line 1518
1518
1519<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":"6b7c08268ae1439dbc203949bb67aa6b","r":1,"spa":2}' crossorigin="anonymous"></script>
1519 1520</body> 1521</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.