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>About Picklebeast â Picklebeast</title> 161 <meta name="description" content="Learn about Picklebeast's mission to revolutionize pickleball through technology, community, and innovation."> 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="C-bLZz8954M-ZkFxPcDK9mugzNrcWnEelehyYanpX_JhM7JFds-wy3Huwb9oU_uOLBDxae2sYEONs3WMW_9WGg" /> 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="About Picklebeast"> 186 <meta property="og:description" content="Learn about Picklebeast's mission to revolutionize pickleball through technology, community, and innovation."> 187 <meta property="og:url" content="https://www.picklebeastpickleball.com/about"> 188 189 <!-- Twitter Card --> 190 <meta name="twitter:card" content="summary_large_image"> 191 <meta name="twitter:title" content="About Picklebeast"> 192 <meta name="twitter:description" content="Learn about Picklebeast's mission to revolutionize pickleball through technology, community, and innovation."> 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 1234 </head> 1235 1236 <body> 1237 <style> 1238/* ============================================== 1239 Accessibility Styles 1240 ============================================== */ 1241 1242/* Skip Links */ 1243.skip-links { 1244 position: absolute; 1245 top: 0; 1246 left: 0; 1247 width: 100%; 1248 z-index: 10000; 1249} 1250 1251.skip-link { 1252 position: absolute; 1253 top: -100%; 1254 left: 50%; 1255 transform: translateX(-50%); 1256 background: var(--pb-accent, #23AAE0); 1257 color: white; 1258 padding: 1rem 1.5rem; 1259 font-size: 1rem; 1260 font-weight: 600; 1261 text-decoration: none; 1262 border-radius: 0 0 8px 8px; 1263 z-index: 10001; 1264 transition: top 0.15s ease; 1265} 1266 1267.skip-link:focus { 1268 top: 0; 1269 outline: none; 1270 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); 1271} 1272 1273/* Focus Indicators */ 1274*:focus-visible { 1275 outline: 3px solid var(--pb-accent, #23AAE0); 1276 outline-offset: 2px; 1277} 1278 1279/* Remove outline for mouse users */ 1280*:focus:not(:focus-visible) { 1281 outline: none; 1282} 1283 1284/* Custom focus styles for interactive elements */ 1285a:focus-visible, 1286button:focus-visible, 1287input:focus-visible, 1288select:focus-visible, 1289textarea:focus-visible, 1290[role="button"]:focus-visible, 1291[tabindex="0"]:focus-visible { 1292 outline: 3px solid var(--pb-accent, #23AAE0); 1293 outline-offset: 2px; 1294 border-radius: 4px; 1295} 1296 1297/* High contrast focus for dark backgrounds */ 1298.nav-menu a:focus-visible, 1299.nav-menu button:focus-visible { 1300 outline-color: white; 1301} 1302 1303/* Reduced Motion */ 1304@media (prefers-reduced-motion: reduce) { 1305 *, 1306 *::before, 1307 *::after { 1308 animation-duration: 0.01ms !important; 1309 animation-iteration-count: 1 !important; 1310 transition-duration: 0.01ms !important; 1311 scroll-behavior: auto !important; 1312 } 1313} 1314 1315/* Screen Reader Only */ 1316.sr-only { 1317 position: absolute; 1318 width: 1px; 1319 height: 1px; 1320 padding: 0; 1321 margin: -1px; 1322 overflow: hidden; 1323 clip: rect(0, 0, 0, 0); 1324 white-space: nowrap; 1325 border: 0; 1326} 1327 1328/* Show on focus (for skip links) */ 1329.sr-only-focusable:focus, 1330.sr-only-focusable:active { 1331 position: static; 1332 width: auto; 1333 height: auto; 1334 padding: inherit; 1335 margin: inherit; 1336 overflow: visible; 1337 clip: auto; 1338 white-space: normal; 1339} 1340 1341/* High Contrast Mode Support */ 1342@media (forced-colors: active) { 1343 .skip-link:focus { 1344 outline: 3px solid ButtonText; 1345 } 1346 1347 button, 1348 a, 1349 input, 1350 select, 1351 textarea { 1352 border: 1px solid ButtonText; 1353 } 1354} 1355 1356/* Minimum Touch Target Size */ 1357@media (pointer: coarse) { 1358 button, 1359 a, 1360 [role="button"], 1361 input[type="checkbox"], 1362 input[type="radio"], 1363 select { 1364 min-height: 44px; 1365 min-width: 44px; 1366 } 1367 1368 /* Ensure inline links in text don't get too big */ 1369 p a, 1370 li a, 1371 span a { 1372 min-height: auto; 1373 min-width: auto; 1374 } 1375} 1376 1377/* Form Accessibility */ 1378label { 1379 cursor: pointer; 1380} 1381 1382input:disabled, 1383button:disabled, 1384select:disabled, 1385textarea:disabled {
1386 cursor: not-allowed; 1387 opacity: 0.6; 1388} 1389 1390/* Error states with color + icon */ 1391.field-error, 1392.input-error { 1393 border-color: var(--pb-error, #FF453A) !important; 1394 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"); 1395 background-repeat: no-repeat; 1396 background-position: right 12px center; 1397 padding-right: 40px !important; 1398} 1399 1400/* ARIA Live Regions */ 1401[aria-live="polite"], 1402[aria-live="assertive"] { 1403 position: relative; 1404} 1405 1406/* Loading state announcements */ 1407.loading-announcement { 1408 position: absolute; 1409 width: 1px; 1410 height: 1px; 1411 padding: 0; 1412 margin: -1px; 1413 overflow: hidden; 1414 clip: rect(0, 0, 0, 0); 1415 white-space: nowrap; 1416 border: 0; 1417} 1418 1419/* Focus trap indicator for modals */ 1420[role="dialog"][aria-modal="true"]:focus { 1421 outline: none; 1422} 1423 1424/* Button focus improvements */ 1425.btn:focus-visible, 1426.button:focus-visible { 1427 outline: 3px solid var(--pb-accent, #23AAE0); 1428 outline-offset: 2px; 1429 box-shadow: none; 1430} 1431 1432/* Card focus (for keyboard navigation) */ 1433.card:focus-visible, 1434[role="article"]:focus-visible { 1435 outline: 3px solid var(--pb-accent, #23AAE0); 1436 outline-offset: 4px; 1437 border-radius: 12px; 1438} 1439 1440/* Tab focus */ 1441[role="tab"]:focus-visible { 1442 outline: 3px solid var(--pb-accent, #23AAE0); 1443 outline-offset: -3px; 1444 z-index: 1; 1445} 1446 1447/* Checkbox/Radio custom focus */ 1448input[type="checkbox"]:focus-visible + label::before, 1449input[type="radio"]:focus-visible + label::before { 1450 outline: 3px solid var(--pb-accent, #23AAE0); 1451 outline-offset: 2px; 1452} 1453</style> 1454 1455<!-- Screen Reader Announcements --> 1456<div aria-live="polite" aria-atomic="true" class="loading-announcement" id="sr-announcements"></div> 1457
1458<script> 1459// Announce messages to screen readers 1460function announceToScreenReader(message, priority = 'polite') { 1461 const announcer = document.getElementById('sr-announcements'); 1462 if (announcer) { 1463 announcer.setAttribute('aria-live', priority); 1464 announcer.textContent = message; 1465 // Clear after announcement 1466 setTimeout(() => { 1467 announcer.textContent = ''; 1468 }, 1000); 1469 } 1470} 1471 1472// Make function globally available 1473window.announceToScreenReader = announceToScreenReader; 1474 1475// Add loading announcements to fetch operations 1476if (typeof window.fetch === 'function') { 1477 const originalFetch = window.fetch; 1478 window.fetch = function(...args) { 1479 // Only announce for user-initiated fetches (not background) 1480 const options = args[1] || {}; 1481 if (options.method && options.method !== 'GET') { 1482 announceToScreenReader('Loading, please wait...'); 1483 } 1484 return originalFetch.apply(this, args); 1485 }; 1486} 1487</script>
1487 1488 1489 <!-- Toast Container --> 1490 <div id="toast-container" class="toast-container" role="status" aria-live="polite" aria-atomic="true"></div> 1491 1492 <!-- Main Content (with sidebar spacing) --> 1493 <main id="main-content" class="" role="main"> 1494
1495<script> 1496// Ensure dark mode on landing/marketing pages (backup for Turbo navigations) 1497document.documentElement.setAttribute('data-theme', 'dark'); 1498window.__pbForceDark = true; 1499</script>
1499 1500 1501<nav class="pbh-nav" id="pbhNav"> 1502 <div class="pbh-nav-inner"> 1503 <div class="pbh-nav-left"> 1504 <a style="display:flex;align-items:center;gap:10px;text-decoration:none;" href="https://www.picklebeastpickleball.com/"> 1505 <img class="pbh-nav-logo-claws" alt="Picklebeast" src="https://www.picklebeastpickleball.com/assets/claws_blue_transparent-dab3af60817d5ffb156635f1ef396cbb9b498940141236485e513ce0b2f727cf.png" /> 1506 <img src="/white_logo_slim.png" class="pbh-nav-logo-name" alt="Picklebeast"> 1507</a> </div> 1508 <div class="pbh-nav-links"> 1509 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/browse/leagues">Leagues</a> 1510 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/browse/tournaments">Tournaments</a> 1511 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/advertise">Advertise</a> 1512 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/contact_us">Contact</a> 1513 <a class="pbh-nav-chip pbh-nav-chip-accent pbh-nav-hide-mobile" href="/app">Download App</a> 1514 <a class="pbh-nav-chip pbh-nav-chip-accent" href="/signup/club">Sign up your club</a> 1515 <a class="pbh-nav-chip" href="/users/sign_in">Log In</a> 1516 <a class="pbh-nav-chip pbh-nav-hide-mobile" href="/users/sign_up">Sign Up</a> 1517 <button class="pbh-nav-hamburger" id="pbhHamburger" aria-label="Menu"> 1518 <i class="fas fa-bars"></i> 1519 </button> 1520 </div> 1521 </div> 1522</nav> 1523 1524<!-- Mobile slide-out menu --> 1525<div class="pbh-mobile-menu" id="pbhMobileMenu"> 1526 <div class="pbh-mobile-menu-backdrop" id="pbhMobileBackdrop"></div> 1527 <div class="pbh-mobile-menu-panel"> 1528 <div class="pbh-mobile-menu-close"> 1529 <button id="pbhMobileClose" aria-label="Close menu"><i class="fas fa-xmark"></i></button> 1530 </div> 1531 <div class="pbh-mobile-menu-links"> 1532 1533 <div class="pbh-mobile-section-label">Browse</div> 1534 <a href="/browse/leagues"><i class="fas fa-trophy"></i> Leagues</a> 1535 <a href="/browse/tournaments"><i class="fas fa-medal"></i> Tournaments</a> 1536 <a href="/shop"><i class="fas fa-store"></i> Shop</a> 1537 1538 1539 <div class="pbh-mobile-section-label">About</div> 1540 <a href="/blog"><i class="fas fa-newspaper"></i> Blog</a> 1541 <a href="/contact_us"><i class="fas fa-envelope"></i> Contact</a> 1542 <a href="/advertise"><i class="fas fa-bullseye"></i> Advertise</a> 1543 <div class="pbh-mobile-divider"></div> 1544 <a class="pbh-mobile-accent" href="/app"><i class="fas fa-download"></i> Download App</a> 1545 <div class="pbh-mobile-divider"></div> 1546 <a class="pbh-mobile-accent" href="/signup/club"><i class="fas fa-building-flag"></i> Sign up your club</a> 1547 <a href="/users/sign_in"><i class="fas fa-right-to-bracket"></i> Log In</a> 1548 <a href="/users/sign_up"><i class="fas fa-user-plus"></i> Sign Up</a> 1549 </div> 1550 </div> 1551</div> 1552
1553<script> 1554(function() { 1555 var nav = document.getElementById('pbhNav'); 1556 if (!nav) return; 1557 window.addEventListener('scroll', function() { 1558 nav.classList.toggle('scrolled', window.scrollY > 40); 1559 }); 1560 1561 // Theme toggle â disabled on forced-dark pages (landing, features) 1562 var themeBtn = document.getElementById('pbhThemeToggle'); 1563 if (themeBtn) { 1564 if (window.__pbForceDark) { 1565 themeBtn.style.display = 'none'; 1566 } else { 1567 themeBtn.addEventListener('click', function() { 1568 var current = document.documentElement.getAttribute('data-theme') || 'dark'; 1569 var next = current === 'dark' ? 'light' : 'dark'; 1570 document.documentElement.setAttribute('data-theme', next); 1571 localStorage.setItem('pb-theme', next); 1572 }); 1573 } 1574 } 1575 1576 // Dropdown toggle 1577 document.addEventListener('click', function(e) { 1578 var toggle = e.target.closest('.pbh-nav-dropdown-toggle'); 1579 if (toggle) { 1580 e.preventDefault(); 1581 toggle.closest('.pbh-nav-dropdown').classList.toggle('open'); 1582 } else { 1583 document.querySelectorAll('.pbh-nav-dropdown.open').forEach(function(d) { 1584 d.classList.remove('open'); 1585 }); 1586 } 1587 }); 1588 1589 // Mobile hamburger menu 1590 var hamburger = document.getElementById('pbhHamburger'); 1591 var mobileMenu = document.getElementById('pbhMobileMenu'); 1592 var mobileBackdrop = document.getElementById('pbhMobileBackdrop'); 1593 var mobileClose = document.getElementById('pbhMobileClose'); 1594 1595 function openMobileMenu() { 1596 if (mobileMenu) mobileMenu.classList.add('open'); 1597 } 1598 function closeMobileMenu() { 1599 if (mobileMenu) mobileMenu.classList.remove('open'); 1600 } 1601 1602 if (hamburger) hamburger.addEventListener('click', openMobileMenu); 1603 if (mobileBackdrop) mobileBackdrop.addEventListener('click', closeMobileMenu); 1604 if (mobileClose) mobileClose.addEventListener('click', closeMobileMenu); 1605 1606 // Close on link click 1607 if (mobileMenu) { 1608 mobileMenu.querySelectorAll('.pbh-mobile-menu-links a').forEach(function(link) { 1609 link.addEventListener('click', closeMobileMenu); 1610 }); 1611 } 1612 1613 // 2026-05-26 â Collapsible "My Clubs" group when there are 3+ clubs. 1614 // Default state: shows first 2; tap "Show N more" to reveal the rest. 1615 document.querySelectorAll('[data-pbh-clubs-toggle]').forEach(function(btn) { 1616 btn.addEventListener('click', function(e) { 1617 e.preventDefault(); 1618 e.stopPropagation(); 1619 var group = btn.closest('[data-pbh-clubs-group]'); 1620 if (!group) return; 1621 var rest = group.querySelector('.pbh-mobile-clubs-rest'); 1622 var more = btn.querySelector('.pbh-mobile-clubs-toggle__more'); 1623 var less = btn.querySelector('.pbh-mobile-clubs-toggle__less'); 1624 var isOpen = !rest.hidden; 1625 rest.hidden = isOpen; 1626 if (more) more.hidden = !isOpen ? true : false; 1627 if (less) less.hidden = !isOpen ? false : true; 1628 group.classList.toggle('is-open', !isOpen); 1629 }); 1630 }); 1631})(); 1632</script>
1632 1633 1634 1635<!-- Hero Section --> 1636<section class="hero-section"> 1637 <div class="container"> 1638 <div class="hero-content text-center"> 1639 <h1 class="display-1 gradient-text-primary"> 1640 About Picklebeast 1641 </h1> 1642 <p class="hero-subtitle"> 1643 We're revolutionizing pickleball through technology, community, and passion for the game. 1644 </p> 1645 </div> 1646 </div> 1647</section> 1648 1649<!-- Mission Section --> 1650<section class="features-section"> 1651 <div class="container"> 1652 <div class="grid md:grid-cols-2 gap-xl items-center"> 1653 <div class="fade-in-left"> 1654 <h2 class="heading-2 royal-purple-text mb-lg">Our Mission</h2> 1655 <p class="text-large mb-lg"> 1656 Picklebeast was born from a simple observation: pickleball players needed better tools to 1657 organize games, track progress, and connect with their community. 1658 </p> 1659 <p class="text-large mb-xl"> 1660 We're building the future of pickleball through innovative technology that brings players 1661 together and helps them elevate their game. 1662 </p> 1663 <a class="btn btn-primary" href="/community">Join Our Community</a> 1664 </div> 1665 <div class="fade-in-right"> 1666 <div class="feature-card"> 1667 <div class="feature-icon">ð</div> 1668 <h3 class="feature-title">Innovation First</h3> 1669 <p class="feature-description"> 1670 Cutting-edge technology meets traditional sport values. 1671 </p> 1672 </div> 1673 </div> 1674 </div> 1675 </div> 1676</section> 1677 1678<!-- Values Section --> 1679<section class="cta-section"> 1680 <div class="container"> 1681 <div class="text-center mb-5xl"> 1682 <h2 class="heading-1 mb-xl">Our Values</h2> 1683 <div class="grid md:grid-cols-3 gap-xl"> 1684 <div class="feature-card fade-in-up"> 1685 <div class="feature-icon">ð¤</div> 1686 <h3 class="feature-title">Community</h3> 1687 <p class="feature-description"> 1688 Building connections between players of all skill levels. 1689 </p> 1690 </div> 1691 <div class="feature-card fade-in-up"> 1692 <div class="feature-icon">ð</div> 1693 <h3 class="feature-title">Excellence</h3> 1694 <p class="feature-description"> 1695 Helping every player achieve their personal best. 1696 </p> 1697 </div> 1698 <div class="feature-card fade-in-up"> 1699 <div class="feature-icon">ð</div> 1700 <h3 class="feature-title">Innovation</h3> 1701 <p class="feature-description"> 1702 Constantly evolving to serve our community better. 1703 </p> 1704 </div> 1705 </div> 1706 </div> 1707 </div> 1708</section> 1709 1710 </main> 1711 1712 <!-- Footer (can be hidden with content_for :hide_footer) --> 1713 <footer class="main-footer" role="contentinfo"> 1714 <div class="container"> 1715 <div class="footer-content"> 1716 <!-- Brand --> 1717 <div class="footer-section footer-brand"> 1718 <h4>Picklebeast</h4> 1719 <p>The ultimate platform for pickleball players, organizers, and clubs.</p> 1720 <div class="social-links"> 1721 <a href="https://www.instagram.com/thepicklebeast/" target="_blank" class="social-link" aria-label="Instagram"> 1722 <i class="fab fa-instagram"></i> 1723 </a> 1724 </div> 1725 </div> 1726 1727 <!-- Platform --> 1728 <div class="footer-section"> 1729 <h5>Platform</h5> 1730 <ul class="footer-links"> 1731 <li><a href="/games">Games</a></li> 1732 </ul> 1733 </div> 1734 1735 <!-- For Clubs --> 1736 <div class="footer-section"> 1737 <h5>For Clubs</h5> 1738 <ul class="footer-links"> 1739 <li><a href="/club-community">Club Solutions</a></li> 1740 <li><a href="/clubs/apply?type=full_platform">Court Reservations</a></li> 1741 <li><a href="/clubs/apply?type=marketplace">List Your Club</a></li> 1742 </ul> 1743 </div> 1744 1745 <!-- Company --> 1746 <div class="footer-section"> 1747 <h5>Company</h5> 1748 <ul class="footer-links"> 1749 <li><a href="/about">About</a></li> 1750 <li><a href="/contact">Contact</a></li> 1751 <li><a href="/privacy-policy">Privacy Policy</a></li> 1752 <li><a href="#" onclick="pbShowCookieSettings(); return false;">Cookie Settings</a></li> 1753 </ul> 1754 </div> 1755 1756 <!-- Download --> 1757 <div class="footer-section"> 1758 <h5>Download</h5> 1759 <ul class="footer-links"> 1760 <li><a href="https://apps.apple.com/us/app/picklebeast/id6744578770" target="_blank"><i class="fab fa-apple"></i> App Store</a></li> 1761 <li><a href="https://play.google.com/store/apps/details?id=com.picklebeast.picklebeast" target="_blank"><i class="fab fa-google-play"></i> Google Play</a></li> 1762 </ul> 1763 </div> 1764 </div> 1765 1766 <div class="footer-bottom"> 1767 <p>© 2026 Picklebeast. All rights reserved.</p> 1768 </div> 1769 </div> 1770 </footer> 1771 1772 <!-- Enhanced Mobile-First JavaScript --> 1773
1773<script> 1774 // Global page ready handler - works with both initial load and Turbo navigation 1775 // Use this instead of DOMContentLoaded for Turbo-compatible initialization 1776 function onPageReady(callback) { 1777 // If Turbo is available, listen for turbo:load 1778 if (typeof Turbo !== 'undefined') { 1779 document.addEventListener('turbo:load', callback); 1780 } 1781 // Always listen for DOMContentLoaded for initial load and non-Turbo visits 1782 if (document.readyState === 'loading') { 1783 document.addEventListener('DOMContentLoaded', callback); 1784 } else { 1785 // DOM already loaded, execute immediately 1786 callback(); 1787 } 1788 } 1789 1790 // Also expose a render handler for turbo:render (cached pages) 1791 function onPageRender(callback) { 1792 document.addEventListener('turbo:render', callback); 1793 } 1794 1795 // Toast system (enhanced for mobile) 1796 function showToast(message, type = 'success', duration = 4000) { 1797 const container = document.getElementById('toast-container'); 1798 if (!container) return; 1799 1800 const toast = document.createElement('div'); 1801 toast.className = `toast toast-${type}`; 1802 toast.innerHTML = ` 1803 <div class="toast-content"> 1804 <span class="toast-icon">${type === 'success' ? 'â' : 'â '}</span> 1805 <span class="toast-message">${message}</span> 1806 </div> 1807 <div class="toast-progress"></div> 1808 `; 1809 1810 toast.addEventListener('click', () => toast.remove()); 1811 container.appendChild(toast); 1812 1813 // Auto-remove 1814 setTimeout(() => { 1815 if (container.contains(toast)) { 1816 toast.style.animation = 'toast-slide-out 0.3s ease forwards'; 1817 setTimeout(() => toast.remove(), 300); 1818 } 1819 }, duration); 1820 } 1821 1822 function initApplicationLayout() { 1823 // Show flash messages 1824 1825 // Mobile menu functionality 1826 const menuBtn = document.getElementById('navMenuBtn'); 1827 const menu = document.getElementById('navMenu'); 1828 const body = document.body; 1829 1830 if (menuBtn && menu) { 1831 menuBtn.addEventListener('click', () => { 1832 const isOpen = menuBtn.getAttribute('aria-expanded') === 'true'; 1833 1834 menuBtn.setAttribute('aria-expanded', !isOpen); 1835 menu.setAttribute('aria-hidden', isOpen); 1836 1837 menuBtn.classList.toggle('active'); 1838 menu.classList.toggle('active'); 1839 body.classList.toggle('nav-menu-open'); 1840 }); 1841 1842 // Close on escape key 1843 document.addEventListener('keydown', (e) => { 1844 if (e.key === 'Escape' && menu.classList.contains('active')) { 1845 menuBtn.click(); 1846 } 1847 }); 1848 1849 // Close on outside click 1850 menu.addEventListener('click', (e) => { 1851 if (e.target === menu) { 1852 menuBtn.click(); 1853 } 1854 }); 1855 } 1856 1857 // Enhanced delete link handling 1858 document.querySelectorAll('a[data-method="delete"]').forEach(link => { 1859 link.addEventListener('click', function(e) { 1860 e.preventDefault(); 1861 1862 const confirmMessage = link.getAttribute('data-confirm'); 1863 if (confirmMessage && !confirm(confirmMessage)) return; 1864 1865 const form = document.createElement('form'); 1866 form.method = 'POST'; 1867 form.action = link.href; 1868 form.style.display = 'none'; 1869 1870 // CSRF token 1871 const csrfToken = document.querySelector('meta[name="csrf-token"]'); 1872 if (csrfToken) { 1873 const csrfInput = document.createElement('input'); 1874 csrfInput.type = 'hidden'; 1875 csrfInput.name = 'authenticity_token'; 1876 csrfInput.value = csrfToken.getAttribute('content'); 1877 form.appendChild(csrfInput); 1878 } 1879 1880 // Method field 1881 const methodInput = document.createElement('input'); 1882 methodInput.type = 'hidden'; 1883 methodInput.name = '_method'; 1884 methodInput.value = 'delete'; 1885 form.appendChild(methodInput); 1886 1887 document.body.appendChild(form); 1888 form.submit(); 1889 }); 1890 }); 1891 } 1892 1893 // Turbo-compatible initialization 1894 document.addEventListener('DOMContentLoaded', initApplicationLayout); 1895 document.addEventListener('turbo:load', initApplicationLayout); 1896 1897 // Enhanced cart counter update 1898 function updateCartCounter(count) { 1899 const cartLink = document.querySelector('.nav-cart'); 1900 if (!cartLink) return; 1901 1902 let badge = cartLink.querySelector('.nav-cart-badge'); 1903 1904 if (count > 0) { 1905 if (!badge) { 1906 badge = document.createElement('span'); 1907 badge.className = 'nav-cart-badge';
1908 cartLink.appendChild(badge); 1909 } 1910 badge.textContent = count; 1911 badge.style.display = 'flex'; 1912 } else if (badge) { 1913 badge.style.display = 'none'; 1914 } 1915 } 1916 </script>
1916 1917 <!-- Cookie Consent Banner (hidden on admin pages via content_for :hide_cookie_banner) --> 1918 <div id="pbCookieBanner" style="display:none;"> 1919 <div class="pb-cookie-inner"> 1920 <p class="pb-cookie-text"> 1921 We use cookies to analyze site usage and improve your experience. Essential cookies (login, security) are always active. 1922 <a href="/privacy-policy" class="pb-cookie-link">Privacy Policy</a> 1923 </p> 1924 <div class="pb-cookie-buttons"> 1925 <button onclick="pbAcceptCookies()" class="pb-cookie-btn pb-cookie-accept">Accept</button> 1926 <button onclick="pbRejectCookies()" class="pb-cookie-btn pb-cookie-reject">Reject</button> 1927 </div> 1928 </div> 1929 </div> 1930 <style> 1931 #pbCookieBanner { 1932 position: sticky; 1933 bottom: 0; 1934 left: 0; 1935 right: 0; 1936 z-index: 99999; 1937 background: rgba(15, 15, 20, 0.97); 1938 backdrop-filter: blur(12px); 1939 border-top: 1px solid rgba(35, 170, 224, 0.2); 1940 padding: 16px 24px; 1941 box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.4); 1942 } 1943 .pb-cookie-inner { 1944 max-width: 1200px; 1945 margin: 0 auto; 1946 display: flex; 1947 align-items: center; 1948 justify-content: space-between; 1949 gap: 24px; 1950 } 1951 .pb-cookie-text { 1952 color: #ccc; 1953 font-size: 14px; 1954 line-height: 1.5; 1955 margin: 0; 1956 flex: 1; 1957 } 1958 .pb-cookie-link { 1959 color: #23aae0; 1960 text-decoration: none; 1961 } 1962 .pb-cookie-link:hover { 1963 text-decoration: underline; 1964 } 1965 .pb-cookie-buttons { 1966 display: flex; 1967 gap: 10px; 1968 flex-shrink: 0; 1969 } 1970 .pb-cookie-btn { 1971 border: none; 1972 border-radius: 8px; 1973 padding: 10px 24px; 1974 font-size: 14px; 1975 font-weight: 600; 1976 cursor: pointer; 1977 transition: opacity 0.2s; 1978 } 1979 .pb-cookie-btn:hover { opacity: 0.85; } 1980 .pb-cookie-accept { 1981 background: #23aae0; 1982 color: #fff; 1983 } 1984 .pb-cookie-reject { 1985 background: rgba(255, 255, 255, 0.1); 1986 color: #ccc; 1987 border: 1px solid rgba(255, 255, 255, 0.15); 1988 } 1989 @media (max-width: 600px) { 1990 .pb-cookie-inner { 1991 flex-direction: column; 1992 text-align: center; 1993 gap: 12px; 1994 } 1995 .pb-cookie-buttons { width: 100%; justify-content: center; } 1996 } 1997 </style> 1998
1998<script> 1999 function pbAcceptCookies() { 2000 var expires = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toUTCString(); 2001 document.cookie = 'pb_cookie_consent=accepted;expires=' + expires + ';path=/;SameSite=Lax'; 2002 document.getElementById('pbCookieBanner').style.display = 'none'; 2003 document.body.classList.remove('pb-cookie-visible'); 2004 if (typeof window.pbLoadAnalytics === 'function') window.pbLoadAnalytics(); 2005 } 2006 2007 function pbRejectCookies() { 2008 var expires = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toUTCString(); 2009 document.cookie = 'pb_cookie_consent=rejected;expires=' + expires + ';path=/;SameSite=Lax'; 2010 document.getElementById('pbCookieBanner').style.display = 'none'; 2011 document.body.classList.remove('pb-cookie-visible'); 2012 } 2013 2014 function pbShowCookieSettings() { 2015 document.cookie = 'pb_cookie_consent=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/'; 2016 document.getElementById('pbCookieBanner').style.display = 'block'; 2017 } 2018 2019 // Show banner if no consent decision yet 2020 (function() { 2021 if (document.cookie.indexOf('pb_cookie_consent=') === -1) { 2022 document.getElementById('pbCookieBanner').style.display = 'block'; 2023 document.body.classList.add('pb-cookie-visible'); 2024 } 2025 })(); 2026 </script>
2026 2027 2028 2029 </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.