1 <!doctype html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 8 <meta name="robots" content="noindex,follow"> 9 <meta name="description" content="Search articles and issue pages from Ponca City News."> 10 <link rel="canonical" href="https://www.poncacitynews.com/search"> 11 12 <link rel="apple-touch-icon" sizes="57x57" href="/ui/icons/default3/apple-icon-57x57.png"> 13 <link rel="apple-touch-icon" sizes="60x60" href="/ui/icons/default3/apple-icon-60x60.png"> 14 <link rel="apple-touch-icon" sizes="72x72" href="/ui/icons/default3/apple-icon-72x72.png"> 15 <link rel="apple-touch-icon" sizes="76x76" href="/ui/icons/default3/apple-icon-76x76.png"> 16 <link rel="apple-touch-icon" sizes="114x114" href="/ui/icons/default3/apple-icon-114x114.png"> 17 <link rel="apple-touch-icon" sizes="120x120" href="/ui/icons/default3/apple-icon-120x120.png"> 18 <link rel="apple-touch-icon" sizes="144x144" href="/ui/icons/default3/apple-icon-144x144.png"> 19 <link rel="apple-touch-icon" sizes="152x152" href="/ui/icons/default3/apple-icon-152x152.png"> 20 <link rel="apple-touch-icon" sizes="180x180" href="/ui/icons/default3/apple-icon-180x180.png"> 21 <link rel="icon" type="image/png" sizes="192x192" href="/ui/icons/default3/android-icon-192x192.png"> 22 <link rel="icon" type="image/png" sizes="32x32" href="/ui/icons/default3/favicon-32x32.png"> 23 <link rel="icon" type="image/png" sizes="96x96" href="/ui/icons/default3/favicon-96x96.png"> 24 <link rel="icon" type="image/png" sizes="16x16" href="/ui/icons/default3/favicon-16x16.png"> 25 <link rel="manifest" href="/manifest.json"> 26 <meta name="msapplication-TileColor" content="#ffffff"> 27 <meta name="msapplication-TileImage" content="/ui/icons/default3/ms-icon-144x144.png"> 28 <meta name="theme-color" content="#ffffff"> 29 30 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-2FMn2Zx6PuH5tdBQDRNwrOo60ts5wWPC9R8jK67b3t4=" crossorigin="anonymous"> 31 32 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/fontawesome.min.css" integrity="sha256-G5bovI+uHM2gCO6EwO9PFQcclSBYzTaxY6DXks3YxBU=" crossorigin="anonymous"> 33 34 <link rel="preconnect" href="https://fonts.googleapis.com"> 35 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 36 <link href="https://fonts.googleapis.com/css2?family=League+Gothic&family=Lora:ital,wght@0,400..700;1,400..700&family=Roboto+Condensed:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet"> 37 38
38<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
38 39 40
40<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8317400995054712" 41 crossorigin="anonymous"></script>
41 42 43 44 <style> 45 46 </style> 47 48 <style> 49 :root { 50 --font-display: "League Gothic", sans-serif; 51 --font-head: "Roboto Condensed", sans-serif; 52 --font-body: "Lora", Georgia, "Iowan Old Style", "Times New Roman", serif; 53 54 --ink: #1a1a1a; 55 --ink-muted: #5f6672; 56 --ink-faint: #8a8f98; 57 --rule: #e2e5e9; 58 --surface-soft: #f6f7f9; 59 --accent: #0b5ed7; 60 61 --sp-1: 0.25rem; 62 --sp-2: 0.5rem; 63 --sp-3: 0.75rem; 64 --sp-4: 1rem; 65 --sp-5: 1.5rem; 66 --sp-6: 2rem; 67 --sp-7: 3rem; 68 69 --r-sm: 4px; 70 --r-md: 8px; 71 --r-lg: 14px; 72 --r-pill: 999px; 73 74 --accent-tint: #e8f0fe; 75 76 --header-h: 56px; 77 } 78 79 html { 80 /* Anchor links and scrollIntoView() stop below the fixed header. */ 81 scroll-padding-top: calc(var(--header-h) + 10px); 82 } 83 84 body { 85 padding: 0; 86 margin: 0; 87 background: #fff; 88 } 89 90 .skipLink { 91 position: absolute; 92 top: 8px; 93 left: 8px; 94 z-index: 3000; 95 padding: 10px 16px; 96 border-radius: var(--r-md); 97 background: #fff; 98 color: var(--accent); 99 font-weight: 700; 100 box-shadow: 0 2px 10px rgba(0, 0, 0, .25); 101 transform: translateY(-200%); 102 } 103 104 .skipLink:focus { 105 transform: none; 106 } 107 108 body.overlayOpen { 109 position: fixed; 110 left: 0; 111 right: 0; 112 width: 100%; 113 overflow: hidden; 114 } 115 116 input[type=text], 117 input[type=email], 118 input[type=tel], 119 textarea { 120 border-color: #444 !important; 121 } 122 123 h1, 124 h2, 125 h3, 126 h4 { 127 font-family: "League Gothic", sans-serif; 128 font-optical-sizing: auto; 129 font-weight: 400; 130 font-style: normal; 131 font-variation-settings: "wdth" 100; 132 } 133 134 .league-gothic { 135 font-family: "League Gothic", sans-serif; 136 font-optical-sizing: auto; 137 font-weight: 400; 138 font-style: normal; 139 font-variation-settings: "wdth" 100; 140 } 141 142 #areaToolbar { 143 background: var(--accent); 144 color: #fff; 145 height: 44px; 146 147 position: fixed; 148 bottom: 0px; 149 left: 0px; 150 width: 100%; 151 z-index: 2005; 152 } 153 154 #areaToolbarButtons { 155 position: absolute; 156 top: 0px; 157 left: 0px; 158 159 display: table; 160 width: 100%; 161 162 font-size: 1.2em; 163 font-weight: bold; 164 vertical-align: middle; 165 line-height: 44px; 166 text-align: center; 167 } 168 169 #areaToolbarButtons>div { 170 display: table-cell; 171 } 172 173 #areaToolbarButtons a { 174 display: block; 175 color: #fff; 176 text-align: center; 177 text-decoration: none; 178 } 179 180 #areaApp { 181 font-size: 0.9em; 182 } 183 184 #areaMenu { 185 display: none; 186 background: #fff; 187 position: absolute; 188 top: 0px; 189 right: 0px; 190 width: 250px; 191 bottom: 0px; 192 border-right: 1px solid #000; 193 z-index: 2005; 194 } 195 196 #areaMenu .listMenuFormat { 197 margin: 0; 198 padding: 0; 199 list-style-type: none; 200 } 201 202 #areaMenu .listMenuFormat div { 203 font-size: 15px; 204 font-weight: 600; 205 overflow: hidden; 206 white-space: nowrap; 207 } 208 209 #areaMenu .listMenuFormat .icon { 210 font-size: 15px; 211 vertical-align: middle; 212 } 213 214 #areaMenu .listMenuFormat a { 215 display: block; 216 color: #000; 217 text-decoration: none; 218 padding: 10px; 219 border-bottom: 1px solid #aaa; 220 } 221 222 #btnMenu { 223 position: absolute; 224 top: 6px; 225 right: 10px; 226 font-size: 1.3em; 227 color: #fff; 228 cursor: pointer; 229 cursor: hand; 230 } 231 232 #areaHeader { 233 position: fixed; 234 top: 0px; 235 left: 0px; 236 right: 0px; 237 width: 100%; 238 height: var(--header-h); 239 240 background: #fff; 241 border-bottom: 1px solid #aaa; 242 z-index: 1001; 243 } 244 245 /* The masthead sits in the middle column and the side columns share the rest 246 equally, so it stays centered without measuring anything in JS. */ 247 #cellHeader { 248 display: grid; 249 grid-template-columns: minmax(max-content, 1fr) auto minmax(max-content, 1fr); 250 align-items: center; 251 gap: 8px; 252 height: 100%; 253 max-width: 1350px; 254 margin: 0px auto; 255 padding: 0px 8px; 256 overflow: hidden; 257 258 color: #000; 259 260 font-size: 20px; 261 font-weight: bold; 262 } 263 264 #cellHeader .cardLeft, 265 #cellHeader .cardRight { 266 display: flex; 267 align-items: center; 268 gap: 8px; 269 white-space: nowrap; 270 } 271 272 #cellHeader .cardRight { 273 justify-content: flex-end; 274 } 275 276 #cellHeader a { 277 color: #000; 278 text-decoration: none; 279 } 280 281 /* Outlined icon buttons: a 40px box with the tap area extended to 44px. */ 282 #cellHeader .btnMenu, 283 #cellHeader .btnSidebar { 284 position: relative;
285 align-items: center; 286 justify-content: center; 287 gap: 7px; 288 min-width: 40px; 289 height: 40px; 290 padding: 0px 11px; 291 border: 1px solid #c9ced6; 292 border-radius: var(--r-md); 293 background: #fff; 294 box-shadow: 0 1px 2px rgba(16, 24, 40, 0.06); 295 color: var(--ink); 296 font-family: var(--font-head); 297 font-size: 16px; 298 font-weight: 600; 299 line-height: 1; 300 transition: background-color 0.15s ease-out, border-color 0.15s ease-out; 301 } 302 303 #cellHeader .btnMenu::after, 304 #cellHeader .btnSidebar::after { 305 content: ""; 306 position: absolute; 307 inset: -3px; 308 } 309 310 #cellHeader .btnMenu svg, 311 #cellHeader .btnSidebar svg { 312 font-size: 17px; 313 } 314 315 #cellHeader .btnMenu:hover, 316 #cellHeader .btnSidebar:hover { 317 border-color: #9aa1ab; 318 background: var(--surface-soft); 319 color: var(--ink); 320 } 321 322 #cellHeader .btnMenu:active, 323 #cellHeader .btnSidebar:active { 324 background: var(--rule); 325 } 326 327 #cellHeader .btnMenu:focus-visible, 328 #cellHeader .btnSidebar:focus-visible { 329 outline: 2px solid var(--accent); 330 outline-offset: 2px; 331 } 332 333 #cellHeader .mastLink { 334 display: flex; 335 align-items: center; 336 justify-content: center; 337 min-width: 0; 338 height: 100%; 339 } 340 341 .mastImage { 342 display: block; 343 width: auto; 344 height: calc(var(--header-h) - 12px); 345 max-width: 100%; 346 object-fit: contain; 347 } 348 349 .mastText { 350 overflow: hidden; 351 font-family: var(--font-display); 352 font-size: calc(var(--header-h) * 0.55); 353 font-weight: 400; 354 line-height: 1; 355 text-overflow: ellipsis; 356 white-space: nowrap; 357 } 358 359 .weatherBadge { 360 align-items: center; 361 gap: 6px; 362 color: #000; 363 text-decoration: none; 364 line-height: 1.1; 365 } 366 367 .weatherHeader { 368 display: none !important; 369 font-size: 15px; 370 font-weight: 700; 371 padding: 7px 9px !important; 372 border: 1px solid #bbb; 373 border-radius: 6px; 374 background: rgba(255, 255, 255, 0.88); 375 z-index: 1001; 376 } 377 378 .weatherSidebar { 379 display: flex; 380 flex-wrap: wrap; 381 justify-content: center; 382 margin-bottom: 1rem; 383 padding: 10px; 384 border: 1px solid #bbb; 385 border-radius: 6px; 386 background: #fff; 387 text-align: center; 388 } 389 390 .puzzlesCard { 391 margin-bottom: 1rem; 392 overflow: hidden; 393 border: 1px solid #91d5aa; 394 border-radius: 12px; 395 } 396 397 .puzzlesCardHeader { 398 display: flex; 399 flex-wrap: wrap; 400 align-items: center; 401 justify-content: space-between; 402 gap: 10px; 403 padding: 8px 14px; 404 background: linear-gradient(135deg, #137a43 0%, #249b58 100%); 405 color: #fff; 406 } 407 408 .puzzlesCardLabel { 409 color: #fff; 410 font-size: 11px; 411 font-weight: 700; 412 letter-spacing: 0.8px; 413 text-transform: uppercase; 414 text-decoration: none; 415 } 416 417 .puzzlesCardLabel:hover, 418 .puzzlesCardLabel:focus { 419 color: #fff; 420 text-decoration: underline; 421 } 422 423 .puzzlesCardToday { 424 font-size: 13px; 425 white-space: nowrap; 426 } 427 428 .puzzlesCardBody { 429 padding: 14px 16px; 430 background: linear-gradient(180deg, #edf9f0 0%, #fff 60%); 431 } 432 433 .puzzlesCardHeadline { 434 margin-bottom: 4px; 435 color: #146c43; 436 font-size: 1.2rem; 437 font-weight: 700; 438 line-height: 1.35; 439 } 440 441 .puzzlesCardMeta { 442 color: #527060; 443 font-size: 13px; 444 } 445 446 /* One picture tile per game; three across even on phones. */ 447 .puzzlesCardGames { 448 display: grid; 449 grid-template-columns: repeat(auto-fit, minmax(84px, 1fr)); 450 gap: 8px; 451 margin-top: 10px; 452 } 453 454 .puzzlesCardGame { 455 display: flex; 456 flex-direction: column; 457 align-items: center; 458 gap: 4px; 459 padding: 8px 6px 10px; 460 border: 1px solid #cfe8d8; 461 border-radius: 12px; 462 background: #fff; 463 color: #1d3b2a; 464 text-align: center; 465 text-decoration: none; 466 transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; 467 } 468 469 .puzzlesCardGame:hover, 470 .puzzlesCardGame:focus-visible { 471 border-color: #198754; 472 box-shadow: 0 4px 12px rgba(20, 108, 67, 0.18); 473 color: #1d3b2a; 474 text-decoration: none; 475 } 476 477 .puzzlesCardGameArt { 478 width: 100%; 479 max-width: 112px; 480 height: auto; 481 aspect-ratio: 1; 482 border-radius: 10px; 483 } 484 485 .puzzlesCardGameTitle { 486 font-size: 14px; 487 font-weight: 700; 488 line-height: 1.2; 489 } 490 491 .puzzlesCardGameStatus { 492 color: #198754; 493 font-size: 12px; 494 font-weight: 600; 495 white-space: nowrap; 496 } 497 498 .puzzlesCardGame--started .puzzlesCardGameStatus { 499 color: #805900; 500 } 501 502 .puzzlesCardGame--done { 503 background: #e9f7ef; 504 } 505 506 .puzzlesCardGame--unavailable .puzzlesCardGameStatus { 507 color: #68717d; 508 } 509 510 .puzzlesCardGameName { 511 padding: 8px 12px; 512 border: 1px solid #91d5aa; 513 border-radius: 999px; 514 color: #146c43; 515 font-size: 13px; 516 font-weight: 700; 517 } 518 519 .weatherSidebar .weatherTemp { 520 font-size: 26px; 521 font-weight: 700; 522 } 523 524 .weatherSidebar .weatherCondition { 525 flex-basis: 100%; 526 margin-top: 4px; 527 font-size: 14px; 528 } 529 530 .weatherAlertIndicator { 531 display: inline-flex; 532 align-items: center; 533 gap: 4px; 534 color: #9a3412; 535 } 536 537 .weatherHeader .weatherAlertText { 538 display: none; 539 } 540 541 .weatherSidebar .weatherAlertIndicator { 542 flex-basis: 100%; 543 justify-content: center; 544 margin-top: 4px; 545 font-size: 13px; 546 font-weight: 700; 547 } 548 549 .weatherPage h2 { 550 font-size: 1.45rem; 551 } 552 553 .weatherAlertList { 554 display: grid; 555 gap: 12px; 556 } 557 558 .weatherAlertCard { 559 border: 1px solid #e6c86b; 560 border-radius: 14px; 561 background: linear-gradient(180deg, #fffaf0 0%, #fffdf7 100%); 562 overflow: hidden; 563 } 564 565 .weatherAlertSummary { 566 list-style: none; 567 cursor: pointer; 568 padding: 16px; 569 } 570 571 .weatherAlertSummary::-webkit-details-marker { 572 display: none; 573 } 574 575 .weatherAlertHeader { 576 display: flex; 577 justify-content: space-between; 578 gap: 12px; 579 align-items: flex-start; 580 } 581 582 .weatherAlertTitle { 583 font-size: 1.1rem; 584 font-weight: 700; 585 color: #6d4c00; 586 } 587 588 .weatherAlertBadges { 589 display: flex; 590 flex-wrap: wrap; 591 gap: 8px; 592 justify-content: flex-end; 593 } 594 595 .weatherAlertBadge { 596 display: inline-flex; 597 align-items: center; 598 padding: 4px 10px; 599 border-radius: 999px; 600 background: #fff3cd; 601 color: #7a5700; 602 font-size: 12px; 603 font-weight: 700; 604 line-height: 1.2; 605 } 606 607 .weatherAlertBadgeSeverity { 608 background: #f8d7da; 609 color: #842029; 610 } 611 612 .weatherAlertMeta { 613 display: grid; 614 grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); 615 gap: 10px; 616 margin-top: 14px; 617 } 618 619 .weatherAlertMetaLabel { 620 display: block; 621 font-size: 12px; 622 text-transform: uppercase; 623 letter-spacing: .04em; 624 color: #8a6d1d; 625 } 626 627 .weatherAlertMetaValue { 628 display: block; 629 margin-top: 2px; 630 font-weight: 600; 631 color: #4d3b04; 632 } 633 634 .weatherAlertHint { 635 margin-top: 12px; 636 font-size: 13px; 637 font-weight: 600; 638 color: #7a5700; 639 } 640 641 .weatherAlertCard[open] .weatherAlertHint::before { 642 content: "Click to hide details"; 643 } 644 645 .weatherAlertCard:not([open]) .weatherAlertHint::before { 646 content: "Click to read details"; 647 } 648 649 .weatherAlertBody { 650 padding: 16px; 651 border-top: 1px solid #f1d98a; 652 color: #4d3b04; 653 line-height: 1.5; 654 } 655 656 .weatherAlertHeadline { 657 font-weight: 700; 658 margin-bottom: 12px; 659 } 660 661 .weatherCurrent { 662 padding: 20px; 663 border: 1px solid #dbe4ea; 664 border-radius: 18px; 665 background: linear-gradient(180deg, #f7fbff 0%, #ffffff 100%); 666 box-shadow: 0 8px 24px rgba(34, 62, 87, 0.05); 667 } 668 669 .weatherCurrentHero { 670 display: flex; 671 align-items: center; 672 gap: 14px; 673 } 674 675 .weatherCurrentIcon { 676 width: 74px; 677 height: 74px; 678 object-fit: contain; 679 } 680 681 .weatherCurrentTemp { 682 font-size: 54px; 683 line-height: 1; 684 font-weight: 700; 685 } 686 687 .weatherCurrentCondition { 688 font-size: 20px; 689 font-weight: 600; 690 } 691 692 .weatherCurrentDetails { 693 display: grid; 694 grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); 695 gap: 12px; 696 margin-top: 16px; 697 } 698 699 .weatherCurrentDetails>div { 700 padding: 12px 14px; 701 border: 1px solid #d8e3eb; 702 border-radius: 14px; 703 background: #fff; 704 } 705 706 .weatherDetailLabel { 707 display: block; 708 font-size: 13px; 709 color: #666; 710 } 711 712 .weatherDetailValue { 713 display: block; 714 font-weight: 700; 715 } 716 717 .weatherTodayHiLo,
718 .weatherForecastTemps { 719 display: flex; 720 gap: 12px; 721 font-weight: 700; 722 } 723 724 .weatherTodayHiLo { 725 font-size: 24px; 726 } 727 728 .weatherTodayPrecip { 729 margin-top: 8px; 730 font-size: 14px; 731 font-weight: 700; 732 color: #0b5ed7; 733 } 734 735 .weatherTodayForecast { 736 padding: 18px 20px; 737 border: 1px solid #dbe4ea; 738 border-radius: 16px; 739 background: #fff; 740 } 741 742 .weatherTodayForecastHeader { 743 display: flex; 744 align-items: center; 745 justify-content: space-between; 746 gap: 12px; 747 margin-bottom: 8px; 748 } 749 750 .weatherForecastList { 751 display: grid; 752 grid-template-columns: 1fr; 753 gap: 12px; 754 } 755 756 .weatherForecastDay { 757 display: flex; 758 justify-content: space-between; 759 gap: 16px; 760 align-items: center; 761 padding: 14px 16px; 762 border: 1px solid #dbe4ea; 763 border-radius: 16px; 764 background: #fff; 765 } 766 767 .weatherForecastMain { 768 display: flex; 769 align-items: center; 770 gap: 12px; 771 min-width: 0; 772 } 773 774 .weatherForecastIcon { 775 width: 52px; 776 height: 52px; 777 object-fit: contain; 778 flex: 0 0 auto; 779 } 780 781 .weatherForecastName { 782 font-weight: 700; 783 } 784 785 .weatherForecastText { 786 color: #334; 787 } 788 789 .weatherForecastAside { 790 display: flex; 791 flex-direction: column; 792 align-items: flex-end; 793 gap: 8px; 794 flex: 0 0 auto; 795 } 796 797 .weatherForecastPrecip { 798 display: inline-flex; 799 align-items: center; 800 padding: 4px 10px; 801 border-radius: 999px; 802 background: #e7f1ff; 803 color: #0b5ed7; 804 font-size: 13px; 805 font-weight: 700; 806 line-height: 1.2; 807 } 808 809 @media (max-width: 767px) { 810 .weatherAlertHeader, 811 .weatherTodayForecastHeader, 812 .weatherForecastDay { 813 display: block; 814 } 815 816 .weatherAlertBadges, 817 .weatherForecastAside { 818 justify-content: flex-start; 819 align-items: flex-start; 820 margin-top: 10px; 821 } 822 823 .weatherCurrentHero { 824 align-items: flex-start; 825 } 826 827 .weatherCurrentIcon { 828 width: 64px; 829 height: 64px; 830 } 831 832 .weatherForecastMain { 833 margin-bottom: 10px; 834 } 835 } 836 837 .wxStoryCard { 838 border-radius: 12px; 839 overflow: hidden; 840 border: 1px solid #b8d4ea; 841 } 842 843 .wxStoryCardHeader { 844 display: flex; 845 justify-content: space-between; 846 align-items: center; 847 padding: 8px 14px; 848 background: linear-gradient(135deg, #1565a8 0%, #1e87cc 100%); 849 color: #fff; 850 gap: 10px; 851 flex-wrap: wrap; 852 } 853 854 .wxStoryCardHeader, 855 .wxStoryCardHeader:hover, 856 .wxStoryCardHeader:focus { 857 color: #fff; 858 text-decoration: none; 859 } 860 861 .wxStoryCardLabel { 862 font-size: 11px; 863 font-weight: 700; 864 text-transform: uppercase; 865 letter-spacing: 0.8px; 866 white-space: nowrap; 867 } 868 869 .wxStoryCardConditions { 870 display: flex; 871 align-items: center; 872 gap: 6px; 873 min-width: 0; 874 } 875 876 .wxStoryCardIcon { 877 width: 30px; 878 height: 30px; 879 object-fit: contain; 880 flex-shrink: 0; 881 } 882 883 .wxStoryCardTemp { 884 font-size: 17px; 885 font-weight: 700; 886 white-space: nowrap; 887 } 888 889 .wxStoryCardCond { 890 font-size: 13px; 891 white-space: nowrap; 892 overflow: hidden; 893 text-overflow: ellipsis; 894 } 895 896 .wxStoryCardBody { 897 padding: 14px 16px; 898 background: linear-gradient(180deg, #f0f7fd 0%, #fff 60%); 899 } 900 901 .wxStoryCardHeadline { 902 display: block; 903 font-size: 1.2rem; 904 font-weight: 700; 905 line-height: 1.35; 906 color: #0b5ed7; 907 text-decoration: underline; 908 margin-bottom: 6px; 909 } 910 911 .wxStoryCardHeadline:hover { 912 color: #0a4fac; 913 text-decoration: underline; 914 } 915 916 .wxStoryCardMeta { 917 font-size: 12px; 918 color: #6c757d; 919 } 920 921 .wxStoryCardVideoBtn { 922 display: inline-flex; 923 align-items: center; 924 gap: 8px; 925 flex: 0 0 auto; 926 padding: 8px 16px; 927 border-radius: 999px; 928 background: #cc0000; 929 color: #fff; 930 font-size: 14px; 931 font-weight: 700; 932 text-decoration: none; 933 line-height: 1.2; 934 transition: background 0.15s ease-in-out; 935 } 936 937 .wxStoryCardVideoBtn:hover, 938 .wxStoryCardVideoBtn:focus { 939 background: #a30000; 940 color: #fff; 941 text-decoration: none; 942 } 943 944 .wxStoryCardVideoBtn i { 945 font-size: 18px; 946 } 947 948 #floatMenu { 949 padding: 10px 8px 16px; 950 text-align: left; 951 } 952 953 #floatMenu ul { 954 margin: 0px; 955 padding: 0px; 956 list-style: none; 957 } 958 959 /* Menu rows: 44px touch targets in the drawer, 38px on the desktop rail. */ 960 .menuLink { 961 position: relative; 962 display: flex; 963 align-items: center; 964 gap: 10px; 965 width: 100%; 966 min-height: 44px; 967 padding: 0px 10px; 968 border: 0px; 969 border-radius: 6px; 970 background: none; 971 color: var(--ink); 972 font-family: var(--font-head); 973 font-size: 16px; 974 font-weight: 600; 975 line-height: 1.2; 976 text-align: left; 977 text-decoration: none; 978 } 979 980 .menuLink:hover { 981 background: var(--surface-soft); 982 color: var(--ink); 983 } 984 985 .menuLink:focus-visible, 986 .menuSubLink:focus-visible { 987 outline: 2px solid var(--accent); 988 outline-offset: -2px; 989 } 990 991 .menuIcon { 992 flex: 0 0 20px; 993 color: var(--ink-muted); 994 font-size: 15px; 995 text-align: center; 996 } 997 998 .menuLabel { 999 flex: 1 1 auto; 1000 min-width: 0; 1001 overflow: hidden; 1002 text-overflow: ellipsis; 1003 white-space: nowrap; 1004 } 1005 1006 .menuLink.active, 1007 .menuSubLink.active { 1008 background: var(--accent-tint); 1009 color: var(--accent); 1010 } 1011 1012 .menuLink.active::before, 1013 .menuSubLink.active::before { 1014 content: ""; 1015 position: absolute; 1016 top: 6px; 1017 bottom: 6px; 1018 left: 0px; 1019 width: 3px; 1020 border-radius: 3px; 1021 background: var(--accent); 1022 } 1023 1024 .menuLink.active .menuIcon, 1025 .menuLink.activeParent, 1026 .menuLink.activeParent .menuIcon { 1027 color: var(--accent); 1028 } 1029 1030 .menuChevron { 1031 color: var(--ink-muted); 1032 font-size: 13px; 1033 transition: transform 0.15s ease-out; 1034 } 1035 1036 .btnMenuSections[aria-expanded="false"] .menuChevron { 1037 transform: rotate(-90deg); 1038 } 1039 1040 .menuGroupLabel { 1041 margin: 12px 10px 4px; 1042 color: var(--ink-muted); 1043 font-family: var(--font-head); 1044 font-size: 12px; 1045 font-weight: 700; 1046 line-height: 14px; 1047 letter-spacing: 0.08em; 1048 text-transform: uppercase; 1049 } 1050 1051 /* Section sub-items line up with the parent label, next to a thin guide rule. */ 1052 #floatMenu .menuSubList { 1053 margin: 0px 0px 6px 19px; 1054 padding-left: 10px; 1055 border-left: 1px solid var(--rule); 1056 } 1057 1058 .menuSubLink { 1059 position: relative; 1060 display: flex; 1061 align-items: center; 1062 min-height: 44px; 1063 padding: 0px 10px; 1064 border-radius: 6px; 1065 color: var(--ink); 1066 font-family: var(--font-head); 1067 font-size: 15px; 1068 font-weight: 500; 1069 line-height: 1.2; 1070 text-decoration: none; 1071 } 1072 1073 .menuSubLink:hover { 1074 background: var(--surface-soft); 1075 color: var(--ink); 1076 } 1077 1078 #floatMenu .areaMenuClose .menuLink { 1079 color: var(--ink-muted); 1080 } 1081 1082 #floatSidebar { 1083 /* 1084 position: sticky; 1085 top: 0px; 1086 left: 0px; 1087 overflow-y: auto; 1088 height: calc(100vh - 55px); 1089 width: 100%; 1090 */ 1091 } 1092 1093 #areaFooter { 1094 padding-top: 20px; 1095 padding-bottom: 20px; 1096 background: #000; 1097 color: #fff; 1098 min-height: 200px; 1099 } 1100 1101 #areaFooter a { 1102 color: #fff; 1103 } 1104 1105 .footerNav { 1106 column-count: 2; 1107 column-gap: 24px; 1108 } 1109 1110 .footerNavGroup { 1111 break-inside: avoid; 1112 margin-bottom: 14px; 1113 } 1114 1115 .footerNavLabel { 1116 margin-bottom: 4px; 1117 color: rgba(255, 255, 255, 0.7); 1118 font-size: 12px; 1119 font-weight: 700; 1120 letter-spacing: 0.08em; 1121 text-transform: uppercase; 1122 } 1123 1124 .footerNav ul { 1125 margin: 0px; 1126 padding: 0px; 1127 list-style: none; 1128 } 1129 1130 .footerNav li { 1131 padding: 3px 0px; 1132 } 1133 1134 .areaWithoutNews { 1135 display: block; 1136 } 1137 1138 .space { 1139 margin-bottom: 10px; 1140 } 1141 1142 #areaMainContent { 1143 margin-top: calc(var(--header-h) + 10px); 1144 } 1145 1146 #cellContent:focus { 1147 outline: none; 1148 } 1149 1150 #gridApp { 1151 margin: 0px auto; 1152 padding: 0px 10px; 1153 max-width: 1350px; 1154 min-height: 400px; 1155 display: grid; 1156 grid-template-columns: 100%; 1157 grid-template-rows: auto; 1158 grid-template-areas: 1159 "content"; 1160 gap: 15px; 1161 } 1162 1163 #cellMenu { 1164 position: fixed; 1165 top: 0px; 1166 bottom: 0px; 1167 left: 0px; 1168 width: 250px; 1169 height: auto; 1170 max-height: 100dvh; 1171 overflow-y: auto; 1172 overscroll-behavior: contain; 1173 -webkit-overflow-scrolling: touch; 1174 touch-action: pan-y; 1175 padding-bottom: calc(60px + env(safe-area-inset-bottom, 0px)); 1176 box-sizing: border-box; 1177 background: #fff; 1178 border-right: 1px solid #000; 1179 z-index: 2005; 1180 transition: transform 0.2s ease-out; 1181 transform: translateX(-100%); 1182 } 1183 1184 #cellSidebar { 1185 position: fixed; 1186 top: 0px; 1187 bottom: 0px; 1188 right: 0px; 1189 width: 88vw; 1190 max-width: 344px; 1191 height: auto; 1192 max-height: 100dvh; 1193 box-sizing: border-box; 1194 overflow-y: auto; 1195 overflow-x: hidden; 1196 overscroll-behavior: contain; 1197 -webkit-overflow-scrolling: touch; 1198 touch-action: pan-y; 1199 background: #fff; 1200 border-left: 1px solid #000; 1201 z-index: 2006; 1202 padding: 10px 15px calc(10px + env(safe-area-inset-bottom, 0px)); 1203 transition: transform 0.2s ease-out; 1204 transform: translateX(100%); 1205 } 1206 1207 #cellMenu.visible, 1208 #cellSidebar.visible { 1209 transform: translateX(0); 1210 } 1211 1212 #btnCloseSidebar { 1213 display: block; 1214 text-align: right; 1215 font-size: 20px; 1216 padding-bottom: 10px; 1217 } 1218 1219 #cellBanner { 1220 grid-area: banner; 1221 } 1222 1223 #cellLowerBanner { 1224 grid-area: lowerBanner; 1225 } 1226 1227 #cellContent { 1228 grid-area: content; 1229 } 1230 1231 #cellHeader .btnMenu, 1232 #cellHeader .btnSidebar { 1233 display: inline-flex !important; 1234 } 1235 1236 #cellHeader .btnMenu .btnLabel { 1237 display: none; 1238 } 1239 1240 #areaMenuBlocker, 1241 #areaSidebarBlocker { 1242 position: fixed; 1243 top: 0px; 1244 left: 0px; 1245 right: 0px; 1246 bottom: 0px; 1247 background: rgba(0, 0, 0, 0.5); 1248 z-index: 1002; 1249 1250 opacity: 0; 1251 visibility: hidden; 1252 /* Prevents interaction when hidden */ 1253 transition: opacity 0.1s ease-out; 1254 pointer-events: none; 1255 /* Clicks pass through when hidden */ 1256 } 1257 1258 #areaMenuBlocker.visible, 1259 #areaSidebarBlocker.visible { 1260 opacity: 1; 1261 visibility: visible; 1262 pointer-events: auto; 1263 } 1264 1265 .zoneSda, .zoneSdaServe { 1266 margin-bottom: 15px; 1267 } 1268 1269 .zoneSdaLeaderboard { 1270 display: flex; 1271 align-items: center; 1272 justify-content: center; 1273 } 1274 1275 .zoneSdaLeaderboard > a { 1276 width: 100%; 1277 } 1278 1279 .zoneSdaLeaderboard img { 1280 width: auto; 1281 height: auto; 1282 } 1283 1284 .zoneSdaLeaderboard .localAdLeaderboardLink { 1285 display: inline-block; 1286 max-width: 100%; 1287 } 1288 1289 .zoneSdaLeaderboard .localAdLeaderboardImage { 1290 max-height: 150px; 1291 max-width: 100%; 1292 } 1293 1294 .localAdHtmlFrame { 1295 border: 0; 1296 display: block; 1297 height: 150px; 1298 max-width: 100%; 1299 pointer-events: none; 1300 width: 100%; 1301 } 1302 1303 .localAdSidebar .localAdHtmlFrame { 1304 height: 250px; 1305 } 1306 1307 .localAdInPage .localAdHtmlFrame { 1308 height: 120px; 1309 } 1310 1311 .advertisementWrapper { 1312 border: 1px solid #ccc; 1313 border-radius: 10px; 1314 padding: 5px; 1315 text-align: center; 1316 overflow: hidden; 1317 max-width: 100%; 1318 } 1319 1320 .googleAdWrapper, 1321 .googleAdWrapper .adsbygoogle, 1322 .googleAdWrapper iframe { 1323 max-width: 100% !important; 1324 } 1325 1326 .googleAdWrapper .adsbygoogle { 1327 display: block; 1328 overflow: hidden; 1329 } 1330 1331 .advertisementLabel { 1332 color: #444; 1333 font-size: 0.9em; 1334 padding-bottom: 5px; 1335 text-transform: uppercase; 1336 } 1337 1338 .popularArticles { margin-top: 20px; } 1339 .popularArticles .card-body { padding: 14px; } 1340 .popularArticles-heading { margin: 0 0 8px; font-family: "Roboto Condensed", sans-serif; font-size: 1.45rem; font-weight: 700; line-height: 1; } 1341 .popularArticles-list { margin: 0; padding: 0; list-style: none; } 1342 .popularArticles-item { border-top: 1px solid #d7d7d7; } 1343 .popularArticles-link { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 10px; padding: 10px 0; color: #111; text-decoration: none; } 1344 .popularArticles-item--text .popularArticles-link { grid-template-columns: minmax(0, 1fr); } 1345 .popularArticles-image { display: block; width: 72px; height: 72px; object-fit: cover; } 1346 .popularArticles-copy { min-width: 0; } 1347 .popularArticles-headline { display: -webkit-box; overflow: hidden; font-family: "Roboto Condensed", sans-serif; font-size: 1.08rem; font-weight: 700; line-height: 1.08; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } 1348 .popularArticles-date { display: block; margin-top: 5px; color: #666; font-size: .78rem; line-height: 1.2; } 1349 .popularArticles-link:hover .popularArticles-headline { text-decoration: underline; } 1350 .popularArticles-link:focus-visible { outline: 3px solid #1265a8; outline-offset: 2px; } 1351 1352 .breakingNewsBar { 1353 display: flex; 1354 align-items: stretch; 1355 background: #b00020; 1356 color: #fff; 1357 margin: 0 0 15px; 1358 min-height: 42px; 1359 overflow: hidden; 1360 border-radius: 3px; 1361 box-shadow: 0 2px 6px rgba(0, 0, 0, .15); 1362 } 1363 1364 .breakingNewsLabel { 1365 flex: 0 0 auto; 1366 display: flex; 1367 align-items: center; 1368 padding: 0 14px; 1369 background: #7f0017; 1370 font-weight: 800; 1371 text-transform: uppercase; 1372 white-space: nowrap; 1373 } 1374 1375 .breakingNewsItems { 1376 flex: 1 1 auto; 1377 min-width: 0; 1378 display: flex; 1379 align-items: center; 1380 overflow: hidden; 1381 } 1382 1383 .breakingNewsTrack { 1384 display: inline-flex; 1385 align-items: center; 1386 gap: 30px; 1387 min-width: 0; 1388 padding: 0 14px; 1389 white-space: nowrap; 1390 } 1391 1392 .breakingNewsTrack a { 1393 color: #fff; 1394 font-weight: 700; 1395 text-decoration: none; 1396 } 1397 1398 .breakingNewsTrack a::after { 1399 content: "\2022"; 1400 margin-left: 30px; 1401 color: rgba(255, 255, 255, .75); 1402 } 1403 1404 .breakingNewsTrack a:last-child::after { 1405 content: ""; 1406 margin-left: 0; 1407 } 1408 1409 .breakingNewsBar.isAnimated .breakingNewsTrack { 1410 min-width: max-content; 1411 padding-left: 100%; 1412 animation: breaking-news-scroll 28s linear infinite; 1413 } 1414 1415 .breakingNewsBar.isAnimated:hover .breakingNewsTrack { 1416 animation-play-state: paused; 1417 } 1418 1419 @keyframes breaking-news-scroll { 1420 from { 1421 transform: translateX(0); 1422 } 1423 1424 to { 1425 transform: translateX(-100%); 1426 } 1427 } 1428 1429 /* ARTICLES */ 1430 1431 h2.textSection a { 1432 color: #000; 1433 text-decoration: none; 1434 } 1435 1436 .cardContent { 1437 padding-left: calc(var(--bs-gutter-x, 1.5rem) * .5); 1438 padding-right: calc(var(--bs-gutter-x, 1.5rem) * .5); 1439 } 1440 1441 .article { 1442 margin-bottom: 15px; 1443 } 1444 1445 .article .title { 1446 font-family: "Roboto Condensed", sans-serif; 1447 font-optical-sizing: auto; 1448 font-weight: bold; 1449 font-style: normal; 1450 1451 margin-bottom: 5px; 1452 } 1453 1454 .articleList .article a, .articleSmallList .article a { 1455 display: block; 1456 color: #000; 1457 text-decoration: none; 1458 } 1459 1460 .article .title .headline { 1461 font-weight: bold; 1462 font-size: 2em; 1463 line-height: 1em; 1464 } 1465 1466 .articleSmallList .article .photo { 1467 text-align: center; 1468 background: #eee; 1469 } 1470 1471 .articleSmallList .article .title .headline { 1472 font-size: 1.2em; 1473 } 1474 1475 /* Article cards share one image and layout contract across home and lists. */ 1476 .articleCard { 1477 position: relative; 1478 display: grid; 1479 grid-template-columns: minmax(96px, 30%) minmax(0, 1fr); 1480 gap: 12px; 1481 margin: 0; 1482 padding: 12px 0; 1483 border-bottom: 1px solid #d7d7d7; 1484 } 1485 1486 .articleCard--lead { 1487 display: block; 1488 padding-top: 0; 1489 } 1490 1491 .articleCard--text { grid-template-columns: minmax(0, 1fr); } 1492 .articleCard--text .articleCard-body { grid-column: 1 / -1; width: 100%; } 1493 .articleCard-media { position: relative; overflow: hidden; background: #eee; aspect-ratio: 4 / 3; } 1494 .articleCard-media--standard { aspect-ratio: 4 / 3; } 1495 .articleCard-media--landscape { aspect-ratio: 16 / 9; } 1496 .articleCard-media--portrait { aspect-ratio: 3 / 4; } 1497 .articleCard-media--square { aspect-ratio: 1; } 1498 /* The slot reserves its space before the image arrives. Containing the image 1499 preserves the complete photograph; the neutral background is intentional 1500 letterboxing rather than a failed crop. */ 1501 .articleCard-media img { display: block; width: 100%; height: 100%; object-fit: contain; } 1502 .articleCard--lead .articleCard-media { margin-bottom: 10px; } 1503 .articleCard-body { min-width: 0; } 1504 .articleCard-kicker { color: #8b1c1c; font-size: .78rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; } 1505 .articleCard-headline { margin: 0; font-family: "Roboto Condensed", sans-serif; font-size: 1.3rem; font-weight: 700; line-height: 1.08; } 1506 .a
1506rticleCard--lead .articleCard-headline { font-size: clamp(1.75rem, 4vw, 2.5rem); } 1507 .articleCard-headline a { color: #111; text-decoration: none; } 1508 .articleCard-headline a::after { content: ""; position: absolute; inset: 0; } 1509 .articleCard-headline a:hover { text-decoration: underline; } 1510 .articleCard:focus-within { outline: 3px solid #1265a8; outline-offset: 3px; } 1511 .articleCard-headline a:focus { outline: none; } 1512 .articleCard-deck { margin-top: 4px; font-weight: 600; line-height: 1.2; } 1513 .articleCard-meta { display: flex; flex-wrap: wrap; gap: 5px 9px; margin-top: 6px; color: #666; font-size: .78rem; line-height: 1.2; } 1514 .articleCard-byline { color: #333; font-weight: 700; } 1515 .articleCard-teaser { display: -webkit-box; overflow: hidden; margin: 7px 0 0; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.32; } 1516 .articleCard-badge { position: absolute; right: 6px; bottom: 6px; padding: 3px 6px; background: rgba(0, 0, 0, .78); color: #fff; font-size: .75rem; } 1517 .articleCard-badge--photos { left: 6px; right: auto; } 1518 .articleCard-lock { color: #555; } 1519 .articleList .articleCard--lead { margin-bottom: 8px; } 1520 /* Keep section-list leads in their reserved media slot, including while lazy 1521 images load, while allowing portrait and landscape sources to letterbox. */ 1522 .articleList .articleCard--lead .articleCard-media { 1523 background: var(--surface-soft, #f3f4f5); 1524 border-radius: var(--r-sm, 4px); 1525 } 1526 .articleList .articleCard--compact { grid-template-columns: 72px minmax(0, 1fr); } 1527 .articleList .articleCard--compact .articleCard-media { width: 72px; height: 72px; } 1528 .articleList .articleCard--compact.articleCard--text { grid-template-columns: minmax(0, 1fr); } 1529 1530 .homeSection-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; border-top: 3px solid #222; } 1531 .homeSection-heading .textSection { margin: 6px 0; } 1532 .homeSection-more { color: #222; font-size: .86rem; font-weight: 700; text-decoration: none; white-space: nowrap; } 1533 .homeSection-more:hover { text-decoration: underline; } 1534 .homeSection-grid { display: grid; grid-template-columns: minmax(0, 1fr); } 1535 .homeSection-grid .articleCard--compact { grid-template-columns: 72px minmax(0, 1fr); } 1536 .homeSection-grid .articleCard--compact .articleCard-media { width: 72px; height: 72px; } 1537 .homeSection-grid .articleCard--compact.articleCard--text { grid-template-columns: minmax(0, 1fr); } 1538 1539 @media (min-width: 768px) { 1540 .articleCard { grid-template-columns: 180px minmax(0, 1fr); } 1541 .articleList .articleCard--compact { grid-template-columns: 72px minmax(0, 1fr); } 1542 .homeSection-grid { grid-template-columns: minmax(0, 1.35fr) minmax(220px, .65fr); column-gap: 24px; } 1543 .homeSection-grid .articleCard--lead { grid-row: span 3; } 1544 } 1545 1546 .article .title .kicker, .article .title .deck { 1547 font-weight: bold; 1548 font-size: 1.2em; 1549 } 1550 1551 .article .info { 1552 margin-bottom: 5px; 1553 } 1554 1555 .article .info .byline { 1556 font-weight: bold; 1557 } 1558 1559 .articleShare { 1560 display: flex; 1561 flex-wrap: wrap; 1562 gap: 6px; 1563 align-items: center; 1564 margin: 10px 0 14px; 1565 } 1566 1567 .articleShare .shareLink { 1568 display: inline-flex; 1569 align-items: center; 1570 gap: 6px; 1571 min-height: 34px; 1572 padding: 6px 10px; 1573 border: 1px solid #c8c8c8; 1574 border-radius: 4px; 1575 background: #fff; 1576 color: #222; 1577 cursor: pointer; 1578 font-family: inherit; 1579 font-size: 0.9rem; 1580 line-height: 1; 1581 text-decoration: none; 1582 } 1583 1584 .articleShare .shareLink:hover, 1585 .articleShare .shareLink:focus { 1586 border-color: #777; 1587 background: #f5f5f5; 1588 color: #000; 1589 } 1590 1591 .articleShare .shareLink i { 1592 width: 1em; 1593 text-align: center; 1594 } 1595 1596 .articleShare .shareNative { 1597 display: none; 1598 } 1599 1600 .articleShare.canNative .shareNative { 1601 display: inline-flex; 1602 } 1603 1604 .pageNav .pagination { 1605 flex-wrap: wrap; 1606 gap: 0.25rem; 1607 } 1608 1609 .article .photo { 1610 margin-bottom: 5px; 1611 } 1612 1613 .article .photo .image { 1614 text-align: center; 1615 } 1616 1617 @media (min-width: 750px) { 1618 :root { 1619 --header-h: 72px; 1620 } 1621 1622 #gridApp { 1623 margin: 0px auto; 1624 max-width: 1350px; 1625 display: grid; 1626 grid-template-columns: 700px; 1627 grid-template-rows: auto; 1628 grid-template-areas: 1629 "content"; 1630 justify-content: center; 1631 } 1632 1633 #cellHeader .btnMenu, 1634 #cellHeader .btnSidebar { 1635 display: inline-flex !important; 1636 } 1637 1638 #cellHeader .btnMenu .btnLabel { 1639 display: inline-block; 1640 } 1641 1642 #areaToolbar { 1643 display: none; 1644 } 1645 } 1646 1647 @media (min-width: 1020px) { 1648 .weatherHeader { 1649 display: inline-flex !important; 1650 } 1651 1652 #floatSidebar .weatherSidebar { 1653 display: none; 1654 } 1655 1656 #gridApp { 1657 margin: 0px auto; 1658 max-width: 1350px; 1659 display: grid; 1660 grid-template-columns: 700px minmax(200px, 350px); 1661 grid-template-rows: auto; 1662 grid-template-areas: 1663 "content sidebar"; 1664 } 1665 1666 #cellSidebar { 1667 transform: translateX(0); 1668 } 1669 1670 #cellSidebar { 1671 grid-area: sidebar; 1672 display: block; 1673 position: unset; 1674 top: unset; 1675 right: unset; 1676 bottom: unset; 1677 left: unset; 1678 width: unset; 1679 height: unset; 1680 max-height: unset; 1681 border: 0px; 1682 width: unset; 1683 background: unset; 1684 overflow: visible; 1685 overflow-y: unset; 1686 overflow-x: unset; 1687 overscroll-behavior: auto; 1688 -webkit-overflow-scrolling: auto; 1689 touch-action: auto; 1690 padding: 0px; 1691 z-index: unset; 1692 max-width: unset; 1693 box-sizing: content-box; 1694 } 1695 1696 #floatSidebar { 1697 /*padding-top: 0px; 1698 position: absolute; 1699 top: 0px; 1700 left: 0px; 1701 overflow-y: auto; 1702 height: calc(100vh - var(--header-h) - 10px); 1703 padding-right: 10px;*/ 1704 } 1705 1706 #cellHeader .btnSidebar { 1707 display: none !important; 1708 } 1709 1710 #btnCloseSidebar { 1711 display: none; 1712 } 1713 1714 .areaWithoutNews { 1715 display: none; 1716 } 1717 } 1718 1719 @media (min-width: 1224px) { 1720 #gridApp { 1721 margin: 0px auto; 1722 max-width: 1350px; 1723 display: grid; 1724 grid-template-columns: 200px 700px minmax(200px, 350px); 1725 grid-template-rows: auto; 1726 grid-template-areas: 1727 "menu content sidebar"; 1728 } 1729 1730 #cellHeader .btnMenu, 1731 #cellHeader .btnSidebar { 1732 display: none !important; 1733 } 1734 1735 #cellMenu { 1736 transform: translateX(0); 1737 } 1738 1739 #cellMenu { 1740 grid-area: menu;
1741 display: block; 1742 position: unset; 1743 top: unset; 1744 bottom: unset; 1745 left: unset; 1746 width: unset; 1747 height: unset; 1748 max-height: unset; 1749 border: 0px; 1750 width: unset; 1751 background: unset; 1752 overflow-y: unset; 1753 overscroll-behavior: auto; 1754 -webkit-overflow-scrolling: auto; 1755 touch-action: auto; 1756 padding-bottom: 0px; 1757 box-sizing: content-box; 1758 z-index: unset; 1759 } 1760 1761 #floatMenu { 1762 padding: 0px 0px 16px; 1763 position: sticky; 1764 top: calc(var(--header-h) + 10px); 1765 left: 0px; 1766 overflow-y: auto; 1767 max-height: calc(100vh - var(--header-h) - 10px); 1768 } 1769 1770 #floatMenu .areaMenuClose { 1771 display: none; 1772 } 1773 1774 .menuLink { 1775 min-height: 38px; 1776 } 1777 1778 .menuSubLink { 1779 min-height: 32px; 1780 } 1781 } 1782 1783 @media (max-width: 575px) {} 1784 1785 /* ---- Events embed block (upcoming events on home/section pages) ---- */ 1786 .events-upcoming-block { 1787 margin-bottom: 1.5rem; 1788 } 1789 1790 .events-embed-list { 1791 margin-top: 0.5rem; 1792 } 1793 1794 .events-embed-row { 1795 padding: 0.55rem 0; 1796 border-bottom: 1px solid #e8eaed; 1797 } 1798 1799 .events-embed-row:first-child { 1800 border-top: 1px solid #e8eaed; 1801 } 1802 1803 .events-embed-when { 1804 font-size: 0.72rem; 1805 font-weight: 600; 1806 letter-spacing: 0.05em; 1807 color: #5f6672; 1808 text-transform: uppercase; 1809 margin-bottom: 0.1rem; 1810 } 1811 1812 .events-embed-title { 1813 font-size: 0.92rem; 1814 font-weight: 600; 1815 line-height: 1.35; 1816 } 1817 1818 .events-embed-title a { 1819 color: inherit; 1820 text-decoration: none; 1821 } 1822 1823 .events-embed-title a:hover { 1824 text-decoration: underline; 1825 } 1826 1827 .events-embed-city { 1828 font-size: 0.78rem; 1829 color: #5f6672; 1830 margin-top: 0.05rem; 1831 } 1832 1833 @media (min-width: 768px) { 1834 .events-embed-list { 1835 display: grid; 1836 grid-template-columns: 1fr 1fr; 1837 column-gap: 2rem; 1838 } 1839 1840 .events-embed-row:nth-child(-n+2) { 1841 border-top: 1px solid #e8eaed; 1842 } 1843 } 1844 1845 /* Public article pages only. Keep list-card styling under .article untouched. */ 1846.articleView { 1847 color: var(--ink); 1848} 1849 1850.articleView .article { 1851 margin-bottom: var(--sp-7); 1852} 1853 1854.articleView .articleSections { 1855 display: flex; 1856 flex-wrap: wrap; 1857 gap: var(--sp-1) var(--sp-2); 1858 margin-bottom: var(--sp-4); 1859} 1860 1861.articleView .sectionEyebrow { 1862 font-family: var(--font-head); 1863 font-size: 0.8rem; 1864 font-weight: 700; 1865 letter-spacing: 0.08em; 1866 text-decoration: none; 1867 text-transform: uppercase; 1868 color: var(--ink-muted); 1869} 1870 1871.articleView .sectionEyebrow + .sectionEyebrow::before { 1872 content: "·"; 1873 margin-right: var(--sp-2); 1874 color: var(--ink-faint); 1875} 1876 1877.articleView .sectionEyebrow:hover, 1878.articleView .sectionEyebrow:focus { 1879 color: var(--accent); 1880} 1881 1882.articleView .title { 1883 margin-bottom: var(--sp-5); 1884} 1885 1886.articleView .title .kicker { 1887 font-family: var(--font-head); 1888 font-size: 0.8rem; 1889 font-weight: 700; 1890 letter-spacing: 0.08em; 1891 text-transform: uppercase; 1892 color: var(--accent); 1893 margin-bottom: var(--sp-2); 1894} 1895 1896.articleView .title .headline { 1897 font-family: var(--font-head); 1898 font-size: clamp(1.85rem, 1.45rem + 1.6vw, 2.6rem); 1899 font-weight: 700; 1900 line-height: 1.08; 1901 letter-spacing: -0.01em; 1902 text-wrap: balance; 1903 margin-bottom: var(--sp-3); 1904} 1905 1906.articleView .title .deck { 1907 font-family: var(--font-head); 1908 font-size: clamp(1.05rem, 0.95rem + 0.5vw, 1.35rem); 1909 font-weight: 400; 1910 line-height: 1.4; 1911 color: var(--ink-muted); 1912} 1913 1914.articleView .title .kicker:empty, 1915.articleView .title .headline:empty, 1916.articleView .title .deck:empty { 1917 display: none; 1918} 1919 1920.articleView .info { 1921 display: flex; 1922 flex-wrap: wrap; 1923 align-items: baseline; 1924 gap: var(--sp-2) var(--sp-3); 1925 padding-bottom: var(--sp-3); 1926 margin-bottom: 0; 1927 border-bottom: 1px solid var(--rule); 1928 font-family: var(--font-head); 1929 font-size: 0.9rem; 1930} 1931 1932.articleView .info .byline { 1933 font-weight: 700; 1934 color: var(--ink); 1935} 1936 1937.articleView .info .posted { 1938 font-weight: 400; 1939 color: var(--ink-muted); 1940} 1941 1942.articleView .info .posted a { 1943 color: inherit; 1944 text-decoration-color: var(--rule); 1945} 1946 1947.articleView .articleShare { 1948 gap: var(--sp-2); 1949 margin: var(--sp-3) 0 var(--sp-5); 1950} 1951 1952.articleView .articleShare .shareLink { 1953 justify-content: center; 1954 width: 2.125rem; 1955 min-height: 2.125rem; 1956 padding: 0; 1957 border: 0; 1958 border-radius: var(--r-pill); 1959 background: transparent; 1960 color: var(--ink-muted); 1961} 1962 1963.articleView .articleShare .shareLink:hover, 1964.articleView .articleShare .shareLink:focus { 1965 background: var(--surface-soft); 1966 color: var(--accent); 1967} 1968 1969.articleView .articleShare .shareLink span { 1970 display: none; 1971} 1972 1973.articleView .articleShare .shareFacebook:hover { color: #1877f2; } 1974.articleView .articleShare .shareX:hover { color: #000; } 1975.articleView .articleShare .shareLinkedIn:hover { color: #0a66c2; } 1976.articleView .articleShare .shareReddit:hover { color: #ff4500; } 1977.articleView .articleShare .shareEmail:hover { color: #6c757d; } 1978 1979.articleView .content { 1980 max-width: 40em; 1981 font-family: var(--font-body); 1982 font-size: 1.19rem; 1983 line-height: 1.65; 1984 color: var(--ink); 1985} 1986 1987.articleView .content p { margin: 0 0 var(--sp-5); } 1988.articleView .content > p:first-of-type { font-size: 1.05em; } 1989 1990.articleView .content h2, 1991.articleView .content h3 { 1992 font-family: var(--font-head); 1993 font-weight: 700; 1994 line-height: 1.2; 1995 margin: var(--sp-6) 0 var(--sp-3); 1996} 1997 1998.articleView .content h2 { font-size: 1.5rem; } 1999.articleView .content h3 { font-size: 1.2rem; } 2000 2001.articleView .content a { 2002 color: inherit; 2003 text-decoration: underline; 2004 text-decoration-color: var(--accent); 2005 text-decoration-thickness: 0.08em; 2006 text-underline-offset: 0.16em; 2007} 2008 2009.articleView .content a:hover { color: var(--accent); } 2010 2011.articleView .content .paywallAction, 2012.articleView .content .paywallAction:hover, 2013.articleView .content .paywallAction:focus { 2014 color: #fff; 2015 text-decoration: none; 2016} 2017 2018.articleView .paywallPreview { 2019 position: relative; 2020 max-height: 12rem; 2021 overflow: hidden; 2022} 2023 2024.articleView .paywallPreview::after { 2025 position: absolute; 2026 right: 0; 2027 bottom: 0; 2028 left: 0; 2029 height: 6rem; 2030 content: ""; 2031 background: linear-gradient(to bottom, transparent, #fff); 2032 pointer-events: none; 2033} 2034 2035.articleView .paywallCard { 2036 padding: var(--sp-6); 2037 margin: calc(var(--sp-5) * -1) 0 var(--sp-6); 2038 border: 1px solid var(--rule); 2039 border-radius: var(--r-lg); 2040 background: var(--surface-soft); 2041 text-align: center; 2042} 2043 2044.articleView .paywallCard h3 { 2045 margin: 0 0 var(--sp-2); 2046 font-family: var(--font-head); 2047 font-size: 1.5rem; 2048 font-weight: 700; 2049} 2050 2051.articleView .paywallCard .paywallIntro, 2052.articleView .paywallCard .paywallRequirement { 2053 max-width: 34rem; 2054 margin-right: auto; 2055 margin-left: auto; 2056} 2057 2058.articleView .paywallCard .paywallIntro { margin-bottom: var(--sp-3); } 2059.articleView .paywallCard .paywallRequirement { margin-bottom: var(--sp-3); } 2060 2061.articleView .paywallActions { 2062 max-width: 20rem; 2063 margin: 0 auto; 2064} 2065 2066.articleView .content .paywallAction { 2067 display: block; 2068 width: 100%; 2069} 2070 2071.articleView .sectionEndHtml { 2072 padding: var(--sp-5); 2073 margin: var(--sp-6) 0; 2074 border: 1px solid var(--rule); 2075 border-radius: var(--r-md); 2076} 2077 2078.articleView .sectionEndHtmlBlock + .sectionEndHtmlBlock { 2079 padding-top: var(--sp-4); 2080 margin-top: var(--sp-4); 2081 border-top: 1px solid var(--rule); 2082} 2083 2084.articleView .articleAdvertisement { 2085 padding: var(--sp-4) 0; 2086 margin: var(--sp-6) 0; 2087 border: 0; 2088 border-top: 1px solid var(--rule); 2089 border-bottom: 1px solid var(--rule); 2090 border-radius: 0; 2091 background: transparent; 2092 text-align: center; 2093} 2094 2095.articleView .articleAdvertisement .advertisementLabel { 2096 padding-bottom: var(--sp-3); 2097 font-family: var(--font-head); 2098 font-size: 0.72rem; 2099 font-weight: 700; 2100 letter-spacing: 0.08em; 2101 text-transform: uppercase; 2102 color: var(--ink-faint); 2103} 2104 2105.articleView .articleAdvertisement .zoneSda { margin-bottom: 0; } 2106.articleView .articleAdLoadTrigger { height: 1px; margin: 0; } 2107 2108.articleView .content blockquote { 2109 margin: var(--sp-6) 0; 2110 padding-left: var(--sp-5); 2111 border-left: 3px solid var(--accent); 2112 font-family: var(--font-head); 2113 font-size: 1.25em; 2114 line-height: 1.35; 2115 color: var(--ink); 2116} 2117 2118.articleView .content ul, 2119.articleView .content ol { margin: 0 0 var(--sp-5) var(--sp-5); } 2120.articleView .content li { margin-bottom: var(--sp-2); } 2121 2122.articleView .photo { 2123 margin: 0 0 var(--sp-5); 2124} 2125 2126.articleView .photo .image { 2127 text-align: center; 2128 background: var(--surface-soft); 2129} 2130 2131.articleView .photo img { border-radius: var(--r-sm); } 2132 2133.articleView .photoInfo { 2134 max-width: 40em; 2135 margin-top: var(--sp-2); 2136 font-family: var(--font-head); 2137 font-size: 0.9rem; 2138 line-height: 1.45; 2139 color: var(--ink-muted); 2140} 2141 2142.articleView .photoInfo .title { 2143 font-weight: 700; 2144 color: var(--ink); 2145} 2146 2147.articleView .photoInfo .credit { 2148 margin-top: var(--sp-1); 2149 font-size: 0.78rem; 2150 letter-spacing: 0.04em; 2151 text-transform: uppercase; 2152 color: var(--ink-faint); 2153} 2154 2155.articleView .photoStage { 2156 position: relative; 2157 max-height: 450px; 2158 text-align: center; 2159 background: var(--surface-soft); 2160} 2161 2162.articleView .photoStage > img { 2163 max-height: 450px; 2164 width: auto; 2165 object-fit: contain; 2166} 2167 2168.articleView .photoNav { 2169 position: absolute; 2170 top: 50%; 2171 z-index: 2; 2172 display: flex; 2173 align-items: center; 2174 justify-content: center; 2175 width: 42px; 2176 height: 42px; 2177 padding: 0; 2178 border: 0; 2179 border-radius: var(--r-pill); 2180 background: rgba(0, 0, 0, 0.55); 2181 color: #fff; 2182 transform: translateY(-50%); 2183} 2184 2185.articleView .photoNav:hover, 2186.articleView .photoNav:focus { 2187 background: rgba(0, 0, 0, 0.75); 2188 color: #fff; 2189} 2190
2191.articleView .photoNavPrev { left: var(--sp-3); } 2192.articleView .photoNavNext { right: var(--sp-3); } 2193 2194@media (hover: hover) and (pointer: fine) { 2195 .articleView .photoNav { opacity: 0; transition: opacity 0.15s; } 2196 .articleView .photoStage:hover .photoNav, 2197 .articleView .photoNav:focus { opacity: 1; } 2198} 2199 2200.articleView .photoCarousel { 2201 display: flex; 2202 gap: var(--sp-2); 2203 overflow-x: auto; 2204 padding: var(--sp-3) 0 var(--sp-1); 2205 margin-top: var(--sp-2); 2206 scrollbar-width: thin; 2207} 2208 2209.articleView .photoCarousel::-webkit-scrollbar { height: 5px; } 2210.articleView .photoCarousel::-webkit-scrollbar-thumb { background: #bbb; border-radius: var(--r-sm); } 2211 2212.articleView .photoCarousel .thumb { 2213 flex: 0 0 auto; 2214 cursor: pointer; 2215 border: 3px solid transparent; 2216 border-radius: var(--r-sm); 2217 opacity: 0.75; 2218 transition: opacity 0.15s, border-color 0.15s; 2219} 2220 2221.articleView .photoCarousel .thumb:hover { opacity: 1; } 2222.articleView .photoCarousel .thumb.selected { border-color: var(--accent); opacity: 1; } 2223 2224.articleView .photoCarousel .thumb img { 2225 display: block; 2226 width: 90px; 2227 height: 65px; 2228 object-fit: cover; 2229 border-radius: 1px; 2230} 2231 2232.articleView .articlePhotoGallery { 2233 display: grid; 2234 grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); 2235 gap: var(--sp-3); 2236 margin-bottom: var(--sp-5); 2237} 2238 2239.articleView .articlePhotoGallery .galleryPhoto { 2240 display: block; 2241 padding: 0; 2242 border: 0; 2243 background: none; 2244 cursor: pointer; 2245} 2246 2247.articleView .articlePhotoGallery .galleryPhoto img { 2248 display: block; 2249 width: 100%; 2250 aspect-ratio: 4 / 3; 2251 object-fit: cover; 2252} 2253 2254.articleView #articlePhotoModal .modal-body { padding-top: var(--sp-3); } 2255.articleView #articlePhotoModal .photoStage { max-height: none; background: #111; } 2256.articleView #articlePhotoModal .photoStage img { max-height: 72vh; object-fit: contain; } 2257 2258@media (max-width: 575px) { 2259 .articleView .content { font-size: 1.09rem; } 2260 2261 .articleView > .article > .photo { 2262 width: calc(100% + (var(--sp-4) * 2)); 2263 margin-right: calc(var(--sp-4) * -1); 2264 margin-left: calc(var(--sp-4) * -1); 2265 } 2266 2267 .articleView > .article > .photo .photoInfo { 2268 padding-right: var(--sp-4); 2269 padding-left: var(--sp-4); 2270 } 2271 2272 .articleView .articleShare { gap: var(--sp-1); } 2273 .articleView .paywallCard { padding: var(--sp-5) var(--sp-4); } 2274} 2275 2276@media print { 2277 @page { margin: 0.65in; } 2278 2279 html, 2280 body, 2281 #areaApp { 2282 height: auto; 2283 overflow: visible; 2284 font-size: 11pt; 2285 background: #fff; 2286 } 2287 2288 #cellHeader, 2289 #cellMenu, 2290 #cellSidebar, 2291 #areaToolbar, 2292 .articleView .articleSections, 2293 .articleView .articleShare, 2294 .articleView .photoCarousel, 2295 .articleView .photoNav, 2296 .articleView .articleAdvertisement, 2297 .articleView .paywallCard, 2298 #articlePhotoModal { 2299 display: none !important; 2300 } 2301 2302 #gridApp { 2303 display: block; 2304 max-width: none; 2305 margin: 0; 2306 } 2307 2308 .articleView .article { margin: 0; } 2309 .articleView .content { max-width: none; font-size: 11pt; line-height: 1.5; } 2310 .articleView .title .headline { font-size: 26pt; } 2311 .articleView .photoStage, 2312 .articleView .photoStage > img { max-height: none; } 2313 .articleView .photo img { max-width: 100%; break-inside: avoid; } 2314 .articleView .sectionEndHtml { break-inside: avoid; } 2315 2316 .articleView .content a[href]::after { 2317 content: " (" attr(href) ")"; 2318 font-size: 0.8em; 2319 overflow-wrap: anywhere; 2320 } 2321} 2322</style> 2323 2324 2325 <title>Search | Ponca City News</title> 2326 2327 <meta property="og:site_name" content="Ponca City News"> 2328 <meta property="og:title" content="Search | Ponca City News"> 2329 <meta property="og:type" content="website"> 2330 <meta property="og:description" content="Search articles and issue pages from Ponca City News."> 2331 <meta property="og:image" content="https://www.poncacitynews.com/uploads/509/mast/29/a6/share_698f7ef06ac5e.jpg"> 2332 <meta property="og:image:width" content="1200"> 2333 <meta property="og:image:height" content="630"> 2334 <meta name="twitter:card" content="summary_large_image"> 2335 <meta name="twitter:title" content="Search | Ponca City News"> 2336 <meta name="twitter:description" content="Search articles and issue pages from Ponca City News."> 2337 <meta name="twitter:image" content="https://www.poncacitynews.com/uploads/509/mast/29/a6/share_698f7ef06ac5e.jpg"> 2338 2339
2339<script type="application/ld+json"> 2340 {"@context":"https://schema.org","@graph":[{"@type":"NewsMediaOrganization","@id":"https://www.poncacitynews.com/#organization","name":"Ponca City News","url":"https://www.poncacitynews.com/","logo":{"@type":"ImageObject","url":"https://www.poncacitynews.com/uploads/509/mast/29/a6/share_698f7ef06ac5e.jpg"},"description":"The Ponca City News is delivered regularly to homes and businesses throughout Ponca City and the 74601 and 74604 zip codes. The newspaper is also available atâ¦","telephone":"580-765-3311","address":{"@type":"PostalAddress","streetAddress":"300 N Third St.","addressLocality":"Ponca City","addressRegion":"OK","postalCode":"74601","addressCountry":"US"},"sameAs":["https://www.facebook.com/p/The-Ponca-City-News-100063703682712/","https://www.youtube.com/@poncacitynewsonline"],"contactPoint":[{"@type":"ContactPoint","contactType":"customer service","telephone":"580-765-3311"}]},{"@type":"WebSite","@id":"https://www.poncacitynews.com/#website","url":"https://www.poncacitynews.com/","name":"Ponca City News","publisher":{"@id":"https://www.poncacitynews.com/#organization"},"inLanguage":"en-US","potentialAction":{"@type":"SearchAction","target":"https://www.poncacitynews.com/search?q=%7Bsearch_term_string%7D","query-input":"required name=search_term_string"}},{"@type":"SearchResultsPage","@id":"https://www.poncacitynews.com/search#webpage","url":"https://www.poncacitynews.com/search","name":"Search | Ponca City News","isPartOf":{"@id":"https://www.poncacitynews.com/#website"},"about":{"@id":"https://www.poncacitynews.com/#organization"},"inLanguage":"en-US","description":"Search articles and issue pages from Ponca City News.","primaryImageOfPage":{"@type":"ImageObject","url":"https://www.poncacitynews.com/uploads/509/mast/29/a6/share_698f7ef06ac5e.jpg"},"breadcrumb":{"@id":"https://www.poncacitynews.com/search#breadcrumb"}},{"@type":"BreadcrumbList","@id":"https://www.poncacitynews.com/search#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ponca City News","item":"https://www.poncacitynews.com/"},{"@type":"ListItem","position":2,"name":"Search","item":"https://www.poncacitynews.com/search"}]}]} </script>
2340 2341 2342
2342<script> 2343 (function(d) { 2344 var s = d.createElement("script"); 2345 /* uncomment the following line to override default position*/ 2346 s.setAttribute("data-position", 3); 2347 /* uncomment the following line to override default size (values: small, large)*/ 2348 /* s.setAttribute("data-size", "small");*/ 2349 /* uncomment the following line to override default language (e.g., fr, de, es, he, nl, etc.)*/ 2350 /* s.setAttribute("data-language", "language");*/ 2351 /* uncomment the following line to override color set via widget (e.g., #053f67)*/ 2352 /* s.setAttribute("data-color", "#053e67");*/ 2353 /* uncomment the following line to override type set via widget (1=person, 2=chair, 3=eye, 4=text)*/ 2354 /* s.setAttribute("data-type", "1");*/ 2355 /* s.setAttribute("data-statement_text:", "Our Accessibility Statement");*/ 2356 /* s.setAttribute("data-statement_url", "http://www.example.com/accessibility")";*/ 2357 /* uncomment the following line to override support on mobile devices*/ 2358 /* s.setAttribute("data-mobile", true);*/ 2359 /* uncomment the following line to set custom trigger action for accessibility menu*/ 2360 /* s.setAttribute("data-trigger", "triggerId")*/ 2361 /* uncomment the following line to override widget's z-index property*/ 2362 /* s.setAttribute("data-z-index", 10001);*/ 2363 /* uncomment the following line to enable Live site translations (e.g., fr, de, es, he, nl, etc.)*/ 2364 /* s.setAttribute("data-site-language", "null");*/ 2365 s.setAttribute("data-widget_layout", "full") 2366 s.setAttribute("data-account", "YIgybr9fpt"); 2367 s.setAttribute("src", "https://cdn.userway.org/widget.js"); 2368 (d.body || d.head).appendChild(s); 2369 })(document) 2370 </script>
2370 2371 <noscript>Please ensure Javascript is enabled for purposes of <a href="https://userway.org">website accessibility</a></noscript> 2372 2373 <link rel="stylesheet" id="silktide-consent-manager-css" href="/ui/cm/silktide-consent-manager.css"> 2374
2374<script src="/ui/cm/silktide-consent-manager.js?_=202607061635"></script>
2374 2375
2375<script> 2376 silktideCookieBannerManager.updateCookieBannerConfig({ 2377 background: { 2378 showBackground: false 2379 }, 2380 cookieIcon: { 2381 position: "bottomRight" 2382 }, 2383 cookieTypes: [{ 2384 id: "necessary", 2385 name: "Necessary", 2386 description: "<p>These cookies are necessary for the website to function properly and cannot be switched off. They help with things like logging in and setting your privacy preferences.</p>", 2387 required: true, 2388 onAccept: function() { 2389 console.log('Add logic for the required Necessary here'); 2390 } 2391 }, 2392 { 2393 id: "analytics", 2394 name: "Analytics", 2395 description: "<p>These cookies help us improve the site by tracking which pages are most popular and how visitors move around the site.</p>", 2396 defaultValue: true, 2397 onAccept: function() { 2398 /*gtag('consent', 'update', { 2399 analytics_storage: 'granted', 2400 }); 2401 dataLayer.push({ 2402 'event': 'consent_accepted_analytics', 2403 });*/ 2404 }, 2405 onReject: function() { 2406 /*gtag('consent', 'update', { 2407 analytics_storage: 'denied', 2408 });*/ 2409 } 2410 }, 2411 { 2412 id: "advertising", 2413 name: "Advertising", 2414 description: "<p>These cookies provide extra features and personalization to improve your experience. They may be set by us or by partners whose services we use.</p>", 2415 onAccept: function() { 2416 /*gtag('consent', 'update', { 2417 ad_storage: 'granted', 2418 ad_user_data: 'granted', 2419 ad_personalization: 'granted', 2420 }); 2421 dataLayer.push({ 2422 'event': 'consent_accepted_advertising', 2423 });*/ 2424 }, 2425 onReject: function() { 2426 /*gtag('consent', 'update', { 2427 ad_storage: 'denied', 2428 ad_user_data: 'denied', 2429 ad_personalization: 'denied', 2430 });*/ 2431 } 2432 } 2433 ], 2434 text: { 2435 banner: { 2436 description: "<p>We use cookies on our site to enhance your user experience, provide personalized content, and analyze our traffic. <a href=\"/privacy#cookies\" target=\"_blank\">Cookie Policy.</a></p>", 2437 acceptAllButtonText: "Accept all", 2438 acceptAllButtonAccessibleLabel: "Accept all cookies", 2439 rejectNonEssentialButtonText: "Reject non-essential", 2440 rejectNonEssentialButtonAccessibleLabel: "Reject non-essential", 2441 preferencesButtonText: "Preferences", 2442 preferencesButtonAccessibleLabel: "Toggle preferences" 2443 }, 2444 preferences: { 2445 title: "Customize your cookie preferences", 2446 description: "<p>We respect your right to privacy. You can choose not to allow some types of cookies. Your cookie preferences will apply across our website.</p>", 2447 creditLinkText: "Get this banner for free", 2448 creditLinkAccessibleLabel: "Get this banner for free" 2449 } 2450 } 2451 }); 2452 </script>
2452 2453 </head> 2454 2455 <body class=""> 2456 <!-- Google tag (gtag.js) -->
vendor: 70 bytes, lines 2456-2457
2456 2457 <script async src="https://www.googletagmanager.com/gtag/js?id=
2457G-SDN7PRY1H2
vendor: 18 bytes, lines 2457-2458
2457"></script> 2458
2458<script> 2459
vendor: 174 bytes, lines 2459-2466
2459window.dataLayer = window.dataLayer || []; 2460 2461 function gtag() { 2462 dataLayer.push(arguments); 2463 } 2464 gtag('js', new Date()); 2465 2466 gtag('config', "
2466G-SDN7PRY1H2
vendor: 12 bytes, lines 2466-2467
2466"); 2467
2467gtag('config', 'G-PMY1G4JY86'); 2468 </script>
2468 2469 <a href="#cellContent" class="skipLink">Skip to main content</a> 2470 2471 <div id="areaApp"> 2472 <header id="areaHeader" data-nav-location="header"> 2473 <div id="cellHeader"> 2474 <div class="cardLeft"> 2475 <a href="#" class="btnMenu" aria-label="Show menu"><i class="fas fa-bars"></i><span class="btnLabel"> Menu</span></a> 2476 </div> 2477 2478 <a href="/" class="mastLink" data-nav-item="Masthead"> 2479 <img src="/uploads/509/mast/29/a6/698f7ef06ac5e.png" class="mastImage" alt="Ponca City News" width="1962" height="282" fetchpriority="high"> 2480 </a> 2481 2482 <div class="cardRight"> 2483 <a href="/weather" class="weatherBadge weatherHeader" title="Weather: Cloudy, 64°, high 72°, low 52°"> 2484 <span class="weatherIcon"><i class="fa-solid fa-cloud-sun"></i></span> 2485 <span class="weatherTemp">64°</span> 2486 <span class="weatherHiLo">H 72° L 52°</span> 2487 </a> 2488 <a href="#" class="btnSidebar" aria-label="Show sidebar"><i class="fa-solid fa-outdent"></i></a> 2489 </div> 2490 </div> 2491 </header> 2492 2493 <div id="areaMainContent"> 2494 <div class="container text-center"> 2495 <div class="zoneSda zoneSdaLeaderboard loaded" data-zone="1"><a href="/do/sdaTouch?click=3&z=1" target="_blank" rel="noopener" aria-label="Advertisement: Health Insurance Source" class="localAdLeaderboardLink"><img src="/do/sdaTouch?view=3&z=1" class="img-fluid localAdLeaderboardImage" alt="Health Insurance Source" width="2397" height="315"></a></div> 2496 </div> 2497 2498 2499 2500 <div id="gridApp"> 2501 <div id="cellMenu"> 2502 <div id="floatMenu"> 2503 <nav aria-label="Main" data-nav-location="menu"> 2504 <ul class="listMenu"> 2505 <li class="areaMenuClose"><a href="#" id="btnCloseMenu" class="menuLink"> 2506 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-xmark"></i></span> 2507 <span class="menuLabel">Close Menu</span> 2508 </a></li> 2509 <li> 2510 <a class="menuLink " href="/" data-nav-item="Front Page" > 2511 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-house"></i></span> 2512 <span class="menuLabel">Front Page</span> 2513 </a> 2514 </li> 2515 <li> 2516 <a class="menuLink active" href="/search" data-nav-item="Search" aria-current="page"> 2517 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-magnifying-glass"></i></span> 2518 <span class="menuLabel">Search</span> 2519 </a> 2520 </li> 2521 <li class="menuGroupLabel" role="presentation">News</li> 2522 <li> 2523 <a class="menuLink " href="/issues" data-nav-item="eEditions" > 2524 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-book-open"></i></span> 2525 <span class="menuLabel">eEditions</span> 2526 </a> 2527 </li> 2528 <li class="menuItemSections"> 2529 <button type="button" class="menuLink btnMenuSections" aria-expanded="false" aria-controls="areaMenuSections" data-force-open="0"> 2530 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-layer-group"></i></span> 2531 <span class="menuLabel">Sections</span> 2532 <span class="menuChevron" aria-hidden="true"><i class="fa-solid fa-angle-down"></i></span> 2533 </button> 2534 2535 <ul id="areaMenuSections" class="menuSubList" hidden> 2536 <li><a class="menuSubLink" href="/section/news" data-nav-item="Section: News" >News</a></li> 2537 <li><a class="menuSubLink" href="/section/obituaries" data-nav-item="Section: Obituaries" >Obituaries</a></li> 2538 </ul> 2539 2540
2540<script> 2541 function setMenuSectionsOpen(button, open) { 2542 button.setAttribute("aria-expanded", open ? "true" : "false"); 2543 document.getElementById(button.getAttribute("aria-controls")).hidden = !open; 2544 } 2545 2546 // Apply the reader's saved open/closed choice before the menu paints. 2547 (function() { 2548 var button = document.currentScript.parentNode.querySelector(".btnMenuSections"); 2549 if (button.getAttribute("data-force-open") === "1") return; 2550 2551 var saved = null; 2552 try { 2553 saved = localStorage.getItem("menuSectionsOpen"); 2554 } catch (error) {} 2555 2556 if (saved === "1" || saved === "0") { 2557 setMenuSectionsOpen(button, saved === "1"); 2558 } 2559 })(); 2560 </script>
2560 2561 </li> 2562 <li> 2563 <a class="menuLink " href="/weather" data-nav-item="Weather" > 2564 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-cloud-sun"></i></span> 2565 <span class="menuLabel">Weather</span> 2566 </a> 2567 </li> 2568 <li class="menuGroupLabel" role="presentation">Community</li> 2569 <li> 2570 <a class="menuLink " href="/events" data-nav-item="Events Calendar" > 2571 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-calendar-days"></i></span> 2572 <span class="menuLabel">Events Calendar</span> 2573 </a> 2574 </li> 2575 <li> 2576 <a class="menuLink " href="/legals" data-nav-item="Legals" > 2577 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-scale-balanced"></i></span> 2578 <span class="menuLabel">Legals</span> 2579 </a> 2580 </li> 2581 <li> 2582 <a class="menuLink " href="/puzzles" data-nav-item="Puzzles & Games" > 2583 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-puzzle-piece"></i></span> 2584 <span class="menuLabel">Puzzles & Games</span> 2585 </a> 2586 </li> 2587 <li class="menuGroupLabel" role="presentation">Get involved</li> 2588 <li> 2589 <a class="menuLink " href="/advertise" data-nav-item="Advertise" > 2590 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-bullhorn"></i></span> 2591 <span class="menuLabel">Advertise</span> 2592 </a> 2593 </li> 2594 <li> 2595 <a class="menuLink " href="/forms" data-nav-item="Submit News" > 2596 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-paper-plane"></i></span> 2597 <span class="menuLabel">Submit News</span> 2598 </a> 2599 </li> 2600 <li> 2601 <a class="menuLink " href="/subscribe" data-nav-item="Subscribe" > 2602 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-envelope-open-text"></i></span> 2603 <span class="menuLabel">Subscribe</span> 2604 </a> 2605 </li> 2606 <li class="menuGroupLabel" role="presentation">About us</li> 2607 <li> 2608 <a class="menuLink " href="/about" data-nav-item="About" > 2609 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-circle-info"></i></span> 2610 <span class="menuLabel">About</span> 2611 </a> 2612 </li> 2613 <li> 2614 <a class="menuLink " href="/contact" data-nav-item="Contact Us" > 2615 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-phone"></i></span> 2616 <span class="menuLabel">Contact Us</span> 2617 </a> 2618 </li> 2619 <li class="menuGroupLabel" role="presentation">Your account</li> 2620 <li> 2621 <a class="menuLink btnMenuAccount" href="/account" data-nav-item="Account" > 2622 <span class="menuIcon" aria-hidden="true"><i class="fa-solid fa-circle-user"></i></span> 2623 <span class="menuLabel">Account</span> 2624 </a> 2625 </li> 2626 </ul> 2627 </nav> 2628 </div> 2629 </div> 2630 2631 <div id="cellSidebar"> 2632 <div id="floatSidebar"> 2633 <a href="#" id="btnCloseSidebar" aria-label="Close sidebar"><span class="icon"><i class="fa-solid fa-angles-right"></i></span></a> 2634 2635 <div class="mb-3 d-grid"> 2636 <a href="#" class="btnMenuAccount btn btn-outline-primary"><i class="fa-solid fa-user"></i> Account</a> 2637 </div> 2638 2639 <a href="/weather" class="weatherBadge weatherSidebar" title="Weather: Cloudy, 64°, high 72°, low 52°"> 2640 <span class="weatherIcon"><i class="fa-solid fa-cloud-sun"></i></span> 2641 <span class="weatherTemp">64°</span> 2642 <span class="weatherHiLo">H 72° L 52°</span> 2643 <span class="weatherCondition">Cloudy</span> 2644 </a> 2645 2646 <div class="card mb-3"> 2647 <div class=""> 2648 <div class="text-center league-gothic" style="font-size: 25px;"><b>Contact Us</b></div> 2649 <div class="text-center" style="font-size: 3em;"> <a href="/contact" title="" ><i class="fa-solid fa-square-envelope"></i></a> 2650 <a href="tel:5807653311" title="" ><i class="fa-solid fa-square-phone"></i></a> 2651 <a href="https://www.facebook.com/p/The-Ponca-City-News-100063703682712/" title="" target="_blank"><i class="fa-brands fa-square-facebook"></i></a> 2652 <a href="https://www.youtube.com/@poncacitynewsonline" title="" target="_blank"><i class="fa-brands fa-youtube"></i></a> 2653 </div> 2654 </div> 2655 </div> 2656 2657 <div class="card mb-3"> 2658 <div class=""> 2659 <div class="text-center league-gothic" style="font-size: 25px;"><b>Current Issue</b></div> 2660 <div class="card-body text-center" style=""> 2661 <a href="/issues/2026-10-02/"> 2662 <div><img src="/uploads/509/books/cb6abebc47262bf/cover_12846.jpg" class="img-fluid center-block issueCover" alt="Fri. Oct 2, 2026 issue cover" loading="lazy" decoding="async"></div> 2663 <div><b>Fri. Oct 2, 2026</b></div> 2664 </a> 2665 </div> 2666 </div> 2667 </div> 2668 2669 <div class="zoneSda" data-zone="2"></div> 2670 <div class="zoneSda" data-zone="2"></div> 2671 <div class="zoneSda" data-zone="2"></div> 2672 <div class="zoneSda" data-zone="2"></div> 2673 <div class="zoneSda" data-zone="2"></div> 2674 <div class="zoneSda" data-zone="2"></div> 2675 2676 <div class="advertisementWrapper googleAdWrapper"> 2677 <div class="advertisementLabel">Advertisement</div> 2678 <!-- Cacti/Sidebar --> 2679 <ins class="adsbygoogle" 2680 style="display:inline-block;width:300px;height:250px" 2681 data-ad-client="ca-pub-8317400995054712" 2682 data-ad-slot="9177632961"></ins> 2683
2683<script> 2684 (adsbygoogle = window.adsbygoogle || []).push({}); 2685 </script>
2685 2686 </div> 2687 2688 <section class="card popularArticles mb-3" aria-labelledby="popularArticlesHeading"> 2689 <div class="card-body"> 2690 <h2 id="popularArticlesHeading" class="popularArticles-heading">Popular Articles</h2> 2691 <ol class="popularArticles-list"> 2692 <li class="popularArticles-item"> 2693 <a class="popularArticles-link" href="/article/2703-marjorie-morgan-owsley"> 2694 <img class="popularArticles-image" src="/uploads/509/images/c9/11/3816_72x72_crop_q85.jpg" width="72" height="72" alt="" loading="lazy" decoding="async"> 2695 <span class="popularArticles-copy"> 2696 <span class="popularArticles-headline">Marjorie Morgan Owsley</span> 2697 <time class="popularArticles-date" datetime="2026-09-26T00:00:00-05:00">Sep. 26, 2026</time> </span> 2698 </a> 2699 </li> 2700 <li class="popularArticles-item"> 2701 <a class="popularArticles-link" href="/article/2712-luchus-anthony-liggins"> 2702 <img class="popularArticles-image" src="/uploads/509/images/67/97/3824_72x72_crop_q85.jpg" width="72" height="72" alt="" loading="lazy" decoding="async"> 2703 <span class="popularArticles-copy"> 2704 <span class="popularArticles-headline">Luchus Anthony Liggins</span> 2705 <time class="popularArticles-date" datetime="2026-09-30T00:00:00-05:00">Sep. 30, 2026</time> </span> 2706 </a> 2707 </li> 2708 <li class="popularArticles-item"> 2709 <a class="popularArticles-link" href="/article/2700-michael-ralph-geheb"> 2710 <img class="popularArticles-image" src="/uploads/509/images/0a/49/3813_72x72_crop_q85.jpg" width="72" height="72" alt="" loading="lazy" decoding="async"> 2711 <span class="popularArticles-copy"> 2712 <span class="popularArticles-headline">Michael Ralph Geheb</span> 2713 <time class="popularArticles-date" datetime="2026-09-23T00:00:00-05:00">Sep. 23, 2026</time> </span> 2714 </a> 2715 </li> 2716 <li class="popularArticles-item"> 2717 <a class="popularArticles-link" href="/article/2701-toby-joe-hutson"> 2718 <img class="popularArticles-image" src="/uploads/509/images/c5/63/3814_72x72_crop_q85.jpg" width="72" height="72" alt="" loading="lazy" decoding="async"> 2719 <span class="popularArticles-copy"> 2720 <span class="popularArticles-headline">Toby Joe Hutson</span> 2721 <time class="popularArticles-date" datetime="2026-09-23T00:00:00-05:00">Sep. 23, 2026</time> </span> 2722 </a> 2723 </li> 2724 <li class="popularArticles-item"> 2725 <a class="popularArticles-link" href="/article/2604-darren-dyer"> 2726 <img class="popularArticles-image" src="/uploads/509/images/75/53/3713_72x72_crop_q85.jpg" width="72" height="72" alt="" loading="lazy" decoding="async"> 2727 <span class="popularArticles-copy"> 2728 <span class="popularArticles-headline">Darren Dyer</span> 2729 <time class="popularArticles-date" datetime="2026-09-02T00:00:00-05:00">Sep. 2, 2026</time> </span> 2730 </a> 2731 </li> 2732 </ol> 2733 </div> 2734 </section> 2735 </div> 2736 </div> 2737 2738 <div id="cellContent" tabindex="-1"> 2739 2740 2741 <div class="cardContent"><div class="articleList searchPage"> 2742 <h1>Search</h1> 2743 2744 <form id="searchForm" class="mb-3" action="/search" method="get"> 2745 <div class="row g-2 align-items-end"> 2746 <div class="col-12 col-md-7"> 2747 <label class="form-label" for="searchQuery">Search terms</label> 2748 <input type="search" class="form-control" name="q" id="searchQuery" value="" placeholder="Search stories, articles, and issue pages" autocomplete="off"> 2749 </div> 2750 <div class="col-8 col-md-3"> 2751 <label class="form-label" for="searchSort">Sort by</label> 2752 <select class="form-select" name="sort" id="searchSort"> 2753 <option value="relevance" selected>Relevance</option> 2754 <option value="date" >Date, newest first</option> 2755 </select> 2756 </div> 2757 <div class="col-4 col-md-2 d-grid"> 2758 <button type="submit" class="btn btn-primary">Search</button> 2759 </div> 2760 </div> 2761 </form> 2762 2763 <div id="searchStatus" class="mb-3"> 2764 <div class="text-muted">Enter a search term to get started.</div> 2765 </div> 2766 2767 <div class="text-center"> 2768 <div class="zoneSda" data-zone="3"></div> 2769 </div> 2770 2771 <div id="searchResults"> 2772 </div> 2773</div> 2774
2775<script> 2776 $(function() { 2777 var endpoint = "\/do\/search"; 2778 var pubName = "Ponca City News"; 2779 2780 function escapeHtml(text) { 2781 return String(text) 2782 .replace(/&/g, "&") 2783 .replace(/</g, "<") 2784 .replace(/>/g, ">") 2785 .replace(/\"/g, """) 2786 .replace(/'/g, "'"); 2787 } 2788 2789 function prettyDate(ymd) { 2790 if (!ymd) { 2791 return ""; 2792 } 2793 2794 var parsed = new Date(ymd + "T00:00:00"); 2795 if (isNaN(parsed.getTime())) { 2796 return ymd; 2797 } 2798 2799 return parsed.toLocaleDateString("en-US", { 2800 month: "long", 2801 day: "numeric", 2802 year: "numeric" 2803 }); 2804 } 2805 2806 function resultMeta(result) { 2807 if (result.record_type === "article") { 2808 return result.meta || []; 2809 } 2810 2811 var meta = []; 2812 var issueName = result.issue_date && result.issue_date !== "0000-00-00" ? prettyDate(result.issue_date) : pubName; 2813 meta.push(issueName); 2814 if (result.page) { 2815 meta.push("Issue Page " + result.page); 2816 } 2817 return meta; 2818 } 2819 2820 function resultBadge(result) { 2821 return result.record_type === "article" ? 2822 '<span class="badge text-bg-secondary">Article</span>' : 2823 '<span class="badge text-bg-primary">Issue Page</span>'; 2824 } 2825 2826 function currentReturnPath() { 2827 return window.location.pathname + window.location.search + window.location.hash; 2828 } 2829 2830 function buildIssueLink(result) { 2831 var link = result.link || "#"; 2832 if (result.record_type === "article" || link === "#") { 2833 return link; 2834 } 2835 if (result.page) { 2836 link += (link.indexOf("?") === -1 ? "?" : "&") + $.param({ 2837 page: result.page 2838 }); 2839 } 2840 link += (link.indexOf("?") === -1 ? "?" : "&") + $.param({ 2841 r: currentReturnPath() 2842 }); 2843 return link; 2844 } 2845 2846 function buildResult(result) { 2847 var title = escapeHtml(result.display_title || result.headline || result.book_name || ""); 2848 var link = buildIssueLink(result); 2849 link = escapeHtml(link); 2850 var meta = resultMeta(result).map(function(item) { 2851 return escapeHtml(item); 2852 }).join(" - "); 2853 var highlights = ""; 2854 2855 (result.highlights || []).forEach(function(item) { 2856 highlights += '<div class="small text-muted mb-1">' + (item.snippet || "") + '</div>'; 2857 }); 2858 2859 var extra = ""; 2860 if (result.record_type === "article") { 2861 if (result.section_name) { 2862 extra += '<div class="small text-muted mb-2">' + escapeHtml(result.section_name) + '</div>'; 2863 } 2864 if (result.kicker) { 2865 extra += '<div class="small text-uppercase fw-semibold mb-1">' + escapeHtml(result.kicker) + '</div>'; 2866 } 2867 if (result.deck) { 2868 extra += '<div class="mb-2">' + escapeHtml(result.deck) + '</div>'; 2869 } 2870 } 2871 2872 return [ 2873 '<div class="card mb-3 shadow-sm">', 2874 '<div class="card-body">', 2875 '<div class="d-flex flex-wrap align-items-start justify-content-between gap-2 mb-2">', 2876 resultBadge(result), 2877 meta ? '<div class="small text-muted">' + meta + '</div>' : '', 2878 '</div>', 2879 '<h2 class="h5 mb-2"><a href="' + link + '">' + title + '</a></h2>', 2880 extra, 2881 highlights, 2882 '<div class="mt-2"><a href="' + link + '" class="btn btn-outline-primary btn-sm">' + (result.record_type === "article" ? 'Read article' : 'Open reader') + '</a></div>', 2883 '</div>', 2884 '</div>' 2885 ].join(""); 2886 } 2887 2888 function showMessage(message, level) { 2889 var klass = level === "warning" ? "alert-warning" : "alert-light"; 2890 $("#searchStatus").html('<div class="alert ' + klass + ' border mb-0">' + escapeHtml(message) + '</div>'); 2891 } 2892 2893 function runSearch() { 2894 var q = $.trim($("#searchQuery").val()); 2895 var sort = $("#searchSort").val(); 2896 2897 if (!q) { 2898 $("#searchResults").empty(); 2899 showMessage("Enter a search term to get started.", "info"); 2900 return; 2901 } 2902 2903 $("#searchStatus").html('<div class="text-muted">Searching...</div>'); 2904 $("#searchResults").html(""); 2905 2906 $.getJSON(endpoint, { 2907 q: q, 2908 sort: sort, 2909 page: 1, 2910 per_page: 20 2911 }) 2912 .done(function(resp) { 2913 if (resp.status !== "success") { 2914 showMessage(resp.message || "Search is temporarily unavailable.", "warning"); 2915 return; 2916 } 2917 2918 if (resp.message) { 2919 $("#searchStatus").html('<div class="text-muted">' + escapeHtml(resp.message) + '</div>'); 2920 } else { 2921 $("#searchStatus").empty(); 2922 } 2923 2924 if (!resp.results || !resp.results.length) { 2925 $("#searchResults").html('<div class="text-muted">No matches found.</div>'); 2926 return; 2927 } 2928 2929 var html = "";
2930 resp.results.forEach(function(result) { 2931 html += buildResult(result); 2932 }); 2933 $("#searchResults").html(html); 2934 }) 2935 .fail(function() { 2936 showMessage("Search is temporarily unavailable.", "warning"); 2937 }); 2938 } 2939 2940 $("#searchForm").on("submit", function(ev) { 2941 ev.preventDefault(); 2942 history.replaceState(null, "", "/search?" + $.param({ 2943 q: $.trim($("#searchQuery").val()), 2944 sort: $("#searchSort").val(), 2945 })); 2946 runSearch(); 2947 }); 2948 2949 $("#searchSort").on("change", function() { 2950 if ($.trim($("#searchQuery").val())) { 2951 runSearch(); 2952 } 2953 }); 2954 }); 2955</script>
2955</div> 2956 </div> 2957 </div> 2958 2959 <div class="container text-center"> 2960 <div class="zoneSda zoneSdaLeaderboard" data-zone="1"></div> 2961 </div> 2962 2963 </div> 2964 2965 <div id="areaFooter"> 2966 <div class="container"> 2967 <div class="row"> 2968 <div class="col-lg-4"> 2969 <div class="mb-3">© 2026 Ponca City News. All rights reserved.</div> 2970 2971 <div class="mb-3" style="font-size: 2.5em;"> <a href="/contact" title="" ><i class="fa-solid fa-square-envelope"></i></a> 2972 <a href="tel:5807653311" title="" ><i class="fa-solid fa-square-phone"></i></a> 2973 <a href="https://www.facebook.com/p/The-Ponca-City-News-100063703682712/" title="" target="_blank"><i class="fa-brands fa-square-facebook"></i></a> 2974 <a href="https://www.youtube.com/@poncacitynewsonline" title="" target="_blank"><i class="fa-brands fa-youtube"></i></a> 2975 </div> 2976 2977 <div><a href="#" onclick="silktideCookieBannerManager.showBanner(); return false;">Cookie Consent Settings</a></div> 2978 2979 <div><a href="/privacy">Privacy Policy</a></div> 2980 <div class="mt-2"> 2981 <a href="https://cacti.news/" class="d-inline-flex align-items-center justify-content-center gap-1" target="_blank" rel="noopener"> 2982 <img src="/ui/images/cactiicon2.png" alt="Cacti.News" style="width: 20px; height: 20px;"> 2983 <span>Powered by Cacti.News</span> 2984 </a> 2985 <div>A managed publishing platform for community newspapers. <a href="https://cacti.news/for-publishers" target="_blank" rel="noopener">Learn more about Cacti.News.</a></div> 2986 </div> 2987 </div> 2988 2989 <div class="col-lg-4"> 2990 <div class="mb-3">Contact Us</div> 2991 2992 <div class="mb-3"> 2993 <a href="/contact">Contact Form</a> 2994 </div> 2995 2996 <div class="mb-3"> 2997 <a href="tel:5807653311">580-765-3311</a> 2998 </div> 2999 3000 <div class="mb-3"> 3001 <div><b>Office Address</b></div> 3002 <div>300 N Third St.</div> 3003 <div> 3004 Ponca City, 3005 OK 74601 </div> 3006 </div> 3007 <div class="mb-3"> 3008 <div><b>Mailing Address</b></div> 3009 <div>P.O. Box 191</div> 3010 <div> 3011 Ponca City, 3012 OK 74601 </div> 3013 </div> 3014 </div> 3015 3016 <div class="col-lg-4"> 3017 <div class="mb-3">Navigate</div> 3018 3019 <nav class="footerNav" aria-label="Footer" data-nav-location="footer"> 3020 <div class="footerNavGroup"> 3021 <ul> 3022 <li><a href="/" data-nav-item="Front Page">Front Page</a></li> 3023 <li><a href="/search" data-nav-item="Search">Search</a></li> 3024 </ul> 3025 </div> 3026 <div class="footerNavGroup"> 3027 <div class="footerNavLabel">News</div> 3028 <ul> 3029 <li><a href="/issues" data-nav-item="eEditions">eEditions</a></li> 3030 <li><a href="/weather" data-nav-item="Weather">Weather</a></li> 3031 </ul> 3032 </div> 3033 <div class="footerNavGroup"> 3034 <div class="footerNavLabel">Community</div> 3035 <ul> 3036 <li><a href="/events" data-nav-item="Events Calendar">Events Calendar</a></li> 3037 <li><a href="/legals" data-nav-item="Legals">Legals</a></li> 3038 <li><a href="/puzzles" data-nav-item="Puzzles & Games">Puzzles & Games</a></li> 3039 </ul> 3040 </div> 3041 <div class="footerNavGroup"> 3042 <div class="footerNavLabel">Get involved</div> 3043 <ul> 3044 <li><a href="/advertise" data-nav-item="Advertise">Advertise</a></li> 3045 <li><a href="/forms" data-nav-item="Submit News">Submit News</a></li> 3046 <li><a href="/subscribe" data-nav-item="Subscribe">Subscribe</a></li> 3047 </ul> 3048 </div> 3049 <div class="footerNavGroup"> 3050 <div class="footerNavLabel">About us</div> 3051 <ul> 3052 <li><a href="/about" data-nav-item="About">About</a></li> 3053 <li><a href="/contact" data-nav-item="Contact Us">Contact Us</a></li> 3054 </ul> 3055 </div> 3056 <div class="footerNavGroup"> 3057 <div class="footerNavLabel">Your account</div> 3058 <ul> 3059 <li><a href="/account" class="btnMenuAccount" data-nav-item="Account">Account</a></li> 3060 </ul> 3061 </div> 3062 </nav> 3063 </div> 3064 </div> 3065 </div> 3066 </div> 3067 3068 <div id="areaMenuBlocker"></div> 3069 <div id="areaSidebarBlocker"></div> 3070 </div> 3071 3072 <div class="modal" id="modalLogin" tabindex="-1"> 3073 <div class="modal-dialog modal-sm"> 3074 <div class="modal-content"> 3075 <div class="modal-header"> 3076 <h5 class="modal-title">Login to Your Account</h5> 3077 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 3078 </div> 3079 <div class="modal-body"> 3080 <form action="/account/login" method="post" id="formLogin"> 3081 <input type="hidden" name="action" value="login"> 3082 <input type="hidden" name="r" value="/search"> 3083 3084 <div id="areaLoginAuths"> 3085 <div class="mb-2 d-grid"> 3086 <button type="button" class="btnAuthGoogle btn btn-outline-dark"><i class="fa-brands fa-google"></i> Login with Google</button> 3087 </div> 3088 3089 <div class="mb-2 d-grid"> 3090 <button type="button" class="btnAuthPasskey btnPasskeyRelated btn btn-outline-dark"><i class="fa-solid fa-key"></i> Login with Passkey</button> 3091 </div> 3092 3093 <div class="mb-2 text-center"><i>— or —</i></div> 3094 </div> 3095 3096 <div class="mb-2"> 3097 <label for="inputLoginEmail" class="form-label">Email Address</label> 3098 <input type="text" name="email" class="form-control" id="inputLoginEmail" maxlength="255" value=""> 3099 </div> 3100 3101 <div class="form-check mb-2"> 3102 <input class="form-check-input" type="checkbox" name="remember" value="1" id="checkLoginRemember" > 3103 <label class="form-check-label" for="checkLoginRemember"> 3104 Remember me 3105 </label> 3106 </div> 3107 3108 <div id="areaLoginNeedsPassword" style="display: none;"> 3109 <div class="mb-2"> 3110 <div id="textLoginNeedsPasswordInfo"></div> 3111 </div> 3112 3113 3114 <div class="mb-2 d-grid"> 3115 <button type="button" id="btnLoginLink" class="btn btn-primary">Send Login Link</button> 3116 </div> 3117 3118 <div class="mb-2 d-grid"> 3119 <button type="button" id="btnLoginNeedsPasswordBack" class="btn btn-outline-primary">Back</button> 3120 </div> 3121 </div> 3122 3123 <div id="areaLoginPassword" style="display: none;"> 3124 <div class="mb-2"> 3125 <label for="inputLoginPassword" class="form-label">Password</label> 3126 <input type="password" name="password" class="form-control" id="inputLoginPassword" maxlength="4096"> 3127 </div> 3128 3129 <div class="mb-2 d-grid"> 3130 <button type="submit" class="btn btn-primary">Login</button> 3131 </div> 3132 3133 <div class="mb-2 d-grid"> 3134 <button type="button" id="btnLoginLinkPassword" class="btn btn-outline-primary">Send Login Link</button> 3135 </div> 3136 3137 <div class="mb-2 d-grid"> 3138 <button type="button" id="btnLoginPasswordBack" class="btn btn-outline-primary">Back</button> 3139 </div> 3140 </div> 3141 3142 <div id="areaLoginOptions"> 3143 <div class="mb-2 d-grid"> 3144 <button type="button" id="btnLoginPassword" class="btn btn-primary"><i class="fa-solid fa-keyboard"></i> Login with Password</button> 3145 </div> 3146 3147 <div class="mb-2 d-grid"> 3148 <button type="button" id="btnLoginPasskey" class="btnPasskeyRelated btn btn-outline-dark"><i class="fa-solid fa-key"></i> Login with Passkey</button> 3149 </div> 3150 </div> 3151 3152 <div class="mb-2 d-grid"> 3153 <button type="button" id="btnLoginForgot" class="btn btn-info">Forgot Password</button> 3154 </div> 3155 3156 <div class="mb-2 text-center"><i>— Don't have an account? —</i></div> 3157 3158 <div class="mb-2 d-grid"> 3159 <button type="button" id="btnLoginRegister" class="btn btn-warning">Register</button> 3160 </div> 3161 </form> 3162 </div> 3163 </div> 3164 </div> 3165 </div> 3166 3167 <div class="modal" id="modalRegister" tabindex="-1"> 3168 <div class="modal-dialog modal-sm"> 3169 <div class="modal-content"> 3170 <div class="modal-header"> 3171 <h5 class="modal-title">Create an Account</h5> 3172 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 3173 </div> 3174 <div class="modal-body"> 3175 <form action="/account/register" method="post" id="formRegister"> 3176 <input type="hidden" name="action" value="register"> 3177 <input type="hidden" name="r" value="/search"> 3178 3179 <div class="mb-2 d-grid"> 3180 <button type="button" class="btnAuthGoogle btn btn-outline-dark"><i class="fa-brands fa-google"></i> Login with Google</button> 3181 </div> 3182 3183 <div class="mb-2 text-center"><i>— or —</i></div> 3184 3185 <div class="mb-3"> 3186 <label for="inputRegisterEmail" class="form-label">Email Address</label> 3187 <input type="email" name="email" class="form-control" id="inputRegisterEmail" maxlength="255"> 3188 </div> 3189 3190 <div class="mb-3"> 3191 <label for="inputRegisterFirstName" class="form-label">First Name</label> 3192 <input type="text" name="first_name" class="form-control" id="inputRegisterFirstName" maxlength="75"> 3193 </div> 3194 3195 <div class="mb-3"> 3196 <label for="inputRegisterLastName" class="form-label">Last Name</label> 3197 <input type="text" name="last_name" class="form-control" id="inputRegisterLastName" maxlength="75"> 3198 </div> 3199 3200 <div id="areaRegisterPassword" style="display: none;"> 3201 <div class="mb-3"> 3202 <label for="inputRegisterPassword" class="form-label">Password</label> 3203 <input type="password" name="password" class="form-control" id="inputRegisterPassword" maxlength="4096"> 3204 </div> 3205 3206 <div class="mb-3"> 3207 <label for="inputRegisterPasswordConfirm" class="form-label">Confirm Password</label> 3208 <input type="password" name="confirmPassword" class="form-control" id="inputRegisterPasswordConfirm" maxlength="4096"> 3209 </div> 3210 3211 <div class="mb-3 d-grid"> 3212 <button type="submit" class="btn btn-primary">Register</button> 3213 </div> 3214 </div> 3215 3216 <div id="areaRegisterOptions"> 3217 <div class="mb-3 d-grid"> 3218 <button type="button" id="btnRegisterPassword" class="btn btn-primary"><i class="fa-solid fa-keyboard"></i> Register with Password</button> 3219 </div> 3220 3221 <div class="mb-3 d-grid"> 3222 <button type="button" id="btnRegisterPasskey" class=" btnPasskeyRelated btn btn-outline-dark"><i class="fa-solid fa-key"></i> Register with Passkey</button> 3223 </div> 3224 </div> 3225 3226 <div class="mb-3 text-center"> 3227 Already have an account?
3228 <a href="#" id="btnRegisterLogin">Login</a> 3229 </div> 3230 </form> 3231 </div> 3232 </div> 3233 </div> 3234 </div> 3235 3236
3236<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha256-ew8UiV1pJH/YjpOEBInP1HxVvT/SfrCmwSoUzF9JIgc=" crossorigin="anonymous"></script>
3236 3237 3238
3238<script src="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/js/all.min.js" integrity="sha256-Z6/mj/QZDUfTjL6nkq7pwkHNZpkVY8Xk8Appn4bTLXs=" crossorigin="anonymous"></script>
3238 3239 3240
3240<script> 3241 3242 $(document).ready(function() { 3243 $(document).on("click", ".btnCopy", function(event) { 3244 event.preventDefault(); 3245 3246 var btn = $(this); 3247 3248 copyText(btn.data("target")); 3249 3250 btn.text("Copied"); 3251 setTimeout(function() { 3252 btn.text("Copy"); 3253 }, 2500); 3254 }); 3255 }); 3256 3257 async function copyText(target) { 3258 let text = document.getElementById(target).textContent; 3259 try { 3260 await navigator.clipboard.writeText(text); 3261 console.log('Text copied to clipboard'); 3262 //alert('Text copied to clipboard: ' + text); // Optional feedback 3263 } catch (err) { 3264 console.error('Failed to copy text: ', err); 3265 } 3266 } 3267 3268 function checkResponse(data) { 3269 if (data.hasOwnProperty("status")) { 3270 if (data['status'] == "error") { 3271 if (data.hasOwnProperty("message") && data['message']) { 3272 var title = "Error"; 3273 if (checkProp(data, 'title') && data['title']) { 3274 title = data['title']; 3275 } 3276 3277 alert(data['message']); 3278 } else { 3279 alert("The server responded with an error."); 3280 } 3281 } else if (data['status'] == "success") { 3282 if (data.hasOwnProperty("message") && data['message']) { 3283 var title = "Success"; 3284 if (checkProp(data, 'title') && data['title']) { 3285 title = data['title']; 3286 } 3287 alert(data['message']); 3288 } 3289 3290 return true; 3291 } 3292 } else { 3293 alert("The server returned an unreadable response."); 3294 } 3295 3296 return false; 3297 } 3298 3299 function checkResponseSilent(data) { 3300 if (data.hasOwnProperty("status")) { 3301 if (data['status'] == "error") { 3302 3303 } else if (data['status'] == "success") { 3304 if (typeof checkResponseLocal === "function") { 3305 checkResponseLocal(data); 3306 } 3307 3308 return true; 3309 } 3310 } else {} 3311 3312 return false; 3313 } 3314 3315 function getAjaxErrorData(jqXHR) { 3316 if (!jqXHR) { 3317 return null; 3318 } 3319 3320 if (jqXHR.responseJSON && typeof jqXHR.responseJSON === "object") { 3321 return jqXHR.responseJSON; 3322 } 3323 3324 if (typeof jqXHR.responseText === "string" && jqXHR.responseText.trim()) { 3325 try { 3326 var data = JSON.parse(jqXHR.responseText); 3327 if (data && typeof data === "object") { 3328 return data; 3329 } 3330 } catch (error) { 3331 // The response may be an HTML error page or another non-JSON response. 3332 } 3333 } 3334 3335 return null; 3336 } 3337 3338 function getAjaxErrorType(jqXHR, textStatus) { 3339 var errorType = textStatus || (jqXHR && jqXHR.statusText) || ""; 3340 3341 if (!errorType && jqXHR && typeof jqXHR.status === "string") { 3342 errorType = jqXHR.status; 3343 } 3344 3345 return String(errorType).toLowerCase(); 3346 } 3347 3348 function formatAjaxError(jqXHR, textStatus, errorThrown) { 3349 var status = jqXHR && Number(jqXHR.status) > 0 ? Number(jqXHR.status) : 0; 3350 var errorType = getAjaxErrorType(jqXHR, textStatus); 3351 var response = getAjaxErrorData(jqXHR); 3352 var serverMessage = response && typeof response.message === "string" ? response.message.trim() : ""; 3353 var message = "Communication error with the server."; 3354 var statusLabel = { 3355 400: "Bad Request", 3356 401: "Unauthorized", 3357 403: "Forbidden", 3358 404: "Not Found", 3359 408: "Request Timeout", 3360 409: "Conflict", 3361 413: "Payload Too Large", 3362 429: "Too Many Requests", 3363 500: "Internal Server Error", 3364 502: "Bad Gateway", 3365 503: "Service Unavailable", 3366 504: "Gateway Timeout" 3367 }[status] || ""; 3368 3369 if (status) { 3370 message += "\n\nHTTP " + status + (statusLabel ? " " + statusLabel : ""); 3371 } 3372 3373 if (serverMessage) { 3374 message += "\n\n" + serverMessage; 3375 } else { 3376 switch (errorType) { 3377 case "timeout": { 3378 message += "\n\nThe request timed out before the server responded."; 3379 break; 3380 } 3381 3382 case "parsererror": { 3383 message += "\n\nThe server returned an unreadable response."; 3384 break; 3385 } 3386 3387 case "error": { 3388 message += status ? "\n\nThe server could not complete the request." : 3389 "\n\nThe connection was lost before the server returned a response."; 3390 break; 3391 } 3392 3393 default: { 3394 message += "\n\nThe request could not be completed.";
3395 break; 3396 } 3397 } 3398 } 3399 3400 var details = typeof errorThrown === "string" ? errorThrown.trim() : ""; 3401 if (!details && jqXHR && typeof jqXHR.message === "string") { 3402 details = jqXHR.message.trim(); 3403 } 3404 3405 if (details && details.toLowerCase() !== errorType && details.toLowerCase() !== "error" && details !== statusLabel) { 3406 message += "\n\nDetails: " + details; 3407 } 3408 3409 return message; 3410 } 3411 3412 function errorResponse(jqXHR, textStatus, errorThrown) { 3413 if (getAjaxErrorType(jqXHR, textStatus) === "abort") { 3414 return; 3415 } 3416 3417 alert(formatAjaxError(jqXHR, textStatus, errorThrown)); 3418 } 3419 3420 function errorResponseAsync(error) { 3421 if (getAjaxErrorType(error) === "abort") { 3422 return; 3423 } 3424 3425 alert(formatAjaxError(error)); 3426 } 3427 3428 function checkProp(data, field) { 3429 if (data.hasOwnProperty(field)) { 3430 return true; 3431 } else { 3432 return false; 3433 } 3434 } 3435</script>
3435 3436 3437 3438
3438<script> 3439 var seenSdas = [3]; 3440 3441 var helper = { 3442 atb: b => { 3443 let u = new Uint8Array(b), 3444 s = ""; 3445 for (let i = 0; i < u.byteLength; i++) s += String.fromCharCode(u[i]); 3446 return btoa(s); 3447 }, 3448 3449 bta: o => { 3450 let pre = "=?BINARY?B?", 3451 suf = "?="; 3452 for (let k in o) { 3453 if (typeof o[k] == "string") { 3454 let s = o[k]; 3455 if (s.startsWith(pre) && s.endsWith(suf)) { 3456 let raw = window.atob(s.slice(pre.length, -suf.length)), 3457 u = new Uint8Array(raw.length); 3458 for (let i = 0; i < raw.length; i++) u[i] = raw.charCodeAt(i); 3459 o[k] = u.buffer; 3460 } 3461 } else { 3462 helper.bta(o[k]); 3463 } 3464 } 3465 }, 3466 }; 3467 3468 $(function() { 3469 $(document).on("click", "#areaMenu a", function(event) { 3470 if ($("#areaMenu").is(":visible")) { 3471 doHideMenu(); 3472 } 3473 }); 3474 3475 $(document).on("click", ".btnMenu", function(event) { 3476 event.preventDefault(); 3477 3478 doShowMenu(); 3479 }); 3480 3481 $(document).on("click", ".btnSidebar", function(event) { 3482 event.preventDefault(); 3483 3484 doShowSidebar(); 3485 }); 3486 3487 $("#btnCloseMenu, #areaMenuBlocker").on("click", function(event) { 3488 event.preventDefault(); 3489 doHideMenu(); 3490 }); 3491 3492 $("#btnCloseSidebar, #areaSidebarBlocker").on("click", function(event) { 3493 event.preventDefault(); 3494 doHideSidebar(); 3495 }); 3496 3497 $("#floatSidebar a").on("click", function(event) { 3498 doHideSidebar(); 3499 }); 3500 3501 $(document).on("click", ".btnFullReload", function(event) { 3502 event.preventDefault(); 3503 3504 window.location.reload(); 3505 }); 3506 3507 $(document).on("click", ".btnReload", function(event) { 3508 event.preventDefault(); 3509 3510 window.location.reload(); 3511 }); 3512 3513 $(document).on("click", ".btnHome", function(event) { 3514 event.preventDefault(); 3515 3516 window.location.href = "/"; 3517 }); 3518 3519 $(document).on("click", ".btnBack", function(event) { 3520 event.preventDefault(); 3521 3522 //if (history.length > 1) { 3523 // history.go(-1); 3524 //} else { 3525 window.location.href = "/"; 3526 //} 3527 }); 3528 3529 $(".btnMenuAccount").click(function(event) { 3530 event.preventDefault(); 3531 doHideMenu(); 3532 $("#modalLogin").modal("show"); 3533 }); 3534 3535 $(".btnMenuRegister").click(function(event) { 3536 event.preventDefault(); 3537 doHideMenu(); 3538 $("#modalRegister").modal("show"); 3539 }); 3540 3541 $("#modalLogin").on("shown.bs.modal", function(event) { 3542 $("#inputLoginEmail").focus(); 3543 }); 3544 3545 $("#formLogin").submit(function(event) { 3546 event.preventDefault(); 3547 3548 const developmentPasswordlessLogin = false; 3549 3550 if (!$("#inputLoginEmail").val()) { 3551 alert("Please enter your email address."); 3552 return; 3553 } 3554 3555 if (!developmentPasswordlessLogin && !$("#inputLoginPassword").val()) { 3556 alert("Please enter your password."); 3557 return; 3558 } 3559 3560 $.ajax({ 3561 url: "/do/accountLogin", 3562 type: "POST", 3563 data: $("#formLogin").serializeArray(), 3564 success: function(data) { 3565 if (checkResponse(data)) { 3566 if (checkProp(data, "redirect") && data['redirect']) { 3567 window.location.href = data['redirect']; 3568 } else if (checkProp(data, "reload") && data['reload']) { 3569 window.location.reload(); 3570 } 3571 } 3572 }, 3573 error: errorResponse, 3574 }); 3575 }); 3576 3577 $("#btnLoginPassword").click(function(event) { 3578 event.preventDefault(); 3579 3580 if (!$("#inputLoginEmail").val()) { 3581 alert("Please enter your email address."); 3582 return; 3583 } 3584 3585 if (false) { 3586 $("#formLogin").trigger("submit"); 3587 return; 3588 } 3589 3590 $.ajax({ 3591 url: "/do/accountCheckLogin", 3592 type: "POST", 3593 data: $("#formLogin").serializeArray(), 3594 success: function(data) { 3595 if (checkResponse(data)) { 3596 if (checkProp(data, "needsPassword") && data['needsPassword']) {
3597 $("#areaLoginAuths").slideUp(); 3598 $("#areaLoginOptions").slideUp(); 3599 $("#areaLoginNeedsPassword").slideDown(); 3600 $("#textLoginNeedsPasswordInfo").html(data['info']); 3601 } else { 3602 $("#areaLoginAuths").slideUp(); 3603 $("#areaLoginOptions").slideUp(); 3604 $("#areaLoginPassword").slideDown(() => { 3605 $("#inputLoginPassword").focus(); 3606 }); 3607 } 3608 } 3609 }, 3610 error: errorResponse, 3611 }); 3612 }); 3613 3614 $("#btnLoginPasswordBack").click(function(event) { 3615 event.preventDefault(); 3616 3617 $("#areaLoginAuths").slideDown(); 3618 $("#areaLoginOptions").slideDown(); 3619 $("#areaLoginPassword").slideUp(); 3620 }); 3621 3622 $("#btnLoginNeedsPasswordBack").click(function(event) { 3623 event.preventDefault(); 3624 3625 $("#areaLoginAuths").slideDown(); 3626 $("#areaLoginOptions").slideDown(); 3627 $("#areaLoginNeedsPassword").slideUp(); 3628 }); 3629 3630 $("#modalLogin").on("hidden.bs.modal", function(event) { 3631 event.preventDefault(); 3632 3633 $("#areaLoginAuths").show(); 3634 $("#areaLoginOptions").show(); 3635 $("#areaLoginPassword").hide(); 3636 $("#areaLoginNeedsPassword").hide(); 3637 }); 3638 3639 $("#btnLoginForgot, #btnLoginResetPassword").click(function(event) { 3640 event.preventDefault(); 3641 3642 $.ajax({ 3643 url: "/do/accountForgot", 3644 type: "POST", 3645 data: $("#formLogin").serializeArray(), 3646 success: function(data) { 3647 if (checkResponse(data)) { 3648 $("#modalLogin").modal("hide"); 3649 } 3650 }, 3651 error: errorResponse, 3652 }); 3653 }); 3654 3655 $("#btnLoginLink, #btnLoginLinkPassword").click(function(event) { 3656 event.preventDefault(); 3657 3658 $.ajax({ 3659 url: "/do/accountSendLoginLink", 3660 type: "POST", 3661 data: $("#formLogin").serializeArray(), 3662 success: function(data) { 3663 if (checkResponse(data)) { 3664 $("#modalLogin").modal("hide"); 3665 } 3666 }, 3667 error: errorResponse, 3668 }); 3669 }); 3670 3671 $("#btnLoginRegister").click(function(event) { 3672 event.preventDefault(); 3673 3674 $("#modalLogin").modal("hide"); 3675 $("#modalRegister").modal("show"); 3676 }); 3677 3678 $("#btnRegisterPassword").click(function(event) { 3679 event.preventDefault(); 3680 3681 $("#areaRegisterOptions").slideUp(); 3682 $("#areaRegisterPassword").slideDown(); 3683 }); 3684 3685 $("#modalRegister").on("hidden.bs.modal", function() { 3686 $("#areaRegisterOptions").show(); 3687 $("#areaRegisterPassword").hide(); 3688 $("#modalRegister input").val(""); 3689 }); 3690 3691 $("#btnRegisterLogin").click(function(event) { 3692 event.preventDefault(); 3693 3694 $("#modalRegister").modal("hide"); 3695 $("#modalLogin").modal("show"); 3696 }); 3697 3698 $("#modalRegister").on("shown.bs.modal", function(event) { 3699 $("#inputRegisterEmail").focus(); 3700 }); 3701 3702 $("#formRegister").submit(function(event) { 3703 event.preventDefault(); 3704 3705 if (!$("#inputRegisterEmail").val()) { 3706 alert("Please enter your email address."); 3707 return; 3708 } 3709 3710 if (!$("#inputRegisterPassword").val()) { 3711 alert("Please enter a password."); 3712 return; 3713 } 3714 3715 if ($("#inputRegisterPassword").val() != $("#inputRegisterPasswordConfirm").val()) { 3716 alert("Your Password and Confirm Password fields must match."); 3717 return; 3718 } 3719 3720 $.ajax({ 3721 url: "/do/accountRegister", 3722 type: "POST", 3723 data: $("#formRegister").serializeArray(), 3724 success: function(data) { 3725 if (checkResponse(data)) { 3726 if (checkProp(data, "redirect") && data['redirect']) { 3727 window.location.href = data['redirect']; 3728 } else if (checkProp(data, "reload") && data['reload']) { 3729 window.location.reload(); 3730 } 3731 } 3732 }, 3733 error: errorResponse, 3734 }); 3735 }); 3736 3737 $("#btnRegisterPasskey").click(async function(event) { 3738 if (!$("#inputRegisterEmail").val()) { 3739 alert("Please enter your email address."); 3740 return; 3741 } 3742 3743 try { 3744 let data = await $.ajax({ 3745 url: "/do/accountPasskeyRegister", 3746 type: "POST", 3747 data: { 3748 action: "create", 3749 email: $("#inputRegisterEmail").val(), 3750 first_name: $("#inputRegisterFirstName").val(), 3751 last_name: $("#inputRegisterLastName").val(), 3752 r: $("#formRegister [name='r']").val(), 3753 } 3754 }); 3755 3756 if (checkResponse(data)) { 3757 if (checkProp(data, "createArgs")) { 3758 try { 3759 let opts = data['createArgs']; 3760 helper.bta(opts); 3761 let cred = await navigator.credentials.create(opts); 3762 validatePasskeyRegister(cred); 3763 } catch (error) { 3764 console.log(error); 3765 //alert("An error occurred creating your passkey."); 3766 } 3767 } 3768 } 3769 } catch (error) { 3770 console.log(error); 3771 errorResponseAsync(error); 3772 } 3773 }); 3774 3775 $(".btnAuthGoogle").click(function(event) { 3776 event.preventDefault(); 3777 3778 $.ajax({ 3779 url: "/do/tokenGoogle", 3780 type: "POST", 3781 data: { 3782 r: "\/search", 3783 }, 3784 success: function(data) { 3785 if (checkResponse(data)) { 3786 if (checkProp(data, "redirect") && data['redirect']) { 3787 window.location.href = data['redirect']; 3788 } else if (checkProp(data, "reload") && data['reload']) { 3789 window.location.reload(); 3790 } 3791 } 3792 }, 3793 error: errorResponse, 3794 }); 3795 }); 3796 3797 $("#btnLoginPasskey").click(async function(event) { 3798 event.preventDefault(); 3799
3800 if (!$("#inputLoginEmail").val()) { 3801 alert("Please enter your email address."); 3802 return; 3803 } 3804 3805 doPasskeyAuth($("#inputLoginEmail").val()); 3806 }); 3807 3808 $(".btnAuthPasskey").click(async function(event) { 3809 event.preventDefault(); 3810 doPasskeyAuth(); 3811 }); 3812 3813 $(".btnMenuSections").click(function(event) { 3814 event.preventDefault(); 3815 3816 const open = $(this).attr("aria-expanded") !== "true"; 3817 setMenuSectionsOpen(this, open); 3818 3819 try { 3820 localStorage.setItem("menuSectionsOpen", open ? "1" : "0"); 3821 } catch (error) {} 3822 }); 3823 3824 // GA4 baseline for where readers navigate from (header, menu, drawer, footer). 3825 $(document).on("click", "[data-nav-item]", function() { 3826 if (typeof gtag !== "function") { 3827 return; 3828 } 3829 3830 let location = $(this).closest("[data-nav-location]").data("nav-location") || ""; 3831 if (location === "menu" && $("#cellMenu").hasClass("visible")) { 3832 location = "drawer"; 3833 } 3834 3835 gtag("event", "nav_click", { 3836 location: location, 3837 item: $(this).data("nav-item"), 3838 }); 3839 }); 3840 3841 checkSdas(); 3842 }); 3843 3844 let sdaQueue = Promise.resolve(); 3845 3846 function queueSda(element) { 3847 sdaQueue = sdaQueue.catch(() => {}).then(() => resolveSda(element)); 3848 } 3849 3850 function checkSdas() { 3851 const zones = $(".zoneSda").not(".loaded").toArray(); 3852 if (!("IntersectionObserver" in window)) { 3853 zones.forEach(div => queueSda($(div))); 3854 return; 3855 } 3856 3857 const observer = new IntersectionObserver(entries => { 3858 entries.forEach(entry => { 3859 if (!entry.isIntersecting) return; 3860 observer.unobserve(entry.target); 3861 queueSda($(entry.target)); 3862 }); 3863 }, {rootMargin: "400px 0px"}); 3864 zones.forEach(div => observer.observe(div)); 3865 } 3866 3867 async function resolveSda(element) { 3868 if (element.hasClass("loaded") || element.hasClass("loading")) return; 3869 element.addClass("loading"); 3870 var idZone = element.data("zone"); 3871 3872 const result = await $.ajax({ 3873 url: "/do/sdaGet", 3874 type: "POST", 3875 data: { 3876 zone: idZone, 3877 seen: seenSdas.join(","), 3878 }, 3879 success: function(data) { 3880 if (checkResponseSilent(data)) { 3881 if (checkProp(data, "html")) { 3882 const targetId = element.data("ad-target"); 3883 const target = targetId ? $("#" + targetId) : element; 3884 target.html(data['html']); 3885 seenSdas.push(data['id']); 3886 } 3887 } 3888 } 3889 }); 3890 3891 element.removeClass("loading").addClass("loaded"); 3892 } 3893 3894 function doShowMenu() { 3895 $("#cellMenu").addClass("visible"); 3896 $("#areaMenuBlocker").addClass("visible"); 3897 syncOverlayScrollLock(); 3898 } 3899 3900 function doHideMenu() { 3901 $("#cellMenu").removeClass("visible"); 3902 $("#areaMenuBlocker").removeClass("visible"); 3903 syncOverlayScrollLock(); 3904 } 3905 3906 function doShowSidebar() { 3907 $("#cellSidebar").addClass("visible"); 3908 $("#areaSidebarBlocker").addClass("visible"); 3909 syncOverlayScrollLock(); 3910 } 3911 3912 function doHideSidebar() { 3913 $("#cellSidebar").removeClass("visible"); 3914 $("#areaSidebarBlocker").removeClass("visible"); 3915 syncOverlayScrollLock(); 3916 } 3917 3918 let overlayScrollY = 0; 3919 3920 function syncOverlayScrollLock() { 3921 const hasOverlay = $("#cellMenu").hasClass("visible") || $("#cellSidebar").hasClass("visible"); 3922 3923 if (hasOverlay) { 3924 lockOverlayScroll(); 3925 } else { 3926 unlockOverlayScroll(); 3927 } 3928 } 3929 3930 function lockOverlayScroll() { 3931 if ($("body").hasClass("overlayOpen")) { 3932 return; 3933 } 3934 3935 overlayScrollY = window.scrollY || window.pageYOffset || 0; 3936 $("body") 3937 .addClass("overlayOpen") 3938 .css("top", "-" + overlayScrollY + "px"); 3939 } 3940 3941 function unlockOverlayScroll() { 3942 if (!$("body").hasClass("overlayOpen")) { 3943 return; 3944 } 3945 3946 $("body") 3947 .removeClass("overlayOpen") 3948 .css("top", ""); 3949 3950 // Bootstrap turns on smooth scrolling for the document; jump straight back. 3951 const root = document.documentElement; 3952 root.style.scrollBehavior = "auto"; 3953 window.scrollTo(0, overlayScrollY); 3954 root.style.scrollBehavior = ""; 3955 } 3956 3957 async function doPasskeyAuth(email) { 3958 var data = { 3959 action: "get_args", 3960 }; 3961 3962 if (email) { 3963 data['email'] = email; 3964 } 3965 3966 data['r'] = $("#formLogin [name='r']").val(); 3967 3968 try { 3969 let response = await $.ajax({ 3970 url: "/do/accountPasskeyAuth", 3971 type: "POST", 3972 data: data, 3973 }); 3974 3975 if (checkResponse(response)) { 3976 var assertion; 3977 try { 3978 let opts = response['getArgs']['publicKey']; 3979 helper.bta(opts); 3980 assertion = await navigator.credentials.get({ 3981 publicKey: opts 3982 }); 3983 } catch (error) { 3984 console.log(error); 3985 //alert("An error occurred authenticating with your passkey."); 3986 return; 3987 } 3988 3989 if (!assertion) { 3990 alert("An error occurred authenticating with your passkey."); 3991 return; 3992 } 3993 3994 const payload = { 3995 id: assertion.id, 3996 rawId: helper.atb(assertion.rawId), 3997 clientDataJSON: helper.atb(assertion.response.clientDataJSON), 3998 authenticatorData: helper.atb(assertion.response.authenticatorData), 3999 signature: helper.atb(assertion.response.signature), 4000 userHandle: assertion.response.userHandle ? 4001 helper.atb(assertion.response.userHandle) : null, 4002 r: $("#formLogin [name='r']").val(), 4003 }; 4004 4005 const verifyResponse = await $.ajax({ 4006 url: "/do/accountPasskeyAuth", 4007 type: "POST", 4008 data: payload, 4009 }); 4010 4011 if (checkResponse(verifyResponse)) { 4012 if (checkProp(verifyResponse, "redirect") && verifyResponse['redirect']) { 4013 window.location.href = verifyResponse['redirect']; 4014 } else if (checkProp(verifyResponse, "reload") && verifyResponse['reload']) { 4015 window.location.reload(); 4016 } 4017 } 4018 } 4019 } catch (error) { 4020 console.log(error); 4021 errorResponseAsync(error); 4022 } 4023 } 4024 4025 async function validatePasskeyRegister(cred) { 4026 try { 4027 let data = await $.ajax({ 4028 url: "/do/accountPasskeyRegister", 4029 type: "POST", 4030 data: { 4031 transport: cred.response.getTransports ? cred.response.getTransports() : null, 4032 client: helper.atb(cred.response.clientDataJSON), 4033 attest: helper.atb(cred.response.attestationObject) 4034 } 4035 }); 4036 4037 if (checkResponse(data)) { 4038 if (checkProp(data, "redirect") && data['redirect']) { 4039 window.location.href = data['redirect']; 4040 } else if (checkProp(data, "reload") && data['reload']) { 4041 window.location.reload(); 4042 } 4043 } 4044 } catch (error) { 4045 console.log(error); 4046 errorResponseAsync(error); 4047 } 4048 } 4049 4050 async function canCreatePasskey() { 4051 return window.PublicKeyCredential && typeof PublicKeyCredential === "function"; 4052
4053 // Step 1: Basic WebAuthn support (exists in Chrome 67+, Edge, Firefox 60+, Safari 13+) 4054 if (!window.PublicKeyCredential || 4055 typeof PublicKeyCredential !== "function") { 4056 return false; 4057 } 4058 4059 // Step 2: Check for a user-verifying platform authenticator 4060 // (this is what enables passkeys on-device â phone/laptop biometrics/PIN) 4061 if (typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable !== "function") { 4062 return false; 4063 } 4064 4065 const hasPlatformAuthenticator = await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable(); 4066 4067 // Optional but highly recommended for great UX: 4068 // Step 3: Check for conditional mediation (autofill/passkey suggestions in forms) 4069 // This lets passkeys appear seamlessly in login fields, but isn't strictly required for creation 4070 let supportsConditionalMediation = false; 4071 if (typeof PublicKeyCredential.isConditionalMediationAvailable === "function") { 4072 supportsConditionalMediation = await PublicKeyCredential.isConditionalMediationAvailable(); 4073 } 4074 4075 // For most "create passkey" buttons: platform authenticator is the key requirement 4076 // If you want to hide unless autofill is also supported, add && supportsConditionalMediation 4077 return hasPlatformAuthenticator; 4078 } 4079 4080 // Usage: Hide/show your button 4081 document.addEventListener('DOMContentLoaded', async () => { 4082 if (await canCreatePasskey()) { 4083 $(".btnPasskeyRelated").show(); 4084 console.log('Passkey creation supported â showing button'); 4085 } else { 4086 $(".btnPasskeyRelated").hide(); 4087 console.log('Passkey creation not supported'); 4088 } 4089 }); 4090 </script>
4090 4091 4092
4092<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":"6d3f7f695a1d4c1f9dd38352180fd02c","r":1,"spa":2}' crossorigin="anonymous"></script>
4092 4093</body> 4094 4095 </html> 4096
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.