1<!DOCTYPE html> 2<!--[if lt IE 7 ]><html lang="en" class="no-js ie6 "><![endif]--> 3<!--[if IE 7 ]><html lang="en" class="no-js ie7 "> <![endif]--> 4<!--[if IE 8 ]><html lang="en" class="no-js ie8 "> <![endif]--> 5<!--[if IE 9 ]><html lang="en" class="no-js ie9 "><![endif]--> 6<!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js "> <!--<![endif]--> 7 <head id="Head1"> 8 <link rel="stylesheet" type="text/css" href="https://kit-pro.fontawesome.com/releases/latest/css/pro.min.css" /> 9<meta name="viewport" content="width=device-width, initial-scale=1"> 10<link href="https://villagrande.org/BuiltTheme/firma_above_the_clouds.v3.0/f1fd0565/Styles/combined.css" rel="stylesheet" type="text/css" /><link href="https://villagrande.org/resources/theme/customStyles.css?t=638841299562890000" rel="stylesheet" type="text/css" /><link href="https://villagrande.org/resources/theme/user.css?t=639256974480000000" rel="stylesheet" type="text/css" /><link href="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/scripts/public/react/index-84b33b4.css" rel="stylesheet" type="text/css" /><link href="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/css/shared/ui/shared-ui-compiled.css" rel="stylesheet" type="text/css" />
10<script type="text/javascript" language="javascript" id="idJavaScriptEnvironment">var bonaPage_BuildVer='9.19.2-1c681d6'; 11var bonaPage_AdminBackendUrl = '/admin/'; 12var bonaPage_StatRes='https://live-sf.wildapricot.org/WebUI/'; 13var bonaPage_InternalPageType = { isUndefinedPage : false,isWebPage : true,isAdminPage : false,isDialogPage : false,isSystemPage : false,isErrorPage : false,isError404Page : false }; 14var bonaPage_PageView = { isAnonymousView : true,isMemberView : false,isAdminView : false }; 15var WidgetMode = 0; 16var bonaPage_IsUserAnonymous = true; 17var bonaPage_ThemeVer='f1fd0565639256974480000000638841299562890000'; var bonaPage_ThemeId = 'firma_above_the_clouds.v3.0'; var bonaPage_ThemeVersion = '3.0'; 18var bonaPage_id='18089'; version_id=''; 19if (bonaPage_InternalPageType && (bonaPage_InternalPageType.isSystemPage || bonaPage_InternalPageType.isWebPage) && window.self !== window.top) { var success = true; try { var tmp = top.location.href; if (!tmp) { top.location = self.location; } } catch (err) { try { if (self != top) { top.location = self.location; } } catch (err) { try { if (self != top) { top = self; } success = false; } catch (err) { success = false; } } success = false; } if (!success) { window.onload = function() { document.open('text/html', 'replace');
19 document.write('<ht'+'ml><he'+'ad></he'+'ad><bo'+'dy><h1>Wrong document context!</h1></bo'+'dy></ht'+'ml>'); document.close(); } } } 20try { function waMetricsGlobalHandler(args) { if (WA.topWindow.waMetricsOuterGlobalHandler && typeof(WA.topWindow.waMetricsOuterGlobalHandler) === 'function') { WA.topWindow.waMetricsOuterGlobalHandler(args); }}} catch(err) {} 21 try { if (parent && parent.BonaPage) parent.BonaPage.implementBonaPage(window); } catch (err) { } 22try { document.write('<style type="text/css"> .WaHideIfJSEnabled, .HideIfJSEnabled { display: none; } </style>'); } catch(err) {} 23var bonaPage_WebPackRootPath = 'https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/scripts/public/react/';</script>
23<script type="text/javascript" language="javascript" src="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/scripts/shared/bonapagetop/bonapagetop-compiled.js" id="idBonaPageTop"></script>
23<script type="text/javascript" language="javascript" src="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/scripts/public/react/index-84b33b4.js" id="ReactPublicJs"></script>
23<script type="text/javascript" language="javascript" src="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/scripts/shared/ui/shared-ui-compiled.js" id="idSharedJs"></script>
23<script type="text/javascript" language="javascript" src="https://live-sf.wildapricot.org/WebUI/built9.19.2-1c681d6/General.js" id=""></script>
23<script type="text/javascript" language="javascript" src="https://villagrande.org/BuiltTheme/firma_above_the_clouds.v3.0/f1fd0565/Scripts/combined.js" id=""></script>
23<title>Friends of Villa Grande (FoVG) - Our store</title> 24<link rel="search" type="application/opensearchdescription+xml" title="villagrande.org" href="/opensearch.ashx" /></head> 25 <body id="PAGEID_18089" class="publicContentView LayoutMain"> 26<div class="mLayout layoutMain state1" id="mLayout"> 27<div class="mobilePanelContainer"> 28<div id="id_MobilePanel" data-componentId="MobilePanel" class="WaPlaceHolder WaPlaceHolderMobilePanel" style=""><div style=""><div id="id_xaBsq8r" class="WaGadgetOnly WaGadgetMobilePanel gadgetStyleNone" style="" data-componentId="xaBsq8r" ><div class="mobilePanel"> 29 30 <div class="mobilePanelButton buttonMenu" title="Menu">Menu</div> 31<div class="mobilePanelButton buttonLogin" title="Log in">Log in</div> 32<div class="menuInner"> 33 <ul class="firstLevel"> 34<li class=" "> 35 <div class="item"> 36 <a href="https://villagrande.org/" title="Home"><span>Home</span></a> 37</div> 38</li> 39 40<li class=" dir"> 41 <div class="item"> 42 <a href="https://villagrande.org/friends-of-villa-grande" title="Friends of Villa Grande"><span>Friends of Villa Grande</span></a> 43<ul class="secondLevel"> 44<li class=" "> 45 <div class="item"> 46 <a href="https://villagrande.org/welcome-to-fovg" title="Welcome to FoVG"><span>Welcome to FoVG</span></a> 47</div> 48</li> 49 50<li class=" "> 51 <div class="item"> 52 <a href="https://villagrande.org/history-of-fovg" title="History of FoVG"><span>History of FoVG</span></a> 53</div> 54</li> 55 56<li class=" "> 57 <div class="item"> 58 <a href="https://villagrande.org/board" title="Board"><span>Board</span></a> 59</div> 60</li> 61 62<li class=" "> 63 <div class="item"> 64 <a href="https://villagrande.org/Contact" title="Contact"><span>Contact</span></a> 65</div> 66</li> 67 68<li class=" "> 69 <div class="item"> 70 <a href="https://villagrande.org/volunteer" title="Volunteer Opportunities"><span>Volunteer Opportunities</span></a> 71</div> 72</li> 73 74<li class=" "> 75 <div class="item"> 76 <a href="https://villagrande.org/events" title="Events"><span>Events</span></a> 77</div> 78</li> 79 80<li class=" "> 81 <div class="item"> 82 <a href="https://villagrande.org/fovg-event-photos" title="FOVG Event photo albums"><span>FOVG Event photo albums</span></a> 83</div> 84</li> 85 86<li class=" "> 87 <div class="item"> 88 <a href="https://villagrande.org/anchorage" title="Boat Anchorage"><span>Boat Anchorage</span></a> 89</div> 90</li> 91 92<li class=" "> 93 <div class="item"> 94 <a href="https://villagrande.org/propane" title="Propane"><span>Propane</span></a> 95</div> 96</li> 97 98<li class=" "> 99 <div class="item"> 100 <a href="https://villagrande.org/vgfd-and-firehouse-plaza" title="VGFD & Firehouse Plaza"><span>VGFD & Firehouse Plaza</span></a> 101</div> 102</li> 103 104</ul> 105</div> 106</li> 107 108<li class=" dir"> 109 <div class="item"> 110 <a href="https://villagrande.org/patterson-point-preserve" title="Patterson Point Preserve"><span>Patterson Point Preserve</span></a> 111<ul class="secondLevel"> 112<li class=" "> 113 <div class="item"> 114 <a href="https://villagrande.org/about-ppp" title="About PPP"><span>About PPP</span></a> 115</div> 116</li> 117 118<li class=" "> 119 <div class="item"> 120 <a href="https://villagrande.org/history-of-ppp" title="History of PPP"><span>History of PPP</span></a> 121</div> 122</li> 123 124<li class=" dir"> 125 <div class="item"> 126 <a href="https://villagrande.org/restoration" title="Restoration"><span>Restoration</span></a> 127<ul class="secondLevel"> 128<li class=" "> 129 <div class="item"> 130 <a href="https://villagrande.org/Restoration-Reports" title="Restoration Reports"><span>Restoration Reports</span></a> 131</div> 132</li> 133 134</ul> 135</div> 136</li> 137 138<li class=" "> 139 <div class="item"> 140 <a href="https://villagrande.org/birds" title="Birds"><span>Birds</span></a> 141</div> 142</li> 143 144<li class=" "> 145 <div class="item"> 146 <a href="https://villagrande.org/plants" title="Plants"><span>Plants</span></a> 147</div> 148</li> 149 150<li class=" "> 151 <div class="item"> 152 <a href="https://villagrande.org/recreation" title="Recreation"><span>Recreation</span></a> 153</div> 154</li> 155 156</ul> 157</div> 158</li> 159 160<li class=" dir"> 161 <div class="item"> 162 <a href="https://villagrande.org/our-community" title="Our Community"><span>Our Community</span></a> 163<ul class="secondLevel"> 164<li class=" "> 165 <div class="item"> 166 <a href="https://villagrande.org/about-our-community" title="About Our Community"><span>About Our Community</span></a> 167</div> 168</li> 169 170<li class=" dir"> 171 <div class="item"> 172 <a href="https://villagrande.org/history-of-vg" title="History of VG"><span>History of VG</span></a> 173<ul class="secondLevel"> 174<li class=" "> 175 <div class="item"> 176 <a href="https://villagrande.org/flood-of-1986" title="Flood of 1986"><span>Flood of 1986</span></a> 177</div> 178</li> 179 180<li class=" "> 181 <div class="item"> 182 <a href="https://villagrande.org/photo-albums" title="Historical photo albums"><span>Historical photo albums</span></a> 183</div> 184</li> 185 186<li class=" "> 187 <div class="item"> 188 <a href="https://villagrande.org/VG-Fourth-of-July" title="Fourth of July"><span>Fourth of July</span></a> 189</div> 190</li> 191 192</ul> 193</div> 194</li> 195 196<li class=" "> 197 <div class="item"> 198 <a href="https://villagrande.org/community-identification" title="Community Identification"><span>Community Identification</span></a> 199</div> 200</li> 201 202<li class=" "> 203 <div class="item"> 204 <a href="https://villagrande.org/water-quality-and-septic" title="Water Quality & Septic"><span>Water Quality & Septic</span></a> 205</div> 206</li> 207 208<li class=" dir"> 209 <div class="item"> 210 <a href="https://villagrande.org/emergency-information" title="Emergency Information"><span>Emergency Information</span></a> 211<ul class="secondLevel"> 212<li class=" "> 213 <div class="item"> 214 <a href="https://villagrande.org/emergency-preparedness" title="Emergency Preparedness"><span>Emergency Preparedness</span></a> 215</div> 216</li> 217 218</ul> 219</div> 220</li> 221 222<li class=" "> 223 <div class="item"> 224 <a href="https://villagrande.org/community-connections" title="Community Connections"><span>Community Connections</span></a> 225</div> 226</li> 227 228<li class=" dir"> 229 <div class="item"> 230 <a href="https://villagrande.org/special-projects" title="Special Projects"><span>Special Projects</span></a> 231<ul class="secondLevel"> 232<li class=" "> 233 <div class="item"> 234 <a href="https://villagrande.org/roads-and-drainage" title="Roads & Drainage"><span>Roads & Drainage</span></a> 235</div> 236</li> 237 238</ul> 239</div> 240</li> 241 242</ul> 243</div> 244</li> 245 246<li class=" dir"> 247 <div class="item"> 248 <a href="https://villagrande.org/MENU-HIDE" title="MENU HIDE"><span>MENU HIDE</span></a> 249<ul class="secondLevel"> 250<li class=" dir"> 251 <div class="item"> 252 <a href="https://villagrande.org/news" title="News"><span>News</span></a> 253<ul class="secondLevel"> 254<li class=" "> 255 <div class="item"> 256 <a href="https://villagrande.org/Announcements" title="Announcements"><span>Announcements</span></a> 257</div> 258</li> 259 260<li class=" "> 261 <div class="item"> 262 <a href="https://villagrande.org/Newsletters" title="Newsletters"><span>Newsletters</span></a> 263</div> 264</li> 265 266</ul> 267</div> 268</li> 269 270</ul> 271</div> 272</li> 273 274<li class=" "> 275 <div class="item"> 276 <a href="https://villagrande.org/Search" title="Search"><span>Search</span></a> 277</div> 278</li> 279 280</ul> 281 </div> 282 283 <div class="loginInner"> 284<div class="loginContainerForm oAuthIstrue"> 285<div class="openAuthFormContainer"> 286<form method="post" action="https://villagrande.org/Sys/Login/ExternalLogin" id="id_xaBsq8r_oAuthForm" class="oAuthForm" data-disableInAdminMode="true"> 287<div id="id_xaBsq8r_container" class="oAuthButtonsContainer"> 288 <!-- <a class="wa-authenticateLoginLink facebook" provider="Facebook"> 289 <span class="authenticateLoginIcon" provider="Facebook"></span> 290 <span class="authenticateLoginText" provider="Facebook">
290Log in with Facebook</span> 291 </a> --> <a class="wa-authenticateLoginLink googlePlus" provider="GooglePlus"> 292 <span class="authenticateLoginIcon" provider="GooglePlus"></span> 293 <span class="authenticateLoginText" provider="GooglePlus">Log in with Google</span> 294 </a><a class="wa-authenticateLoginLink microsoft" provider="Microsoft"> 295 <span class="authenticateLoginIcon" provider="Microsoft"></span> 296 <span class="authenticateLoginText" provider="Microsoft">Log in with Microsoft</span> 297 </a> <a class="wa-authenticateLoginLink apple" provider="Apple"> 298 <span class="authenticateLoginIcon" provider="Apple"></span> 299 <span class="authenticateLoginText" provider="Apple">Log in with Apple</span> 300 </a> 301 <input type="hidden" name="ReturnUrl" value="" /> 302 <input type="hidden" name="Provider" class="oAuthProvider" value="Undefined" /> 303 <input type="hidden" id="id_xaBsq8r_browserCapabilities" name="browserCapabilities" /> 304 </div> 305</form></div> 306 307
307<script type="text/javascript" language="javascript"> 308 jq$(document).ready(function() 309 { 310 new OAuthButtons({id:'id_xaBsq8r', formId: 'id_xaBsq8r_oAuthForm'}); 311 }); 312 </script>
312 313<form method="post" action="https://villagrande.org/Sys/Login" id="id_xaBsq8r_form" class="generalLoginBox" data-disableInAdminMode="true"> 314<input type="hidden" name="ReturnUrl" id="id_xaBsq8r_returnUrl" value=""> 315 <input type="hidden" name="browserData" id="id_xaBsq8r_browserField"> 316<div class="loginUserName"> 317<div class="loginUserNameTextBox"> 318 <input name="email" type="text" maxlength="100" placeholder="Email" id="id_xaBsq8r_userName" tabindex="1" class="emailTextBoxControl"/> 319 </div> 320</div><div class="loginPassword"> 321<div class="loginPasswordTextBox"> 322 <input name="password" type="password" placeholder="Password" maxlength="50" id="id_xaBsq8r_password" tabindex="2" class="passwordTextBoxControl" autocomplete="off"/> 323 </div> 324</div> 325 <input id="g-recaptcha-invisible_xaBsq8r" name="g-recaptcha-invisible" value="recaptcha" type="hidden"/> 326 <div id="recapcha_placeholder_xaBsq8r" style="display:none"></div> 327 <span id="idReCaptchaValidator_xaBsq8r" errorMessage="Please verify that you are not a robot" style="display:none" validatorType="method" ></span> 328
328<script> 329 $("#idReCaptchaValidator_xaBsq8r").on( "wavalidate", function(event, validationResult) { 330 if (grecaptcha.getResponse(widgetId_xaBsq8r).length == 0){ 331 grecaptcha.execute(widgetId_xaBsq8r); 332 validationResult.shouldStopValidation = true; 333 return; 334 } 335 336 validationResult.result = true; 337 }); 338 339 var widgetId_xaBsq8r; 340 341 var onloadCallback_xaBsq8r = function() { 342 // Renders the HTML element with id 'recapcha_placeholder_xaBsq8r' as a reCAPTCHA widget. 343 // The id of the reCAPTCHA widget is assigned to 'widgetId_xaBsq8r'. 344 widgetId_xaBsq8r = grecaptcha.render('recapcha_placeholder_xaBsq8r', { 345 'sitekey' : '6LfmM_UhAAAAAJSHT-BwkAlQgN0mMViOmaK7oEIV', 346 'size': 'invisible', 347 'callback': function(){ 348 document.getElementById('g-recaptcha-invisible_xaBsq8r').form.submit(); 349 }, 350 'theme' : 'light' 351 }); 352 }; 353 </script>
vendor: 131 bytes, lines 353-357
353 354 355 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback_xaBsq8r&render=explicit" async defer></script> 356 357
357<div class="loginActionRememberMe"> 358 <input id="id_xaBsq8r_rememberMe" type="checkbox" name="rememberMe" tabindex="3" class="rememberMeCheckboxControl"/> 359 <label for="id_xaBsq8r_rememberMe">Remember me</label> 360 </div> 361<div class="loginPasswordForgot"> 362 <a href="https://villagrande.org/Sys/ResetPasswordRequest">Forgot password</a> 363 </div> 364<div class="loginAction"> 365 <input type="submit" name="ctl03$ctl02$loginViewControl$loginControl$Login" value="Log in" id="id_xaBsq8r_loginAction" onclick="if (!browserInfo.clientCookiesEnabled()) {alert('Warning: browser cookies disabled. Please enable them to use this website.'); return false;}" tabindex="4" class="loginButton loginButtonControl"/> 366</div></form></div> 367</div> 368 369</div> 370
371<script type="text/javascript"> 372 373jq$(function() 374{ 375 var gadget = jq$('#id_xaBsq8r'), 376 menuContainer = gadget.find('.menuInner'), 377 loginContainer = gadget.find('.loginInner'); 378 379 gadget.find('.buttonMenu').on("click",function() 380 { 381 menuContainer.toggle(); 382 loginContainer.hide(); 383 jq$(this).toggleClass('active'); 384 jq$('.buttonLogin').removeClass('active'); 385 return false; 386 }); 387 388 gadget.find('.buttonLogin').on("click",function() 389 { 390 loginContainer.toggle(); 391 menuContainer.hide(); 392 jq$(this).toggleClass('active'); 393 jq$('.buttonMenu').removeClass('active'); 394 return false; 395 }); 396 397 gadget.find('.mobilePanel').on("click",function(event) 398 { 399 if( !(jq$(event.target).parents('.loginInner').size() || event.target.className == 'loginInner') ) 400 { 401 menuContainer.hide(); 402 loginContainer.hide(); 403 jq$('.buttonLogin').removeClass('active'); 404 jq$('.buttonMenu').removeClass('active'); 405 } 406 407 event.stopPropagation(); 408 }); 409 410 jq$('body').on("click",function() 411 { 412 menuContainer.hide(); 413 loginContainer.hide(); 414 jq$('.buttonLogin').removeClass('active'); 415 jq$('.buttonMenu').removeClass('active'); 416 }); 417 418 419 // login 420 var browserField = document.getElementById('id_xaBsq8r' + '_browserField'); 421 422 if (browserField) 423 { 424 browserField.value = browserInfo.getBrowserCapabilitiesData(); 425 } 426 427 jq$('#id_xaBsq8r' + '_form').FormValidate(); 428 jq$('.WaGadgetMobilePanel form').attr('data-disableInAdminMode', 'false'); 429 430}); 431 432</script>
432</div></div> 433</div></div> 434 435 <!-- header zone --> 436 <div class="zoneHeaderOuter"> 437 <div class="zoneHeader container_12"> 438 <div class="zoneHeaderInner s1_grid_12 s2_grid_12 s3_grid_12"> 439<div id="id_Header" data-componentId="Header" class="WaPlaceHolder WaPlaceHolderHeader" style=""><div style="padding-top:0px;padding-bottom:0px;"><div id="id_RLYBugg" data-componentId="P75wC6y" class="WaLayoutContainerFirst" style="margin-bottom:0px;"><table cellspacing="0" cellpadding="0" class="WaLayoutTable" style=""><tr data-componentId="RLYBugg_row" class="WaLayoutRow"><td id="id_fFMWDZA" data-componentId="2JtVF1E" class="WaLayoutItem" style="width:40%;"><div id="id_JTQDQ3O" class="WaLayoutPlaceHolder placeHolderContainer" data-componentId="1nUr5JJ" style=""><div style="padding-top:30px;padding-bottom:10px;"><div id="id_HeaderLogo" class="WaGadgetOnly WaGadgetContent gadgetStyleNone" style="" data-componentId="8BqVSyB" ><div class="gadgetStyleBody gadgetContentEditableArea" style="" data-editableArea="0" data-areaHeight="auto"> 440<div align="left"><a href="/" title="FoVG - Home"><img src="/resources/Pictures/FoVG/FoVG_Logo-web-large.png" title="" alt="Friends of Villa Grande logo" border="0"></a></div></div> 441</div></div></div></td><td style="" data-componentId="2JtVF1E_separator" class="WaLayoutSeparator"><div style="width: inherit;"></div></td><td id="id_pYda7KE" data-componentId="DiRJBlB" class="WaLayoutItem" style="width:60%;"><div id="id_MhMQ5ZE" class="WaLayoutPlaceHolder placeHolderContainer" data-componentId="aITXLZY" style=""><div style="padding-top:40px;padding-right:8px;padding-left:8px;"><div id="id_Header_Login" class="WaGadgetFirst WaGadgetLoginButton gadgetStyleNone" style="margin-bottom:15px;" data-componentId="qaISEe5" ><div class="loginButtonBackground"></div> 442<div class="loginButtonWrapper alignRight"> 443 <div class="loginBoxLinkContainer"> 444 <a class="loginBoxLinkButton" href="https://villagrande.org/Sys/Login">Log in</a> 445 </div> 446 </div>
447<script type="text/javascript"> 448 jq$(function() { 449 var gadgetLoginButton = jq$('#id_Header_Login'); 450 var leftOffset; 451 452 function resizeBgLogin() { 453 // background track 454 leftOffset = (gadgetLoginButton.closest('.WaLayoutTable').length > 0) ? gadgetLoginButton.closest('.WaLayoutTable').width() : gadgetLoginButton.width(); 455 456 gadgetLoginButton.find('.loginButtonBackground').css({ 457 'width': jq$('body').width(), 458 'left': ( ( jq$('body').width() - leftOffset ) * -0.5 ) 459 }); 460 } 461 462 resizeBgLogin(); 463 jq$(window).resize(function() { resizeBgLogin(); }); 464 }); 465</script>
465 466</div><div id="id_LLKksfN" class="WaGadgetLast WaGadgetCustomMenu gadgetStyle001" style="" data-componentId="LLKksfN" ><div class="gadgetStyleBody " style="" data-areaHeight="auto"> 467<div class="customMenuWrapper alignRight"> 468 <ul class="orientationHorizontal"> 469 470<li> 471 <a href="/membership" title="Join Us">Join Us</a> 472 </li> 473<li> 474 <a href="/members-area" title="Members">Members</a> 475 </li> 476<li> 477 <a href="/emergency-information/" title="Emergency Info">Emergency Info</a> 478 </li> 479<li> 480 <a href="/news" title="News">News</a> 481 </li> 482<li> 483 <a href="/events" title="Events">Events</a> 484 </li> 485<li> 486 <a href="/fovg-store" title="Store">Store</a> 487 </li> 488<li> 489 <a href="/donate" title="Donate">Donate</a> 490 </li> 491</ul> 492</div> 493</div> 494</div></div></div></td></tr></table> </div><div id="id_H8b9tTl" class="WaGadgetLast WaGadgetMenuHorizontal invert menuStyle002" style="margin-bottom:0px;" data-componentId="H8b9tTl" ><div data-sticky-wrapper="true"> 495 <div class="stickness"> 496 <div class="menuBackground"></div> 497 <div class="menuInner"> 498 <ul class="firstLevel"> 499 <li class=" "> 500 <div class="item"> 501 <a href="https://villagrande.org/" title="Home"><span>Home</span></a> 502</div> 503</li> 504 505<li class=" dir"> 506 <div class="item"> 507 <a href="https://villagrande.org/friends-of-villa-grande" title="Friends of Villa Grande"><span>Friends of Villa Grande</span></a> 508<ul class="secondLevel"> 509<li class=" "> 510 <div class="item"> 511 <a href="https://villagrande.org/welcome-to-fovg" title="Welcome to FoVG"><span>Welcome to FoVG</span></a> 512</div> 513</li> 514 515<li class=" "> 516 <div class="item"> 517 <a href="https://villagrande.org/history-of-fovg" title="History of FoVG"><span>History of FoVG</span></a> 518</div> 519</li> 520 521<li class=" "> 522 <div class="item"> 523 <a href="https://villagrande.org/board" title="Board"><span>Board</span></a> 524</div> 525</li> 526 527<li class=" "> 528 <div class="item"> 529 <a href="https://villagrande.org/Contact" title="Contact"><span>Contact</span></a> 530</div> 531</li> 532 533<li class=" "> 534 <div class="item"> 535 <a href="https://villagrande.org/volunteer" title="Volunteer Opportunities"><span>Volunteer Opportunities</span></a> 536</div> 537</li> 538 539<li class=" "> 540 <div class="item"> 541 <a href="https://villagrande.org/events" title="Events"><span>Events</span></a> 542</div> 543</li> 544 545<li class=" "> 546 <div class="item"> 547 <a href="https://villagrande.org/fovg-event-photos" title="FOVG Event photo albums"><span>FOVG Event photo albums</span></a> 548</div> 549</li> 550 551<li class=" "> 552 <div class="item"> 553 <a href="https://villagrande.org/anchorage" title="Boat Anchorage"><span>Boat Anchorage</span></a> 554</div> 555</li> 556 557<li class=" "> 558 <div class="item"> 559 <a href="https://villagrande.org/propane" title="Propane"><span>Propane</span></a> 560</div> 561</li> 562 563<li class=" "> 564 <div class="item"> 565 <a href="https://villagrande.org/vgfd-and-firehouse-plaza" title="VGFD & Firehouse Plaza"><span>VGFD & Firehouse Plaza</span></a> 566</div> 567</li> 568 569</ul> 570</div> 571</li> 572 573<li class=" dir"> 574 <div class="item"> 575 <a href="https://villagrande.org/patterson-point-preserve" title="Patterson Point Preserve"><span>Patterson Point Preserve</span></a> 576<ul class="secondLevel"> 577<li class=" "> 578 <div class="item"> 579 <a href="https://villagrande.org/about-ppp" title="About PPP"><span>About PPP</span></a> 580</div> 581</li> 582 583<li class=" "> 584 <div class="item"> 585 <a href="https://villagrande.org/history-of-ppp" title="History of PPP"><span>History of PPP</span></a> 586</div> 587</li> 588 589<li class=" dir"> 590 <div class="item"> 591 <a href="https://villagrande.org/restoration" title="Restoration"><span>Restoration</span></a> 592<ul class="secondLevel"> 593<li class=" "> 594 <div class="item"> 595 <a href="https://villagrande.org/Restoration-Reports" title="Restoration Reports"><span>Restoration Reports</span></a> 596</div> 597</li> 598 599</ul> 600</div> 601</li> 602 603<li class=" "> 604 <div class="item"> 605 <a href="https://villagrande.org/birds" title="Birds"><span>Birds</span></a> 606</div> 607</li> 608 609<li class=" "> 610 <div class="item"> 611 <a href="https://villagrande.org/plants" title="Plants"><span>Plants</span></a> 612</div> 613</li> 614 615<li class=" "> 616 <div class="item"> 617 <a href="https://villagrande.org/recreation" title="Recreation"><span>Recreation</span></a> 618</div> 619</li> 620 621</ul> 622</div> 623</li> 624 625<li class=" dir"> 626 <div class="item"> 627 <a href="https://villagrande.org/our-community" title="Our Community"><span>Our Community</span></a> 628<ul class="secondLevel"> 629<li class=" "> 630 <div class="item"> 631 <a href="https://villagrande.org/about-our-community" title="About Our Community"><span>About Our Community</span></a> 632</div> 633</li> 634 635<li class=" dir"> 636 <div class="item"> 637 <a href="https://villagrande.org/history-of-vg" title="History of VG"><span>History of VG</span></a> 638<ul class="secondLevel"> 639<li class=" "> 640 <div class="item"> 641 <a href="https://villagrande.org/flood-of-1986" title="Flood of 1986"><span>Flood of 1986</span></a> 642</div> 643</li> 644 645<li class=" "> 646 <div class="item"> 647 <a href="https://villagrande.org/photo-albums" title="Historical photo albums"><span>Historical photo albums</span></a> 648</div> 649</li> 650 651<li class=" "> 652 <div class="item"> 653 <a href="https://villagrande.org/VG-Fourth-of-July" title="Fourth of July"><span>Fourth of July</span></a> 654</div> 655</li> 656 657</ul> 658</div> 659</li> 660 661<li class=" "> 662 <div class="item"> 663 <a href="https://villagrande.org/community-identification" title="Community Identification"><span>Community Identification</span></a> 664</div> 665</li> 666 667<li class=" "> 668 <div class="item"> 669 <a href="https://villagrande.org/water-quality-and-septic" title="Water Quality & Septic"><span>Water Quality & Septic</span></a> 670</div> 671</li> 672 673<li class=" dir"> 674 <div class="item"> 675 <a href="https://villagrande.org/emergency-information" title="Emergency Information"><span>Emergency Information</span></a> 676<ul class="secondLevel"> 677<li class=" "> 678 <div class="item"> 679 <a href="https://villagrande.org/emergency-preparedness" title="Emergency Preparedness"><span>Emergency Preparedness</span></a> 680</div> 681</li> 682 683</ul> 684</div> 685</li> 686 687<li class=" "> 688 <div class="item"> 689 <a href="https://villagrande.org/community-connections" title="Community Connections"><span>Community Connections</span></a> 690</div> 691</li> 692 693<li class=" dir"> 694 <div class="item"> 695 <a href="https://villagrande.org/special-projects" title="Special Projects"><span>Special Projects</span></a> 696<ul class="secondLevel"> 697<li class=" "> 698 <div class="item"> 699 <a href="https://villagrande.org/roads-and-drainage" title="Roads & Drainage"><span>Roads & Drainage</span></a> 700</div> 701</li> 702 703</ul> 704</div> 705</li> 706 707</ul> 708</div> 709</li> 710 711<li class=" dir"> 712 <div class="item"> 713 <a href="https://villagrande.org/MENU-HIDE" title="MENU HIDE"><span>MENU HIDE</span></a> 714<ul class="secondLevel"> 715<li class=" dir"> 716 <div class="item"> 717 <a href="https://villagrande.org/news" title="News"><span>News</span></a> 718<ul class="secondLevel"> 719<li class=" "> 720 <div class="item"> 721 <a href="https://villagrande.org/Announcements" title="Announcements"><span>Announcements</span></a> 722</div> 723</li> 724 725<li class=" "> 726 <div class="item"> 727 <a href="https://villagrande.org/Newsletters" title="Newsletters"><span>Newsletters</span></a> 728</div> 729</li> 730 731</ul> 732</div> 733</li> 734 735</ul> 736</div> 737</li> 738 739<li class=" "> 740 <div class="item"> 741 <a href="https://villagrande.org/Search" title="Search"><span>Search</span></a> 742</div> 743</li> 744 745</ul> 746 </div> 747 </div> 748</div> 749
750<script type="text/javascript"> 751 if (window.WaMenuHorizontal) 752 { 753 jq$(document).ready(function() 754 { 755 new stickyPlaceholder(); 756 new WaMenuHorizontal({ id: "id_H8b9tTl" }); 757 }); 758 } 759</script>
759 760 761
762<script type="text/javascript"> 763 jq$(function() 764 { 765 var gadgetHorMenu = jq$('#id_H8b9tTl'); 766 var leftOffset; 767 768 function resizeBg() 769 { 770 // background track 771 772 leftOffset = (gadgetHorMenu.closest('.WaLayoutTable').length > 0) ? gadgetHorMenu.closest('.WaLayoutTable').width() : gadgetHorMenu.width(); 773 774 gadgetHorMenu.find('.menuBackground').css( 775 { 776 'width': jq$('body').width(), 777 'left': ( ( jq$('body').width() - leftOffset ) * -0.5 ) 778 }); 779 } 780 781 resizeBg(); 782 783 jq$(window).resize(function() 784 { 785 resizeBg(); 786 }); 787 }); 788</script>
788</div></div> 789</div></div> 790 </div> 791 </div> 792 793 <div class="zoneHeader1Outer"> 794 <div class="zoneHeader1 container_12"> 795 <div class="zoneHeader1Inner s1_grid_12 s2_grid_12 s3_grid_12"> 796 <div class="color"></div> 797</div> 798 </div> 799 </div> 800 801 <div class="zoneHeader2Outer"> 802 <div class="zoneHeader2 container_12"> 803 <div class="zoneHeader2Inner s1_grid_12 s2_grid_12 s3_grid_12"> 804<div id="id_Header2" data-componentId="Header2" class="WaPlaceHolder WaPlaceHolderHeader2" style=""><div style="padding-top:15px;padding-bottom:15px;"><div id="id_GZbLnvn" class="WaGadgetOnly WaGadgetBreadcrumbs alignCenter gadgetStyleNone" style="" data-componentId="GZbLnvn" ><div class="gadgetStyleBody " style="" data-areaHeight="auto"> 805<ul> 806<li><a href="https://villagrande.org/">Home</a></li> 807<li class="last"><span>Our store</span></li> 808</ul> 809</div> 810</div></div> 811</div></div> 812 </div> 813 </div> 814 <!-- /header zone --> 815 816<!-- content zone --> 817 <div class="zoneContentOuter"> 818 <div class="zoneContent container_12"> 819 <div class="zoneContentInner s1_grid_12 s2_grid_12 s3_grid_12"> 820<div id="id_Content" data-componentId="Content" class="WaPlaceHolder WaPlaceHolderContent" style=""><div style="margin-bottom: 30px;padding-top:30px;padding-right:30px;padding-bottom:40px;padding-left:30px;padding-top:60px;padding-bottom:60px;"><div id="id_gSQNL1H" class="WaGadgetFirst WaGadgetContent gadgetStyleNone" style="" data-componentId="gSQNL1H" ><div class="gadgetStyleBody gadgetContentEditableArea" style="" data-editableArea="0" data-areaHeight="auto"> 821<h1>FOVG Online Store</h1></div> 822</div><div id="id_92VHbmH" class="WaGadget WaGadgetContent gadgetStyleNone" style="" data-componentId="92VHbmH" ><div class="gadgetStyleBody gadgetContentEditableArea" style="" data-editableArea="0" data-areaHeight="auto"> 823<p>Support the Friends of Villa Grande by purchasing our custom wear.</p></div> 824</div><div id="id_pFXRZwP" class="WaGadgetLast WaGadgetOnlineStoreCatalog gadgetStyleNone" style="" data-componentId="pFXRZwP" ><ul class="OnlineStoreCatalog_list"><li class="OnlineStoreCatalog_list_item"> 825 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/394389"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/IvyJunge.jpeg" /></a> 826 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/394389">We Bought An Ivy Jungle: The First 10 Years of Restoring Patterson Point Preserve</a> 827 <div> 828 <span class="OnlineStoreCatalog_list_price"> 829$20.00</span> 830</div> 831<div> 832<span class="OnlineStoreCatalog_list_price_alt"> 833$15.00 - Member price 834</span> 835</div></li><li class="OnlineStoreCatalog_list_item"> 836 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/357663"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/IMG_0265.jpeg" /></a> 837 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/357663">V-Neck: FOVG</a> 838 <div> 839 <span class="OnlineStoreCatalog_list_price"> 840$15.00</span> 841</div> 842<div> 843<span class="OnlineStoreCatalog_list_price_alt"> 844$10.00 - Member price 845</span> 846</div></li><li class="OnlineStoreCatalog_list_item"> 847 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/357662"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/IMG_0271.jpeg" /></a> 848 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/357662">V-Neck: Villa Grande</a> 849 <div> 850 <span class="OnlineStoreCatalog_list_price"> 851$15.00</span> 852</div> 853<div> 854<span class="OnlineStoreCatalog_list_price_alt"> 855$10.00 - Member price 856</span> 857</div></li><li class="OnlineStoreCatalog_list_item"> 858 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/355491"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/IMG_0242.jpeg" /></a> 859 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/355491">Black Cap: Villa Grande</a> 860 <div> 861 <span class="OnlineStoreCatalog_list_price"> 862$20.00</span> 863</div> 864<div> 865</div></li><li class="OnlineStoreCatalog_list_item"> 866 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/355480"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/67CC36BB-06AC-4F6D-B40D-8C524DFB5CF2_1_105_c.jpeg" /></a> 867 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/355480">Zip Up Hoodie: Forest Green</a> 868 <div> 869 <span class="OnlineStoreCatalog_list_price"> 870$40.00</span> 871</div> 872<div> 873</div></li><li class="OnlineStoreCatalog_list_item"> 874 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/355476"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/568F6B4F-5BE2-4082-9B3C-719CEE9A4A26_1_105_c.jpeg" /></a> 875 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/355476">Crew Neck: FOVG</a> 876 <div> 877 <span class="OnlineStoreCatalog_list_price"> 878$15.00</span> 879</div> 880<div> 881<span class="OnlineStoreCatalog_list_price_alt"> 882$10.00 - Member price 883</span> 884</div></li><li class="OnlineStoreCatalog_list_item"> 885 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/355475"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/AA37C413-D0C2-4633-9802-4514DC115D64_1_105_c.jpeg" /></a> 886 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/355475">
886Crew Neck: Villa Grande VG</a> 887 <div> 888 <span class="OnlineStoreCatalog_list_price"> 889$15.00</span> 890</div> 891<div> 892<span class="OnlineStoreCatalog_list_price_alt"> 893$10.00 - Member price 894</span> 895</div></li><li class="OnlineStoreCatalog_list_item"> 896 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/339164"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/D9D71EFE-6780-49FB-AC66-57401C4285B5_1_105_c.jpeg" /></a> 897 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/339164">Tank top: Villa Grande, Gray w Black Trim</a> 898 <div> 899 <span class="OnlineStoreCatalog_list_price"> 900$15.00</span> 901</div> 902<div> 903<span class="OnlineStoreCatalog_list_price_alt"> 904$10.00 - Member price 905</span> 906</div></li><li class="OnlineStoreCatalog_list_item"> 907 <a class="OnlineStoreCatalog_list_item_img" href="/Sys/Store/Products/339163"><img src="https://friendsofvillagrande.wildapricot.org/resources/68667072/D385DA04-2097-4C6E-B3C0-C992B3238E0E_1_105_c.jpeg" /></a> 908 <a class="OnlineStoreCatalog_list_item_link" href="/Sys/Store/Products/339163">Tank Top: FOVG, Blue w Red Trim</a> 909 <div> 910 <span class="OnlineStoreCatalog_list_price"> 911$15.00</span> 912</div> 913<div> 914<span class="OnlineStoreCatalog_list_price_alt"> 915$10.00 - Member price 916</span> 917</div></li></ul> 918</div></div> 919</div></div> 920 </div> 921 </div> 922 <!-- /content zone --> 923 924<!-- footer zone --> 925 <div class="zoneFooterOuter"> 926 <div class="zoneFooter container_12"> 927 <div class="zoneFooterInner s1_grid_12 s2_grid_12 s3_grid_12"> 928<div id="id_Footer" data-componentId="Footer" class="WaPlaceHolder WaPlaceHolderFooter" style=""><div style="padding-top:0px;padding-right:0px;padding-left:0px;"><div id="id_GHQRGWh" class="WaGadgetOnly WaGadgetMenuHorizontal invert menuStyle001" style="" data-componentId="GHQRGWh" ><div data-sticky-wrapper="true"> 929 <div class="stickness"> 930 <div class="menuBackground"></div> 931 <div class="menuInner"> 932 <ul class="firstLevel"> 933 <li class=" "> 934 <div class="item"> 935 <a href="https://villagrande.org/" title="Home"><span>Home</span></a> 936</div> 937</li> 938 939<li class=" "> 940 <div class="item"> 941 <a href="https://villagrande.org/friends-of-villa-grande" title="Friends of Villa Grande"><span>Friends of Villa Grande</span></a> 942</div> 943</li> 944 945<li class=" "> 946 <div class="item"> 947 <a href="https://villagrande.org/patterson-point-preserve" title="Patterson Point Preserve"><span>Patterson Point Preserve</span></a> 948</div> 949</li> 950 951<li class=" "> 952 <div class="item"> 953 <a href="https://villagrande.org/our-community" title="Our Community"><span>Our Community</span></a> 954</div> 955</li> 956 957<li class=" "> 958 <div class="item"> 959 <a href="https://villagrande.org/MENU-HIDE" title="MENU HIDE"><span>MENU HIDE</span></a> 960</div> 961</li> 962 963<li class=" "> 964 <div class="item"> 965 <a href="https://villagrande.org/Search" title="Search"><span>Search</span></a> 966</div> 967</li> 968 969</ul> 970 </div> 971 </div> 972</div> 973
974<script type="text/javascript"> 975 if (window.WaMenuHorizontal) 976 { 977 jq$(document).ready(function() 978 { 979 new stickyPlaceholder(); 980 new WaMenuHorizontal({ id: "id_GHQRGWh" }); 981 }); 982 } 983</script>
983 984 985
986<script type="text/javascript"> 987 jq$(function() 988 { 989 var gadgetHorMenu = jq$('#id_GHQRGWh'); 990 var leftOffset; 991 992 function resizeBg() 993 { 994 // background track 995 996 leftOffset = (gadgetHorMenu.closest('.WaLayoutTable').length > 0) ? gadgetHorMenu.closest('.WaLayoutTable').width() : gadgetHorMenu.width(); 997 998 gadgetHorMenu.find('.menuBackground').css( 999 { 1000 'width': jq$('body').width(), 1001 'left': ( ( jq$('body').width() - leftOffset ) * -0.5 ) 1002 }); 1003 } 1004 1005 resizeBg(); 1006 1007 jq$(window).resize(function() 1008 { 1009 resizeBg(); 1010 }); 1011 }); 1012</script>
1012</div></div> 1013</div></div> 1014 </div> 1015 </div> 1016 1017 <div class="zoneFooter1Outer"> 1018 <div class="zoneFooter1 container_12"> 1019 <div class="zoneFooter1Inner s1_grid_12 s2_grid_12 s3_grid_12"> 1020 <div id="id_Footer1" data-componentId="Footer1" class="WaPlaceHolder WaPlaceHolderFooter1" style=""><div style="padding-right:0px;padding-bottom:0px;padding-left:0px;"><div id="id_vPTGQ7j" data-componentId="vPTGQ7j" class="WaLayoutContainerOnly" style=""><table cellspacing="0" cellpadding="0" class="WaLayoutTable" style=""><tr data-componentId="vPTGQ7j_row" class="WaLayoutRow"><td id="id_iS2J2bd" data-componentId="iS2J2bd" class="WaLayoutItem" style="width:100%;"><div id="id_vJAaO9J" class="WaLayoutPlaceHolder placeHolderContainer" data-componentId="vJAaO9J" style=""><div style="padding-top:40px;padding-right:40px;padding-bottom:30px;padding-left:40px;"><div id="id_tLAXTEI" class="WaGadgetFirst WaGadgetContent gadgetStyleNone" style="" data-componentId="tLAXTEI" ><div class="gadgetStyleBody gadgetContentEditableArea" style="" data-editableArea="0" data-areaHeight="auto"> 1021<div align="center"> 1022 <a href="/" title="FoVG - Home"><img src="/resources/Pictures/FoVG/FoVG_Logo-web-large-white.png" title="" alt="Friends of Villa Grande logo" border="0" width="352"></a> 1023</div></div> 1024</div><div id="id_FaRDwin" class="WaGadgetLast WaGadgetContent gadgetStyleNone" style="margin-bottom:30px;" data-componentId="VWtpbgk" ><div class="gadgetStyleBody gadgetContentEditableArea" style="" data-editableArea="0" data-areaHeight="auto"> 1025<div align="center"> 1026 <font color="#FFFFFF">P.O. Box 28, Villa Grande CA 95486</font> 1027</div> 1028 1029<div align="center"> 1030 <font color="#FFFFFF">Friends of Villa Grande is a 501(c)(3), non-profit organization (tax ID 64-0964108)</font> 1031</div> 1032 1033<div align="center"> 1034 <font color="#FFFFFF"><a href="http://www.friendsofvillagrande.org">www.friendsofvillagrande.org</a> | <a href="mailto:[email protected]" target="_blank">[email protected]</a> | <a href="/accessibility">Accessibility</a></font> 1035</div></div> 1036</div></div></div></td></tr></table> </div></div> 1037</div></div> 1038 </div> 1039 </div> 1040 <!-- /footer zone --> 1041 1042 <!-- branding zone --> 1043<div class="zoneBrandingOuter"> 1044 <div class="zoneBranding container_12"> 1045 <div class="zoneBrandingInner s1_grid_12 s2_grid_12 s3_grid_12"> 1046<div id="idFooterPoweredByContainer"> 1047 <span id="idFooterPoweredByWA"> 1048Powered by <a href="http://www.wildapricot.com" target="_blank">Wild Apricot</a> Membership Software</span> 1049</div> 1050</div> 1051 </div> 1052 </div> 1053<!-- /branding zone --> 1054<div id="idCustomJsContainer" class="cnCustomJsContainer">
1055<script> 1056try 1057{ 1058 1059/* FOVG accessibility shim v1.1 â Peter Otte Productions â built 2026-09-22 11:12 PDT (v1.0 2026-09-21 = blocks 1â6; v1.1 2026-09-22 = blocks 7â10). 1060 Paste this whole block into Website â Settings â Site settings â Global JavaScript (with the GA4 tag, if any). 1061 Wild Apricot's system gadgets (login, forms, store, mobile panel) render without labels or accessible 1062 names and cannot be edited in the theme, so this adds them at page load. Safe to remove at any time. */ 1063(function () { 1064 function ready(fn) { if (document.readyState !== 'loading') fn(); else document.addEventListener('DOMContentLoaded', fn); } 1065 ready(function () { 1066 try { 1067 /* 1. Main landmark + skip link (WCAG 2.4.1) */ 1068 var main = document.getElementById('id_Content') || document.getElementById('id_Header1'); 1069 if (!main) { 1070 var ph = document.querySelectorAll('.WaPlaceHolder'); 1071 for (var i = 0; i < ph.length; i++) { 1072 var c = ph[i].className; 1073 if (c.indexOf('MobilePanel') < 0 && c.indexOf('PlaceHolderHeader') < 0 && c.indexOf('Footer') < 0) { main = ph[i]; break; } 1074 } 1075 } 1076 if (main) { 1077 main.id = main.id || 'fovg-main'; 1078 if (!document.querySelector('[role="main"], main')) main.setAttribute('role', 'main'); 1079 main.setAttribute('tabindex', '-1'); 1080 var skip = document.createElement('a'); 1081 skip.className = 'fovg-skip'; skip.href = '#' + main.id; skip.textContent = 'Skip to main content'; 1082 skip.addEventListener('click', function (e) { e.preventDefault(); main.focus(); main.scrollIntoView(); }); 1083 document.body.insertBefore(skip, document.body.firstChild); 1084 } 1085 var nav = document.querySelector('.WaGadgetMenuHorizontal'); 1086 if (nav && !nav.getAttribute('role')) { nav.setAttribute('role', 'navigation'); nav.setAttribute('aria-label', 'Main menu'); } 1087 1088 /* 2. Inputs that only have a placeholder (login box, search) get an accessible name from it */ 1089 var inputs = document.querySelectorAll('input, select, textarea'); 1090 for (var j = 0; j < inputs.length; j++) { 1091 var el = inputs[j], t = (el.getAttribute('type') || '').toLowerCase(); 1092 if (t === 'hidden' || t === 'submit' || t === 'button' || t === 'image') continue; 1093 var labelled = el.getAttribute('aria-label') || el.getAttribute('aria-labelledby') || (el.id && document.querySelector('label[for="' + el.id + '"]')) || el.closest('label'); 1094 if (labelled) continue; 1095 /* 3. Wild Apricot form fields: the visible title sits in .fieldLabel span[id$="_titleLabel"] in the same row */ 1096 var row = el.closest('tr') || el.closest('.fieldContainer') || el.closest('.fieldSubContainer'); 1097 var title = row && row.querySelector('.fieldLabel span[id$="_titleLabel"], .fieldLabel .mandatoryLabel, .fieldLabel'); 1098 if (title && title.textContent.trim()) { 1099 if (!title.id) title.id = 'fovg-lbl-' + j; 1100 el.setAttribute('aria-labelledby', title.id); 1101 if (row.querySelector('.mandatorySymbol')) el.setAttribute('aria-required', 'true'); 1102 } else if (el.getAttribute('placeholder')) { 1103 el.setAttribute('aria-label', el.getAttribute('placeholder')); 1104 } 1105 } 1106 1107 /* 4. Store catalog: the image link duplicates the title link and has no name â make the image 1108 describe the product and take the duplicate link out of the tab order (WCAG 1.1.1, 2.4.4) */ 1109 var items = document.querySelectorAll('.OnlineStoreCatalog_list_item'); 1110 for (var k = 0; k < items.length; k++) { 1111 var link = items[k].querySelector('.OnlineStoreCatalog_list_item_link'); 1112 var imgLink = items[k].querySelector('.OnlineStoreCatalog_list_item_img'); 1113 var name = link ? link.textContent.trim() : ''; 1114 var img = imgLink && imgLink.querySelector('img'); 1115 if (img && !img.getAttribute('alt')) img.setAttribute('alt', name); 1116 if (imgLink && link) { imgLink.setAttribute('aria-hidden', 'true'); imgLink.setAttribute('tabindex', '-1'); } 1117 } 1118 /* Product detail pages: the big photo usually has no alt either */ 1119 var detailImgs = document.querySelectorAll('.OnlineStoreProduct img:not([alt]), .WaGadgetOnlineStoreProduct img:not([alt])'); 1120 var h1 = document.querySelector('h1'); 1121 for (var d = 0; d < detailImgs.length; d++) detailImgs[d].setAttribute('alt', h1 ? h1.textContent.trim() : 'Product photo'); 1122 1123 /* 5. Mobile panel "Menu" / "Log in" are divs â make them real keyboard buttons (WCAG 2.1.1) */ 1124 var btns = document.querySelectorAll('.mobilePanelButton'); 1125 for (var b = 0; b < btns.length; b++) { 1126 btns[b].setAttribute('role', 'button'); btns[b].setAttribute('tabindex', '0'); 1127 btns[b].addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this.click(); } }); 1128 } 1129 1130 /* 6. Empty headings that Wild Apricot emits for blank title gadgets add noise to the outline */ 1131 var hs = document.querySelectorAll('h1, h2, h3, h4, h5, h6'); 1132 for (var h = 0; h < hs.length; h++) { 1133 if (!hs[h].textContent.trim() && !hs[h].querySelector('img')) hs[h].parentNode.removeChild(hs[h]); 1134 } 1135 1136 /* 7. Heading outline repair (drop 2, 9/22): Wild Apricot's system gadgets emit h3/h4 titles with no h2 above 1137 them (Donation, Select membership level, Upcoming/Past events), and content pages jump h1 -> h4. Screen 1138 readers honour aria-level, so a heading that skips a level is announced at the next level down instead. */ 1139 var last = 0, all = document.querySelectorAll('h1, h2, h3, h4, h5, h6'); 1140 for (var k = 0; k < all.length; k++) { 1141 var lvl = parseInt(all[k].tagName.charAt(1), 10); 1142 if (last && lvl > last + 1) { all[k].setAttribute('role', 'heading'); all[k].setAttribute('aria-level', String(last + 1)); lvl = last + 1; } 1143 last = lvl; 1144 } 1145 1146 /* 8. Events gadget: the list/calendar view-switcher icon is a system image with no alt (decorative; the 1147 switch itself is a labelled control) */ 1148 var deco = document.querySelectorAll('img.calendarModeIcon, img[id$="calendarModeIcon"], img[id$="listModeIcon"], img[src*="async-load-progress"], img.lb
1148-image'); 1149 for (var i2 = 0; i2 < deco.length; i2++) { if (!deco[i2].hasAttribute('alt')) { deco[i2].setAttribute('alt', ''); deco[i2].setAttribute('role', 'presentation'); } } 1150 1151 /* 9. The events gadget prints a second, text-less <h1 class="SystemPageTitle"> that only holds the RSS link. 1152 Keep the link, drop the heading semantics so the page has one title. */ 1153 var sys = document.querySelectorAll('h1.SystemPageTitle, h2.SystemPageTitle'); 1154 for (var i3 = 0; i3 < sys.length; i3++) { if (!sys[i3].textContent.trim()) sys[i3].setAttribute('role', 'presentation'); } 1155 1156 /* 10. Wild Apricot writes autocomplete="nope" on donation/membership fields to defeat autofill; "nope" is not a 1157 valid token (WCAG 1.3.5), "off" is. And the icon-only RSS link on the events page gets a name. */ 1158 var ac = document.querySelectorAll('[autocomplete="nope"]'); 1159 for (var i4 = 0; i4 < ac.length; i4++) ac[i4].setAttribute('autocomplete', 'off'); 1160 var rss = document.querySelectorAll('a[id$="_rssLink"], a[href$="/events/RSS"]'); 1161 for (var i5 = 0; i5 < rss.length; i5++) { if (!rss[i5].textContent.trim() && !rss[i5].getAttribute('aria-label')) rss[i5].setAttribute('aria-label', 'Events RSS feed'); } 1162 } catch (err) { if (window.console) console.warn('FOVG a11y shim:', err); } 1163 }); 1164})(); 1165 1166} 1167catch(err) 1168{}</script>
1168</div> 1169</div></body> 1170</html>
1171<script type="text/javascript">if (window.BonaPage && BonaPage.setPageState) { BonaPage.setPageState(BonaPage.PAGE_PARSED); }</script>
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.