1<!DOCTYPE html><!-- This site was created in Webflow. https://webflow.com --><!-- Last Published: Fri Jul 24 2026 20:27:19 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="brooklynff.webflow.io" data-wf-page="6994989de76bd93e241c1bd8" data-wf-site="69924596055aadfcec0f4750" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Community</title><meta content="Join the Five-Point Pack. BKFF supports fans, media, history, club programs & philanthropy to grow soccer across Brooklyn. Sign up to volunteer today." name="description"/><meta content="Community" property="og:title"/><meta content="Join the Five-Point Pack. BKFF supports fans, media, history, club programs & philanthropy to grow soccer across Brooklyn. Sign up to volunteer today." property="og:description"/><meta content="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69baf144b94b6b67365af360_BCFC%20Kids.jpg" property="og:image"/><meta content="Community" name="twitter:title"/><meta content="Join the Five-Point Pack. BKFF supports fans, media, history, club programs & philanthropy to grow soccer across Brooklyn. Sign up to volunteer today." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="Webflow" name="generator"/><link href="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/css/brooklynff.webflow.shared.2ac9f42b0.css" rel="stylesheet" type="text/css" integrity="sha384-Ksn0Kwcu3Xa/kpXVzJMxMqiXBFywj/Ay6sM/Wu3Rj7yk+xfeimjnhksQavqDN4/J" crossorigin="anonymous"/><style>html.w-mod-js:not(.w-mod-ix3) :is([data-wf-target*='["69f247b77e0879de18ba930b","e0486930-8ec9-4595-114c-2a955e83c741"]'], [data-wf-target*='["6994989de76bd93e241c1bd8","f2353518-caa9-74b5-5823-93d68553c8f6"]'], .community-content-wrapper .community-pentagon-fixed) {visibility: hidden !important;}</style>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/6998b7e457bb8a6f901e0ce5_favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/6998b8c095731ce6ba5fc80c_webclip.png" rel="apple-touch-icon"/>
vendor: 86 bytes, line 1
1<script src="https://www.google.com/recaptcha/api.js" type="text/javascript"></script>
1<style> 2 3/* 1. Remove the "Grey Flash" on iOS/Android taps */ 4 * { 5 -webkit-tap-highlight-color: transparent !important; 6 -webkit-tap-highlight-color: rgba(0,0,0,0) !important; 7 } 8 9 /* 2. Remove the forced blue outline in Chrome/Safari mobile */ 10 :focus, :focus-within { 11 outline: none !important; 12 box-shadow: none !important; 13 } 14 15 /* 3. The ONLY way to see a focus ring is via Keyboard (Tab key) */ 16 :focus-visible { 17 outline: 2px solid var(--_colors---les-bleus) !important; /* Brand Color */ 18 outline-offset: 4px !important; 19 } 20 21 /* 4. Ensure Webflow's internal 'Focused' state doesn't override this */ 22 .w-nav-link:focus, 23 .nav-link:focus, 24 .nav-link-wrapper:focus { 25 outline: none !important; 26 box-shadow: none !important; 27 } 28 29 /*webflow override*/ 30 31 .w-richtext *:last-child{ 32 margin-bottom: 0 !important; 33 } 34 35 .w-richtext > *:last-child{ 36 margin-bottom: 0 !important; 37 } 38 39 .w-richtext > *:first-child{ 40 margin-top: 0 !important; 41 } 42 43 .w-richtext h2 + h3{ 44 margin-top: 0 !important; 45 } 46 47 /*form*/ 48 49 50 input[type=number]::-webkit-inner-spin-button, 51 input[type=number]::-webkit-outer-spin-button { 52 opacity: 1; 53 } 54 55 input[type="search"] { 56 -webkit-appearance: none; 57 } 58 59 select { 60 -webkit-appearance: none; 61 -webkit-border-radius: 0px; 62 background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2012%2012%22%3E%3Ctitle%3Edown-arrow%3C%2Ftitle%3E%3Cg%20fill%3D%22%23000000%22%3E%3Cpath%20d%3D%22M10.293%2C3.293%2C6%2C7.586%2C1.707%2C3.293A1%2C1%2C0%2C0%2C0%2C.293%2C4.707l5%2C5a1%2C1%2C0%2C0%2C0%2C1.414%2C0l5-5a1%2C1%2C0%2C1%2C0-1.414-1.414Z%22%20fill%3D%22%23000000%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E"); 63 background-size: .6em; 64 background-position: calc(100% - 1em) center; 65 background-repeat: no-repeat; 66 width: 100%; 67 } 68 69 .checkbox-wrapper, .w-checkbox{ 70 position: relative; 71 } 72 73 .w-checkbox{ 74 padding-left: 2.25em; 75 height: 1.75em; 76 } 77 78 input[type="checkbox"]{ 79 opacity: 0%; 80 } 81 82 input[type="checkbox"] + .w-form-label:before{ 83 content: ''; 84 font-family: icofont; 85 font-size: 1.25em; 86 line-height: 1em; 87 display: flex; 88 align-items: center; 89 justify-content: center; 90 border: 1px solid var(--_colors---concrete-jungle); 91 background: var(--_colors---white); 92 width: 1.2em; 93 height: 1.2em; 94 margin-top: 0; 95 margin-left: 0; 96 margin-right: 0.5em; 97 line-height: 1; 98 position: absolute; 99 left: 0; 100 top: 0; 101 transition: all 0.25s ease; 102 } 103 104 105 input[type="checkbox"]:checked + .w-form-label:before{ 106 content: '\eed8'; 107 } 108 109 .checkbox-wrapper:hover .w-form-label:before{ 110 border-color: var(--_colors---light-gray); 111 } 112 113 input[type="checkbox"]:focused + .w-form-label:before{ 114 outline-color: var(--_colors---light-golden); 115 outline-offset: 0px; 116 outline-width: 1px; 117 outline-style: solid; 118 border-color: var(--_colors---light-golden); 119 } 120 121 input[type="checkbox"]:checked + .w-form-label:before{ 122 border-color: var(--_colors---golden-ball); 123 background-color: var(--_colors---golden-ball); 124 } 125 126 /* hamburger */ 127 128 .hamburger-wrapper:hover .hamburger-line{ 129 background: var(--_colors---pitch-black); 130 } 131 132 .w-nav-overlay{ 133 height: 110vh !important; 134 top: 0; 135 } 136 137 .w--open .hamburger .hamburger-line:nth-child(1){ 138 transform: rotate(45deg) translate(0.5rem, 0.5rem); 139 } 140 141 .w--open .hamburger .hamburger-line:nth-child(2){ 142 width: 0; 143 } 144 .w--open .hamburger .hamburger-line:nth-child(3){ 145 transform: rotate(-45deg) translate(0.5rem, -0.5rem); 146 } 147 148 /*cta link */ 149 .cta-link:after{ 150 content: '\ea5d'; 151 color: var(--_colors---les-bleus); 152 font-family: 'Icofont'; 153 position: relative; 154 right: -0.25em; 155 top: 0.05em; 156 transition: all 0.2s ease; 157 display: inline-block; 158 } 159 160 .cta-link:hover::after{ 161 right: -0.5em; 162 } 163 164 .cta-link.white:after{
165 color: var(--_colors---lighter-golden); 166 } 167 168 .cta-link.white:hover::after{ 169 color: var(--_colors---white); 170 } 171 172 /*single line form */ 173 174 .single-line-form input:focus + label, .single-line-form input:not(:placeholder-shown) + label{ 175 top: -1.25em; 176 left: 0; 177 font-size: 1em; 178 color: var(--_colors---pitch-black); 179 font-weight: 700; 180 } 181 182</style></head><body><div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navbar w-nav"><div class="container nav-container w-container"><a href="/" class="logo-wrapper w-nav-brand"><img loading="lazy" src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69924ce42fcea144aedc4e6f_Main%20Logo-Color.svg" alt="" class="logo"/></a><nav role="navigation" class="nav-links-wrapper w-nav-menu"><div class="w-dyn-list"><div role="list" class="nav-links-new w-dyn-items"><div role="listitem" class="nav-link-item w-dyn-item"><a href="/about" class="nav-link">What is BKFF?</a></div><div role="listitem" class="nav-link-item w-dyn-item"><a href="/community" aria-current="page" class="nav-link w--current">Community</a></div><div role="listitem" class="nav-link-item w-dyn-item"><a href="/events" class="nav-link">Events</a></div><div role="listitem" class="nav-link-item w-dyn-item"><a href="https://museum.brooklynff.org/" class="button nav-button w-button">Museum</a></div></div></div></nav><div class="hamburger-wrapper w-nav-button"><div class="hamburger"><div class="hamburger-line"></div><div class="hamburger-line"></div><div class="hamburger-line"></div></div></div></div></div><section class="section section-reset-inner"><div class="hero-wrapper"><div class="hero-image-wrapper"><div class="hero-image-blur"></div><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69bae69cdb4c2b0e48e78a77_BCFC%20Kids.avif" loading="lazy" sizes="100vw" srcset="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69bae69cdb4c2b0e48e78a77_BCFC%20Kids-p-500.avif 500w, https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69bae69cdb4c2b0e48e78a77_BCFC%20Kids-p-800.avif 800w, https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69bae69cdb4c2b0e48e78a77_BCFC%20Kids-p-1080.avif 1080w, https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69bae69cdb4c2b0e48e78a77_BCFC%20Kids.avif 2160w" alt="" class="hero-image"/></div><div id="w-node-_554b141c-e615-a1db-8849-97ee8873d015-241c1bd8" class="hero-text-wrapper"><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/69925a6e749b44e6169a3682_Ripple-Pentagon_Light-Golden.svg" loading="lazy" alt="" class="hero-ripple"/><div class="w-layout-blockcontainer container hero-container w-container"><div class="mb-1em w-richtext"><h1>Join our Five-Point Pack!</h1></div><p class="p-big mb-0">Whatever you call our sport, itâs the peopleâs game. Our programs below are how the Foundation grows the sport, and opens participation in it to everyone.</p><a href="#volunteer" class="button mt-2em w-button">volunteer</a></div></div></div></section><section class="section"><div class="w-layout-blockcontainer container w-container"><div class="_1-2-grid"><div id="w-node-_3c71b0a2-f041-ad81-f603-2a2d555922c2-241c1bd8" class="community-pentagon-wrapper"><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/699603dd464b751aed04eb05_4c6c529f5dc81157845fb3
182064f00db10_community-pentagon-4.svg" loading="lazy" alt="" class="community-pentagon"/></div><div id="w-node-_3c71b0a2-f041-ad81-f603-2a2d555922c4-241c1bd8" class="z-10"><h2>We <span class="text-orange"><strong>support the supporters</strong></span>, for a Brooklyn where everyone can express their identity through the beautiful game.</h2><div class="w-richtext"><p>More than winning & losing, our sport is beloved for the self-expression it offers fans & players.</p><p>In one of the worldâs most diverse cities, the game grows when we unlock this opportunity for everyone. The Foundation offers resources to help groups of Brooklyn fans organize & navigate this â from gear design to the logistics of legal & finance, for any club that you may root for.</p></div></div></div></div></section><section class="section extra-padding-top"><div class="w-layout-blockcontainer container w-container"><div class="_1-2-grid reversed"><div id="w-node-fd0a60b8-43f6-fd72-07eb-b9bec7650754-241c1bd8" class="z-10"><h2>We steward the long <span class="text-red"><strong>history</strong></span> of soccer in Brooklyn, a cradle of the American game.</h2><div class="w-richtext"><p>Soccer in this country has a long history â and, many of its untold stories have great significance to the culture & society of our beloved borough.</p><p>In 2026, we are launching the <strong>Brooklyn Football Museum</strong>, with a flagship program focusing on the boroughâs winners of the U.S. Open Cup. Itâs an anchor & a starting point, for our whole community to begin re-gathering the sportâs 132-year history here.</p></div></div><div class="community-pentagon-wrapper"><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/699603afd89bdb04a61d3b73_b993a07be2151edbf32695407f13459d_community-pentagon-1.svg" loading="lazy" alt="" class="community-pentagon"/></div></div></div></section><section class="section"><div class="w-layout-blockcontainer container w-container"><div class="_1-2-grid"><div class="community-pentagon-wrapper"><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/699603e9d2238947d6f435a3_d8940ac977c440485e6f3057e9c325c9_community-pentagon-5.svg" loading="lazy" alt="" class="community-pentagon"/></div><div id="w-node-eb08950d-3e3b-3b4d-989a-50a9bcdbc4bd-241c1bd8" class="z-10"><h2>To tell this history in the modern day, we support a healthy <span class="text-blue"><strong>media</strong></span> ecosystem that tells <em>all</em> stories of the sport in<em> </em>the borough.</h2><div class="w-richtext"><p>Whether itâs in matchday media, the subcultures of the game, or the quiet moments among friends, our borough offers many diverse voices who have stories to tell. </p><p>The best way to make sure every voice is heard, is to let them speak. Weâre readying a list of publishing platforms in 2026, and welcome pitches across video & written content.</p></div></div></div></div></section><section class="section border-b"><div class="w-layout-blockcontainer container w-container"><div class="_1-2-grid reversed"><div id="w-node-_53b482c2-c659-3625-39bc-9ea838831e9e-241c1bd8" class="z-10"><h2>Lastly, for <span class="text-yellow"><strong>club programs</strong></span> and <span class="text-green"><strong>
182public service</strong></span>, weâve set an Advisory Council to learn from, with programs starting in 2027.</h2><div class="w-richtext"><h3>Brooklyn soccer can do good for Brooklyn community.</h3><p>We believe this statement completely, and believe itâs the true power of our sport. To get this right, weâre taking time to learn how we can support clubs, and how fans can support all of Brooklyn beyond the pitch.</p><p>â<a href="#volunteer">Sign your club up</a> to help us learn more!</p></div></div><div class="community-pentagon-wrapper"><img src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/699603d2ec9d8577b48c38dc_1e85807561dcb1e057348a59b23f544e_community-pentagon-2-3.svg" loading="lazy" alt="" class="community-pentagon"/></div></div></div></section><section class="section section-community-wrapper"></section><section id="volunteer" class="section"><div class="w-layout-blockcontainer container narrow w-container"><div class="form-card-wrapper w-form"><div class="form-header w-richtext"><h2>Get Involved!</h2><p>There are so many ways to volunteer in your soccer community! Let us know what your interests are, and we'll only communicate with you on the programs you care about.</p></div><form method="post" name="wf-form-volunteerForm" data-name="volunteerForm" brix-sheets-form="enable" brix-secret-key="dhs$b_w$fjGHW-cgN!x" brix-sheets-script-url="https://script.google.com/macros/s/AKfycby1jy_YSr_H8o98o5WgF4qG_aNiiIecZTxMDRgOMc3T79dsMN6nTX6kAk61AUjbBFwL-Q/exec" id="volunteerForm" brix-form-token="volunteerForm" data-wf-page-id="6994989de76bd93e241c1bd8" data-wf-element-id="0c4ed389-b404-2024-3089-f71cf0a2c9cc" data-turnstile-sitekey="0x4AAAAAAAQTptj2So4dx43e"><div class="fields-grid"><div class="name-fields-wrapper"><div><label for="firstName">First Name*</label><input class="field w-input" maxlength="256" name="firstName" data-name="firstName" placeholder="Enter your first name" type="text" id="firstName" required=""/></div><div><label for="lastName">Last Name*</label><input class="field w-input" maxlength="256" name="lastName" data-name="lastName" placeholder="Enter your last name" type="text" id="lastName" required=""/></div></div><div id="w-node-_0c4ed389-b404-2024-3089-f71cf0a2c9d7-241c1bd8"><label for="email">Email Address*</label><input class="field w-input" maxlength="256" name="email" data-name="email" placeholder="Enter your email address" type="email" id="email" required=""/></div><div id="w-node-_4a714605-5d53-599c-8928-0cdce6efac2c-241c1bd8"><label for="neighborhoods">Neighborhoods of Interest*</label><textarea required="" placeholder="Which neighborhoods do you want to get involved with?" maxlength="5000" id="neighborhoods" name="neighborhoods" data-name="neighborhoods" class="field textarea w-node-bc759ed7-f5d6-3d2b-b52b-ad305b
182102e7c-241c1bd8 w-input"></textarea></div><div class="mt-1em mb-1em"><label for="field">Volunteer roles of Interest*</label><div class="checkboxes"><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="supportingMatchdays" id="supportingMatchdays" data-name="supportingMatchdays" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="supportingMatchdays">Supporting matchdays</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="matchdayMedia" id="matchdayMedia" data-name="matchdayMedia" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="matchdayMedia">Matchday media (please specify in notes)</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="nonmatchdayMedia" id="nonmatchdayMedia" data-name="nonmatchdayMedia" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="nonmatchdayMedia">Non-matchday media (please specify in notes)</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="soccerHistory" id="soccerHistory" data-name="soccerHistory" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="soccerHistory">Soccer history</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="supporterGroup" id="supporterGroup" data-name="supporterGroup" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="supporterGroup">Starting a supporter group</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="registeringClub" id="registeringClub" data-name="registeringClub" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="registeringClub">Registering my Brooklyn club</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="communityWork" id="communityWork" data-name="communityWork" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="communityWork">Community work & philanthropy</span></label><label class="w-checkbox checkbox-wrapper"><input type="checkbox" name="generalNews" id="generalNews" data-name="generalNews" class="w-checkbox-input checkbox"/><span fs-cmsfilter-field="years" class="w-form-label" for="generalNews">General news & updates</span></label></div></div><div id="w-node-_62346dea-926f-1749-caa1-8a550396a41c-241c1bd8"><label for="message">Tell us more about your selections, if you wish!</label><textarea id="message" name="message" maxlength="5000" data-name="message" placeholder="Let us know any additional details you'd like to share." required="" class="field textarea w-node-_62346dea-926f-1749-caa1-8a550396a41f-241c1bd8 w-input"></textarea></div><div data-sitekey="6LdjoXUsAAAAAJUIaZ7YTOLF0FhjE8CWyTtng65e" class="w-form-formrecaptcha mt-1em g-recaptcha g-recaptcha-error g-recaptcha-disabled"></div><input type="submit" data-wait="Please wait..." class="button _w-100 mt-1em w-button" value="Join Us"/></div></form><div class="success text-left w-form-done"><div><strong>Thank you for your interest! We'll be in touch.</strong></div></div><div class="error w-form-fail"><div>Oops! Something went wrong while submitting the form, Please try again.</div></div></div></div></section><footer class="section footer"><div class="w-layout-blockcontainer container wide w-container"><div class="footer-grid"><div class="footer-left-wrapper"><div><h2 class="footer-cta-h2">Get Involved!</h2><h3 class="mt-0">We keep people up-to-date on volunteering in Brooklynâs <span class="text-nowrap">soccer communities.</span></h3></div><a href="/community#volunteer" class="button _w-100 max-w-footer-button w-button">Join Us</a></div><div class="footer-right-wrapper"><div><div class="footer-links-wrapper"><a href="/about" class="footer-link">What is BKFF?</a><a href="/community" aria-current="page" class="footer-link w--current">Community</a><a href="/events" class="footer-link">Events</a><a href="/contact" class="footer-link">Contact Us</a></div><div class="socials-grid"><a aria-label="Instagram" href="https://www.instagram.com/brooklyn.football/" target="_blank" class="icon social-icon"><span role="img" aria-hidden="true">îµ</span></a><a aria-label="LinkedIn" href="https://www.linkedin.com/company/brooklyn-football-foundation/about/" target="_blank" class="icon social-icon"><span role="img" aria-hidden="true">îµ</span></a><a aria-label="YouTube" href="https://youtube.com/@brooklyn.football" target="_blank" class="icon social-icon"><span role="img" aria-hidden="true">î²»</span></a></div></div><div><p class="footer-byline mb-half-em">© 2026 Brooklyn Football Foundation, Inc. <br/></p><p class="footer-byline">BKFF is applying for 501(c)(3) status, and continues to operate as a properly-incorporated nonprofit organization while awaiting this designation.</p></div></div></div></div></footer>
182<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=69924596055aadfcec0f4750" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
182<script src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/js/webflow.schunk.e8d1b2918f4c3957.js" type="text/javascript" integrity="sha384-j6Y94yjHVyW4w4BplDP+d/ImnJ+8UHUo7T5wk7dejGkpNLaOQr0QDfFE1gVbQCMG" crossorigin="anonymous"></script>
182<script src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750/js/webflow.22247dae.9f269fd37ae2354c.js" type="text/javascript" integrity="sha384-2eceJwBmr6kI/3gves098ygXW03XJbrUTlYkRcsvJCVWHSXa6wCk+blnf2fTuSjz" crossorigin="anonymous"></script>
182<script src="https://cdn.prod.website-files.com/gsap/3.15.0/gsap.min.js" type="text/javascript"></script>
182<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollTrigger.min.js" type="text/javascript"></script>
182<script> 183 document.addEventListener('DOMContentLoaded', () => { 184 const navWrappers = document.querySelectorAll('.nav-link-wrapper'); 185 const hamburger = document.querySelector('.hamburger-wrapper'); 186 187 // 1. INJECT FUNCTIONAL STYLES (Caret & Layout Only) 188 const style = document.createElement('style'); 189 style.innerHTML = ` 190 .nav-link.nav-link-dropdown-menu { display: flex; align-items: center; cursor: pointer; } 191 .nav-caret { width: 1em; height: 1em; margin-left: 0.375em; transition: transform 0.3s ease; pointer-events: none; } 192 .nav-link-wrapper.active .nav-caret { transform: rotate(90deg); } 193 `; 194 document.head.appendChild(style); 195 196 const caretSvg = `<svg class="nav-caret" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 6L15 12L9 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`; 197 198 navWrappers.forEach(wrapper => { 199 // The specific trigger element inside the wrapper 200 const trigger = wrapper.querySelector('.nav-link.nav-link-dropdown-menu'); 201 const dropdown = wrapper.querySelector('.nav-dropdown-wrapper'); 202 203 if (!trigger || !dropdown) return; 204 205 // A11Y setup 206 trigger.setAttribute('role', 'button'); 207 trigger.setAttribute('aria-haspopup', 'true'); 208 trigger.setAttribute('aria-expanded', 'false'); 209 trigger.setAttribute('tabindex', '0'); 210 trigger.insertAdjacentHTML('beforeend', caretSvg); 211 212 const toggleMenu = (forceState) => { 213 const isExpanding = forceState !== undefined ? forceState : !dropdown.classList.contains('active'); 214 dropdown.classList.toggle('active', isExpanding); 215 wrapper.classList.toggle('active', isExpanding); 216 trigger.setAttribute('aria-expanded', isExpanding); 217 }; 218 219 // 2. INTERACTION LOGIC 220 221 // Desktop: Hover on Wrapper 222 wrapper.addEventListener('mouseenter', () => { 223 if (window.innerWidth > 991) toggleMenu(true); 224 }); 225 wrapper.addEventListener('mouseleave', () => { 226 if (window.innerWidth > 991) toggleMenu(false); 227 }); 228 229 // Mobile & Keyboard: Click/Tap strictly on the Trigger 230 trigger.addEventListener('click', function(e) { 231 if (window.innerWidth <= 991) { 232 e.preventDefault(); 233 e.stopPropagation(); 234 e.stopImmediatePropagation(); 235 toggleMenu(); 236 } 237 }, true); // Capture phase to intercept Webflow events 238 239 // Keyboard support (Enter/Space) 240 trigger.addEventListener('keydown', (e) => { 241 if (e.key === 'Enter' || e.key === ' ') { 242 e.preventDefault(); 243 toggleMenu(); 244 } 245 }); 246 }); 247 248 // 3. HAMBURGER RESET 249 if (hamburger) { 250 hamburger.addEventListener('click', () => { 251 setTimeout(() => { 252 if (!hamburger.classList.contains('w--open')) { 253 navWrappers.forEach(w => { 254 w.classList.remove('active'); 255 const d = w.querySelector('.nav-dropdown-wrapper'); 256 const t = w.querySelector('.nav-link.nav-link-dropdown-menu'); 257 if(d) d.classList.remove('active'); 258 if(t) t.setAttribute('aria-expanded', 'false'); 259 }); 260 } 261 }, 50); 262 }); 263 } 264 }); 265</script>
265 266
267<script> 268
268<script> 269document.addEventListener('DOMContentLoaded', () => { 270 const adjustNavBorders = () => { 271 const navItems = document.querySelectorAll('.nav-link-item'); 272 const isMobile = window.innerWidth <= 991; 273 274 navItems.forEach(item => { 275 // Check if this item contains the specific button class 276 const hasButton = item.querySelector('.button.nav-button'); 277 278 if (hasButton && isMobile) { 279 // Apply mobile-specific style 280 item.style.borderBottomWidth = '0px'; 281 item.style.borderBottomColor = 'transparent'; 282 } else { 283 // Reset to original/CSS defaults if on desktop or if button is missing 284 item.style.borderBottomWidth = ''; 285 item.style.borderBottomColor = ''; 286 } 287 }); 288 }; 289 290 // Run on load 291 adjustNavBorders(); 292 293 // Run on resize to ensure it updates if a tablet rotates or window is resized 294 window.addEventListener('resize', adjustNavBorders); 295}); 296</script>
296 297
298<script> 299 document.addEventListener('DOMContentLoaded', () => { 300 const adjustNavBorders = () => { 301 const navItems = document.querySelectorAll('.nav-link-item'); 302 const isMobile = window.innerWidth <= 991; 303 304 navItems.forEach(item => { 305 // Check if this item contains the specific button class 306 const hasButton = item.querySelector('.button.nav-button'); 307 308 if (hasButton && isMobile) { 309 // Apply mobile-specific style 310 item.style.borderBottomWidth = '0px'; 311 item.style.borderBottomColor = 'transparent'; 312 } else { 313 // Reset to original/CSS defaults if on desktop or if button is missing 314 item.style.borderBottomWidth = ''; 315 item.style.borderBottomColor = ''; 316 } 317 }); 318 }; 319 320 // Run on load 321 adjustNavBorders(); 322 323 // Run on resize to ensure it updates if a tablet rotates or window is resized 324 window.addEventListener('resize', adjustNavBorders); 325 }); 326</script>
326 327
328<script> 329 const navbar = document.querySelector('.navbar'); 330 const secondSection = document.querySelectorAll('.section')[1]; 331 332 const options = { 333 rootMargin: "0px 0px -100% 0px", 334 threshold: 0 335 }; 336 337 const observer = new IntersectionObserver((entries) => { 338 entries.forEach(entry => { 339 const isPastFirstSection = entry.isIntersecting || entry.boundingClientRect.y < 0; 340 341 if (isPastFirstSection) { 342 navbar.classList.add('bg-white'); 343 navbar.classList.remove('bg-transparent'); 344 } else { 345 navbar.classList.add('bg-transparent'); 346 navbar.classList.remove('bg-white'); 347 } 348 }); 349 }, options); 350 351 observer.observe(secondSection); 352</script>
352 353
354<script> 355 /** 356 Webflow to Google Sheets Connector by BRIX Templates 357 Version 1.0 358 * Initializes form handlers for all forms with the brix-sheets-form attribute 359 */ 360 (function initializeFormHandlers() { 361 // Select all forms with the brix-sheets-form attribute 362 const forms = document.querySelectorAll('form[brix-sheets-form="enable"]'); 363 364 if (forms.length === 0) { 365 console.warn('BRIX Templates: No forms found with brix-sheets-form="enable"'); 366 return; 367 } 368 369 // Add submit handler to each form 370 forms.forEach(form => { 371 if (!form.getAttribute('brix-form-token')) { 372 console.warn('BRIX Templates: Form must have a brix-form-token attribute'); 373 return; 374 } 375 form.addEventListener('submit', handleFormSubmit); 376 }); 377 })(); 378 379 /** 380 * Handles form submission 381 * @param {Event} event - Form submission event 382 */ 383 async function handleFormSubmit(event) { 384 event.preventDefault(); 385 386 const form = event.target; 387 const formWrapper = form.closest('.w-form'); 388 const successDiv = formWrapper.querySelector('.w-form-done'); 389 const errorDiv = formWrapper.querySelector('.w-form-fail'); 390 391 // Get the required attributes 392 const scriptUrl = form.getAttribute('brix-sheets-script-url'); 393 const formToken = form.getAttribute('brix-form-token'); 394 395 if (!scriptUrl || !formToken) { 396 console.error('BRIX Templates: Missing required attributes. Form needs both brix-sheets-script-url and brix-form-token.'); 397 displayMessage(successDiv, false); 398 displayMessage(errorDiv, true); 399 return; 400 } 401 402 try { 403 // Collect form data 404 const formData = new FormData(form); 405 406 formData.append('secretKey', form.getAttribute('brix-secret-key')); 407 408 // Add the form token to the data 409 formData.append('formToken', formToken); 410 411 // Convert to URL-encoded string 412 const urlEncodedData = new URLSearchParams(formData).toString(); 413 414 const response = await fetch(scriptUrl, { 415 method: 'POST', 416 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 417 body: urlEncodedData 418 }); 419 420 if (!response.ok) { 421 throw new Error('Network response was not OK'); 422 } 423 424 const result = await response.json(); 425 426 if (result.result === 'success') { 427 form.reset(); 428 displayMessage(successDiv, true); 429 displayMessage(errorDiv, false); 430 } else { 431 throw new Error(result.message || 'Unknown error'); 432 } 433 } catch (error) { 434 console.error('BRIX Templates: Submission error:', error); 435 displayMessage(successDiv, false); 436 displayMessage(errorDiv, true); 437 } 438 } 439 440 /** 441 * Displays or hides a message div 442 * @param {HTMLElement} messageDiv - Message element to toggle 443 * @param {boolean} show - Whether to show or hide the message 444 */ 445 function displayMessage(messageDiv, show) { 446 if (messageDiv) { 447 messageDiv.style.display = show ? 'block' : 'none'; 448 } 449 } 450</script>
450<script src="https://cdn.prod.website-files.com/69924596055aadfcec0f4750%2F65da374ca1ebd53e3cabb68c%2F69f247981665f1464f997560%2Fevents_calendar_embed_script-0.0.1.js" type="text/javascript"></script>
450</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.