1<!DOCTYPE html> 2<html lang="en" data-theme="dark"> 3 <head> 4
4<script> 5 // Application layout is always dark mode. Light mode only exists on /browse pages. 6 document.documentElement.setAttribute('data-theme', 'dark'); 7 </script>
7 8 </script>
8 9
9<script> 10 // Apply collapsed state IMMEDIATELY to prevent flash 11 (function() { 12 if (localStorage.getItem("sidebarCollapsed") === "true") { 13 document.documentElement.classList.add("sidebar-collapsed-loading"); 14 } 15 })(); 16 </script>
16 17
17<script> 18 // Cookie consent helper â checks if user accepted analytics cookies 19 window.pbHasConsent = function() { 20 return document.cookie.indexOf('pb_cookie_consent=accepted') !== -1; 21 }; 22 23 // Capture UTM params from URL into a cookie (only if consent given) 24 (function() { 25 if (!window.pbHasConsent()) return; 26 var params = new URLSearchParams(window.location.search); 27 var keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; 28 var utm = {}; 29 var hasUtm = false; 30 keys.forEach(function(k) { 31 var v = params.get(k); 32 if (v) { utm[k] = v; hasUtm = true; } 33 }); 34 if (hasUtm) { 35 var expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); 36 document.cookie = 'pb_utm=' + encodeURIComponent(JSON.stringify(utm)) + ';expires=' + expires + ';path=/;SameSite=Lax'; 37 } 38 })(); 39 </script>
39 40
40<script> 41 // Load GA4 only after consent 42 window.pbLoadAnalytics = function() { 43 if (window.pbAnalyticsLoaded) return; 44 window.pbAnalyticsLoaded = true; 45 46 // Load gtag.js script 47 var s = document.createElement('script'); 48 s.async = true; 49 s.src = 'https://www.googletagmanager.com/gtag/js?id=G-NFHH8DFQ91'; 50 document.head.appendChild(s); 51 52 window.dataLayer = window.dataLayer || []; 53 function gtag(){dataLayer.push(arguments);} 54 window.gtag = gtag; 55 gtag('js', new Date()); 56 gtag('config', 'G-NFHH8DFQ91', { 57 send_page_view: false 58 }); 59 60 // Track pageviews on Turbo navigation 61 function sendGAPageview() { 62 if (typeof gtag === 'function') { 63 gtag('event', 'page_view', { 64 page_location: window.location.href, 65 page_title: document.title 66 }); 67 } 68 } 69 70 // Initial pageview 71 sendGAPageview(); 72 73 // Turbo Drive navigations 74 document.addEventListener('turbo:load', function() { 75 sendGAPageview(); 76 }); 77 78 // Auto-track CTA button clicks 79 document.addEventListener('click', function(e) { 80 var el = e.target.closest('a, button'); 81 if (!el || typeof gtag !== 'function') return; 82 83 if (el.classList.contains('cl-btn-primary') || 84 el.classList.contains('cl-btn-secondary') || 85 el.classList.contains('sol-btn-primary') || 86 el.classList.contains('sol-btn-secondary')) { 87 gtag('event', 'cta_click', { 88 button_text: el.textContent.trim().substring(0, 50), 89 button_url: el.href || '', 90 page_section: findSection(el) 91 }); 92 } 93 94 if (el.closest('.navbar, .site-footer, nav')) { 95 gtag('event', 'nav_click', { 96 link_text: el.textContent.trim().substring(0, 50), 97 link_url: el.href || '' 98 }); 99 } 100 101 if (el.closest('.sol-tile')) { 102 var tileId = el.closest('.sol-tile').dataset.solId; 103 if (tileId) { 104 gtag('event', 'solution_select', { solution_id: tileId }); 105 } 106 } 107 108 if (el.href && el.href.includes('/features/')) { 109 gtag('event', 'feature_click', { 110 feature_url: el.href, 111 link_text: el.textContent.trim().substring(0, 50) 112 }); 113 } 114 }); 115 116 function findSection(el) { 117 var section = el.closest('[class*="section"], [class*="hero"], [class*="pricing"]'); 118 return section ? section.className.split(' ')[0] : 'unknown'; 119 } 120 121 // Scroll depth tracking 122 var scrollMarks = {}; 123 window.addEventListener('scroll', function() { 124 if (typeof gtag !== 'function') return; 125 var docHeight = document.body.scrollHeight - window.innerHeight; 126 if (docHeight <= 0) return; 127 var pct = Math.round((window.scrollY / docHeight) * 100); 128 [25, 50, 75, 100].forEach(function(mark) { 129 if (pct >= mark && !scrollMarks[mark + '_' + location.pathname]) { 130 scrollMarks[mark + '_' + location.pathname] = true; 131 gtag('event', 'scroll_depth', { percent: mark, page: location.pathname }); 132 } 133 }); 134 }); 135 136 document.addEventListener('turbo:load', function() { 137 scrollMarks = {}; 138 }); 139 140 // Also capture UTM params now that consent is given 141 var params = new URLSearchParams(window.location.search); 142 var keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; 143 var utm = {}; 144 var hasUtm = false; 145 keys.forEach(function(k) { 146 var v = params.get(k); 147 if (v) { utm[k] = v; hasUtm = true; } 148 }); 149 if (hasUtm) { 150 var expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); 151 document.cookie = 'pb_utm=' + encodeURIComponent(JSON.stringify(utm)) + ';expires=' + expires + ';path=/;SameSite=Lax'; 152 } 153 }; 154
155 // Auto-load if consent already given 156 if (window.pbHasConsent()) { 157 window.pbLoadAnalytics(); 158 } 159 </script>
159 160 <title>Pages Contact Us â Picklebeast</title> 161 <meta name="description" content="Your ultimate platform to organize, play, and dominate pickleball."> 162 <meta name="viewport" content="width=device-width,initial-scale=1"> 163 <meta name="csrf-param" content="authenticity_token" /> 164<meta name="csrf-token" content="_OVLM_mZazioTyUFfj8DxL3yaTWMVSeILfe6-_1j4Opwy8vbblXZ0W4wbr5Bhbl_C3imyjGU5viDCDuwWHA40w" /> 165 <meta name="csp-nonce" /> 166 167 <!-- Preconnect to CDNs for faster resource loading --> 168 <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin> 169 <link rel="preconnect" href="https://unpkg.com" crossorigin> 170 <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> 171 172 <link rel="stylesheet" href="https://www.picklebeastpickleball.com/assets/application-1a585a86675ba50e8a123c445e253c928135fb97af0909a22b5b19e7e79e6de9.css" data-turbo-track="reload" /> 173 <link rel="stylesheet" href="https://www.picklebeastpickleball.com/assets/sidebar-ef7f6d5658852d74c90023f02c324d784dab12a0902f85df178158d67da7b477.css" data-turbo-track="reload" /> 174 <link rel="stylesheet" href="https://www.picklebeastpickleball.com/assets/sidebar_ai_orb-b8f85c2c69187d0c59a386fba86e98ea7c01029415394f7fc4d424ccd72eaf84.css" data-turbo-track="reload" /> 175 <link rel="stylesheet" href="https://www.picklebeastpickleball.com/assets/actiontext-40060222850012fa9c0a1b176f663c5ad2766bd58e9b80e6226903130f992725.css" data-turbo-track="reload" /> 176 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 177 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/trix.css"> 178
178<script src="https://unpkg.com/[email protected]/dist/trix.umd.min.js"></script>
178 179 <!-- Favicon --> 180 <link rel="icon" type="image/png" href="https://www.picklebeastpickleball.com/assets/blue_claws-af25fae781696fc5205ab13dd5addea04e2b7ad7406ef77dc85f48af5f3a4c66.png" /> 181 <link rel="apple-touch-icon" href="https://www.picklebeastpickleball.com/assets/blue_claws-af25fae781696fc5205ab13dd5addea04e2b7ad7406ef77dc85f48af5f3a4c66.png" /> 182 183 <!-- Open Graph / Social Media --> 184 <meta property="og:type" content="website"> 185 <meta property="og:title" content="Picklebeast - Ultimate Pickleball Platform"> 186 <meta property="og:description" content="Your ultimate platform to organize, play, and dominate pickleball."> 187 <meta property="og:url" content="https://www.picklebeastpickleball.com/contact_us"> 188 189 <!-- Twitter Card --> 190 <meta name="twitter:card" content="summary_large_image"> 191 <meta name="twitter:title" content="Picklebeast - Ultimate Pickleball Platform"> 192 <meta name="twitter:description" content="Your ultimate platform to organize, play, and dominate pickleball."> 193 194 <!-- Unified Navigation CSS --> 195 <style> 196 /* Base navigation container */ 197 .nav-header { 198 padding: 16px 0; 199 width: 100%; 200 } 201 202 .nav-container { 203 max-width: 100%; 204 width: 100%; 205 margin: 0 auto; 206 padding: 0 24px; 207 } 208 209 .nav-bar { 210 display: flex; 211 align-items: center; 212 justify-content: space-between; 213 height: 70px; 214 position: relative; 215 width: 100%; 216 } 217 218 /* Logo section */ 219 .nav-brand { 220 display: flex; 221 align-items: center; 222 height: 100%; 223 z-index: 10; 224 } 225 226 .nav-logo { 227 display: flex; 228 align-items: center; 229 height: 50px; 230 background: none !important; 231 border: none !important; 232 padding: 0 !important; 233 } 234 235 /* Mobile Logo - Show by default (mobile first) */ 236 .nav-logo-mobile { 237 display: block; 238 height: 36px; 239 width: auto; 240 max-width: 36px; 241 } 242 243 /* Desktop Logo - Hidden by default */ 244 .nav-logo-desktop { 245 display: none; 246 height: 50px; 247 width: auto; 248 max-width: 280px; 249 } 250 251 .nav-brand-text { 252 display: none; /* Hide by default on mobile */ 253 margin-left: 8px; 254 font-size: 16px; 255 font-weight: 600; 256 } 257 258 /* Desktop Navigation Links - Hidden on mobile */ 259 .nav-desktop-links { 260 display: none; 261 flex: 1; 262 justify-content: center; 263 align-items: center; 264 height: 100%; 265 margin: 0; 266 padding: 0; 267 list-style: none; 268 gap: 0; 269 max-width: calc(100% - 400px); /* Reserve space for logo and actions */ 270 overflow: hidden; 271 } 272 273 .nav-desktop-link { 274 padding: 12px 16px; 275 font-size: 18px; 276 font-weight: 600; 277 display: flex; 278 align-items: center; 279 height: 70px; 280 text-decoration: none; 281 color: inherit; 282 transition: color 0.2s ease; 283 white-space: nowrap; 284 flex-shrink: 0; 285 } 286 287 .nav-desktop-link:hover { 288 color: #23aae0; 289 } 290 291 /* Right side actions */ 292 .nav-actions-right { 293 display: flex; 294 align-items: center; 295 height: 100%; 296 gap: 16px; 297 z-index: 10; 298 } 299 300 /* Desktop Actions - Hidden on mobile */ 301 .nav-desktop-actions { 302 display: none; 303 align-items: center; 304 gap: 12px; 305 } 306 307 .nav-desktop-btn { 308 padding: 8px 16px; 309 font-size: 14px; 310 font-weight: 600; 311 display: flex; 312 align-items: center; 313 height: 40px; 314 text-decoration: none; 315 border-radius: 6px; 316 transition: all 0.2s ease; 317 } 318 319 .nav-desktop-btn-outline { 320 border: 1px solid #ddd; 321 color: #333; 322 background: transparent; 323 } 324 325 .nav-desktop-btn-outline:hover { 326 border-color: #23aae0; 327 color: #23aae0; 328 } 329 330 .nav-desktop-btn-primary { 331 background: #23aae0; 332 color: white; 333 border: 1px solid #23aae0; 334 } 335 336 .nav-desktop-btn-primary:hover { 337 background: #1a8bb3; 338 border-color: #1a8bb3; 339 } 340 341 /* Cart styling */ 342 .nav-cart { 343 display: flex; 344 align-items: center; 345 position: relative; 346 color: inherit; 347 text-decoration: none; 348 } 349 350 .nav-cart-icon { 351 width: 24px; 352 height: 24px; 353 } 354 355 .nav-cart-badge { 356 position: absolute; 357 top: -8px; 358 right: -8px; 359 background: #23aae0; 360 color: white; 361 border-radius: 50%; 362 font-size: 12px;
363 min-width: 20px; 364 height: 20px; 365 display: flex; 366 align-items: center; 367 justify-content: center; 368 font-weight: 600; 369 } 370 371 /* Mobile menu button */ 372 .nav-menu-btn { 373 width: 40px; 374 height: 40px; 375 display: flex; 376 align-items: center; 377 justify-content: center; 378 background: none; 379 border: none; 380 cursor: pointer; 381 padding: 0; 382 } 383 384 .nav-menu-icon { 385 display: flex; 386 flex-direction: column; 387 width: 24px; 388 height: 18px; 389 justify-content: space-between; 390 } 391 392 .nav-menu-icon span { 393 display: block; 394 height: 2px; 395 width: 100%; 396 background: #23aae0; 397 transition: all 0.3s ease; 398 } 399 400 .nav-menu-btn.active .nav-menu-icon span:nth-child(1) { 401 transform: rotate(45deg) translate(6px, 6px); 402 } 403 404 .nav-menu-btn.active .nav-menu-icon span:nth-child(2) { 405 opacity: 0; 406 } 407 408 .nav-menu-btn.active .nav-menu-icon span:nth-child(3) { 409 transform: rotate(-45deg) translate(6px, -6px); 410 } 411 412 /* Mobile Menu Styles */ 413 .nav-menu { 414 position: fixed; 415 top: 0; 416 left: 0; 417 width: 100%; 418 height: 100vh; 419 background: rgba(0, 0, 0, 0.95); 420 backdrop-filter: blur(10px); 421 z-index: 1000; 422 display: flex; 423 align-items: center; 424 justify-content: center; 425 opacity: 0; 426 visibility: hidden; 427 transition: all 0.3s ease; 428 } 429 430 .nav-menu.active { 431 opacity: 1; 432 visibility: visible; 433 } 434 435 .nav-menu-content { 436 text-align: center; 437 width: 100%; 438 max-width: 400px; 439 padding: 40px 20px; 440 } 441 442 .nav-links { 443 list-style: none; 444 margin: 0 0 40px 0; 445 padding: 0; 446 } 447 448 .nav-links li { 449 margin: 0 0 20px 0; 450 } 451 452 .nav-link { 453 display: block; 454 font-size: 24px; 455 font-weight: 600; 456 color: white; 457 text-decoration: none; 458 padding: 15px 0; 459 transition: color 0.2s ease; 460 } 461 462 .nav-link:hover { 463 color: #23aae0; 464 } 465 466 .nav-actions { 467 display: flex; 468 flex-direction: column; 469 gap: 16px; 470 align-items: center; 471 } 472 473 .nav-shortcuts { 474 display: flex; 475 gap: 12px; 476 margin-bottom: 20px; 477 } 478 479 .nav-shortcut-badge { 480 display: flex; 481 align-items: center; 482 justify-content: center; 483 padding: 8px 16px; 484 font-size: 14px; 485 font-weight: 600; 486 text-decoration: none; 487 border-radius: 20px; 488 min-width: 80px; 489 transition: all 0.2s ease; 490 background: #23aae0; 491 color: white; 492 border: 2px solid #23aae0; 493 } 494 495 .nav-shortcut-badge:hover { 496 background: #1a8bb3; 497 border-color: #1a8bb3; 498 transform: translateY(-1px); 499 } 500 501 .nav-user { 502 display: flex; 503 flex-direction: column; 504 gap: 16px; 505 align-items: center; 506 } 507 508 .nav-user-name { 509 font-size: 18px; 510 font-weight: 600; 511 color: white; 512 } 513 514 .nav-auth { 515 display: flex; 516 flex-direction: column; 517 gap: 16px; 518 align-items: center; 519 } 520 521 .nav-btn { 522 display: flex; 523 align-items: center; 524 justify-content: center; 525 padding: 12px 24px; 526 font-size: 16px; 527 font-weight: 600; 528 text-decoration: none; 529 border-radius: 8px; 530 min-width: 120px; 531 transition: all 0.2s ease; 532 } 533 534 .nav-btn-outline { 535 border: 2px solid #ddd; 536 color: white; 537 background: transparent; 538 } 539 540 .nav-btn-outline:hover { 541 border-color: #23aae0; 542 color: #23aae0; 543 } 544 545 .nav-btn-primary { 546 background: #23aae0; 547 color: white; 548 border: 2px solid #23aae0; 549 } 550 551 .nav-btn-primary:hover { 552 background: #1a8bb3; 553 border-color: #1a8bb3; 554 } 555
556 body.nav-menu-open { 557 overflow: hidden; 558 } 559 560 /* Small mobile screens */ 561 @media (max-width: 479px) { 562 .nav-header { 563 padding: 8px 0; 564 } 565 566 .nav-bar { 567 height: 44px; 568 } 569 570 .nav-logo { 571 height: 40px; 572 } 573 574 .nav-logo-mobile { 575 height: 40px; 576 max-width: 40px; 577 } 578 579 .nav-brand-text { 580 font-size: 14px; 581 } 582 } 583 584 /* Mobile adjustments */ 585 @media (max-width: 767px) { 586 .nav-logo { 587 height: 80x; 588 } 589 590 .nav-logo-mobile { 591 height: 80x; 592 max-width: 80x; 593 } 594 595 .nav-bar { 596 height: 50px; 597 } 598 } 599 600 /* Desktop breakpoint - 768px and above */ 601 @media (min-width: 768px) { 602 .nav-header { 603 padding: 20px 0; 604 } 605 606 .nav-container { 607 padding: 0 40px; 608 } 609 610 .nav-bar { 611 height: 80px; /* Increase from 70px to 80px */ 612 } 613 614 .nav-logo { 615 height: 60px; /* Increase from 50px to 60px */ 616 } 617 618 /* Show desktop logo on desktop */ 619 .nav-logo-desktop { 620 display: block !important; 621 height: 60px; /* Increase from 50px to 60px */ 622 max-width: 350px; /* Increase from 280px to 350px */ 623 } 624 625 /* Hide brand text on desktop since we have full logo */ 626 .nav-brand-text { 627 display: none; 628 } 629 630 /* Hide mobile menu button on desktop */ 631 .nav-menu-btn { 632 display: none !important; 633 } 634 635 /* Hide mobile menu on desktop */ 636 .nav-menu { 637 display: none !important; 638 } 639 640 /* Desktop cart styling */ 641 .nav-cart-icon { 642 width: 32px; 643 height: 32px; 644 } 645 646 .nav-cart-badge { 647 font-size: 12px; 648 min-width: 20px; 649 height: 20px; 650 } 651 } 652 653 /* Medium screens - Show mobile menu button and hide desktop nav */ 654 @media (min-width: 768px) and (max-width: 1023px) { 655 .nav-menu-btn { 656 display: flex !important; 657 } 658 659 .nav-desktop-actions { 660 display: none !important; 661 } 662 663 .nav-menu { 664 display: flex !important; 665 } 666 } 667 668 /* Medium desktop screens - show navigation */ 669 @media (min-width: 1024px) { 670 /* Show desktop navigation links */ 671 .nav-desktop-links { 672 display: flex !important; 673 max-width: calc(100% - 500px); 674 } 675 676 /* Show desktop actions */ 677 .nav-desktop-actions { 678 display: flex !important; 679 } 680 681 .nav-desktop-link { 682 padding: 12px 20px; 683 } 684 } 685 686 @media (min-width: 1024px) { 687 .nav-bar { 688 display: flex; 689 justify-content: space-between; 690 align-items: center; 691 position: relative; 692 } 693 694 .nav-desktop-links { 695 position: absolute; 696 left: 50%; 697 transform: translateX(-50%); 698 display: flex !important; 699 z-index: 5; 700 } 701 702 .nav-brand, 703 .nav-actions-right { 704 z-index: 10; 705 position: relative; 706 } 707 } 708 709 /* Large desktop screens */ 710 @media (min-width: 1200px) { 711 .nav-header { 712 padding: 24px 0; 713 } 714 715 .nav-container { 716 padding: 0 60px; 717 } 718 719 .nav-bar { 720 height: 90px; 721 } 722 723 .nav-logo { 724 height: 70px; /* Increase from 60px to 70px */ 725 } 726 727 .nav-logo-desktop { 728 height: 70px; /* Increase from 60px to 70px */ 729 max-width: 400px; /* Increase from 320px to 400px */ 730 } 731 732 .nav-desktop-links { 733 max-width: calc(100% - 600px); 734 } 735 736 .nav-desktop-link { 737 font-size: 20px; 738 padding: 15px 24px; 739 height: 80px; 740 } 741 742 .nav-desktop-btn { 743 font-size: 16px; 744 padding: 12px 24px; 745 height: 48px; 746 } 747 748 .nav-cart-icon { 749 width: 36px; 750 height: 36px; 751 } 752 } 753 754 /* Extra large desktop screens */ 755 @media (min-width: 1600px) { 756 .nav-container { 757 padding: 0 80px; 758 } 759 760 .nav-bar { 761 height: 90px; 762 } 763 764 .nav-logo { 765 height: 70px; 766 } 767 768 .nav-logo-desktop { 769 height: 70px; 770 max-width: 360px; 771 } 772
773 .nav-desktop-links { 774 max-width: calc(100% - 700px); 775 } 776 777 .nav-desktop-link { 778 font-size: 22px; 779 padding: 18px 28px; 780 height: 90px; 781 } 782 783 .nav-desktop-btn { 784 font-size: 18px; 785 padding: 14px 28px; 786 height: 52px; 787 } 788 789 .nav-cart-icon { 790 width: 40px; 791 height: 40px; 792 } 793 @media (max-width: 768px) { 794 } 795 796 </style> 797
797<script type="importmap" data-turbo-track="reload">{ 798 "imports": { 799 "application": "https://www.picklebeastpickleball.com/assets/application-229e97b8723bbeb037b9324ec073b436f464d7846e93e4e5b3639a5fada11590.js", 800 "jquery": "https://code.jquery.com/jquery-3.6.0.min.js", 801 "select2": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js", 802 "trix": "https://unpkg.com/[email protected]/dist/trix.esm.min.js", 803 "@rails/actiontext": "https://www.picklebeastpickleball.com/assets/@rails--actiontext-4f3a26f09546c3d4e9994e5a27042ef68030489a38e0e976036691f036fb73db.js", 804 "bootstrap-datepicker": "https://www.picklebeastpickleball.com/assets/bootstrap-datepicker-ed630ee5be0f033f52b5188bf2959ef2df09671b9e895f0ceef58874e43747bc.js", 805 "flatpickr": "https://www.picklebeastpickleball.com/assets/flatpickr-a0b7f13656eae7759c27b469aece98b03150b119689e01008825f9062fa41d09.js", 806 "@popperjs/core": "https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/esm/popper.min.js", 807 "bootstrap": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.esm.min.js", 808 "@hotwired/turbo-rails": "https://www.picklebeastpickleball.com/assets/@hotwired--turbo-rails-2a45b9610c76dddaf3fb6dcf08be54cae71049c248d321865765a76bdc691a6f.js", 809 "@hotwired/turbo": "https://www.picklebeastpickleball.com/assets/@hotwired--turbo-69a5d4ec6a004af251e6b8113fad18a0c566965a55e0ecd24be24b4af1903270.js", 810 "@rails/actioncable/src": "https://www.picklebeastpickleball.com/assets/@rails--actioncable--src-03433664dcc42c1d0daf5d3b7b9c6fb3649bb01ef7d45ff9c9d1c168f6fd7c20.js", 811 "@hotwired/stimulus": "https://www.picklebeastpickleball.com/assets/@hotwired--stimulus-f92a55c2572923d02ab1eb77baa19fdc2a831d80be0cfb6a7d6a62801af6b508.js", 812 "@hotwired/stimulus-loading": "https://www.picklebeastpickleball.com/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js", 813 "leagues/check_in": "https://www.picklebeastpickleball.com/assets/leagues/check_in-1e9808a17218ca19a6d9c2aa6c6ac9fe847ab032ecde35b8f749f203a78252c2.js", 814 "controllers/activity_comments_controller": "https://www.picklebeastpickleball.com/assets/controllers/activity_comments_controller-6c417f9b98c8232d19f3bfe420dc16b153a2cc348b14a599b3838f11417c2875.js", 815 "controllers/activity_feed_controller": "https://www.picklebeastpickleball.com/assets/controllers/activity_feed_controller-c0eaa4b097a3a8950a3b9184129b86760b9382c3c6104e7797821916258b58c8.js", 816 "controllers/admin_dashboard_controller": "https://www.picklebeastpickleball.com/assets/controllers/admin_dashboard_controller-b38b6f74ed84dc2f4847c01794fb9b04f2e84e6ffcc36fc8e98297acf61e71fc.js", 817 "controllers/admin_league_tabs_controller": "https://www.picklebeastpickleball.com/assets/controllers/admin_league_tabs_controller-d65b4abbcfa930b6b8821b89c56060e9e7b87967868a20d6403b4b31c422edf3.js", 818 "controllers/admin_tournament_shortcuts_controller": "https://www.picklebeastpickleball.com/assets/controllers/admin_tournament_shortcuts_controller-808d826da2f8d0012ff0651a7356f23b9b3ec560c39ea7c105b013a853773baa.js", 819 "controllers/admin_tournament_tabs_controller": "https://www.picklebeastpickleball.com/assets/controllers/admin_tournament_tabs_controller-cfbe0113129e643dcea5c29d0e24095170ccce361d5add0c9e6b81e9aff13608.js", 820 "controllers/ai_chat_controller": "https://www.picklebeastpickleball.com/assets/controllers/ai_chat_controller-012318df0db43ce5b4074e49266e5dff39f3a9630e2e5ec1161fdde598c7381f.js", 821 "controllers/application": "https://www.picklebeastpickleball.com/assets/controllers/application-c6d589ac623de36a476d6273165ef9739ee4ae4bfad82471c6fa11473d7e1abe.js", 822 "controllers/at_risk_info_controller": "https://www.picklebeastpickleball.com/assets/controllers/at_risk_info_controller-07400088897ed1899aeed0f257023d198109f1b9df16a8d2f157afcd5c01b059.js", 823 "controllers/awards_controller": "https://www.picklebeastpickleball.com/assets/controllers/awards_controller-cce699086e1f60f711d0b148e8e9a152d06d5289eceb84b52054bee01c3db0a7.js", 824 "controllers/badges_controller": "https://www.picklebeastpickleball.com/assets/controllers/badges_controller-9be77560b82f1bee5949363ec526f9d110be7d9bac3e3118ae5b0976b10f5b94.js", 825 "controllers/bp_setup_bar_controller": "https://www.picklebeastpickleball.com/assets/controllers/bp_setup_bar_controller-e53d78dbf2df46929f6cfc8b1f59899379fc17f51c37d2d2d59e1cf59e1bfe53.js", 826 "controllers/bracket_generation_modal_controller": "https://www.picklebeastpickleball.com/assets/controllers/bracket_generation_modal_controller-dd709da6223ac17cfc85cee20ce6130acd47b763d513b93387d2270284736856.js", 827 "controllers/bracket_seed_list_controller": "https://www.picklebeastpickleball.com/assets/controllers/bracket_seed_list_controller-1debbc14048ad6b1d90c8a1b66a3ba7c325674dfcbf6419681167dca09eee391.js", 828 "controllers/bracket_viewer_controller": "https://www.picklebeastpickleball.com/assets/controllers/bracket_viewer_controller-c3362661b44e3aceb53616f0edd814c565965bd8a47f7bf53753503e81b1852a.js", 829 "controllers/broadcast_notes_controller": "https://www.picklebeastpickleball.com/assets/controllers/broadcast_notes_controller-033487b33e9eeb0faf9e29191ddc1fade5454d7e8caf0d2fd65c4fc33fc6ef7e.js", 830 "controllers/broadcast_response_controller": "https://www.picklebeastpickleball.com/assets/controllers/broadcast_response_controller-fe207a9b24644f987b1bbe4e2d313393f625828784ec68f539aeaca0c0b9457f.js", 831 "controllers/camp_meeting_days_controller": "https://www.picklebeastpickleball.com/assets/controllers/camp_meeting_days_controller-f94d675c593cf2e39c556a72146ab0ad6ef2c4f8d511116501ed7ab51fd6f7fe.js", 832 "controllers/camp_registration_model_controller": "https://www.picklebeastpickleball.com/assets/controllers/camp_registration_model_controller-2c630ca1b621f3053982ad5c4b67d66ed434795dc9f0bc115139d42278b9b38f.js", 833 "controllers/chart_bar_controller": "https://www.picklebeastpickleball.com/assets/controllers/chart_bar_controller-8cc90667c531f57758533b6894839591d3ea8a84e1fba8fa6ae96a0eab57da5f.js", 834 "controllers/chart_doughnut_controller": "https://www.picklebeastpickleball.com/assets/controllers/chart_doughnut_controller-5f88636d9e7b8653935b719092df585fadc5747bf5d0ac7be9da92c83199995b.js", 835 "controllers/chart_line_controller": "https://www.picklebeastpickleball.com/assets/controllers/chart_line_controller-795e56f73ce0251e40767fb625de29a7bfe48205dbccdfc7649c4fbe8466f3cc.js", 836 "controllers/command_center_controller": "https://www.picklebeastpickleball.com/assets/controllers/command_center_controller-c72de7479b75dbf06c598059848c8c89c3f20443b04f970f7d7c411a8d529afc.js", 837 "controllers/confirm_controller": "https://www.picklebeastpickleball.com/assets/controllers/confirm_controller-552d96d3415fab1576784fe7e0401f430698977b2a7bc4777f2e8329b8a6037f.js", 838 "controllers/courts_grid_controller": "https://www.picklebeastpickleball.com/assets/controllers/courts_grid_controller-7e2f3c8643b11e9fb8a17d4243642d3b2585f0d75eb75840f2ac2b429ca5d180.js", 839 "controllers/cwv_field_insert_controller": "https://www.picklebeastpickleball.com/assets/controllers/cwv_field_insert_controller-50369613d83b10b2e65a91ba05973c2089895c4d1ff1bd6aa322603c05f521c1.js", 840 "controllers/discovery_controller": "https://www.picklebeastpickleball.com/assets/controllers/discovery_controller-a102f3cbf0826ec044d222bc47919f02535b14219b9e778efdc1c7c90202544f.js", 841 "controllers/email_block_editor_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_block_editor_controller-656f1598d604a7cc2a54dd7cd9a1f11e08bc1c5ec5536f1119a0f8530e2d79e5.js", 842 "controllers/email_send_test_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_send_test_controller-ad0752858c7622bf04f59db21ad424726b2dbf00a3eeb7f687277baed919ea33.js", 843 "controllers/email_sender_preview_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_sender_preview_controller-5d750fc0709c429a3902f27bf5f3eb7a5be800b0440813b9c441a8a7ffdfb17a.js", 844 "controllers/email_template_editor_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_template_editor_controller-9fc3ca34911424b28d48e42d5f7dd11261ca8ed1437296a43761989d56b4fb7c.js", 845 "controllers/email_template_filter_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_template_filter_controller-cc689a4fd6e35d578cd8d27f0b58d87e4c74a58040829cacc2559706575c2061.js", 846 "controllers/email_template_tos_modal_controller": "https://www.picklebeastpickleball.com/assets/controllers/email_template_tos_modal_controller-4156a345f9340a940507800b5b65e695902fcd89c05e780eb8875478ff578130.js", 847 "controllers/financial_dashboard_controller": "https://www.picklebeastpickleball.com/assets/controllers/financial_dashboard_controller-8cae1323ecaae2f17030e56c9ae64620e9dcc1d9cb25638d6de87f9f647dfffe.js", 848 "controllers/hello_controller": "https://www.picklebeastpickleball.com/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js", 849 "controllers": "https://www.picklebeastpickleball.com/assets/controllers/index-8e7fd5a626aaeae52c4b8ab9805c197340f083342d574e70050c298a13376526.js",
850 "controllers/ir_pool_management_controller": "https://www.picklebeastpickleball.com/assets/controllers/ir_pool_management_controller-29c1f6104ec164bb62198cb2ddebbea674b55b661592fd6408dde052bd930f1d.js", 851 "controllers/irpm_disclosure_controller": "https://www.picklebeastpickleball.com/assets/controllers/irpm_disclosure_controller-3e53d026878a670ce3d7b49d62662edc02d604a7cde99051b09f8a885f95aec7.js", 852 "controllers/league_dupr_submission_controller": "https://www.picklebeastpickleball.com/assets/controllers/league_dupr_submission_controller-54a201b0d062ae4a9b17fc6442f4cdf2fa83bae9d576267822c323cdf87ed4fb.js", 853 "controllers/league_like_controller": "https://www.picklebeastpickleball.com/assets/controllers/league_like_controller-6e054c0bf9b96a43124f4ac846a84f0500f93c1556ffa5a29eb2e6ddcb50221c.js", 854 "controllers/league_subscribe_controller": "https://www.picklebeastpickleball.com/assets/controllers/league_subscribe_controller-1e0602c55c934e1f00e4a401f8cda7b83302b419a9057e5560d484c1dafeaf0b.js", 855 "controllers/league_wizard_controller": "https://www.picklebeastpickleball.com/assets/controllers/league_wizard_controller-71224a306f99ab989d2cc941b9dab14e2b15317423d1f9be541d81d838e56769.js", 856 "controllers/match_scoring/api_client": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring/api_client-0ac2d8c2365f3d31a0bacc9fcde9da5c3ad14e31a127a99e8e3cd3e1be334564.js", 857 "controllers/match_scoring/event_handlers": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring/event_handlers-6ae98f1ce6f44ca31dd059f37440748e88fffe9f160ef6688a9623163b50b408.js", 858 "controllers/match_scoring/mlp_renderer": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring/mlp_renderer-bb2a907fdf3b2f875394298f414d68048df570f1fbf8232e2f50a01e237ecdaf.js", 859 "controllers/match_scoring/standard_renderer": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring/standard_renderer-acf7557a51541425755cbf70b3002be6d5e6c36ec0ead807cce9b53a04c6be48.js", 860 "controllers/match_scoring/utils": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring/utils-6f0bdfc6daa6360ba34ccf76093b85afcd036a6b4104d49b3df3cf0a25461c6e.js", 861 "controllers/match_scoring_controller": "https://www.picklebeastpickleball.com/assets/controllers/match_scoring_controller-26e1cfe990ea8e55a7d521b9db8e11f4cb3c2412f667e3459bb0a6e17615f0f8.js", 862 "controllers/messages_app_controller": "https://www.picklebeastpickleball.com/assets/controllers/messages_app_controller-88e37c29d9b700aa5af38b50e258d5a6e95174e18c01dce81a4702b3019ccf7c.js", 863 "controllers/money_dashboard_controller": "https://www.picklebeastpickleball.com/assets/controllers/money_dashboard_controller-aaee62091577d37f6ef86b93e4a476804b2ddf5b919be639be4250e799efbc1d.js", 864 "controllers/notifications_controller": "https://www.picklebeastpickleball.com/assets/controllers/notifications_controller-cad003fc85b7a01f6f4d480d16d028566c5997164a9f2b26b034933e211125c9.js", 865 "controllers/participants_controller": "https://www.picklebeastpickleball.com/assets/controllers/participants_controller-d525bf7c21b360203b5afb5d0612a11ffd2cc0e60e3535325107a610bd234d48.js", 866 "controllers/participants_viewer_controller": "https://www.picklebeastpickleball.com/assets/controllers/participants_viewer_controller-96f2316c719fdc80473a808e9c071c7cfd3cbf03ce789b0c1185af90ebb858e8.js", 867 "controllers/play_control_controller": "https://www.picklebeastpickleball.com/assets/controllers/play_control_controller-dfb99d489ab290e450ebf9ea35d32155c6d9ede15172d37062c09d26184dd473.js", 868 "controllers/pool_tabs_controller": "https://www.picklebeastpickleball.com/assets/controllers/pool_tabs_controller-95f32890ae2f48414f122cbbba34261265fa2517f3cf5c4bfafbb0f4143a2493.js", 869 "controllers/pools_management_controller": "https://www.picklebeastpickleball.com/assets/controllers/pools_management_controller-42d0e0aec67bca1406f663a3eb0b0e2d5226540308294a83b2a7dba528bca6ee.js", 870 "controllers/premium_ui": "https://www.picklebeastpickleball.com/assets/controllers/premium_ui-b7cd7b95ab103708fecf7c98b9766d1b3bf349c28439cd9acb012fcffb9ace8a.js", 871 "controllers/round_tabs_controller": "https://www.picklebeastpickleball.com/assets/controllers/round_tabs_controller-e25bf4b9a192e77421f2a50c000a9e3b44241a87c480f48efebe5cb88ca2f5c0.js", 872 "controllers/scouting_panel_controller": "https://www.picklebeastpickleball.com/assets/controllers/scouting_panel_controller-fdb35672bd0f0eaa90eb63e0ddd0679e7d35c70ad785122aa9e6424daa418eef.js", 873 "controllers/signing_station_controller": "https://www.picklebeastpickleball.com/assets/controllers/signing_station_controller-376e7e5f0b1be09e75371fe9effd22e9abde988416f43d3c4bb97697636f6a14.js", 874 "controllers/standings_view_controller": "https://www.picklebeastpickleball.com/assets/controllers/standings_view_controller-5b4f685cbe15fddd4863ac1debf7ab2172701a91b4c960232887c9affae4a174.js", 875 "controllers/tab_bracket_viewer_controller": "https://www.picklebeastpickleball.com/assets/controllers/tab_bracket_viewer_controller-f7571c9cb9dc536e811777a0a095f69574fde0fb9bd3c2b2ac0fff119a4316dd.js", 876 "controllers/tap_pool_manager_controller": "https://www.picklebeastpickleball.com/assets/controllers/tap_pool_manager_controller-d9675dcc57b
876c91076458be14a4d81663ab9000e62558a46842c27e2e05a53222.js", 877 "controllers/team_manager_controller": "https://www.picklebeastpickleball.com/assets/controllers/team_manager_controller-dec30b90ad2ef0a897606d2fb8c9010d9ee1b5e62978cff3fa02f7253b2d9674.js", 878 "controllers/team_roster_seed_controller": "https://www.picklebeastpickleball.com/assets/controllers/team_roster_seed_controller-1964f3476cad23551a3aebb85b7027523570961d717fb03e1c01777f7b467362.js", 879 "controllers/theme_controller": "https://www.picklebeastpickleball.com/assets/controllers/theme_controller-ac583adadcb9767d25339f574eab6b945ec6c223110e2b0b62d4238e9d7e0884.js", 880 "controllers/tournament_broadcast_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_broadcast_controller-e63c5e3b88ae872be809867af672c612fcec53253300cc19b600274105ee4a47.js", 881 "controllers/tournament_check_in_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_check_in_controller-c84c7e6d21a44e35f8ec8d246e3d53e2842f97c86f74f3acfacb6c82098679a2.js", 882 "controllers/tournament_dupr_picker_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_dupr_picker_controller-6d8fb3335e3cf1a686f4031becc7308e383c13a2b9acdce1650115eeff175285.js", 883 "controllers/tournament_dupr_submission_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_dupr_submission_controller-ae56b32755eded1736be009755cef0dd36c9e30171901ed1c5eb11302e451aaa.js", 884 "controllers/tournament_notifications_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_notifications_controller-d6159100fab0e7f6925298bd47b45774d6ad1d5acccb4b243ccec6ddc1af29c8.js", 885 "controllers/tournament_tabs_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_tabs_controller-b9d27bd322ed84cba5e5b6f0ba2883e0ed24521023f4c5155755aa0a8e81d642.js", 886 "controllers/tournament_teams_v2_add_team_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_add_team_controller-0a76671a4820bbd7a28d7f49a78d82e7f51da29b3fd5a82fb2394a05ca04c6ca.js", 887 "controllers/tournament_teams_v2_broadcast_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_broadcast_controller-bb973cd2fbfb175b4955b5520babce0dae14d6cfbd12d54df3613c257c093435.js", 888 "controllers/tournament_teams_v2_clone_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_clone_controller-423a08e54ca28f77445b4b9500a9b5f0d741936e1886cda4be52596734d1c6ae.js", 889 "controllers/tournament_teams_v2_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_controller-fdffe040f58b8cf8a0de7b492b3d2084c23030c504cd238a062ea042623cd431.js", 890 "controllers/tournament_teams_v2_drawer_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_drawer_controller-6ac8abc6d7dd0c83b3219578fda4cf6254d25a913c5d5972f744c5128c4952ea.js", 891 "controllers/tournament_teams_v2_import_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_import_controller-435ad409dd807b7b38b212bdae0f4febb5ea1dd5c087e501f2730895c1409ef0.js", 892 "controllers/tournament_teams_v2_mark_paid_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_mark_paid_controller-880e9ce2987f4912c4ffbfce196b17093f282be42f324aefcdd6eb8259b8f53b.js", 893 "controllers/tournament_teams_v2_refund_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_refund_controller-3b2dc8c7634cf3543beb7ad41e2758ef9127925245fc8e762c6987918e7b2aa2.js", 894 "controllers/tournament_teams_v2_reseed_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_reseed_controller-4709a8ab2ac14c2d1228a0cc2943d992d8aab3b8d4f283e44c99045c068024fb.js", 895 "controllers/tournament_template_save_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_template_save_controller-6ab2170e5ffaf2b4996161c5205897de8d3457bea3693f2b98af68745cd9d0d1.js", 896 "controllers/tournament_wizard_controller": "https://www.picklebeastpickleball.com/assets/controllers/tournament_wizard_controller-dccb8ed6e6102d481ed84e6b19b58219ec7cb23401367554f1b39c289f5ff376.js", 897 "controllers/tv_display_controller": "https://www.picklebeastpickleball.com/assets/controllers/tv_display_controller-ab6cd9af2a2085f84404388cb57ff4eebb03bff4560f49049812b0ae767caecc.js", 898 "controllers/view_mode_toggle_controller": "https://www.picklebeastpickleball.com/assets/controllers/view_mode_toggle_controller-12cbc186bd2019b2774469547bc64a0a9959c66555471bcac1bac963d5518a5b.js", 899 "controllers/waiver_field_builder_controller": "https://www.picklebeastpickleball.com/assets/controllers/waiver_field_builder_controller-cc1f80c5eddde141a5eb9d33b285ab2d99d057c6d8cf08b0a87d1c7ad217c86a.js", 900 "channels/consumer": "https://www.picklebeastpickleball.com/assets/channels/consumer-4eaf7eb8102db32e7caa74bceacb3a0119d9ab9a1190024dd906fd97cbc19a90.js", 901 "channels": "https://www.picklebeastpickleball.com/assets/channels/index-2983a1503d73f62703fe53d06f8d3b4d6829d995276142c70e1a4acf1ab7e65a.js", 902 "channels/rejected_default": "https://www.picklebeastpickleball.com/assets/channels/rejected_default-95e092c4698ca1b4e546800b9c147751d204602588c8e46c281a1ce626830bef.js", 903 "lib/signing_errors": "https://www.picklebeastpickleball.com/assets/lib/signing_errors-e6b9dbd67295f653268c5ceda7c1b2573816a94faa2d13e486edc0bc7494a236.js" 904 } 905}</script>
905 906<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/application-229e97b8723bbeb037b9324ec073b436f464d7846e93e4e5b3639a5fada11590.js"> 907<link rel="modulepreload" href="https://code.jquery.com/jquery-3.6.0.min.js"> 908<link rel="modulepreload" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"> 909<link rel="modulepreload" href="https://unpkg.com/[email protected]/dist/trix.esm.min.js"> 910<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/@rails--actiontext-4f3a26f09546c3d4e9994e5a27042ef68030489a38e0e976036691f036fb73db.js"> 911<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/bootstrap-datepicker-ed630ee5be0f033f52b5188bf2959ef2df09671b9e895f0ceef58874e43747bc.js"> 912<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/flatpickr-a0b7f13656eae7759c27b469aece98b03150b119689e01008825f9062fa41d09.js"> 913<link rel="modulepreload" href="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/esm/popper.min.js"> 914<link rel="modulepreload" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.esm.min.js"> 915<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/@hotwired--turbo-rails-2a45b9610c76dddaf3fb6dcf08be54cae71049c248d321865765a76bdc691a6f.js"> 916<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/@hotwired--turbo-69a5d4ec6a004af251e6b8113fad18a0c566965a55e0ecd24be24b4af1903270.js"> 917<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/@rails--actioncable--src-03433664dcc42c1d0daf5d3b7b9c6fb3649bb01ef7d45ff9c9d1c168f6fd7c20.js"> 918<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/@hotwired--stimulus-f92a55c2572923d02ab1eb77baa19fdc2a831d80be0cfb6a7d6a62801af6b508.js"> 919<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js"> 920<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/leagues/check_in-1e9808a17218ca19a6d9c2aa6c6ac9fe847ab032ecde35b8f749f203a78252c2.js"> 921<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/activity_comments_controller-6c417f9b98c8232d19f3bfe420dc16b153a2cc348b14a599b3838f11417c2875.js"> 922<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/activity_feed_controller-c0eaa4b097a3a8950a3b9184129b86760b9382c3c6104e7797821916258b58c8.js"> 923<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/admin_dashboard_controller-b38b6f74ed84dc2f4847c01794fb9b04f2e84e6ffcc36fc8e98297acf61e71fc.js"> 924<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/admin_league_tabs_controller-d65b4abbcfa930b6b8821b89c56060e9e7b87967868a20d6403b4b31c422edf3.js"> 925<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/admin_tournament_shortcuts_controller-808d826da2f8d0012ff0651a7356f23b9b3ec560c39ea7c105b013a853773baa.js"> 926<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/admin_tournament_tabs_controller-cfbe0113129e643dcea5c29d0e24095170ccce361d5add0c9e6b81e9aff13608.js"> 927<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/ai_chat_controller-012318df0db43ce5b4074e49266e5dff39f3a9630e2e5ec1161fdde598c7381f.js"> 928<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/application-c6d589ac623de36a476d6273165ef9739ee4ae4bfad82471c6fa11473d7e1abe.js"> 929<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/at_risk_info_controller-07400088897ed1899aeed0f257023d198109f1b9df16a8d2f157afcd5c01b059.js"> 930<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/awards_controller-cce699086e1f60f711d0b148e8e9a152d06d5289eceb84b52054bee01c3db0a7.js"> 931<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/badges_controller-9be77560b82f1bee5949363ec526f9d110be7d9bac3e3118ae5b0976b10f5b94.js"> 932<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/bp_setup_bar_controller-e53d78dbf2df46929f6cfc8b1f59899379fc17f51c37d2d2d59e1cf59e1bfe53.js"> 933<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/bracket_generation_modal_controller-dd709da6223ac17cfc85cee20ce6130acd47b763d513b93387d2270284736856.js"> 934<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/bracket_seed_list_controller-1debbc14048ad6b1d90c8a1b66a3ba7c325674dfcbf6419681167dca09eee391.js"> 935<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/bracket_viewer_controller-c3362661b44e3aceb53616f0edd814c565965bd8a47f7bf53753503e81b1852a.js"> 936<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/broadcast_notes_controller-033487b33e9eeb0faf9e29191ddc1fade5454d7e8caf0d2fd65c4fc33fc6ef7e.js"> 937<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/broadcast_response_controller-fe207a9b24644f987b1bbe4e2d313393f625828784ec68f539aeaca0c0b9457f.js"> 938<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/camp_meeting_days_controller-f94d675c593cf2e39c556a72146ab0ad6ef2c4f8d511116501ed7ab51fd6f7fe.js"> 939<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/camp_registration_model_controller-2c630ca1b621f3053982ad5c4b67d66ed434795dc9f0bc115139d42278b9b38f.js"> 940<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/chart_bar_controller-8cc90667c531f57758533b6894839591d3ea8a84e1fba8fa6ae96a0eab57da5f.js"> 941<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/chart_doughnut_controller-5f88636d9e7b8653935b719092df585fadc5747bf5d0ac7be9da92c83199995b.js"> 942<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/chart_line_controller-795e56f73ce0251e40767fb625de29a7bfe48205dbccdfc7649c4fbe8466f3cc.js"> 943<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/command_center_controller-c72de7479b75dbf06c598059848c8c89c3f20443b04f970f7d7c411a8d529afc.js"> 944<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/confirm_controller-552d96d3415fab1576784fe7e0401f430698977b2a7bc4777f2e8329b8a6037f.js"> 945<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/courts_grid_controller-7e2f3c8643b11e9fb8a17d4243642d3b2585f0d75eb75840f2ac2b429ca5d180.js"> 946<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/cwv_field_insert_controller-50369613d83b10b2e65a91ba05973c2089895c4d1ff1bd6aa322603c05f521c1.js"> 947<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/discovery_controller-a102f3cbf0826ec044d222bc47919f02535b14219b9e778efdc1c7c90202544f.js"> 948<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_block_editor_controller-656f1598d604a7cc2a54dd7cd9a1f11e08bc1c5ec5536f1119a0f8530e2d79e5.js"> 949<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_send_test_controller-ad0752858c7622bf04f59db21ad424726b2dbf00a3eeb7f687277baed919ea33.js"> 950<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_sender_preview_controller-5d750fc0709c429a3902f27bf5f3eb7a5be800b0440813b9c441a8a7ffdfb17a.js"> 951<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_template_editor_controller-9fc3ca34911424b28d48e42d5f7dd11261ca8ed1437296a43761989d56b4fb7c.js"> 952<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_template_filter_controller-cc689a4fd6e35d578cd8d27f0b58d87e4c74a58040829cacc2559706575c2061.js"> 953<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/email_template_tos_modal_controller-4156a345f9340a940507800b5b65e695902fcd89c05e780eb8875478ff578130.js"> 954<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/financial_dashboard_controller-8cae1323ecaae2f17030e56c9ae64620e9dcc1d9cb25638d6de87f9f647dfffe.js"> 955<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js"> 956<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/index-8e7fd5a626aaeae52c4b8ab9805c197340f083342d574e70050c298a13376526.js"> 957<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/ir_pool_management_c
957ontroller-29c1f6104ec164bb62198cb2ddebbea674b55b661592fd6408dde052bd930f1d.js"> 958<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/irpm_disclosure_controller-3e53d026878a670ce3d7b49d62662edc02d604a7cde99051b09f8a885f95aec7.js"> 959<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/league_dupr_submission_controller-54a201b0d062ae4a9b17fc6442f4cdf2fa83bae9d576267822c323cdf87ed4fb.js"> 960<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/league_like_controller-6e054c0bf9b96a43124f4ac846a84f0500f93c1556ffa5a29eb2e6ddcb50221c.js"> 961<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/league_subscribe_controller-1e0602c55c934e1f00e4a401f8cda7b83302b419a9057e5560d484c1dafeaf0b.js"> 962<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/league_wizard_controller-71224a306f99ab989d2cc941b9dab14e2b15317423d1f9be541d81d838e56769.js"> 963<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring/api_client-0ac2d8c2365f3d31a0bacc9fcde9da5c3ad14e31a127a99e8e3cd3e1be334564.js"> 964<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring/event_handlers-6ae98f1ce6f44ca31dd059f37440748e88fffe9f160ef6688a9623163b50b408.js"> 965<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring/mlp_renderer-bb2a907fdf3b2f875394298f414d68048df570f1fbf8232e2f50a01e237ecdaf.js"> 966<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring/standard_renderer-acf7557a51541425755cbf70b3002be6d5e6c36ec0ead807cce9b53a04c6be48.js"> 967<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring/utils-6f0bdfc6daa6360ba34ccf76093b85afcd036a6b4104d49b3df3cf0a25461c6e.js"> 968<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/match_scoring_controller-26e1cfe990ea8e55a7d521b9db8e11f4cb3c2412f667e3459bb0a6e17615f0f8.js"> 969<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/messages_app_controller-88e37c29d9b700aa5af38b50e258d5a6e95174e18c01dce81a4702b3019ccf7c.js"> 970<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/money_dashboard_controller-aaee62091577d37f6ef86b93e4a476804b2ddf5b919be639be4250e799efbc1d.js"> 971<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/notifications_controller-cad003fc85b7a01f6f4d480d16d028566c5997164a9f2b26b034933e211125c9.js"> 972<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/participants_controller-d525bf7c21b360203b5afb5d0612a11ffd2cc0e60e3535325107a610bd234d48.js"> 973<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/participants_viewer_controller-96f2316c719fdc80473a808e9c071c7cfd3cbf03ce789b0c1185af90ebb858e8.js"> 974<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/play_control_controller-dfb99d489ab290e450ebf9ea35d32155c6d9ede15172d37062c09d26184dd473.js"> 975<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/pool_tabs_controller-95f32890ae2f48414f122cbbba34261265fa2517f3cf5c4bfafbb0f4143a2493.js"> 976<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/pools_management_controller-42d0e0aec67bca1406f663a3eb0b0e2d5226540308294a83b2a7dba528bca6ee.js"> 977<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/premium_ui-b7cd7b95ab103708fecf7c98b9766d1b3bf349c28439cd9acb012fcffb9ace8a.js"> 978<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/round_tabs_controller-e25bf4b9a192e77421f2a50c000a9e3b44241a87c480f48efebe5cb88ca2f5c0.js"> 979<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/scouting_panel_controller-fdb35672bd0f0eaa90eb63e0ddd0679e7d35c70ad785122aa9e6424daa418eef.js"> 980<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/signing_station_controller-376e7e5f0b1be09e75371fe9effd22e9abde988416f43d3c4bb97697636f6a14.js"> 981<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/standings_view_controller-5b4f685cbe15fddd4863ac1debf7ab2172701a91b4c960232887c9affae4a174.js"> 982<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tab_bracket_viewer_controller-f7571c9cb9dc536e811777a0a095f69574fde0fb9bd3c2b2ac0fff119a4316dd.js"> 983<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tap_pool_manager_controller-d9675dcc57b
983c91076458be14a4d81663ab9000e62558a46842c27e2e05a53222.js"> 984<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/team_manager_controller-dec30b90ad2ef0a897606d2fb8c9010d9ee1b5e62978cff3fa02f7253b2d9674.js"> 985<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/team_roster_seed_controller-1964f3476cad23551a3aebb85b7027523570961d717fb03e1c01777f7b467362.js"> 986<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/theme_controller-ac583adadcb9767d25339f574eab6b945ec6c223110e2b0b62d4238e9d7e0884.js"> 987<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_broadcast_controller-e63c5e3b88ae872be809867af672c612fcec53253300cc19b600274105ee4a47.js"> 988<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_check_in_controller-c84c7e6d21a44e35f8ec8d246e3d53e2842f97c86f74f3acfacb6c82098679a2.js"> 989<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_dupr_picker_controller-6d8fb3335e3cf1a686f4031becc7308e383c13a2b9acdce1650115eeff175285.js"> 990<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_dupr_submission_controller-ae56b32755eded1736be009755cef0dd36c9e30171901ed1c5eb11302e451aaa.js"> 991<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_notifications_controller-d6159100fab0e7f6925298bd47b45774d6ad1d5acccb4b243ccec6ddc1af29c8.js"> 992<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_tabs_controller-b9d27bd322ed84cba5e5b6f0ba2883e0ed24521023f4c5155755aa0a8e81d642.js"> 993<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_add_team_controller-0a76671a4820bbd7a28d7f49a78d82e7f51da29b3fd5a82fb2394a05ca04c6ca.js"> 994<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_broadcast_controller-bb973cd2fbfb175b4955b5520babce0dae14d6cfbd12d54df3613c257c093435.js"> 995<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_clone_controller-423a08e54ca28f77445b4b9500a9b5f0d741936e1886cda4be52596734d1c6ae.js"> 996<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_controller-fdffe040f58b8cf8a0de7b492b3d2084c23030c504cd238a062ea042623cd431.js"> 997<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_drawer_controller-6ac8abc6d7dd0c83b3219578fda4cf6254d25a913c5d5972f744c5128c4952ea.js"> 998<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_import_controller-435ad409dd807b7b38b212bdae0f4febb5ea1dd5c087e501f2730895c1409ef0.js"> 999<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_mark_paid_controller-880e9ce2987f4912c4ffbfce196b17093f282be42f324aefcdd6eb8259b8f53b.js"> 1000<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_refund_controller-3b2dc8c7634cf3543beb7ad41e2758ef9127925245fc8e762c6987918e7b2aa2.js"> 1001<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_teams_v2_reseed_controller-4709a8ab2ac14c2d1228a0cc2943d992d8aab3b8d4f283e44c99045c068024fb.js"> 1002<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_template_save_controller-6ab2170e5ffaf2b4996161c5205897de8d3457bea3693f2b98af68745cd9d0d1.js"> 1003<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tournament_wizard_controller-dccb8ed6e6102d481ed84e6b19b58219ec7cb23401367554f1b39c289f5ff376.js"> 1004<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/tv_display_controller-ab6cd9af2a2085f84404388cb57ff4eebb03bff4560f49049812b0ae767caecc.js"> 1005<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/view_mode_toggle_controller-12cbc186bd2019b2774469547bc64a0a9959c66555471bcac1bac963d5518a5b.js"> 1006<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/controllers/waiver_field_builder_controller-cc1f80c5eddde141a5eb9d33b285ab2d99d057c6d8cf08b0a87d1c7ad217c86a.js"> 1007<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/channels/consumer-4eaf7eb8102db32e7caa74bceacb3a0119d9ab9a1190024dd906fd97cbc19a90.js"> 1008<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/channels/index-2983a1503d73f62703fe53d06f8d3b4d6829d995276142c70e1a4acf1ab7e65a.js"> 1009<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/channels/rejected_default-95e092c4698ca1b4e546800b9c147751d204602588c8e46c281a1ce626830bef.js"> 1010<link rel="modulepreload" href="https://www.picklebeastpickleball.com/assets/lib/signing_errors-e6b9dbd67295f653268c5ceda7c1b2573816a94faa2d13e486edc0bc7494a236.js">
1011<script type="module">import "application"</script>
1011 1012
1012<script src="https://www.picklebeastpickleball.com/assets/theme-toggle-ddff1c9b2a582a6c816d36e22439f4dac2b90bdbda8077943ad54ba439e9aba1.js" defer="defer"></script>
1012 1013 <style> 1014.pbh-nav { 1015 position: fixed; top: 0; left: 0; right: 0; z-index: 1000; 1016 padding: 8px 32px; min-height: 56px; 1017 display: flex; align-items: center; 1018 transition: background 0.4s ease, box-shadow 0.4s ease; 1019} 1020.pbh-nav.scrolled { 1021 background: rgba(0,0,0,0.85); 1022 backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); 1023 box-shadow: 0 1px 0 rgba(255,255,255,0.08); 1024} 1025.pbh-nav-inner { 1026 width: 100%; 1027 display: flex; align-items: center; justify-content: space-between; 1028 flex-wrap: wrap; gap: 6px 12px; 1029} 1030.pbh-nav-left { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; min-width: 0; } 1031.pbh-nav-logo-claws { height: 30px; width: auto; flex: 0 0 auto; } 1032.pbh-nav-logo-name { height: 22px; width: auto; flex: 0 0 auto; } 1033.pbh-nav-links { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; } 1034.pbh-nav-chip { 1035 padding: 6px 14px; border-radius: 100px; 1036 font-size: 0.78rem; font-weight: 500; color: rgba(255,255,255,0.7); 1037 text-decoration: none; transition: color 0.2s ease, background 0.2s ease; 1038 border: 1px solid rgba(255,255,255,0.08); 1039 background: none; cursor: pointer; 1040 white-space: nowrap; 1041} 1042.pbh-nav-chip:hover { 1043 color: white; background: rgba(255,255,255,0.08); 1044 border-color: rgba(255,255,255,0.15); 1045} 1046.pbh-nav-chip-accent { 1047 color: #23aae0; border: 1px solid rgba(35,170,224,0.3); 1048} 1049.pbh-nav-chip-accent:hover { 1050 background: rgba(35,170,224,0.1); color: #38d9ff; 1051} 1052 1053/* Multi-club dropdown */ 1054.pbh-nav-dropdown { position: relative; } 1055.pbh-nav-dropdown-toggle { 1056 display: flex; align-items: center; gap: 4px; 1057} 1058.pbh-nav-dropdown-toggle i { font-size: 0.55rem; opacity: 0.6; } 1059.pbh-nav-dropdown-menu { 1060 display: none; position: absolute; top: calc(100% + 8px); right: 0; 1061 background: rgba(15,15,17,0.95); border: 1px solid rgba(255,255,255,0.12); 1062 border-radius: 12px; padding: 6px 0; min-width: 220px; 1063 backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); 1064 z-index: 1001; box-shadow: 0 8px 32px rgba(0,0,0,0.5); 1065} 1066.pbh-nav-dropdown.open .pbh-nav-dropdown-menu { display: block; } 1067.pbh-nav-dropdown-menu a { 1068 display: block; padding: 10px 16px; color: rgba(255,255,255,0.75); 1069 text-decoration: none; font-size: 0.82rem; font-weight: 500; 1070 transition: background 0.15s ease, color 0.15s ease; 1071} 1072.pbh-nav-dropdown-menu a:hover { 1073 background: rgba(255,255,255,0.08); color: white; 1074} 1075.pbh-nav-dropdown-label { 1076 padding: 8px 16px 4px; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; 1077 text-transform: uppercase; color: rgba(255,255,255,0.4); 1078} 1079.pbh-nav-dropdown-divider { height: 1px; background: rgba(255,255,255,0.1); margin: 6px 0; } 1080.pbh-nav-avatar-toggle { 1081 background: none; border: none; cursor: pointer; padding: 2px; 1082 border-radius: 50%; transition: opacity 0.2s ease; 1083} 1084.pbh-nav-avatar-toggle:hover { opacity: 0.8; } 1085 1086@media (max-width: 1024px) { 1087 .pbh-nav { padding: 0 16px; } 1088 .pbh-nav-links { gap: 2px; } 1089 .pbh-nav-chip { padding: 5px 10px; font-size: 0.68rem; } 1090 .pbh-nav-hide-mobile { display: none !important; } 1091 .pbh-nav-hamburger { display: flex !important; } 1092} 1093@media (max-width: 640px) { 1094 .pbh-nav-logo-name { display: none; } 1095 .pbh-nav-links > .pbh-nav-chip, 1096 .pbh-nav-links > .pbh-nav-dropdown { display: none !important; } 1097 .pbh-nav-hamburger { display: flex !important; } 1098} 1099 1100/* Hamburger button */ 1101.pbh-nav-hamburger { 1102 display: none; 1103 align-items: center; justify-content: center; 1104 width: 36px; height: 36px; border-radius: 10px; 1105 background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); 1106 color: rgba(255,255,255,0.7); cursor: pointer; 1107 transition: all 0.2s ease; 1108} 1109.pbh-nav-hamburger:hover { 1110 background: rgba(255,255,255,0.12); color: white; 1111} 1112.pbh-nav-hamburger i { font-size: 1rem; } 1113 1114/* Mobile slide-out menu */ 1115.pbh-mobile-menu { 1116 display: none; 1117 position: fixed; inset: 0; 1118 z-index: 10000; 1119} 1120.pbh-mobile-menu.open { display: block; } 1121.pbh-mobile-menu-backdrop { 1122 position: absolute; inset: 0; 1123 background: rgba(0,0,0,0.6); 1124 backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); 1125} 1126.pbh-mobile-menu-panel { 1127 position: absolute; top: 0; right: 0; bottom: 0; 1128 width: 280px; max-width: 85vw; 1129 background: rgba(10,10,12,0.97); 1130 border-left: 1px solid rgba(255,255,255,0.08); 1131 backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); 1132 padding: 20px 0; 1133 transform: translateX(100%); 1134 transition: transform 0.3s ease; 1135 overflow-y: auto; -webkit-overflow-scrolling: touch; 1136} 1137.pbh-mobile-menu.open .pbh-mobile-menu-panel { 1138 transform: translateX(0); 1139} 1140.pbh-mobile-menu-close { 1141 display: flex; align-items: center; justify-content: flex-end; 1142 padding: 0 20px 16px; 1143} 1144.pbh-mobile-menu-close button { 1145 background: none; border: none; color: rgba(255,255,255,0.5); 1146 font-size: 1.2rem; cursor: pointer; padding: 4px; 1147 transition: color 0.2s ease; 1148} 1149.pbh-mobile-menu-close button:hover { color: white; } 1150.pbh-mobile-menu-links { 1151 display: flex; flex-direction: column; gap: 2px; padding: 0 12px; 1152} 1153.pbh-mobile-menu-links a { 1154 display: flex; align-items: center; gap: 12px; 1155 padding: 14px 16px; border-radius: 12px; 1156 color: rgba(255,255,255,0.7); text-decoration: none; 1157 font-size: 0.95rem; font-weight: 500; 1158 transition: background 0.15s ease, color 0.15s ease; 1159} 1160.pbh-mobile-menu-links a:hover { 1161 background: rgba(255,255,255,0.06); color: white; 1162} 1163.pbh-mobile-menu-links a i {
1164 width: 20px; text-align: center; font-size: 0.85rem; 1165 color: rgba(35,170,224,0.6); 1166} 1167.pbh-mobile-menu-links .pbh-mobile-divider { 1168 height: 1px; background: rgba(255,255,255,0.06); 1169 margin: 8px 16px; 1170} 1171.pbh-mobile-menu-links .pbh-mobile-accent { 1172 color: #23aae0; 1173} 1174.pbh-mobile-menu-links .pbh-mobile-accent i { 1175 color: #23aae0; 1176} 1177/* 2026-05-26 â Sectioned mobile menu */ 1178.pbh-mobile-section-label { 1179 display: flex; align-items: center; gap: 8px; 1180 padding: 18px 20px 6px; 1181 font-size: 0.7rem; font-weight: 700; 1182 letter-spacing: 0.08em; 1183 text-transform: uppercase; 1184 color: rgba(255,255,255,0.4); 1185} 1186.pbh-mobile-section-label:first-child { padding-top: 8px; } 1187.pbh-mobile-section-count { 1188 margin-left: 4px; 1189 padding: 1px 7px; 1190 font-size: 0.62rem; 1191 font-weight: 700; 1192 background: rgba(255,255,255,0.08); 1193 color: rgba(255,255,255,0.6); 1194 border-radius: 100px; 1195} 1196.pbh-mobile-clubs-group { display: contents; } 1197.pbh-mobile-clubs-toggle { 1198 display: flex; align-items: center; gap: 8px; 1199 width: 100%; 1200 padding: 10px 20px; 1201 background: transparent; 1202 border: none; 1203 color: rgba(255,255,255,0.55); 1204 font-size: 0.82rem; 1205 font-weight: 600; 1206 cursor: pointer; 1207 text-align: left; 1208} 1209.pbh-mobile-clubs-toggle i { 1210 font-size: 0.7rem; 1211 transition: transform 0.18s ease; 1212} 1213.pbh-mobile-clubs-group.is-open .pbh-mobile-clubs-toggle i { 1214 transform: rotate(180deg); 1215} 1216.pbh-mobile-clubs-rest { display: contents; } 1217 1218/* Theme toggle */ 1219.pbh-nav-theme-toggle { 1220 display: flex; align-items: center; justify-content: center; 1221 width: 34px; height: 34px; border-radius: 50%; 1222 background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); 1223 color: rgba(255,255,255,0.6); cursor: pointer; 1224 transition: all 0.2s ease; margin-left: 4px; 1225} 1226.pbh-nav-theme-toggle:hover { 1227 background: rgba(255,255,255,0.12); color: white; 1228} 1229/* Landing nav is always dark â no light mode variants */ 1230.pbh-theme-sun { display: none; } 1231.pbh-theme-moon { display: block; } 1232</style> 1233<style> 1234.contact-page { 1235 background: linear-gradient(180deg, #1a1a1d 0%, #2d2d30 100%); 1236 min-height: 100vh; 1237 padding: 60px 20px; 1238} 1239 1240.contact-page::before { 1241 content: ''; 1242 position: fixed; 1243 top: 0; left: 0; right: 0; bottom: 0; 1244 background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(139,92,246,0.03)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>'); 1245 pointer-events: none; 1246 z-index: 0; 1247} 1248 1249.contact-container { 1250 max-width: 600px; 1251 margin: 0 auto; 1252 position: relative; 1253 z-index: 1; 1254} 1255 1256.contact-header { 1257 text-align: center; 1258 margin-bottom: 40px; 1259} 1260 1261.contact-badge { 1262 display: inline-flex; 1263 align-items: center; 1264 gap: 8px; 1265 background: rgba(139, 92, 246, 0.15); 1266 border: 1px solid rgba(139, 92, 246, 0.3); 1267 border-radius: 50px; 1268 padding: 8px 20px; 1269 margin-bottom: 20px; 1270 color: #c4b5fd; 1271 font-size: 0.875rem; 1272 font-weight: 600; 1273 text-transform: uppercase; 1274 letter-spacing: 0.1em; 1275} 1276 1277.contact-badge i { color: #a78bfa; } 1278 1279.contact-title { 1280 font-size: 2.5rem; 1281 font-weight: 900; 1282 color: white; 1283 margin: 0 0 12px 0; 1284} 1285 1286.contact-subtitle { 1287 font-size: 1.1rem; 1288 color: rgba(255, 255, 255, 0.6); 1289 margin: 0; 1290} 1291 1292.contact-card { 1293 background: linear-gradient(135deg, rgba(139, 92, 246, 0.08) 0%, rgba(139, 92, 246, 0.02) 100%); 1294 border: 1px solid rgba(139, 92, 246, 0.2); 1295 border-radius: 24px; 1296 padding: 40px; 1297} 1298 1299.contact-row { 1300 display: grid; 1301 grid-template-columns: 1fr 1fr; 1302 gap: 20px; 1303} 1304 1305@media (max-width: 600px) { 1306 .contact-row { grid-template-columns: 1fr; } 1307 .contact-card { padding: 24px; } 1308} 1309 1310.contact-field { 1311 margin-bottom: 24px; 1312} 1313 1314.contact-label { 1315 display: block; 1316 font-size: 0.9rem; 1317 font-weight: 600; 1318 color: rgba(255, 255, 255, 0.8); 1319 margin-bottom: 8px; 1320} 1321 1322.contact-input { 1323 width: 100%; 1324 padding: 14px 18px; 1325 background: rgba(255, 255, 255, 0.05); 1326 border: 1px solid rgba(255, 255, 255, 0.15); 1327 border-radius: 12px; 1328 font-size: 1rem; 1329 color: white; 1330 transition: all 0.2s; 1331} 1332 1333.contact-input::placeholder { 1334 color: rgba(255, 255, 255, 0.35); 1335} 1336 1337.contact-input:focus { 1338 outline: none; 1339 border-color: #8b5cf6; 1340 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2); 1341 background: rgba(255, 255, 255, 0.08); 1342} 1343 1344textarea.contact-input { 1345 min-height: 140px; 1346 resize: vertical; 1347} 1348 1349.contact-submit { 1350 width: 100%; 1351 padding: 16px 32px; 1352 background: linear-gradient(135deg, #8b5cf6, #7c3aed); 1353 color: white; 1354 border: none; 1355 border-radius: 12px; 1356 font-size: 1rem; 1357 font-weight: 700; 1358 cursor: pointer; 1359 transition: all 0.3s ease; 1360 display: flex; 1361 align-items: center; 1362 justify-content: center; 1363 gap: 10px; 1364} 1365 1366.contact-submit:hover { 1367 background: linear-gradient(135deg, #9d7afa, #8b5cf6); 1368 transform: translateY(-2px); 1369 box-shadow: 0 8px 24px rgba(139, 92, 246, 0.4); 1370} 1371 1372.contact-submit:active { 1373 transform: translateY(0); 1374} 1375 1376/* Flash messages */ 1377.contact-flash { 1378 padding: 16px 20px; 1379 border-radius: 12px; 1380 margin-bottom: 24px; 1381 display: flex; 1382 align-items: center; 1383 gap: 12px; 1384 font-weight: 500; 1385} 1386 1387.contact-flash.success { 1388 background: rgba(34, 197, 94, 0.15); 1389 border: 1px solid rgba(34, 197, 94, 0.3); 1390 color: #22c55e; 1391} 1392 1393.contact-flash.error {
1394 background: rgba(239, 68, 68, 0.15); 1395 border: 1px solid rgba(239, 68, 68, 0.3); 1396 color: #f87171; 1397} 1398</style> 1399 1400 </head> 1401 1402 <body> 1403 <style> 1404/* ============================================== 1405 Accessibility Styles 1406 ============================================== */ 1407 1408/* Skip Links */ 1409.skip-links { 1410 position: absolute; 1411 top: 0; 1412 left: 0; 1413 width: 100%; 1414 z-index: 10000; 1415} 1416 1417.skip-link { 1418 position: absolute; 1419 top: -100%; 1420 left: 50%; 1421 transform: translateX(-50%); 1422 background: var(--pb-accent, #23AAE0); 1423 color: white; 1424 padding: 1rem 1.5rem; 1425 font-size: 1rem; 1426 font-weight: 600; 1427 text-decoration: none; 1428 border-radius: 0 0 8px 8px; 1429 z-index: 10001; 1430 transition: top 0.15s ease; 1431} 1432 1433.skip-link:focus { 1434 top: 0; 1435 outline: none; 1436 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); 1437} 1438 1439/* Focus Indicators */ 1440*:focus-visible { 1441 outline: 3px solid var(--pb-accent, #23AAE0); 1442 outline-offset: 2px; 1443} 1444 1445/* Remove outline for mouse users */ 1446*:focus:not(:focus-visible) { 1447 outline: none; 1448} 1449 1450/* Custom focus styles for interactive elements */ 1451a:focus-visible, 1452button:focus-visible, 1453input:focus-visible, 1454select:focus-visible, 1455textarea:focus-visible, 1456[role="button"]:focus-visible, 1457[tabindex="0"]:focus-visible { 1458 outline: 3px solid var(--pb-accent, #23AAE0); 1459 outline-offset: 2px; 1460 border-radius: 4px; 1461} 1462 1463/* High contrast focus for dark backgrounds */ 1464.nav-menu a:focus-visible, 1465.nav-menu button:focus-visible { 1466 outline-color: white; 1467} 1468 1469/* Reduced Motion */ 1470@media (prefers-reduced-motion: reduce) { 1471 *, 1472 *::before, 1473 *::after { 1474 animation-duration: 0.01ms !important; 1475 animation-iteration-count: 1 !important; 1476 transition-duration: 0.01ms !important; 1477 scroll-behavior: auto !important; 1478 } 1479} 1480 1481/* Screen Reader Only */ 1482.sr-only { 1483 position: absolute; 1484 width: 1px; 1485 height: 1px; 1486 padding: 0; 1487 margin: -1px; 1488 overflow: hidden; 1489 clip: rect(0, 0, 0, 0); 1490 white-space: nowrap; 1491 border: 0; 1492} 1493 1494/* Show on focus (for skip links) */ 1495.sr-only-focusable:focus, 1496.sr-only-focusable:active { 1497 position: static; 1498 width: auto; 1499 height: auto; 1500 padding: inherit; 1501 margin: inherit; 1502 overflow: visible; 1503 clip: auto; 1504 white-space: normal; 1505} 1506 1507/* High Contrast Mode Support */ 1508@media (forced-colors: active) { 1509 .skip-link:focus { 1510 outline: 3px solid ButtonText; 1511 } 1512 1513 button, 1514 a, 1515 input, 1516 select, 1517 textarea { 1518 border: 1px solid ButtonText; 1519 } 1520} 1521 1522/* Minimum Touch Target Size */ 1523@media (pointer: coarse) { 1524 button, 1525 a, 1526 [role="button"], 1527 input[type="checkbox"], 1528 input[type="radio"], 1529 select { 1530 min-height: 44px; 1531 min-width: 44px; 1532 } 1533 1534 /* Ensure inline links in text don't get too big */ 1535 p a, 1536 li a, 1537 span a { 1538 min-height: auto; 1539 min-width: auto; 1540 } 1541} 1542 1543/* Form Accessibility */ 1544label { 1545 cursor: pointer; 1546} 1547 1548input:disabled, 1549button:disabled, 1550select:disabled, 1551textarea:disabled { 1552 cursor: not-allowed; 1553 opacity: 0.6; 1554} 1555 1556/* Error states with color + icon */ 1557.field-error, 1558.input-error { 1559 border-color: var(--pb-error, #FF453A) !important; 1560 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23FF453A' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995z'/%3E%3C/svg%3E"); 1561 background-repeat: no-repeat; 1562 background-position: right 12px center; 1563 padding-right: 40px !important; 1564} 1565 1566/* ARIA Live Regions */ 1567[aria-live="polite"], 1568[aria-live="assertive"] { 1569 position: relative; 1570} 1571 1572/* Loading state announcements */ 1573.loading-announcement { 1574 position: absolute; 1575 width: 1px; 1576 height: 1px; 1577 padding: 0; 1578 margin: -1px; 1579 overflow: hidden; 1580 clip: rect(0, 0, 0, 0); 1581 white-space: nowrap; 1582 border: 0; 1583} 1584 1585/* Focus trap indicator for modals */ 1586[role="dialog"][aria-modal="true"]:focus { 1587 outline: none; 1588} 1589 1590/* Button focus improvements */ 1591.btn:focus-visible, 1592.button:focus-visible { 1593 outline: 3px solid var(--pb-accent, #23AAE0); 1594 outline-offset: 2px; 1595 box-shadow: none; 1596} 1597 1598/* Card focus (for keyboard navigation) */ 1599.card:focus-visible, 1600[role="article"]:focus-visible { 1601 outline: 3px solid var(--pb-accent, #23AAE0); 1602 outline-offset: 4px; 1603 border-radius: 12px; 1604} 1605 1606/* Tab focus */ 1607[role="tab"]:focus-visible { 1608 outline: 3px solid var(--pb-accent, #23AAE0); 1609 outline-offset: -3px; 1610 z-index: 1; 1611} 1612 1613/* Checkbox/Radio custom focus */ 1614input[type="checkbox"]:focus-visible + label::before, 1615input[type="radio"]:focus-visible + label::before { 1616 outline: 3px solid var(--pb-accent, #23AAE0); 1617 outline-offset: 2px; 1618} 1619</style> 1620 1621<!-- Screen Reader Announcements --> 1622<div aria-live="polite" aria-atomic="true" class="loading-announcement" id="sr-announcements"></div> 1623
1624<script> 1625// Announce messages to screen readers 1626function announceToScreenReader(message, priority = 'polite') { 1627 const announcer = document.getElementById('sr-announcements'); 1628 if (announcer) { 1629 announcer.setAttribute('aria-live', priority); 1630 announcer.textContent = message; 1631 // Clear after announcement 1632 setTimeout(() => { 1633 announcer.textContent = ''; 1634 }, 1000); 1635 } 1636} 1637 1638// Make function globally available 1639window.announceToScreenReader = announceToScreenReader; 1640 1641// Add loading announcements to fetch operations 1642if (typeof window.fetch === 'function') { 1643 const originalFetch = window.fetch; 1644 window.fetch = function(...args) { 1645 // Only announce for user-initiated fetches (not background) 1646 const options = args[1] || {}; 1647 if (options.method && options.method !== 'GET') { 1648 announceToScreenReader('Loading, please wait...'); 1649 } 1650 return originalFetch.apply(this, args); 1651 }; 1652} 1653</script>
1653 1654 1655 <!-- Toast Container --> 1656 <div id="toast-container" class="toast-container" role="status" aria-live="polite" aria-atomic="true"></div> 1657 1658 <!-- Main Content (with sidebar spacing) --> 1659 <main id="main-content" class="" role="main"> 1660
1660<script> 1661// Ensure dark mode on landing/marketing pages (backup for Turbo navigations) 1662document.documentElement.setAttribute('data-theme', 'dark'); 1663window.__pbForceDark = true; 1664</script>
1664 1665 1666<nav class="pbh-nav" id="pbhNav"> 1667 <div class="pbh-nav-inner"> 1668 <div class="pbh-nav-left"> 1669 <a style="display:flex;align-items:center;gap:10px;text-decoration:none;" href="https://www.picklebeastpickleball.com/"> 1670 <img class="pbh-nav-logo-claws" alt="Picklebeast" src="https://www.picklebeastpickleball.com/assets/claws_blue_transparent-dab3af60817d5ffb156635f1ef396cbb9b498940141236485e513ce0b2f727cf.png" /> 1671 <img src="/white_logo_slim.png" class="pbh-nav-logo-name" alt="Picklebeast"> 1672</a> </div> 1673 <div class="pbh-nav-links"> 1674 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/browse/leagues">Leagues</a> 1675 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/browse/tournaments">Tournaments</a> 1676 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/advertise">Advertise</a> 1677 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/contact_us">Contact</a> 1678 <a class="pbh-nav-chip pbh-nav-chip-accent pbh-nav-hide-mobile" href="/app">Download App</a> 1679 <a class="pbh-nav-chip pbh-nav-chip-accent" href="/signup/club">Sign up your club</a> 1680 <a class="pbh-nav-chip" href="/users/sign_in">Log In</a> 1681 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/users/sign_up">Sign Up</a> 1682 <button class="pbh-nav-hamburger" id="pbhHamburger" aria-label="Menu"> 1683 <i class="fas fa-bars"></i> 1684 </button> 1685 </div> 1686 </div> 1687</nav> 1688 1689<!-- Mobile slide-out menu --> 1690<div class="pbh-mobile-menu" id="pbhMobileMenu"> 1691 <div class="pbh-mobile-menu-backdrop" id="pbhMobileBackdrop"></div> 1692 <div class="pbh-mobile-menu-panel"> 1693 <div class="pbh-mobile-menu-close"> 1694 <button id="pbhMobileClose" aria-label="Close menu"><i class="fas fa-xmark"></i></button> 1695 </div> 1696 <div class="pbh-mobile-menu-links"> 1697 1698 <div class="pbh-mobile-section-label">Browse</div> 1699 <a href="/browse/leagues"><i class="fas fa-trophy"></i> Leagues</a> 1700 <a href="/browse/tournaments"><i class="fas fa-medal"></i> Tournaments</a> 1701 <a href="/shop"><i class="fas fa-store"></i> Shop</a> 1702 1703 1704 <div class="pbh-mobile-section-label">About</div> 1705 <a href="/blog"><i class="fas fa-newspaper"></i> Blog</a> 1706 <a href="/contact_us"><i class="fas fa-envelope"></i> Contact</a> 1707 <a href="/advertise"><i class="fas fa-bullseye"></i> Advertise</a> 1708 <div class="pbh-mobile-divider"></div> 1709 <a class="pbh-mobile-accent" href="/app"><i class="fas fa-download"></i> Download App</a> 1710 <div class="pbh-mobile-divider"></div> 1711 <a class="pbh-mobile-accent" href="/signup/club"><i class="fas fa-building-flag"></i> Sign up your club</a> 1712 <a href="/users/sign_in"><i class="fas fa-right-to-bracket"></i> Log In</a> 1713 <a href="/users/sign_up"><i class="fas fa-user-plus"></i> Sign Up</a> 1714 </div> 1715 </div> 1716</div> 1717
1718<script> 1719(function() { 1720 var nav = document.getElementById('pbhNav'); 1721 if (!nav) return; 1722 window.addEventListener('scroll', function() { 1723 nav.classList.toggle('scrolled', window.scrollY > 40); 1724 }); 1725 1726 // Theme toggle â disabled on forced-dark pages (landing, features) 1727 var themeBtn = document.getElementById('pbhThemeToggle'); 1728 if (themeBtn) { 1729 if (window.__pbForceDark) { 1730 themeBtn.style.display = 'none'; 1731 } else { 1732 themeBtn.addEventListener('click', function() { 1733 var current = document.documentElement.getAttribute('data-theme') || 'dark'; 1734 var next = current === 'dark' ? 'light' : 'dark'; 1735 document.documentElement.setAttribute('data-theme', next); 1736 localStorage.setItem('pb-theme', next); 1737 }); 1738 } 1739 } 1740 1741 // Dropdown toggle 1742 document.addEventListener('click', function(e) { 1743 var toggle = e.target.closest('.pbh-nav-dropdown-toggle'); 1744 if (toggle) { 1745 e.preventDefault(); 1746 toggle.closest('.pbh-nav-dropdown').classList.toggle('open'); 1747 } else { 1748 document.querySelectorAll('.pbh-nav-dropdown.open').forEach(function(d) { 1749 d.classList.remove('open'); 1750 }); 1751 } 1752 }); 1753 1754 // Mobile hamburger menu 1755 var hamburger = document.getElementById('pbhHamburger'); 1756 var mobileMenu = document.getElementById('pbhMobileMenu'); 1757 var mobileBackdrop = document.getElementById('pbhMobileBackdrop'); 1758 var mobileClose = document.getElementById('pbhMobileClose'); 1759 1760 function openMobileMenu() { 1761 if (mobileMenu) mobileMenu.classList.add('open'); 1762 } 1763 function closeMobileMenu() { 1764 if (mobileMenu) mobileMenu.classList.remove('open'); 1765 } 1766 1767 if (hamburger) hamburger.addEventListener('click', openMobileMenu); 1768 if (mobileBackdrop) mobileBackdrop.addEventListener('click', closeMobileMenu); 1769 if (mobileClose) mobileClose.addEventListener('click', closeMobileMenu); 1770 1771 // Close on link click 1772 if (mobileMenu) { 1773 mobileMenu.querySelectorAll('.pbh-mobile-menu-links a').forEach(function(link) { 1774 link.addEventListener('click', closeMobileMenu); 1775 }); 1776 } 1777 1778 // 2026-05-26 â Collapsible "My Clubs" group when there are 3+ clubs. 1779 // Default state: shows first 2; tap "Show N more" to reveal the rest. 1780 document.querySelectorAll('[data-pbh-clubs-toggle]').forEach(function(btn) { 1781 btn.addEventListener('click', function(e) { 1782 e.preventDefault(); 1783 e.stopPropagation(); 1784 var group = btn.closest('[data-pbh-clubs-group]'); 1785 if (!group) return; 1786 var rest = group.querySelector('.pbh-mobile-clubs-rest'); 1787 var more = btn.querySelector('.pbh-mobile-clubs-toggle__more'); 1788 var less = btn.querySelector('.pbh-mobile-clubs-toggle__less'); 1789 var isOpen = !rest.hidden; 1790 rest.hidden = isOpen; 1791 if (more) more.hidden = !isOpen ? true : false; 1792 if (less) less.hidden = !isOpen ? false : true; 1793 group.classList.toggle('is-open', !isOpen); 1794 }); 1795 }); 1796})(); 1797</script>
1797 1798 1799 1800 1801 1802<div class="contact-page"> 1803 <div class="contact-container"> 1804 <div class="contact-header"> 1805 <div class="contact-badge"> 1806 <i class="fas fa-envelope"></i> 1807 <span>Get in Touch</span> 1808 </div> 1809 <h1 class="contact-title">Contact Us</h1> 1810 <p class="contact-subtitle">Have a question or comment? We'd love to hear from you.</p> 1811 </div> 1812 1813 1814 1815 <div class="contact-card"> 1816 <form action="/contact_us" method="post"> 1817 <meta name="csrf-param" content="authenticity_token" /> 1818<meta name="csrf-token" content="DdsfVuf3DgXlCFHmwYd3RsO8Z_jE_phOW6GiOt_ERA-B9Z--cDu87CN3Gl3-Pc39dTaoB3k_WT71XiNxetecNg" /> 1819 <input type="hidden" name="_timestamp" id="_timestamp" value="1790259419.7579439" autocomplete="off" /><div style="position:absolute;left:-9999px;top:-9999px;" aria-hidden="true"><label for="website_url">Leave this blank</label><input type="text" name="website_url" id="website_url" tabindex="-1" autocomplete="off" /></div> 1820 1821 <div class="contact-row"> 1822 <div class="contact-field"> 1823 <label for="first_name" class="contact-label">First Name</label> 1824 <input type="text" class="contact-input" id="first_name" name="first_name" placeholder="John" required> 1825 </div> 1826 <div class="contact-field"> 1827 <label for="last_name" class="contact-label">Last Name</label> 1828 <input type="text" class="contact-input" id="last_name" name="last_name" placeholder="Doe" required> 1829 </div> 1830 </div> 1831 1832 <div class="contact-field"> 1833 <label for="email" class="contact-label">Email Address</label> 1834 <input type="email" class="contact-input" id="email" name="email" placeholder="[email protected]" required> 1835 </div> 1836 1837 <div class="contact-field"> 1838 <label for="phone" class="contact-label">Phone <span style="color: rgba(255,255,255,0.4); font-weight: 400;">(optional)</span></label> 1839 <input type="tel" class="contact-input" id="phone" name="phone" placeholder="(555) 555-5555"> 1840 </div> 1841 1842 <div class="contact-field"> 1843 <label for="subject" class="contact-label">Subject</label> 1844 <input type="text" class="contact-input" id="subject" name="subject" placeholder="What's this about?" value=""> 1845 </div> 1846 1847 <div class="contact-field"> 1848 <label for="message" class="contact-label">Message</label> 1849 <textarea class="contact-input" id="message" name="message" placeholder="Tell us what's on your mind..." required></textarea> 1850 </div> 1851 1852 <button type="submit" class="contact-submit"> 1853 <i class="fas fa-paper-plane"></i> 1854 Send Message 1855 </button> 1856 </form> 1857 </div> 1858 </div> 1859</div> 1860 1861 </main> 1862 1863 <!-- Footer (can be hidden with content_for :hide_footer) --> 1864 1865 <!-- Enhanced Mobile-First JavaScript --> 1866
1866<script> 1867 // Global page ready handler - works with both initial load and Turbo navigation 1868 // Use this instead of DOMContentLoaded for Turbo-compatible initialization 1869 function onPageReady(callback) { 1870 // If Turbo is available, listen for turbo:load 1871 if (typeof Turbo !== 'undefined') { 1872 document.addEventListener('turbo:load', callback); 1873 } 1874 // Always listen for DOMContentLoaded for initial load and non-Turbo visits 1875 if (document.readyState === 'loading') { 1876 document.addEventListener('DOMContentLoaded', callback); 1877 } else { 1878 // DOM already loaded, execute immediately 1879 callback(); 1880 } 1881 } 1882 1883 // Also expose a render handler for turbo:render (cached pages) 1884 function onPageRender(callback) { 1885 document.addEventListener('turbo:render', callback); 1886 } 1887 1888 // Toast system (enhanced for mobile) 1889 function showToast(message, type = 'success', duration = 4000) { 1890 const container = document.getElementById('toast-container'); 1891 if (!container) return; 1892 1893 const toast = document.createElement('div'); 1894 toast.className = `toast toast-${type}`; 1895 toast.innerHTML = ` 1896 <div class="toast-content"> 1897 <span class="toast-icon">${type === 'success' ? 'â' : 'â '}</span> 1898 <span class="toast-message">${message}</span> 1899 </div> 1900 <div class="toast-progress"></div> 1901 `; 1902 1903 toast.addEventListener('click', () => toast.remove()); 1904 container.appendChild(toast); 1905 1906 // Auto-remove 1907 setTimeout(() => { 1908 if (container.contains(toast)) { 1909 toast.style.animation = 'toast-slide-out 0.3s ease forwards'; 1910 setTimeout(() => toast.remove(), 300); 1911 } 1912 }, duration); 1913 } 1914 1915 function initApplicationLayout() { 1916 // Show flash messages 1917 1918 // Mobile menu functionality 1919 const menuBtn = document.getElementById('navMenuBtn'); 1920 const menu = document.getElementById('navMenu'); 1921 const body = document.body; 1922 1923 if (menuBtn && menu) { 1924 menuBtn.addEventListener('click', () => { 1925 const isOpen = menuBtn.getAttribute('aria-expanded') === 'true'; 1926 1927 menuBtn.setAttribute('aria-expanded', !isOpen); 1928 menu.setAttribute('aria-hidden', isOpen); 1929 1930 menuBtn.classList.toggle('active'); 1931 menu.classList.toggle('active'); 1932 body.classList.toggle('nav-menu-open'); 1933 }); 1934 1935 // Close on escape key 1936 document.addEventListener('keydown', (e) => { 1937 if (e.key === 'Escape' && menu.classList.contains('active')) { 1938 menuBtn.click(); 1939 } 1940 }); 1941 1942 // Close on outside click 1943 menu.addEventListener('click', (e) => { 1944 if (e.target === menu) { 1945 menuBtn.click(); 1946 } 1947 }); 1948 } 1949 1950 // Enhanced delete link handling 1951 document.querySelectorAll('a[data-method="delete"]').forEach(link => { 1952 link.addEventListener('click', function(e) { 1953 e.preventDefault(); 1954 1955 const confirmMessage = link.getAttribute('data-confirm'); 1956 if (confirmMessage && !confirm(confirmMessage)) return; 1957 1958 const form = document.createElement('form'); 1959 form.method = 'POST'; 1960 form.action = link.href; 1961 form.style.display = 'none'; 1962 1963 // CSRF token 1964 const csrfToken = document.querySelector('meta[name="csrf-token"]'); 1965 if (csrfToken) { 1966 const csrfInput = document.createElement('input'); 1967 csrfInput.type = 'hidden'; 1968 csrfInput.name = 'authenticity_token'; 1969 csrfInput.value = csrfToken.getAttribute('content'); 1970 form.appendChild(csrfInput); 1971 } 1972 1973 // Method field 1974 const methodInput = document.createElement('input'); 1975 methodInput.type = 'hidden'; 1976 methodInput.name = '_method'; 1977 methodInput.value = 'delete'; 1978 form.appendChild(methodInput); 1979 1980 document.body.appendChild(form); 1981 form.submit(); 1982 }); 1983 }); 1984 } 1985 1986 // Turbo-compatible initialization 1987 document.addEventListener('DOMContentLoaded', initApplicationLayout); 1988 document.addEventListener('turbo:load', initApplicationLayout); 1989 1990 // Enhanced cart counter update 1991 function updateCartCounter(count) { 1992 const cartLink = document.querySelector('.nav-cart'); 1993 if (!cartLink) return; 1994 1995 let badge = cartLink.querySelector('.nav-cart-badge'); 1996 1997 if (count > 0) { 1998 if (!badge) { 1999 badge = document.createElement('span'); 2000 badge.className = 'nav-cart-badge';
2001 cartLink.appendChild(badge); 2002 } 2003 badge.textContent = count; 2004 badge.style.display = 'flex'; 2005 } else if (badge) { 2006 badge.style.display = 'none'; 2007 } 2008 } 2009 </script>
2009 2010 <!-- Cookie Consent Banner (hidden on admin pages via content_for :hide_cookie_banner) --> 2011 <div id="pbCookieBanner" style="display:none;"> 2012 <div class="pb-cookie-inner"> 2013 <p class="pb-cookie-text"> 2014 We use cookies to analyze site usage and improve your experience. Essential cookies (login, security) are always active. 2015 <a href="/privacy-policy" class="pb-cookie-link">Privacy Policy</a> 2016 </p> 2017 <div class="pb-cookie-buttons"> 2018 <button onclick="pbAcceptCookies()" class="pb-cookie-btn pb-cookie-accept">Accept</button> 2019 <button onclick="pbRejectCookies()" class="pb-cookie-btn pb-cookie-reject">Reject</button> 2020 </div> 2021 </div> 2022 </div> 2023 <style> 2024 #pbCookieBanner { 2025 position: sticky; 2026 bottom: 0; 2027 left: 0; 2028 right: 0; 2029 z-index: 99999; 2030 background: rgba(15, 15, 20, 0.97); 2031 backdrop-filter: blur(12px); 2032 border-top: 1px solid rgba(35, 170, 224, 0.2); 2033 padding: 16px 24px; 2034 box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.4); 2035 } 2036 .pb-cookie-inner { 2037 max-width: 1200px; 2038 margin: 0 auto; 2039 display: flex; 2040 align-items: center; 2041 justify-content: space-between; 2042 gap: 24px; 2043 } 2044 .pb-cookie-text { 2045 color: #ccc; 2046 font-size: 14px; 2047 line-height: 1.5; 2048 margin: 0; 2049 flex: 1; 2050 } 2051 .pb-cookie-link { 2052 color: #23aae0; 2053 text-decoration: none; 2054 } 2055 .pb-cookie-link:hover { 2056 text-decoration: underline; 2057 } 2058 .pb-cookie-buttons { 2059 display: flex; 2060 gap: 10px; 2061 flex-shrink: 0; 2062 } 2063 .pb-cookie-btn { 2064 border: none; 2065 border-radius: 8px; 2066 padding: 10px 24px; 2067 font-size: 14px; 2068 font-weight: 600; 2069 cursor: pointer; 2070 transition: opacity 0.2s; 2071 } 2072 .pb-cookie-btn:hover { opacity: 0.85; } 2073 .pb-cookie-accept { 2074 background: #23aae0; 2075 color: #fff; 2076 } 2077 .pb-cookie-reject { 2078 background: rgba(255, 255, 255, 0.1); 2079 color: #ccc; 2080 border: 1px solid rgba(255, 255, 255, 0.15); 2081 } 2082 @media (max-width: 600px) { 2083 .pb-cookie-inner { 2084 flex-direction: column; 2085 text-align: center; 2086 gap: 12px; 2087 } 2088 .pb-cookie-buttons { width: 100%; justify-content: center; } 2089 } 2090 </style> 2091
2091<script> 2092 function pbAcceptCookies() { 2093 var expires = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toUTCString(); 2094 document.cookie = 'pb_cookie_consent=accepted;expires=' + expires + ';path=/;SameSite=Lax'; 2095 document.getElementById('pbCookieBanner').style.display = 'none'; 2096 document.body.classList.remove('pb-cookie-visible'); 2097 if (typeof window.pbLoadAnalytics === 'function') window.pbLoadAnalytics(); 2098 } 2099 2100 function pbRejectCookies() { 2101 var expires = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toUTCString(); 2102 document.cookie = 'pb_cookie_consent=rejected;expires=' + expires + ';path=/;SameSite=Lax'; 2103 document.getElementById('pbCookieBanner').style.display = 'none'; 2104 document.body.classList.remove('pb-cookie-visible'); 2105 } 2106 2107 function pbShowCookieSettings() { 2108 document.cookie = 'pb_cookie_consent=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/'; 2109 document.getElementById('pbCookieBanner').style.display = 'block'; 2110 } 2111 2112 // Show banner if no consent decision yet 2113 (function() { 2114 if (document.cookie.indexOf('pb_cookie_consent=') === -1) { 2115 document.getElementById('pbCookieBanner').style.display = 'block'; 2116 document.body.classList.add('pb-cookie-visible'); 2117 } 2118 })(); 2119 </script>
2119 2120 2121 2122 </body>
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.