PageSourceSearch

https://ecsasail.com/public/shop/products

html ecsasail.com collected 2026-09-26 20:01:34 UTC 52,278 bytes, 515 lines download raw bytes

1<!DOCTYPE html>
2<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
3<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
4<!--[if !IE]><!-->
5<html lang="en">
6<!--<![endif]-->
7<head>
8<meta charset="utf-8">
9<meta content="IE=edge" http-equiv="X-UA-Compatible">
10<meta content="width=device-width, initial-scale=1" name="viewport">
11<script>
12  (function () {
13    try {
14      if (typeof window._AutofillCallbackHandler === 'undefined') {
15        var noop = function () {};
16        window._AutofillCallbackHandler = (typeof Proxy === 'function')
17          ? new Proxy(noop, { get: function () { return noop; }, apply: function () {} })
18          : noop;
19      }
20    } catch (e) {}
21  })();
22</script>
22
23<meta name="csrf-param" content="authenticity_token" />
24<meta name="csrf-token" content="YxRq0_6S56pWPKWyBWADcexy40mlZvwizTzWUn39vgxvtBtcjqm9J-whnn2Y-ZVa3Bg0n_W7r5mJmYbeb348Sg" />
25<meta content="East Coast Sailing Association — Shop" name="description">
26<meta content="TidyHQ" property="og:site_name">
27<meta content="website" property="og:type">
28<meta content="East Coast Sailing Association — Shop" property="og:title">
29<meta content="East Coast Sailing Association — Shop" property="og:description">
30<meta content="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/small/Burgee_small.png" property="og:image">
31
32<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"East Coast Sailing Association","url":"https://ecsasail.com/","logo":"https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/large/Burgee_small.png","address":{"streetAddress":"P. O. Box 372124\r\nSatellite Beach, Florida, 32937-0124\r\n","addressLocality":"Satellite Beach","addressRegion":"FL","postalCode":"32937-0124","addressCountry":"US","@type":"PostalAddress"}}</script>
32
33<title>Shop | East Coast Sailing Association | TidyHQ</title>
34  <link rel="icon" type="image/png" href="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/medium/Burgee_small.png" sizes="100x100" />
35  <link rel="apple-touch-icon" sizes="400x400" href="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/large/Burgee_small.png" />
36  <meta name="apple-mobile-web-app-title" content="East Coast Sailing Association - TidyHQ" />
37<link rel="manifest" href="https://cdn.tidyhq.com/assets/favicon/webmanifest-b92c1dfe764285525bb693fa61a865d888685c9e1e565afa360c043b3ce20db5.json" />
38
39<link href="https://ecsasail.com/public/shop/products" rel="canonical">
40<link crossorigin="anonymous" href="https://fonts.tidyhq.com" rel="preconnect">
41<link href="https://fonts.googleapis.com" rel="preconnect">
42<link crossorigin="anonymous" href="https://fonts.gstatic.com" rel="preconnect">
43<link rel="stylesheet" href="https://cdn.tidyhq.com/assets/shared/bootstrap/bootstrap-24-12a7411a428fbb3e97e37856966a170cf4bc7dbe7d3539824c35e6073f396db9.css" media="screen, print" />
44<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,700,300,600,400&amp;subset=all&amp;display=swap" media="print" onload="this.media=&#39;all&#39;" />
45<noscript>
46<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,700,300,600,400&amp;subset=all&amp;display=swap" />
47</noscript>
48<link rel="stylesheet" href="https://cdn.tidyhq.com/assets/club/public/base-2baecff89b5756363a0f107a5249e8d48771869c2ebe81d6fb5ab0731bd0811b.css" />
49<link rel="stylesheet" href="https://cdn.tidyhq.com/assets/tailwind-958e356e5fc69fdda32487cad997a5a7cfacf5ddd95716c5d2
4908ddd18fd4fb1d.css" />
50<link rel="stylesheet" href="https://cdn.tidyhq.com/assets/club/public/print-2d3fb11f29ebbe3afb1268c4804fc646ff6f97e7d8903f8f8761c872819c528e.css" media="print" />
51<link rel="stylesheet" href="https://ecsasail.tidyhq.com/public/styles/034B8A.css?v=4" />
52<link rel="stylesheet" href="https://ecsasail.tidyhq.com/public/styles/atomic/034B8A.css" media="print" onload="this.media=&#39;all&#39;" />
53<noscript>
54<link rel="stylesheet" href="https://ecsasail.tidyhq.com/public/styles/atomic/034B8A.css" />
55</noscript>
56<script src="https://cdn.tidyhq.com/packs/js/runtime-67ef6de353ae2d863876.js" defer="defer"></script>
vendor: 1 bytes, line 56
56
57<script src="https://cdn.tidyhq.com/packs/js/755-a074147f00cfbeb89e60.js" defer="defer"></script>
vendor: 1 bytes, line 57
57
58<script src="https://cdn.tidyhq.com/packs/js/public-bundle-9bd6c154d944a265722f.js" defer="defer"></script>
vendor: 1 bytes, line 58
58
59<script type="application/ld+json">
60{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"Product","name":"Brochure","image":"https://s3.tidyhq.com/orgs/eaea3d243de6/product/image/ca2940730a74df5c625de5c07495f177d1ee2a84/medium/Brochure_cover.png","url":"https://ecsasail.com/public/shop/products/brochure","brand":{"@type":"Organization","name":"East Coast Sailing Association"},"offers":{"@type":"Offer","priceCurrency":"USD","price":0.0,"availability":"https://schema.org/InStock"}}}],"numberOfItems":1}
61</script>
61
62
63
64
65<script>
66  var resetIdentity = false;
67  !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
68  
69  posthog.init("phc_1SveAgbDBKi3U9T8oOfQVW99Dc5ogeJrbWkAUV7orCL", {defaults: '2025-05-24', api_host: "https://at.tidyhq.com", bootstrap: {}, person_profiles: 'identified_only', autocapture: false, capture_pageview: false, capture_pageleave: false, capture_performance: false, disable_session_recording: true, session_recording: {blockSelector: 'iframe[src*="frill.co"]', maskAllInputs: true}, opt_out_capturing_by_default: true, capture_exceptions: {"capture_unhandled_errors":false,"capture_unhandled_rejections":false,"capture_console_errors":false}});
70  posthog.register_for_session({'imp_by': null});
71  
72  if (resetIdentity) {
73    posthog.reset();
74  }
75  
76  window.passkeySupportChecked = new Promise(function(resolve) {
77    var pk_api_supported = typeof window.PublicKeyCredential === 'function';
78  
79    var data = {
80      pk_api_supported: pk_api_supported,
81      pk_conditional_mediation_available: false,
82      pk_user_verifying_platform_authenticator_available: false,
83    };
84  
85    var mediationPromise = pk_api_supported && typeof window.PublicKeyCredential.isConditionalMediationAvailable === 'function'
86      ? window.PublicKeyCredential.isConditionalMediationAvailable().catch(function() { return false })
87      : Promise.resolve(false);
88  
89    var authenticatorPromise = pk_api_supported && typeof window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable === 'function'
90      ? window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().catch(function() { return false })
91      : Promise.resolve(false);
92  
93    Promise.all([mediationPromise, authenticatorPromise])
94      .then(([mediationAvailable, authenticatorAvailable]) => {
95        data.pk_conditional_mediation_available = mediationAvailable;
96        data.pk_user_verifying_platform_authenticator_available = authenticatorAvailable;
97      })
98      .finally(function() {
99        posthog.register_for_session(data)
100        resolve()
101      });
102  });
103  
104  // COST OPT: disabled manual $pageview capture
105  // window.passkeySupportChecked.finally(function() {
106  //   posthog.capture('$pageview')
107  // })
108  
109  function syncSessionWithBackend(new_session_id, new_distinct_id) {
110    $.removeCookie('ph_sessionid');
111    $.cookie('ph_sessionid', new_session_id, {
112      path: '/',     // Available across entire site
113      secure: true   // Only transmitted over HTTPS
114    });
115    $.removeCookie('ph_anon_distinctid');
116    $.cookie('ph_anon_distinctid', new_distinct_id, {
117      path: '/',     // Available across entire site
118      secure: true   // Only transmitted over HTTPS
119    });
120  }
121  
122  document.addEventListener('DOMContentLoaded', function() {
123    syncSessionWithBackend(posthog.get_session_id(), posthog.get_distinct_id()); // always set the session id cookie on load so it's in sync with backend on all subsequent events
124  
125    posthog.onSessionId(function(id, w_id) {
126      syncSessionWithBackend(id, posthog.get_distinct_id());
127    }); 
128  
129    // COST OPT: only identify once per session instead of every page load
130    if ($.cookie("logged_in") === "1" && typeof posthog._isIdentified === 'function' && !posthog._isIdentified()) {
131      posthog.identify($.cookie("logged_in_user_distinct_id"))
132    }
133  });
134</script>
134
135
136</head>
137<body class="flex-body">
138<script src="https://cdn.tidyhq.com/assets/club/public/base-4e8d3f81b5fef5c6c4bebd915c16521b20a56d4235587b3d3ec54820c1bceb60.js"></script>
138
139
140<script>
141  var _rollbarConfig = {
142    accessToken: "c1310a8a22b44cc4abd5ed9034d81b9b",
143    captureUncaught: true,
144    captureUnhandledRejections: true,
145    itemsPerMinute: 10,
146    payload: {environment: "production"},
147    checkIgnore: (function () {
148      const MAX_PER_SIG = 3;
149      const RESET_MS    = 600000; // 10 min
150      const seen = {};
151      return function (isUncaught, args, payload) {
152        try {
153          const body = payload && payload.body;
154          const trace = body && (body.trace || (body.trace_chain && body.trace_chain[0]));
155          const exc = trace && trace.exception;
156          const frames = trace && trace.frames;
157          const frame = frames && frames[frames.length - 1];
158          const key = [
159            exc && exc.class,
160            exc && exc.message,
161            frame && frame.filename,
162            frame && frame.lineno
163          ].join('|');
164          const now = Date.now();
165          const entry = seen[key];
166          if (!entry || now - entry.firstSeen > RESET_MS) {
167            seen[key] = { count: 1, firstSeen: now };
168            return false;
169          }
170          entry.count += 1;
171          if (entry.count === MAX_PER_SIG + 1) {
172            console.debug('[Rollbar] suppressing further reports of:', key);
173          }
174          if (entry.count > MAX_PER_SIG) return true;
175        } catch (e) {}
176        return false;
177      };
178    })()
179  };
180  // Rollbar Snippet
181  !function(){"use strict";var r=function(){},n={debug:0,info:1,warn:2,error:3,disable:4},o={error:function(){for(var n=arguments.length,o=new Array(n),e=0;e<n;e++)o[e]=arguments[e];return r("error",o)},warn:function(){for(var n=arguments.length,o=new Array(n),e=0;e<n;e++)o[e]=arguments[e];return r("warn",o)},info:function(){for(var n=arguments.length,o=new Array(n),e=0;e<n;e++)o[e]=arguments[e];return r("info",o)},debug:function(){for(var n=arguments.length,o=new Array(n),e=0;e<n;e++)o[e]=arguments[e];return r("debug",o)},log:function(){for(var n=arguments.length,o=new Array(n),e=0;e<n;e++)o[e]=arguments[e];return r("info",o)},init:function(o){var e=o.logLevel;r=function(r,o){n[r]<n[e]||(o.unshift("Rollbar:"),console[r].apply(console,o))}}},e=o;function t(r,n){return null!=r&&(Object.hasOwn?Object.hasOwn(r,n):Object.prototype.hasOwnProperty.call(r,n))}function a(r,n){(null==n||n>r.length)&&(n=r.length);for(var o=0,e=Array(n);o<n;o++)e[o]=r[o];return e}function l(r,n){this.impl=r(n,this),this.options=n,function(r){var n,o=function(r){return function(){var n=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,n)}},e=function(r,n){var o="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!o){if(Array.isArray(r)||(o=function(r,n){if(r){if("string"==typeof r)return a(r,n);var o={}.toString.call(r).slice(8,-1);return"Object"===o&&r.constructor&&(o=r.constructor.name),"Map"===o||"Set"===o?Array.from(r):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?a(r,n):void 0}}(r))||n&&r&&"number"==typeof r.length){o&&(r=o);var e=0,t=function(){};return{s:t,n:function(){return e>=r.length?{done:!0}:{done:!1,value:r[e++]}},e:function(r){throw r},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,i=!0,c=!1;return{s:function(){o=o.call(r)},n:function(){var r=o.next();return i=r.done,r},e:function(r){c=!0,l=r},f:function(){try{i||null==o.return||o.return()}finally{if(c)throw l}}}}("log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","));try{for(e.s();!(n=e.n()).done;){var t=n.value;r[t]=o(t)}}catch(r){e.e(r)}finally{e.f()}}(l.prototype)}l.prototype._swapAndProcessMessages=function(r,n){var o,e,t;for(this.impl=r(this.options);o=n.shift();)e=o.method,t=o.args,this[e]&&"function"==typeof this[e]&&("captureDomContentLoaded"===e||"captureLoad"===e?this[e].apply(this,[t[0],o.ts]):this[e].apply(this,t));return this};var i=l;function c(r,n,o){if(t(n,"addEventListener")){for(var e=n.addEventListener;e._rollbarOldAdd&&e.belongsToShim;)e=e._rollbarOldAdd;var a=function(n,o,t){e.call(this,n,r.wrap(o),t)};a._rollbarOldAdd=e,a.belongsToShim=o,n.addEventListener=a;for(var l=n.removeEventListener;l._rollbarOldRemove&&l.belongsToShim;)l=l._rollbarOldRemove;var i=function(r,n,o){l.call(this,r,n&&n._rollbar_wrapped||n,o)};i._rollbarOldRemove=l,i.belongsToShim=o,n.removeEventListener=i}}function u(r,n){(null==n||n>r.length)&&(n=r.length);for(var o=0,e=Array(n);o<n;o++)e[o]=r[o];return e}function s(r){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},s(r)}function d(r){return function(){try{return r.apply(this,arguments)}catch(r){try{e.error("[Rollbar]: Internal error",r)}catch(r){}}}}var f=0;function p(r,n){this.options=r,this._rollbarOldOnError=null;var o=f++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:n,messages:[]})}var b=function(r,n){return new p(r,n)},h=function(r){return new i(b,r)};function y(r){return d(function(){var n=Array.prototype.slice.call(arguments,0),o={shim:this,method:r,args:n,ts:new Date};window._rollbarShims[this.shimId()].messages.push(o)})}p.prototype.loadFull=function(r,n,o,e,t){var a=!1,l=n.createElement("script"),i=n.getElementsByTagName("script")[0],c=i.parentNode;l.crossOrigin="",l.src=e.rollbarJsUrl,o||(l.async=!0),l.onload=l.onreadystatechange=d(function(){if(!(a||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){l.onload=l.onreadystatechange=null;try{c.removeChild(l)}catch(r){}a=!0,function(){var n;if(void 0===r._rollbarDidLoad){n=new Error("rollbar.js did not load");for(var o,e,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];e=o.shift();)for(a=e.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(n);break}}"function"==typeof t&&t(n)}()}}),c.insertBefore(l,i)},p.prototype.wrap=function(r,n,o){try{var e;if(e="function"==typeof n?n:function(){return n||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped)for(var a in r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var n=o;throw n&&("string"==typeof n&&(n=new String(n)),n._rollbarContext=e()||{},n._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=n),n}},r._rollbar_wrapped._isWrap=!0,r)t(r,a)&&(r._rollbar_wrapped[a]=r[a]);return r._rollbar_wrapped}catch(n){return r}};var v,m=function(r){var n="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];
181if(!n){if(Array.isArray(r)||(n=function(r,n){if(r){if("string"==typeof r)return u(r,n);var o={}.toString.call(r).slice(8,-1);return"Object"===o&&r.constructor&&(o=r.constructor.name),"Map"===o||"Set"===o?Array.from(r):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?u(r,n):void 0}}(r))){n&&(r=n);var o=0,e=function(){};return{s:e,n:function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}},e:function(r){throw r},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var t,a=!0,l=!1;return{s:function(){n=n.call(r)},n:function(){var r=n.next();return a=r.done,r},e:function(r){l=!0,t=r},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw t}}}}("log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","));try{for(m.s();!(v=m.n()).done;){var g=v.value;p.prototype[g]=y(g)}}catch(r){m.e(r)}finally{m.f()}var w="https://cdn.rollbar.com/rollbarjs/refs/tags/v3.1.0/rollbar.min.js";if(_rollbarConfig=_rollbarConfig||{},!_rollbarConfig.rollbarJsUrl){var _="replay"in _rollbarConfig;_rollbarConfig.rollbarJsUrl=_?w.replace("rollbar.min.js","rollbar.replay.min.js"):w}_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var E,S=function(r,n){if(r){var o=n.globalAlias||"Rollbar";if("object"===s(r[o]))return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var e=new h(n);return d(function(){n.captureUncaught&&(e._rollbarOldOnError=r.onerror,function(r,n){if(r){var o;if("function"==typeof n._rollbarOldOnError)o=n._rollbarOldOnError;else if(r.onerror){for(o=r.onerror;o._rollbarOldOnError;)o=o._rollbarOldOnError;n._rollbarOldOnError=o}n.handleAnonymousErrors();var e=function(){var e=Array.prototype.slice.call(arguments,0);!function(r,n,o,e){r._rollbarWrappedError&&(e[4]||(e[4]=r._rollbarWrappedError),e[5]||(e[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=n.handleUncaughtException.apply(n,e);o&&o.apply(r,e),"anonymous"===t&&(n.anonymousErrorsPending+=1)}(r,n,o,e)};e._rollbarOldOnError=o,r.onerror=e}}(r,e),n.wrapGlobalEventHandlers&&function(r,n,o){if(r){var e,t,a="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(e=0;e<a.length;++e)r[t=a[e]]&&r[t].prototype&&c(n,r[t].prototype,o)}}(r,e,!0)),n.captureUnhandledRejections&&function(r,n){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var o=function(r){var o,e,t;try{o=r.reason}catch(r){o=void 0}try{e=r.promise}catch(r){e="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,e=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),n&&n.handleUnhandledRejection&&n.handleUnhandledRejection(o,e)};o.belongsToShim=!0,r._rollbarURH=o,r.addEventListener("unhandledrejection",o)}}(r,e);var t=n.autoInstrument;return!1!==n.enabled&&(void 0===t||!0===t||function(r){return!("object"!==s(r)||void 0!==r.page&&!r.page)}(t))&&r.addEventListener&&(r.addEventListener("load",e.captureLoad.bind(e)),r.addEventListener("DOMContentLoaded",e.captureDomContentLoaded.bind(e))),r[o]=e,e})()}}(window,_rollbarConfig),O=(E=_rollbarConfig,function(r){if(!r&&!window._rollbarInitialized){for(var n,o,e=(E=E||{}).globalAlias||"Rollbar",t=window.rollbar,a=function(r){return new t(r)},l=0;n=window._rollbarShims[l++];)o||(o=n.handler),n.handler._swapAndProcessMessages(a,n.messages);window[e]=o,window._rollbarInitialized=!0}});window.rollbar=h,S.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,O)}();
182  // End Rollbar Snippet
183  
184  // Rollbar jQuery Plugin Snippet
185  if (typeof jQuery !== 'undefined') {
186  !function(r){function t(n){if(e[n])return e[n].exports;var a=e[n]={exports:{},id:n,loaded:!1};return r[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var e={};return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){"use strict";!function(r,t,e){var n=t.Rollbar;if(n){var a="0.0.8";n.configure({payload:{notifier:{plugins:{jquery:{version:a}}}}});var o=function(r){if(n.error(r),t.console){var e="[reported to Rollbar]";n.options&&!n.options.enabled&&(e="[Rollbar not enabled]"),t.console.log(r.message+" "+e)}};r(e).ajaxError(function(r,t,e,a){var o=t.status,u=e.url,i=e.type;if(o){var s={status:o,url:u,type:i,isAjax:!0,data:e.data,jqXHR_responseText:t.responseText,jqXHR_statusText:t.statusText},d=a?a:"jQuery ajax error for "+i;n.warning(d,s)}});var u=r.fn.ready;r.fn.ready=function(r){return u.call(this,function(t){try{r(t)}catch(r){o(r)}})};var i=r.event.add;r.event.add=function(t,e,n,a,u){var s,d=function(r){return function(){try{return r.apply(this,arguments)}catch(r){o(r)}}};return n.handler?(s=n.handler,n.handler=d(n.handler)):(s=n,n=d(n)),s.guid?n.guid=s.guid:n.guid=s.guid=r.guid++,i.call(this,t,e,n,a,u)}}}(jQuery,window,document)}]);
187  }
188  // End Rollbar jQuery Plugin Snippet
189  
190  // TODO: How do we warn about jquery migrate -> rollber errors.
191  (function() {
192    var rollbarWarnedMigrations = {};
193  
194    function warnRollbarAboutMigrationError(msg) {
195      if(rollbarWarnedMigrations[msg]) return;
196      rollbarWarnedMigrations[msg] = true;
197      var fullMessage = "jQuery Migrate Warned: " + msg;
198      // console.warn(fullMessage);
199      if(Rollbar && Rollbar.warning) Rollbar.warning(fullMessage);
200    }
201  
202    function warnAllCurrentMigrationIssues() {
203      console.log("Sending all jquery migrate warnings to rollbar.");
204      if(!$ || !$.migrateWarnings) return;
205      $.migrateWarnings.forEach(function(warning) {
206        warnRollbarAboutMigrationError(warning);
207      });
208    }
209  
210    // Use the native handling, to ensure we have jquery loaded.
211    // window.addEventListener('load', function() {
212    //  setTimeout(warnAllCurrentMigrationIssues, 15000);
213    // });
214  })();
215</script>
215
216
217
218<div class="thq-tw-application" data-controller="header">
219<nav aria-label="Main navigation" class="bg-white border-b border-gray-200 shadow-sm print:hidden">
220<div class="mx-auto px-4 sm:px-6 lg:px-12">
221<div class="relative flex justify-between items-center h-[70px]">
222<!-- Mobile menu toggle + Logo + Org name -->
223<div class="flex items-center flex-shrink-0 max-w-[320px]" data-header-target="org">
224<!-- Burger menu (visibility controlled by Stimulus) -->
225<button aria-label="Open menu" class="hidden items-center justify-center w-10 h-10 rounded-lg text-gray-500 mr-3 hover:bg-gray-100 focus:outline-none focus:ring-1 focus:ring-gray-200 ml-[-5px]" data-action="click-&gt;header#openDrawer" data-header-target="mobileToggle" type="button">
226<i class="fa-solid fa-bars text-2xl"></i>
227</button>
228<!-- Logo — centered on mobile via absolute, static on desktop -->
229<a aria-label="East Coast Sailing Association" class="flex-shrink-0 mr-3 absolute sm:static sm:relative left-1/2 sm:left-auto -translate-x-1/2 sm:translate-x-0" href="https://ecsasail.com/"><img class="h-10 w-auto object-contain rounded-lg" alt="East Coast Sailing Association" src="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/medjpg/Burgee_small.jpg" />
230</a><!-- Club name — hidden on mobile -->
231<div class="hidden sm:!block min-w-0">
232<a class="text-base font-medium text-gray-900 hover:text-gray-700 line-clamp-2 leading-tight" href="https://ecsasail.com/">East Coast Sailing Association</a>
233</div>
234</div>
235<!-- Desktop navigation (visibility controlled by Stimulus) -->
236<div class="absolute flex items-center space-x-1 flex-nowrap z-30 left-1/2 -translate-x-1/2" data-header-target="desktopNav">
237<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0" href="https://ecsasail.com/public/pages/about">About</a>
238<div class="relative group" data-dropdown-id="nav-menu-club"><a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0 inline-flex items-center" data-action="click-&gt;header#toggleDropdown" href="#">Club<i class="fa fa-chevron-down ml-1 text-xs"></i></a><div class="hidden absolute left-0 mt-1 w-48 rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 py-1 z-50" data-dropdown-menu="nav-menu-club"><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/join-us">Join Us - or Renew your Existing Membership!</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/advertise-with-us">Advertise with us!</a></div></div>
239<div class="relative group" data-dropdown-id="nav-menu-local"><a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0 inline-flex items-center" data-action="click-&gt;header#toggleDropdown" href="#">Local<i class="fa fa-chevron-down ml-1 text-xs"></i></a><div class="hidden absolute left-0 mt-1 w-48 rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 py-1 z-50" data-dropdown-menu="nav-menu-local"><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/weather-links">Weather</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/bridge-and-lock-schedules">Bridge and Lock Schedules</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/protect-our-waterways">Protect Our Waterways</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/navigation-alerts">Navigation Alerts</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/laws-regulations--safety">Laws, Regulations, &amp; Safety</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/boat--ship-trackers">Boat &amp; Ship Trackers</a><a class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50" href="https://ecsasail.com/public/pages/navigation-what3words">Navigation: What3Words</a></div></div>
240<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0" href="https://ecsasail.com/public/membership_levels">Memberships</a>
241<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0" href="https://ecsasail.com/public/schedule/events">Events</a>
242<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0" href="https://ecsasail.com/public/schedule/meetings">Meetings</a>
243<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0 bg-gray-100 text-gray-900 fg-club-colour" href="https://ecsasail.com/public/shop/products">Shop</a>
244<a class="px-3 py-2 text-sm font-medium text-gray-700 hover:text-gray-900 rounded-md hover:bg-gray-50 transition-colors whitespace-nowrap flex-shrink-0" href="https://ecsasail.com/public/contact_us">Contact Us</a>
245</div>
246<!-- Right side: cart + user + mobile toggle -->
247<div class="flex items-center space-x-3">
248<div id="shopping_cart_header_badge">
249<button aria-label="Shopping cart" class="inline-flex items-center justify-center p-2 rounded-lg text-sm font-medium leading-none text-gray-900 hover:bg-gray-100" data-modal-target="shopping_cart" data-modal-toggle="shopping_cart" type="button">
250<span class="sr-only">
250Cart</span>
251<div class="relative sm:mr-2">
252<i class="fa-solid fa-cart-shopping text-lg"></i>
253</div>
254<span class="hidden text-sm font-medium sm:!inline">$0.00</span>
255</button>
256</div>
257
258<a data-dismiss="modal" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-blue-700 hover:bg-blue-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" href="/users/sign_in">Log in
259</a></div>
260</div>
261</div>
262</nav>
263<!-- Sidebar drawer (mobile menu) -->
264<!-- Backdrop -->
265<div class="hidden fixed inset-0 bg-black bg-opacity-50 z-50 transition-opacity" data-action="click-&gt;header#closeDrawer" data-header-target="drawerBackdrop"></div>
266<!-- Drawer panel -->
267<div class="fixed top-0 left-0 h-full w-72 bg-white shadow-xl z-50 transform -translate-x-full transition-transform duration-300" data-header-target="drawer">
268<div class="flex items-center justify-between p-4 border-b border-gray-200">
269<a class="flex items-center gap-3 min-w-0" href="https://ecsasail.com/"><img class="h-8 w-auto object-contain rounded-lg flex-shrink-0" alt="East Coast Sailing Association" src="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/medjpg/Burgee_small.jpg" />
270<div class="text-sm font-semibold text-gray-900 truncate">East Coast Sailing Association</div>
271</a><button aria-label="Close menu" class="flex-shrink-0 text-gray-400 rounded-lg w-10 h-10 flex items-center justify-center hover:text-gray-600 hover:bg-gray-100 -mr-2" data-action="click-&gt;header#closeDrawer" type="button">
272<i class="fa-solid fa-xmark text-lg"></i>
273</button>
274</div>
275<div class="overflow-y-auto p-4 h-[calc(100%-65px)]">
276<div class="space-y-1">
277<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors" href="https://ecsasail.com/public/pages/about">About</a>
278<div><button type="button" class="flex items-center justify-between w-full px-3 py-2 text-base text-gray-500 hover:text-gray-900 hover:bg-gray-50 rounded-md" data-action="click-&gt;header#toggleSection"><span>Club</span><i class="fa-solid fa-chevron-down text-xs transition-transform duration-200 "></i></button><div class="space-y-1 overflow-hidden hidden"><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/join-us">Join Us - or Renew your Existing Membership!</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/advertise-with-us">Advertise with us!</a></div></div>
279<div><button type="button" class="flex items-center justify-between w-full px-3 py-2 text-base text-gray-500 hover:text-gray-900 hover:bg-gray-50 rounded-md" data-action="click-&gt;header#toggleSection"><span>Local</span><i class="fa-solid fa-chevron-down text-xs transition-transform duration-200 "></i></button><div class="space-y-1 overflow-hidden hidden"><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/weather-links">Weather</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/bridge-and-lock-schedules">Bridge and Lock Schedules</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/protect-our-waterways">Protect Our Waterways</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/navigation-alerts">Navigation Alerts</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/laws-regulations--safety">Laws, Regulations, &amp; Safety</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/boat--ship-trackers">Boat &amp; Ship Trackers</a><a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors pl-6" href="https://ecsasail.com/public/pages/navigation-what3words">Navigation: What3Words</a></div></div>
280<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors" href="https://ecsasail.com/public/membership_levels">Memberships</a>
281<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors" href="https://ecsasail.com/public/schedule/events">Events</a>
282<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors" href="https://ecsasail.com/public/schedule/meetings">Meetings</a>
283<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors bg-gray-100 text-gray-900 fg-club-colour" href="https://ecsasail.com/public/shop/products">Shop</a>
284<a class="block px-3 py-2 text-base text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-md transition-colors" href="https://ecsasail.com/public/contact_us">Contact Us</a>
285</div>
286</div>
287</div>
288</div>
289
290<div class="thq-tw-application">
291<div class="mx-auto px-4 sm:px-6 lg:px-12 max-w-6xl" id="flash">
292<noscript>
293<div class="flex items-center justify-between px-4 py-3 my-4 roun
293ded-lg text-sm bg-red-50 text-red-800 border border-red-200">
294<span>JavaScript must be enabled. <a href='http://activatejavascript.org' target='_blank'>How to enable JavaScript</a>
295</span>
296</div>
297</noscript>
298<div class="hidden flex items-center justify-between px-4 py-3 my-4 rounded-lg text-sm bg-red-50 text-red-800 border border-red-200" id="cookies_error">
299<span>Cookies must be enabled. <a href='http://www.whatarecookies.com/enable.asp' target='_blank'>How to enable cookies</a>
300</span>
301</div>
302</div>
303</div>
304
305<main class="page-container flex-container" role="main">
306<div class="page-content flex-content default">
307<div class="thq-tw-application">
308<div class="hidden mx-auto px-4 py-4 sm:px-6 lg:px-12 max-w-6xl print:!block">
309<div class="flex items-center justify-between rounded-lg border border-gray-200 p-4">
310<div class="flex items-center gap-3">
311<img class="h-10 w-auto object-contain rounded-lg" src="https://s3.tidyhq.com/orgs/eaea3d243de6/org/logo/5e822659a89e296e35eb7de50c80322d2a96c050/small/Burgee_small.png" />
312<div>
313<div class="text-sm font-semibold text-gray-900">East Coast Sailing Association</div>
314<div class="flex items-center gap-1 text-xs text-gray-400">
315Powered by
316<svg class="h-3 w-auto" fill="currentColor" version="1.1" viewBox="0 0 853.3 265.4" xmlns="http://www.w3.org/2000/svg">
317<ellipse cx="126.9" cy="131.5" rx="29.6" ry="28.8"></ellipse>
318<ellipse cx="126.9" cy="33" rx="29.6" ry="28.8"></ellipse>
319<ellipse cx="34.6" cy="131.5" rx="29.6" ry="28.8"></ellipse>
320<ellipse cx="34.6" cy="229.9" rx="29.6" ry="28.8"></ellipse>
321<path d="M273.4,98v-35.6h-32.7v35.6h-19.8v21.9h19.8v70.1c0,6,1,10.8,3,14.5s4.7,6.5,8.2,8.5,7.4,3.3,12,4c4.5.7,9.3,1,14.4,1s6.5,0,9.9-.2,6.4-.5,9.2-.9v-25.3c-1.5.3-3.1.5-4.8.7s-3.4.2-5.3.2c-5.5,0-9.2-.9-11-2.8-1.8-1.8-2.8-5.5-2.8-11v-58.9h23.9v-21.9h-24ZM343.6,79.6v-26.9h-32.7v26.9h32.7ZM310.9,98v118.9h32.7v-118.9h-32.7ZM450.8,157.1c0,4.9-.5,9.7-1.4,14.3s-2.5,8.7-4.6,12.3-5,6.5-8.6,8.6-8.1,3.2-13.5,3.2-9.4-1.1-13-3.3-6.6-5.1-9-8.7-4.1-7.7-5.2-12.3-1.6-9.2-1.6-13.8.5-9.6,1.5-14.1,2.6-8.5,4.8-12.1c2.2-3.5,5.2-6.4,8.9-8.5,3.7-2.1,8.2-3.2,13.6-3.2s9.8,1.1,13.3,3.2,6.4,4.9,8.6,8.4c2.2,3.4,3.8,7.4,4.7,12,.9,4.5,1.4,9.2,1.4,14.1h.1ZM451.3,201.7v15.2h31.1V52.6h-32.7v59.8h-.5c-3.7-5.8-8.7-10.2-15.1-13.2s-13.1-4.5-20.1-4.5-16.4,1.7-23,5.2-12.1,8-16.4,13.7c-4.4,5.7-7.7,12.2-9.9,19.7-2.2,7.4-3.3,15.1-3.3,23.1s1.1,16.3,3.3,23.9c2.2,7.7,5.5,14.5,9.9,20.4s9.9,10.6,16.7,14c6.7,3.4,14.6,5.2,23.5,5.2s14.8-1.4,21-4.3c6.2-2.8,11.2-7.5,15.1-13.9h.5-.1ZM562.6,231.6l49.7-133.6h-33.8l-26,81.4h-.5l-26.9-81.4h-34.7l41.6,111.6c.9,2.3,1.4,4.8,1.4,7.4s-1,6.7-3.1,9.7-5.3,4.6-9.5,5.1c-3.2.2-6.4,0-9.7-.2-3.2-.3-6.4-.6-9.4-.9v26.9c3.4.3,6.7.6,10,.8,3.3.2,6.6.3,10,.3,11.2,0,19.9-2.1,26.2-6.2,6.3-4.1,11.2-11,14.7-20.7v-.2ZM621.5,52.6v164.2h14.5v-69.2c.2-5.8,1.1-11.2,2.9-16.2,1.8-5,4.2-9.3,7.4-12.9s7-6.4,11.5-8.5,9.7-3.1,15.5-3.1,10.7.9,14.6,2.8c3.9,1.8,7,4.4,9.3,7.6s3.9,7,4.8,11.4c.9,4.4,1.4,9.1,1.4,14.1v74.1h14.5v-76.4c0-7.1-.7-13.4-2.1-19.1-1.4-5.7-3.8-10.5-7.1-14.4-3.4-3.9-7.9-6.9-13.5-9.1-5.6-2.1-12.5-3.2-20.8-3.2s-16.2,2.2-23.2,6.6c-7.1,4.4-12,10.2-14.7,17.4h-.5V52.6h-14.5ZM846.7,260.6V98.2h-13.3v22.5h-.5c-1.5-4-3.8-7.6-6.8-10.7s-6.4-5.9-10.2-8.2c-3.8-2.3-7.9-4.1-12.3-5.3s-8.7-1.8-13-1.8c-9,0-16.9,1.7-23.6,5.1-6.7,3.4-12.2,7.9-16.7,13.7s-7.7,12.4-9.9,20-3.2,15.6-3.2,24,1.1,16.4,3.2,24c2.1,7.6,5.4,14.3,9.9,20s10,10.3,16.7,13.6,14.5,4.9,23.6,4.9,8.8-.5,13-1.6,8.2-2.7,11.8-4.8,6.9-4.8,9.8-8.1,5-7,6.6-11.3h.5v66.2h14.5v.2ZM751.7,157.5c0-6.1.7-12.2,2.2-18.3s3.8-11.5,6.9-16.2c3.1-4.8,7.2-8.6,12.1-11.6,4.9-3,10.8-4.5,17.7-4.5s14.1,1.5,19.4,4.5c5.3,3,9.6,6.9,12.9,11.6,3.3,4.8,5.7,10.2,7.1,16.2s2.2,12.2,2.2,18.3-.7,12.2-2.2,18.3-3.8,11.5-7.1,16.2c-3.3,4.8-7.6,8.6-12.9,11.6-5.3,3-11.8,4.5-19.4,4.5s-12.8-1.5-17.7-4.5-8.9-6.9-12.1-11.6c-3.1-4.8-5.4-10.2-6.9-16.2-1.5-6.1-2.2-12.2-2.2-18.3Z"></path>
322</svg>
323
324</div>
325</div>
326</div>
327<div class="text-sm font-medium text-gray-700">Shop</div>
328</div>
329</div>
330</div>
331
332<div class="thq-tw-application">
333<div class="mx-auto px-4 py-8 sm:px-6 lg:px-12 max-w-6xl">
334<!-- Product grid -->
335<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
336<a class="group rounded-lg border border-gray-200 bg-white shadow-sm transition-all hover:shadow-md" href="/public/shop/products/brochure"><!-- Product image with floating badges -->
337<div class="relative w-full flex items-center justify-center overflow-hidden p-4 h-[340px] [&amp;_img]:max-h-full [&amp;_img]:max-w-full [&amp;_img]:object-contain">
338<img class="img-responsive" src="https://s3.tidyhq.com/orgs/eaea3d243de6/product/image/ca2940730a74df5c625de5c07495f177d1ee2a84/medium/Brochure_cover.png" />
339<div class="absolute top-3 right-3 flex flex-col gap-1 items-end">
340</div>
341</div>
342<!-- Product info -->
343<div class="p-4 pt-0">
344<!-- Product name -->
345<div class="text-base font-semibold text-gray-900 leading-tight line-clamp-2 group-hover:text-blue-700">Brochure</div>
346<!-- Price + Shop Now -->
347<div class="mt-3 flex items-center justify-between gap-2">
348<div class="min-w-0 flex flex-wrap items-center gap-1">
349<span class="text-lg font-bold text-green-600">Free</span>
350</div>
351<span class="inline-flex items-center rounded-lg bg-blue-700 text-sm font-medium text-white flex-shrink-0 whitespace-nowrap px-5 py-2.5 group-hover:bg-blue-800">
352<i class="fa-solid fa-cart-plus mr-2 -ms-1"></i>
353Shop Now
354</span>
355</div>
356</div>
357</a>
358</div>
359</div>
360</div>
361
362</div>
363</main>
364<div class="thq-tw-application" id="flowbite_container_pickers" style="position: absolute;"></div>
365<div class="thq-tw-application">
366<footer class="print:hidden">
367<div class="mx-auto px-4 sm:px-6 lg:px-12">
368<hr class="border-gray-200">
369<div class="py-10 md:py-12">
370<div class="flex flex-col gap-8 md:flex-row md:justify-between">
371<!-- Left: Club info -->
372<div class="flex-1 text-center md:text-left">
373<div class="text-lg font-semibold text-gray-900">East Coast Sailing Association</div>
374<div class="text-sm text-gray-500 mt-3">P. O. Box 372124<br>Satellite Beach, Florida, 32937-0124<br>United States</div>
375</div>
376<!-- Right: Social links + attribution -->
377<div class="flex-1 text-center md:flex-none md:w-[416px] md:text-right">
378<div class="grid gap-4 justify-center justify-items-center mx-auto md:justify-end md:ml-auto md:mr-0" style="grid-template-columns: repeat(auto-fit, 20px); width: 100%; max-width: 416px;">
379<a target="_blank" rel="noopener noreferrer" title="http://ecsasail.com" class="text-gray-400 hover:text-gray-600 transition-colors" href="http://ecsasail.com"><i class="fa-solid fa-globe text-xl"></i>
380</a><a target="_blank" rel="noopener noreferrer" title="341130779747518" class="text-gray-400 hover:text-gray-600 transition-colors" href="https://facebook.com/groups/341130779747518/"><i class="fa-brands fa-facebook text-xl"></i>
381</a></div>
382<div class="mt-6 flex items-center gap-2 justify-center md:justify-end">
383<span class="text-xs text-gray-500">Powered by</span>
384<a target="_blank" aria-label="TidyHQ" class="opacity-50 hover:!opacity-80 transition-opacity" href="https://tidyhq.com/"><svg aria-label="TidyHQ" class="h-4 w-auto" fill="currentColor" role="img" version="1.1" viewBox="0 0 853.3 265.4" xmlns="http://www.w3.org/2000/svg">
385<ellipse cx="126.9" cy="131.5" rx="29.6" ry="28.8"></ellipse>
386<ellipse cx="126.9" cy="33" rx="29.6" ry="28.8"></ellipse>
387<ellipse cx="34.6" cy="131.5" rx="29.6" ry="28.8"></ellipse>
388<ellipse cx="34.6" cy="229.9" rx="29.6" ry="28.8"></ellipse>
389<path d="M273.4,98v-35.6h-32.7v35.6h-19.8v21.9h19.8v70.1c0,6,1,10.8,3,14.5s4.7,6.5,8.2,8.5,7.4,3.3,12,4c4.5.7,9.3,1,14.4,1s6.5,0,9.9-.2,6.4-.5,9.2-.9v-25.3c-1.5.3-3.1.5-4.8.7s-3.4.2-5.3.2c-5.5,0-9.2-.9-11-2.8-1.8-1.8-2.8-5.5-2.8-11v-58.9h23.9v-21.9h-24ZM343.6,79.6v-26.9h-32.7v26.9h32.7ZM310.9,98v118.9h32.7v-118.9h-32.7ZM450.8,157.1c0,4.9-.5,9.7-1.4,14.3s-2.5,8.7-4.6,12.3-5,6.5-8.6,8.6-8.1,3.2-13.5,3.2-9.4-1.1-13-3.3-6.6-5.1-9-8.7-4.1-7.7-5.2-12.3-1.6-9.2-1.6-13.8.5-9.6,1.5-14.1,2.6-8.5,4.8-12.1c2.2-3.5,5.2-6.4,8.9-8.5,3.7-2.1,8.2-3.2,13.6-3.2s9.8,1.1,13.3,3.2,6.4,4.9,8.6,8.4c2.2,3.4,3.8,7.4,4.7,
38912,.9,4.5,1.4,9.2,1.4,14.1h.1ZM451.3,201.7v15.2h31.1V52.6h-32.7v59.8h-.5c-3.7-5.8-8.7-10.2-15.1-13.2s-13.1-4.5-20.1-4.5-16.4,1.7-23,5.2-12.1,8-16.4,13.7c-4.4,5.7-7.7,12.2-9.9,19.7-2.2,7.4-3.3,15.1-3.3,23.1s1.1,16.3,3.3,23.9c2.2,7.7,5.5,14.5,9.9,20.4s9.9,10.6,16.7,14c6.7,3.4,14.6,5.2,23.5,5.2s14.8-1.4,21-4.3c6.2-2.8,11.2-7.5,15.1-13.9h.5-.1ZM562.6,231.6l49.7-133.6h-33.8l-26,81.4h-.5l-26.9-81.4h-34.7l41.6,111.6c.9,2.3,1.4,4.8,1.4,7.4s-1,6.7-3.1,9.7-5.3,4.6-9.5,5.1c-3.2.2-6.4,0-9.7-.2-3.2-.3-6.4-.6-9.4-.9v26.9c3.4.3,6.7.6,10,.8,3.3.2,6.6.3,10,.3,11.2,0,19.9-2.1,26.2-6.2,6.3-4.1,11.2-11,14.7-20.7v-.2ZM621.5,52.6v164.2h14.5v-69.2c.2-5.8,1.1-11.2,2.9-16.2,1.8-5,4.2-9.3,7.4-12.9s7-6.4,11.5-8.5,9.7-3.1,15.5-3.1,10.7.9,14.6,2.8c3.9,1.8,7,4.4,9.3,7.6s3.9,7,4.8,11.4c.9,4.4,1.4,9.1,1.4,14.1v74.1h14.5v-76.4c0-7.1-.7-13.4-2.1-19.1-1.4-5.7-3.8-10.5-7.1-14.4-3.4-3.9-7.9-6.9-13.5-9.1-5.6-2.1-12.5-3.2-20.8-3.2s-16.2,2.2-23.2,6.6c-7.1,4.4-12,10.2-14.7,17.4h-.5V52.6h-14.5ZM846.7,260.6V98.2h-13.3v22.5h-.5c-1.5-4-3.8-7.6-6.8-10.7s-6.4-5.9-10.2-8.2c-3.8-2.3-7.9-4.1-12.3-5.3s-8.7-1.8-13-1.8c-9,0-16.9,1.7-23.6,5.1-6.7,3.4-12.2,7.9-16.7,13.7s-7.7,12.4-9.9,20-3.2,15.6-3.2,24,1.1,16.4,3.2,24c2.1,7.6,5.4,14.3,9.9,20s10,10.3,16.7,13.6,14.5,4.9,23.6,4.9,8.8-.5,13-1.6,8.2-2.7,11.8-4.8,6.9-4.8,9.8-8.1,5-7,6.6-11.3h.5v66.2h14.5v.2ZM751.7,157.5c0-6.1.7-12.2,2.2-18.3s3.8-11.5,6.9-16.2c3.1-4.8,7.2-8.6,12.1-11.6,4.9-3,10.8-4.5,17.7-4.5s14.1,1.5,19.4,4.5c5.3,3,9.6,6.9,12.9,11.6,3.3,4.8,5.7,10.2,7.1,16.2s2.2,12.2,2.2,18.3-.7,12.2-2.2,18.3-3.8,11.5-7.1,16.2c-3.3,4.8-7.6,8.6-12.9,11.6-5.3,3-11.8,4.5-19.4,4.5s-12.8-1.5-17.7-4.5-8.9-6.9-12.1-11.6c-3.1-4.8-5.4-10.2-6.9-16.2-1.5-6.1-2.2-12.2-2.2-18.3Z"></path>
390</svg>
391
392</a></div>
393</div>
394</div>
395</div>
396</div>
397</footer>
398</div>
399
400<div id="feedback_modal"></div>
401<div id="login_modal"></div>
402<div class="modal public-modal" id="get_started">
403<div class="modal-dialog modal-500">
404<div class="modal-content" style="overflow: hidden">
405<div class="modal-body tc_desc">
406<a aria-hidden="true" class="close" data-dismiss="modal" href="#">
407<i class="fa fa-times"></i>
408</a>
409<div class="logo">
410<svg fill="white" style="height: 40px; width: auto;" version="1.1" viewBox="0 0 853.3 265.4" xmlns="http://www.w3.org/2000/svg">
411<ellipse cx="126.9" cy="131.5" rx="29.6" ry="28.8"></ellipse>
412<ellipse cx="126.9" cy="33" rx="29.6" ry="28.8"></ellipse>
413<ellipse cx="34.6" cy="131.5" rx="29.6" ry="28.8"></ellipse>
414<ellipse cx="34.6" cy="229.9" rx="29.6" ry="28.8"></ellipse>
415<path d="M273.4,98v-35.6h-32.7v35.6h-19.8v21.9h19.8v70.1c0,6,1,10.8,3,14.5s4.7,6.5,8.2,8.5,7.4,3.3,12,4c4.5.7,9.3,1,14.4,1s6.5,0,9.9-.2,6.4-.5,9.2-.9v-25.3c-1.5.3-3.1.5-4.8.7s-3.4.2-5.3.2c-5.5,0-9.2-.9-11-2.8-1.8-1.8-2.8-5.5-2.8-11v-58.9h23.9v-21.9h-24ZM343.6,79.6v-26.9h-32.7v26.9h32.7ZM310.9,98v118.9h32.7v-118.9h-32.7ZM450.8,157.1c0,4.9-.5,9.7-1.4,14.3s-2.5,8.7-4.6,12.3-5,6.5-8.6,8.6-8.1,3.2-13.5,3.2-9.4-1.1-13-3.3-6.6-5.1-9-8.7-4.1-7.7-5.2-12.3-1.6-9.2-1.6-13.8.5-9.6,1.5-14.1,2.6-8.5,4.8-12.1c2.2-3.5,5.2-6.4,8.9-8.5,3.7-2.1,8.2-3.2,13.6-3.2s9.8,1.1,13.3,3.2,6.4,4.9,8.6,8.4c2.2,3.4,3.8,7.4,4.7,12,.9,4.5,1.4,9.2,1.4,14.1h.1ZM451.3,201.7v15.2h31.1V52.6h-32.7v59.8h-.5c-3.7-5.8-8.7-10.2-15.1-13.2s-13.1-4.5-20.1-4.5-16.4,1.7-23,5.2-12.1,8-16.4,13.7c-4.4,5.7-7.7,12.2-9.9,19.7-2.2,7.4-3.3,15.1-3.3,23.1s1.1,16.3,3.3,23.9c2.2,7.7,5.5,14.5,9.9,20.4s9.9,10.6,16.7,14c6.7,3.4,14.6,5.2,23.5,5.2s14.8-1.4,21-4.3c6.2-2.8,11.2-7.5,15.1-13.9h.5-.1ZM562.6,231.6l49.7-133.6h-33.8l-26,81.4h-.5l-26.9-81.4h-34.7l41.6,111.6c.9,2.3,1.4,4.8,1.4,7.4s-1,6.7-3.1,9.7-5.3,4.6-9.5,5.1c-3.2.2-6.4,0-9.7-.2-3.2-.3-6.4-.6-9.4-.9v26.9c3.4.3,6.7.6,10,.8,3.3.2,6.6.3,10,.3,11.2,0,19.9-2.1,26.2-6.2,6.3-4.1,11.2-11,14.7-20.7v-.2ZM621.5,52.6v164.2h14.5v-69.2c.2-5.8,1.1-11.2,2.9-16.2,1.8-5,4.2-9.3,7.4-12.9s7-6.4,11.5-8.5,9.7-3.1,15.5-3.1,10.7.9,14.6,2.8c3.9,1.8,7,4.4,9.3,7.6s3.9,7,4.8,11.4c.9,4.4,1.4,9.1,1.4,14.1v74.1h14.5v-76.4c0-7.1-.7-13.4-2.1-19.1-1.4-5.7-3.8-10.5-7.1-14.4-3.4-3.9-7.9-6.9-13.5-9.1-5.6-2.1-12.5-3.2-20.8-3.2s-16.2,2.2-23.2,6.6c-7.1,4.4-12,10.2-14.7,17.4h-.5V52.6h-14.5ZM846.7,260.6V98.2h-13.3v22.5h-.5c-1.5-4-3.8-7.6-6.8-10.7s-6.4-5.9-10.2-8.2c-3.8-2.3-7.9-4.1-12.3-5.3s-8.7-1.8-13-1.8c-9,0-16.9,1.7-23.6,5.1-6.7,3.4-12.2,7.9-16.7,13.7s-7.7,12.4-9.9,20-3.2,15.6-3.2,24,1.1,16.4,3.2,24c2.1,7.6,5.4,14.3,9.9,20s10,10.3,16.7,13.6,14.5,4.9,23.6,4.9,8.8-.5,13-1.6,8.2-2.7,11.8-4.8,6.9-4.8,9.8-8.1,5-7,6.6-11.3h.5v66.2h14.5v.2ZM751.7,157.5c0-6.1.7-12.2,2.2-18.3s3.8-11.5,6.9-16.2c3.1-4.8,7.2-8.6,12.1-11.6,4.9-3,10.8-4.5,17.7-4.5s14.1,1.5,19.4,4.5c5.3,3,9.6,6.9,12.9,11.6,3.3,4.8,5.7,10.2,7.1,16.2s2.2,12.2,2.2,18.3-.7,12.2-2.2,18.3-3.8,11.5-7.1,16.2c-3.3,4.8-7.6,8.6-12.9,11.6-5.3,3-11.8,4.5-19.4,4.5s-12.8-1.5-17.7-4.5-8.9-6.9-12.1-11.6c-3.1-4.8-5.4-10.2-6.9-16.2-1.5-6.1-2.2-12.2-2.2-18.3Z"></path>
416</svg>
417
418</div>
419<div class="text-section"><h4>Why do I need a TidyHQ Account?</h4>
420<p>You need a TidyHQ to buy tickets, register for memberships and interact with your organisation. Having a TidyHQ Account lets us  remember who you are so we can keep everything in one place for you ready to access and update at any time.</p>
421<h4>Got it, but what is a TidyHQ Account?</h4>
422<p>A TidyHQ Account is the personal account you use to access organisations that use TidyHQ to run their back office. This includes: Events, Memberships, Meetings, Finances, Online Shop, Communications and more. Your TidyHQ Account includes the email address and password you use to log in, as well as all the contact, payment and security details that you will use for this organisation and across all TidyHQ services.</p>
423</div>
424<div class="text-section">
425<div class="row">
426<div class="col-xs-12">
427<strong>Find out more</strong>
428<a target="_blank" href="https://tidyhq.com/?ref=East+Coast+Sailing+Association-TidyHQLogo">tidyhq.com</a>
429</div>
430<div class="col-xs-12 text-right social">
431<a target="_blank" href="https://facebook.com/tidyhq"><i class="fa fa-facebook-official"></i>
432</a><a target="_blank" href="https://x.com/tidyhqapp"><i class="fa fa-brands fa-x-twitter"></i>
433</a></div>
434</div>
435</div>
436</div>
437<div class="modal-body">
438<div class="title-section">Create an Account</div>
439<div class="text-section text-center">Get started now for free. It only takes a few seconds!</div>
440<div class="actions-section">
441<a class="btn blue" data-dismiss="modal" data-remote="true" href="/signup/new"><img style="width: 14px" class="vmiddle" src="https://cdn.tidyhq.com/assets/tc/thq-white-icon-10191781d5b36fdd3ca00140e63d87c5b660c06e728ad0975128c92db51737bb.png" />
442<span class="vmiddle">Create Account</span>
443</a><a class="btn default btn-login" data-dismiss="modal" data-remote="true" href="/users/sign_in"><i class="icon-arrow-right vmiddle"></i>
444&nbsp;
445<span class="vmiddle">Log in</span>
446</a></div>
447</div>
448</div>
449</div>
450
451</div>
452
453<!--[if lt IE 9]>
454<script src="https://cdn.tidyhq.com/assets/shared/respond.min-d35c35ecbf22fe6dea6313ee1c2224acdeb7cf9fd65faa66ab432d7add240974.js"></script>
vendor: 1 bytes, line 454
454
455<script src="https://cdn.tidyhq.com/assets/shared/excanvas.min-2e33b50bccea16c8ea0ae1bc14b825bd6dc117b7c813fce6be7f07767d719415.js"></script>
455
456<![endif]-->
457
458<script>
459  var date_options = {
460    autoclose: true,
461    format: "yyyy-mm-dd",
462    minView: 2,
463    startDate: new Date('1900-01-01'),
464    todayBtn: true
465  };
466  var datetime_options = {
467    autoclose: true,
468    format: "yyyy-mm-dd h:ii",
469    showMeridian: false,
470    minView: 0
471  };
472  var contact_colors = ["bd323f", "5629a1", "247495", "3fb55b", "d1cd46", "e2be31", "ed473a", "66c1d2", "94a1b7", "a52589", "84001f", "294ea1", "24955c", "8bce23", "e1d61a", "ea7e36", "0b88f1", "28adc7", "9758cc", "732e64"];
473</script>
473
474
475<div class="thq-tw-application" data-controller="shopping-cart" data-shopping-cart-clear-url-value="/public/shop/shopping_cart" data-shopping-cart-update-url-value="/public/shop/shopping_cart/item" id="shopping_cart_wrapper">
476<div aria-hidden="true" class="hidden fixed inset-0 justify-center overflow-y-auto overflow-x-hidden p-4 z-[60] pt-[90px] !items-start" id="shopping_cart" tabindex="-1">
477<div class="relative w-full max-w-2xl mx-auto">
478<div class="relative rounded-lg bg-white shadow-xl p-4 sm:p-5" id="cart_content">
479<!-- Header -->
480<div class="flex items-center justify-between mb-4 border-b border-gray-200 pb-4 sm:mb-5">
481<h3 class="text-lg font-semibold text-gray-900">Shopping Cart</h3>
482<button class="inline-flex items-center justify-center w-8 h-8 rounded-md bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900" data-modal-hide="shopping_cart" type="button">
483<i class="fa-solid fa-xmark text-lg"></i>
484<span class="sr-only">Close</span>
485</button>
486</div>
487<div class="py-12 text-center">
488<i class="fa-solid fa-cart-shopping text-4xl text-gray-300 mb-4"></i>
489<p class="text-sm text-gray-500">Your cart is empty</p>
490</div>
491<div class="border-t border-gray-200 pt-4 mt-4">
492<button class="inline-flex items-center justify-center rounded-lg border border-gray-200 bg-white text-sm font-medium text-gray-900 w-full px-5 py-2.5 hover:bg-gray-100 hover:text-blue-700" data-modal-hide="shopping_cart" type="button">
493Continue Shopping
494</button>
495</div>
496</div>
497
498</div>
499</div>
500</div>
501
502<script>
503  $(function() {
504    $.cookie('check_cookies', 'enabled');
505    if($.cookie('check_cookies')) {
506      $.removeCookie('check_cookies')
507    } else {
508      $("#cookies_error").removeClass('hidden').addClass('flex');
509    }
510  });
511</script>
511
512
513
514</body>
515</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.