{
  "version": 3,
  "sources": ["/cdn/shop/t/73/assets/sf941-map-parks.js?build=20261107findernamelegendv1"],
  "sourcesContent": ["\n(()=>{\n const root=document.getElementById('sf941');if(!root||root.dataset.ready)return;\n const $=s=>root.querySelector(s),API='https://941-skatepark-finder.justin-22b.workers.dev';\n const esc=s=>String(s??'').replace(/[&<>\"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n const status=s=>$('#sf941-status').textContent=s;\n if(typeof L==='undefined'){status('Map library unavailable. Refresh to retry.');return}root.dataset.ready='1';\n const map=L.map('sf941-map',{scrollWheelZoom:false,zoomAnimation:true,fadeAnimation:true,markerZoomAnimation:true,minZoom:3,worldCopyJump:true}).setView([39,-98],5);\n // Normal wheel scrolls the Shopify page; Ctrl/Command + wheel zooms the map.\n map.getContainer().addEventListener('wheel',function(ev){\n   if(!(ev.ctrlKey||ev.metaKey))return;\n   ev.preventDefault();\n   const delta=ev.deltaY<0?1:-1;\n   map.setZoomAround(map.mouseEventToContainerPoint(ev),Math.max(map.getMinZoom(),Math.min(map.getMaxZoom(),map.getZoom()+delta)));\n },{passive:false});\n const streetTiles=L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png',{maxZoom:19,maxNativeZoom:19,attribution:'\u00A9 OpenStreetMap contributors',updateWhenIdle:true,noWrap:true});\n const satelliteTiles=L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',{maxZoom:20,maxNativeZoom:19,attribution:'Imagery \u00A9 Esri and contributors',updateWhenIdle:true,noWrap:true});\n satelliteTiles.addTo(map);\n // Leaflet manages map dimensions during zoom. Invalidating here can desynchronize panes.\n // Compact, always-visible map style control: no expanding Leaflet layers menu.\n const mapStyleControl=L.control({position:'topright'});\n mapStyleControl.onAdd=()=>{\n   const box=L.DomUtil.create('div','sf941-map-style-toggle');\n   box.setAttribute('role','group');box.setAttribute('aria-label','Map imagery');\n   const street=document.createElement('button'),sat=document.createElement('button');\n   street.type=sat.type='button';street.textContent='Map';sat.textContent='Satellite';\n   box.append(street,sat);L.DomEvent.disableClickPropagation(box);L.DomEvent.disableScrollPropagation(box);\n   const sync=()=>{street.setAttribute('aria-pressed',String(map.hasLayer(streetTiles)));sat.setAttribute('aria-pressed',String(map.hasLayer(satelliteTiles)))};\n   street.addEventListener('click',()=>{if(map.hasLayer(satelliteTiles))map.removeLayer(satelliteTiles);if(!map.hasLayer(streetTiles))streetTiles.addTo(map);sync()});\n   sat.addEventListener('click',()=>{if(map.hasLayer(streetTiles))map.removeLayer(streetTiles);if(!map.hasLayer(satelliteTiles))satelliteTiles.addTo(map);sync()});\n   map.on('baselayerchange',sync);sync();return box;\n };\n mapStyleControl.addTo(map);\n const streetViewUrl=p=>'https://www.google.com/maps/@?api=1&map_action=pano&viewpoint='+encodeURIComponent(p.latitude+','+p.longitude);\n const showSatellite=()=>{}; // Respect the visitor's chosen map style when selecting a park.\n const layer=L.layerGroup().addTo(map);\n const namedSearchPins=L.layerGroup().addTo(map);\n window.sf941MapBridge={map,parkLayer:layer,refreshParks:()=>queueMap()};\n const locationAccuracyPane=map.createPane('sf941LocationAccuracy');\n locationAccuracyPane.style.zIndex='390';locationAccuracyPane.style.pointerEvents='none';\n const locationDotPane=map.createPane('sf941LocationDot');\n locationDotPane.style.zIndex='650';\n let visitorLocationMarker=null,visitorAccuracyCircle=null;\n const visitorPulseStyle=document.createElement('style');\n visitorPulseStyle.textContent=`\n #sf941 .sf941-user-location-core::before,#sf941 .sf941-user-location-core::after{content:'';position:absolute;inset:-7px;border:2px solid rgba(22,131,255,.75);border-radius:50%;background:rgba(22,131,255,.2);pointer-events:none;animation:sf941LocationPulse 1.8s ease-out infinite}\n #sf941 .sf941-user-location-core::after{animation-delay:.9s}\n @keyframes sf941LocationPulse{0%{transform:scale(.65);opacity:.85}100%{transform:scale(2.2);opacity:0}}\n @media(prefers-reduced-motion:reduce){#sf941 .sf941-user-location-core::before,#sf941 .sf941-user-location-core::after{animation:none;opacity:0}}\n `;\n document.head.appendChild(visitorPulseStyle);\n\n const visitorLocationIcon=L.divIcon({className:'sf941-user-location',\n   html:'<span class=\"sf941-user-location-core\" style=\"position:relative;display:block;width:20px;height:20px;border:3px solid #fff;border-radius:50%;background:#1683ff;box-shadow:0 0 0 6px rgba(22,131,255,.18),0 2px 8px rgba(0,0,0,.4)\"></span>',\n   iconSize:[20,20],iconAnchor:[10,10]});\n function updateVisitorLocation(coords){\n   const lat=coords?.latitude,lon=coords?.longitude,accuracy=coords?.accuracy;\n   if(!Number.isFinite(lat)||!Number.isFinite(lon)||Math.abs(lat)>90||Math.abs(lon)>180)return;\n   const point=[lat,lon];\n   const hasAccuracy=Number.isFinite(accuracy)&&accuracy>0;\n   const label='Your location'+(hasAccuracy?' \u00B7 Accuracy: about '+Math.round(accuracy)+' m':'');\n   if(visitorLocationMarker){visitorLocationMarker.setLatLng(point);visitorLocationMarker.setTooltipContent(label)}\n   else visitorLocationMarker=L.marker(point,{icon:visitorLocationIcon,pane:'sf941LocationDot',\n     title:'Your location',alt:'Your location',keyboard:true}).addTo(map).bindTooltip(label,{direction:'top',offset:[0,-12]});\n   if(hasAccuracy){\n     if(visitorAccuracyCircle)visitorAccuracyCircle.setLatLng(point).setRadius(accuracy);\n     else visitorAccuracyCircle=L.circle(point,{pane:'sf941LocationAccuracy',radius:accuracy,\n       color:'#1683ff',weight:1,opacity:.55,fillColor:'#1683ff',fillOpacity:.12,interactive:false}).addTo(map);\n   }else if(visitorAccuracyCircle){map.removeLayer(visitorAccuracyCircle);visitorAccuracyCircle=null}\n }\n window.sf941MapBridge.setUserLocation=updateVisitorLocation;\n\n let parks=[],shown=8,origin=null,selected=null,view='nearby',requestId=0,markerById=new Map();\n let visitorInteracted=false,searchGeneration=0;\n const markVisitorInteraction=()=>{visitorInteracted=true};\n  let currentParams={},pageOffset=0,resultTotal=0,hasMore=false;const PAGE_SIZE=250;\n let favorites=new Set();try{favorites=new Set(JSON.parse(localStorage.getItem('sf941-favorites')||'[]'))}catch{}\n const saveFav=()=>{try{localStorage.setItem('sf941-favorites',JSON.stringify([...favorites]))}catch{}};\n const PARK_ICON_URL='https://cdn.shopify.com/s/files/1/0619/9761/3194/files/park.png?v=1793059993';\n const isVerified=p=>p&&(p.verification_status==='verified'||p.verified===1||p.verified==='1');\n const verifyBadge=p=>'<button type=\"button\" class=\"sf-verification '+(isVerified(p)?'is-verified':'is-unverified')+'\" data-verify-park=\"'+esc(id(p))+'\" title=\"'+(isVerified(p)?'Owner-confirmed skatepark \u2014 manage verification':'Not yet confirmed by shop owner')+'\">'+(isVerified(p)?'<span class=\"sf-verified-icon\" aria-hidden=\"true\">\u2713</span> VERIFIED':'? Unverified')+'</button>';\n const parkIcon=(active=false,near=false,p=null)=>L.icon({iconUrl:PARK_ICON_URL,iconSize:[54,54],iconAnchor:[27,49],popupAnchor:[0,-42],className:'sf941-native-park-icon'});\n const coords=p=>[Number(p.latitude),Number(p.longitude)];\n const valid=p=>coords(p).every(Number.isFinite);\n const id=p=>String(p.id??(p.osm_type+'-'+p.osm_id));\n const distance=(a,b)=>{const rad=Math.PI/180,dLat=(b[0]-a[0])*rad,dLon=(b[1]-a[1])*rad;return 3958.76*2*Math.asin(Math.min(1,Math.sqrt(Math.sin(dLat/2)**2+Math.cos(a[0]*rad)*Math.cos(b[0]*rad)*Math.sin(dLon/2)**2)))};\n const directions=p=>'https://www.google.com/maps/dir/?api=1&destination='+encodeURIComponent(p.latitude+','+p.longitude);\n // Use the best location fields the API actually supplies. Never manufacture a park identity.\n const cleanField=v=>String(v??'').trim();\n const parkCity=p=>cleanField(p.city||p.town||p.village||p.municipality||p.locality);\n const parkState=p=>cleanField(p.state_code||p.state);\n const parkZip=p=>cleanField(p.zip||p.postcode||p.postal_code);\n const parkAddress=p=>cleanField(p.address||p.street_address||p.street);\n const genericParkName=n=>!n||/^(?:unnamed|unknown|unidentified|name unverified)(?:\\s+skate\\s?park)?(?:\\s*[\u00B7(].*)?$/i.test(n)||/^skate\\s?park\\s*(?:\\([^)]*\\)|in\\s+[A-Z]{2})?$/i.test(n);\n const parkArea=p=>[parkCity(p),parkState(p)].filter(Boolean).join(', ');\n const locationText=p=>[parkAddress(p),parkArea(p),parkZip(p)].filter(Boolean).join(' \u00B7 ')||'Mapped location available \u2014 address not listed';\n const niceName=p=>{\n   const name=cleanField(p.name),display=cleanField(p.display_name);\n   if(!genericParkName(name))return name;\n   if(display&&!genericParkName(display))return display;\n   const address=parkAddress(p);\n   if(address)return 'Skatepark near '+address;\n   if(parkCity(p))return 'Skatepark in '+parkArea(p);\n   if(parkZip(p))return 'Skatepark near ZIP '+parkZip(p);\n   return parkState(p)?'Skatepark in '+parkState(p):'Skatepark location';\n };\n const TURNSTILE_SITE_KEY='0x4AAAAAAFirHiDU3K-HUUSj';\n  let turnstileLoader=null,activeWidget=null,widgetGeneration=0;\n  function loadTurnstile(){\n    if(window.turnstile)return Promise.resolve(window.turnstile);\n    if(!turnstileLoader)turnstileLoader=new Promise((resolve,reject)=>{\n      const script=document.createElement('script');\n      script.src='https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';\n      script.async=true;\n      script.onload=()=>window.turnstile?resolve(window.turnstile):reject(Error('Turnstile API did not initialize'));\n      script.onerror=()=>reject(Error('Turnstile script could not load'));\n      document.head.appendChild(script);\n    }).catch(err=>{turnstileLoader=null;throw err});\n    return turnstileLoader;\n  }\n  function cleanupTurnstile(){\n    ++widgetGeneration;\n    if(activeWidget){\n      try{window.turnstile?.remove(activeWidget.id)}catch(err){console.warn('Turnstile cleanup:',err)}\n      activeWidget=null;\n    }\n  }\n  function securityMessage(form,message){const el=form?.querySelector('.sf-turnstile-message');if(el)el.textContent=message}\n  async function mountTurnstile(form){\n    const el=form?.querySelector('.sf-turnstile');if(!el)return;\n    cleanupTurnstile();\n    const generation=widgetGeneration;\n    securityMessage(form,'Loading Cloudflare verification\u2026');\n    try{\n      const ts=await loadTurnstile();\n      if(generation!==widgetGeneration||!el.isConnected||modal.getAttribute('aria-hidden')==='true')return;\n      let id;\n      id=ts.render(el,{\n        sitekey:TURNSTILE_SITE_KEY,theme:'light',appearance:'always',size:'normal',\n        callback:()=>{if(generation===widgetGeneration)securityMessage(form,'Security verification complete.')},\n        'expired-callback':()=>{if(generation===widgetGeneration)securityMessage(form,'Verification expired. Please retry.')},\n        'timeout-callback':()=>{if(generation===widgetGeneration)securityMessage(form,'Verification timed out. Please retry.')},\n        'error-callback':code=>{\n          if(generation!==widgetGeneration)return;\n          securityMessage(form,'Cloudflare verification failed ('+String(code||'unknown')+'). Try Retry verification.');\n          console.warn('941 Turnstile challenge error:',code);\n        }\n      });\n      activeWidget={id,form};\n    }catch(err){\n      if(generation!==widgetGeneration)return;\n      securityMessage(form,'Security verification could not load. Try Retry verification.');\n      console.warn('941 Turnstile loading error:',err);\n    }\n  }\n  function turnstileToken(form){\n    if(!activeWidget||activeWidget.form!==form)return '';\n    try{return String(window.turnstile?.getResponse(activeWidget.id)||'')}catch{return ''}\n  }\n  function retryTurnstile(form){\n    if(activeWidget&&activeWidget.form===form){\n      try{window.turnstile?.reset(activeWidget.id);securityMessage(form,'Retrying Cloudflare verification\u2026');return}catch{}\n    }\n    mountTurnstile(form);\n  }\n  function wireSecurityRetry(form){\n    const retry=form?.querySelector('.sf-turnstile-retry');\n    if(retry)retry.onclick=()=>retryTurnstile(form);\n  }\n  const modal=$('#sf941-modal');\n  function openModal(html){cleanupTurnstile();$('#sf941-dialog-body').innerHTML=html;modal.setAttribute('aria-hidden','false')}\n  function closeModal(){cleanupTurnstile();modal.setAttribute('aria-hidden','true')}\n  $('#sf941-close').onclick=closeModal;\n  modal.addEventListener('click',e=>{if(e.target===modal)closeModal()});\n  document.addEventListener('keydown',e=>{if(e.key==='Escape'&&modal.getAttribute('aria-hidden')==='false')closeModal()});\n const friendlyParkType=p=>{const t=String(p.park_type||'').trim().toLowerCase();if(!t||['pitch','skate_park','skateboard','skatepark','sports_centre','recreation_ground'].includes(t))return p.indoor===1?'Indoor skatepark':'Skatepark';return String(p.park_type).replace(/_/g,' ').replace(/\\b\\w/g,c=>c.toUpperCase())};\n const editFields=[['name','Park name'],['address','Street address'],['city','City'],['state','State name'],['state_code','State abbreviation'],['zip','ZIP code'],['website','Website'],['phone','Phone'],['opening_hours','Opening hours'],['surface','Surface'],['park_type','Park type (source classification)'],['description','Description']];\n async function suggestEdit(p){\n  openModal('<h2 id=\"sf941-dialog-title\">Suggest an Edit</h2><p class=\"sf-small\">Loading park details\u2026</p>');\n  let full=p;\n  try{const r=await fetch(API+'/api/park?id='+encodeURIComponent(p.id));const d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Could not load park');full=d.park}\n  catch(e){openModal('<h2 id=\"sf941-dialog-title\">Suggest an Edit</h2><p class=\"sf-error\">'+esc(e.message)+'</p>');return}\n  const fields=editFields.map(([key,label])=>'<label class=\"sf-edit-field'+(key==='description'?' sf-wide':'')+'\">'+esc(label)+(key==='description'?'<textarea name=\"'+key+'\">'+esc(full[key]||'')+'</textarea>':'<input name=\"'+key+'\" value=\"'+esc(full[key]||'')+'\">')+'</label>').join('');\n  openModal('<h2 id=\"sf941-dialog-title\">Suggest an Edit</h2><p><b>'+esc(niceName(full))+'</b></p><p class=\"sf-edit-explain\">Correct any inaccurate fields below. Only fields you change will be submitted for review. Leave unknown details blank.</p><form id=\"sf941-edit-form\"><div class=\"sf-edit-grid\">'+fields+'<label class=\"sf-edit-field sf-wide\">Additional context<textarea name=\"note\" placeholder=\"How do you know this information is correct?\"></textarea></label><label class=\"sf-edit-field\">Your name (optional)<input name=\"submitter_name\" autocomplete=\"name\"></label><label class=\"sf-edit-field\">Email (optional)<input type=\"email\" name=\"submitter_email\" autocomplete=\"email\"></label></div><div class=\"sf-edit-honey\" aria-hidden=\"true\"><label>Company website<input name=\"company_website\" tabindex=\"-1\" autocomplete=\"off\"></label></div><div class=\"sf-turnstile\" aria-label=\"Cloudflare security verification\"></div><p class=\"sf-turnstile-message\" aria-live=\"polite\">Loading Cloudflare verification\u2026</p><button type=\"button\" class=\"sf-turnstile-retry\">\u21BB Retry verification</button><button class=\"sf-primary sf-edit-submit\" type=\"submit\">Submit correction for review</button><p class=\"sf-small\" id=\"sf941-edit-status\" role=\"status\" aria-live=\"polite\"></p></form>');\n  const form=$('#sf941-edit-form');wireSecurityRetry(form);mountTurnstile(form);\n  form.onsubmit=async e=>{e.preventDefault();const f=new FormData(form),changes={};for(const [key] of editFields){const value=String(f.get(key)||'').trim(),old=String(full[key]||'').trim();if(value&&value!==old)changes[key]=value}const output=$('#sf941-edit-status');if(!Object.keys(changes).length){output.textContent='Change at least one park detail before submitting.';return}if(!turnstileToken(form)){output.textContent='Complete Cloudflare verification or use Retry verification before submitting.';return}const button=form.querySelector('[type=submit]');button.disabled=true;output.textContent='Submitting\u2026';try{const r=await fetch(API+'/api/edits/submit',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({park_id:full.id,changes,note:String(f.get('note')||'').trim(),submitter_name:String(f.get('submitter_name')||'').trim(),submitter_email:String(f.get('submitter_email')||'').trim(),company_website:String(f.get('company_website')||''),turnstile_token:turnstileToken(form)})});const d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Unable to submit');cleanupTurnstile();$('#sf941-dialog-body').innerHTML='<div class=\"sf-edit-success\" role=\"status\" aria-live=\"polite\"><div class=\"sf-edit-success-icon\" aria-hidden=\"true\">\u2713</div><h2 id=\"sf941-dialog-title\">Thanks for the heads-up!</h2><p>Your correction is in our review queue. Thanks for helping skaters find better spots.</p><button type=\"button\" class=\"sf-primary\" id=\"sf941-edit-done\">Done</button></div>';$('#sf941-edit-done').onclick=closeModal}catch(err){output.textContent=err.message||'Submission failed';button.disabled=false}};\n }\n\n // The short-lived token is memory-only: never in Liquid, cookies, localStorage or sessionStorage.\n let parkAdminSession='';\n async function parkAdminFetch(path,body,session=parkAdminSession){\n  const r=await fetch(API+path,{method:body?'POST':'GET',headers:{...(session?{'Authorization':'Bearer '+session}:{}),...(body?{'Content-Type':'application/json'}:{})},...(body?{body:JSON.stringify(body)}:{})});\n  const d=await r.json();if(!r.ok||!d.ok){if(r.status===401)parkAdminSession='';throw Error(d.error||'Admin request failed')}return d;\n }\n async function parkAdminReview(parkId){\n  let park;try{const r=await fetch(API+'/api/park?id='+encodeURIComponent(parkId));const d=await r.json();if(!r.ok||!d.ok)throw Error('Park not found');park=d.park}catch(e){return openModal('<h2 id=\"sf941-dialog-title\">Park verification</h2><p>'+esc(e.message)+'</p>')}\n  const title='<h2 id=\"sf941-dialog-title\">Verify skatepark</h2><p><b>'+esc(niceName(park))+'</b></p>';\n  if(!parkAdminSession){\n   openModal(title+'<p class=\"sf-admin-info\">Admin-only access. Visitors cannot verify parks. Enter your separate 941 Park Admin password.</p><form id=\"sf941-admin-login\"><label class=\"sf-admin-field\">Admin password<input type=\"password\" name=\"password\" required autocomplete=\"off\"></label><button class=\"sf-primary\" type=\"submit\">Unlock Admin Mode</button><p id=\"sf941-admin-message\" role=\"status\"></p></form>');\n   const form=$('#sf941-admin-login');form.onsubmit=async e=>{e.preventDefault();const btn=form.querySelector('button');btn.disabled=true;$('#sf941-admin-message').textContent='Checking\u2026';try{const d=await parkAdminFetch('/api/admin/login',{password:form.elements.password.value},'');parkAdminSession=d.token;parkAdminReview(parkId)}catch(err){$('#sf941-admin-message').textContent=err.message;btn.disabled=false}};return;\n  }\n  let current;try{current=(await parkAdminFetch('/api/admin/park?id='+encodeURIComponent(parkId))).park}catch(e){parkAdminSession='';return parkAdminReview(parkId)}\n  const maps='https://www.google.com/maps/search/?api=1&query='+encodeURIComponent(current.latitude+','+current.longitude);\n  const research='https://www.google.com/search?q='+encodeURIComponent(current.name+' '+(current.city||'')+' skatepark official');\n  openModal(title+'<p>'+esc([current.address,current.city,current.state_code,current.zip].filter(Boolean).join(', '))+'</p><p><a href=\"'+maps+'\" target=\"_blank\" rel=\"noopener noreferrer\">Inspect GPS \u2197</a> \u00B7 <a href=\"'+research+'\" target=\"_blank\" rel=\"noopener noreferrer\">Find official source \u2197</a></p><p class=\"sf-admin-info\">Quick verification is your confirmation as shop owner, not independent source verification. Only verify parks you recognize or have checked.</p><form id=\"sf941-admin-verify\"><details class=\"sf-admin-optional\"><summary>Add supporting details (optional)</summary><label class=\"sf-admin-field\">Source URL<input name=\"evidence_url\" type=\"url\" placeholder=\"https://...\"></label><label class=\"sf-admin-field\">Notes<textarea name=\"notes\" rows=\"2\" placeholder=\"What did you confirm?\"></textarea></label></details><div class=\"sf-admin-actions\"><button type=\"submit\" class=\"sf-primary\">'+(isVerified(current)?'\u2713 Keep Verified':'\u2713 Verify Park')+'</button>'+(isVerified(current)?'<button type=\"button\" id=\"sf941-admin-unverify\">\u21B6 Undo Verification</button>':'')+'<button type=\"button\" id=\"sf941-admin-lock\">Lock admin</button></div><p id=\"sf941-admin-message\" role=\"status\"></p></form>');\n  // Owner-only editing, available regardless of verification status.\n  const editFields=[['name','Park name'],['address','Street address'],['city','City'],['state_code','State (2 letters)'],['zip','ZIP'],['latitude','Latitude'],['longitude','Longitude'],['website','Website'],['phone','Phone'],['opening_hours','Hours'],['description','Description'],['surface','Surface'],['park_type','Park type']];\n  const editHtml='<details class=\"sf-admin-optional sf-admin-edit\"><summary>\u270E Edit park information</summary><form id=\"sf941-admin-edit\">'+editFields.map(([key,label])=>'<label class=\"sf-admin-field\">'+label+(key==='description'?'<textarea name=\"'+key+'\" rows=\"3\">'+esc(current[key]??'')+'</textarea>':'<input name=\"'+key+'\" type=\"'+(['latitude','longitude'].includes(key)?'number':'text')+'\" '+(['latitude','longitude'].includes(key)?'step=\"any\"':'')+' value=\"'+esc(current[key]??'')+'\">')+'</label>').join('')+[['indoor','Indoor'],['free','Free admission'],['lit','Lighting']].map(([key,label])=>'<label class=\"sf-admin-field\">'+label+'<select name=\"'+key+'\"><option value=\"\">Unknown</option><option value=\"1\" '+(current[key]===1?'selected':'')+'>Yes</option><option value=\"0\" '+(current[key]===0?'selected':'')+'>No</option></select></label>').join('')+'<div class=\"sf-admin-actions\"><button type=\"submit\" class=\"sf-primary\">Save park changes</button></div><p id=\"sf941-admin-edit-message\" role=\"status\"></p></form></details>';\n  const verifyForm=$('#sf941-admin-verify');verifyForm.insertAdjacentHTML('beforebegin',editHtml);\n  $('#sf941-admin-edit').onsubmit=async e=>{e.preventDefault();const form=e.currentTarget,btn=form.querySelector('[type=submit]'),changes={};for(const [key] of editFields){const value=form.elements[key].value.trim();if(value!==String(current[key]??''))changes[key]=value}for(const key of ['indoor','free','lit']){const value=form.elements[key].value;if(value!==String(current[key]??''))changes[key]=value}const status=$('#sf941-admin-edit-message');if(!Object.keys(changes).length){status.textContent='No changes to save.';return}if(!confirm('Save these changes to the live skatepark directory?'))return;btn.disabled=true;status.textContent='Saving changes\u2026';try{const d=await parkAdminFetch('/api/admin/edit',{park_id:current.id,expected_name:current.name,expected_lat:current.latitude,expected_lon:current.longitude,changes});for(const p of parks)if(String(p.id)===String(current.id))Object.assign(p,d.park);drawCards();queueMap();status.textContent=d.verification_reset?'Saved. Verification removed because the name or GPS changed.':'Changes saved.';setTimeout(()=>parkAdminReview(current.id),900)}catch(err){status.textContent=err.message;btn.disabled=false}};\n  const undo=$('#sf941-admin-unverify');if(undo)undo.onclick=async()=>{if(!confirm('Remove Verified badge for '+current.name+'?'))return;undo.disabled=true;const status=$('#sf941-admin-message');status.textContent='Removing verification\u2026';try{await parkAdminFetch('/api/admin/verify',{park_id:current.id,expected_name:current.name,action:'unverify',evidence_url:'',notes:''});for(const p of parks)if(String(p.id)===String(current.id)){p.verified=0;p.verification_status='unverified'}drawCards();queueMap();openModal('<h2 id=\"sf941-dialog-title\">Verification removed</h2><p>'+esc(current.name)+' is now Unverified.</p><button type=\"button\" id=\"sf941-admin-done\" class=\"sf-primary\">Done</button>');$('#sf941-admin-done').onclick=closeModal}catch(err){status.textContent=err.message;undo.disabled=false}};\n\n  $('#sf941-admin-verify').onsubmit=async e=>{e.preventDefault();if(!confirm('Mark '+current.name+' owner-confirmed and publish VERIFIED badge?'))return;const f=e.currentTarget,btn=f.querySelector('[type=submit]'),data=Object.fromEntries(new FormData(f).entries());btn.disabled=true;$('#sf941-admin-message').textContent='Saving\u2026';try{await parkAdminFetch('/api/admin/verify',{park_id:current.id,expected_name:current.name,action:'verify',confirm:true,evidence_url:data.evidence_url,notes:data.notes||'',owner_confirmed:true});for(const p of parks)if(String(p.id)===String(current.id)){p.verified=1;p.verification_status='verified'}drawCards();queueMap();openModal('<h2 id=\"sf941-dialog-title\">\u2713 Park verified</h2><p>'+esc(current.name)+' is now marked Verified on the live finder.</p><button type=\"button\" id=\"sf941-admin-done\" class=\"sf-primary\">Done</button>');$('#sf941-admin-done').onclick=closeModal}catch(err){$('#sf941-admin-message').textContent=err.message;btn.disabled=false}};\n }\n root.addEventListener('click',e=>{const btn=e.target.closest('[data-verify-park]');if(!btn||!root.contains(btn))return;e.preventDefault();e.stopPropagation();parkAdminReview(btn.dataset.verifyPark)});\n\n function detail(p){const showAppleMaps=!/Android/i.test(navigator.userAgent)&&(/iPhone|iPad|iPod|Macintosh|Mac OS X/i.test(navigator.userAgent)||(navigator.platform==='MacIntel'&&navigator.maxTouchPoints>1));let bits=[friendlyParkType(p),p.surface,p.indoor===1?'Indoor':null,p.lit===1?'Lights':null,p.free===1?'Free':null].filter(Boolean).map(x=>'<span class=\"sf-pill\">'+esc(x)+'</span>').join('');openModal('<h2 id=\"sf941-dialog-title\">'+esc(niceName(p))+'</h2><p>'+esc(locationText(p))+'</p>'+(valid(p)?'<div class=\"sf941-detail-weather-location\" data-sf-weather-lat=\"'+Number(p.latitude)+'\" data-sf-weather-lon=\"'+Number(p.longitude)+'\" role=\"group\" aria-label=\"Nearby weather observation\"></div>':'')+bits+(p.description?'<p>'+esc(p.description)+'</p>':'')+(p.opening_hours?'<p><b>Hours:</b> '+esc(p.opening_hours)+'</p>':'')+'<div class=\"sf-links sf941-detail-directions '+(showAppleMaps?'sf941-two-map-options':'sf941-one-map-option')+'\" aria-label=\"Get directions\"><a href=\"'+directions(p)+'\" target=\"_blank\" rel=\"noopener\"><span aria-hidden=\"true\">\u2197</span> Google Maps</a>'+(showAppleMaps?'<a href=\"https://maps.apple.com/?daddr='+encodeURIComponent(p.latitude+','+p.longitude)+'\" target=\"_blank\" rel=\"noopener\"><span aria-hidden=\"true\">\u2197</span> Apple Maps</a>':'')+(p.website&&/^https?:\\/\\//i.test(p.website)?'<a href=\"'+esc(p.website)+'\" target=\"_blank\" rel=\"noopener noreferrer\">Park website</a>':'')+'</div><button type=\"button\" class=\"sf-edit-button\" id=\"sf941-detail-edit\">\u270E Suggest an edit</button>');$('#sf941-detail-edit').onclick=()=>suggestEdit(p)}\n let activePin=null;\n function setActive(p,fly=true){\n   root.dispatchEvent(new CustomEvent(\"sf941:park-selected\",{detail:{id:id(p)}}));\n   selected=id(p);\n   if(activePin){map.removeLayer(activePin);activePin=null}\n   activePin=L.marker(coords(p),{icon:parkIcon(true,false,p),title:niceName(p),zIndexOffset:1000}).addTo(map);\n   activePin.bindPopup('<strong>'+esc(niceName(p))+'</strong><div>'+esc(locationText(p))+'</div><a target=\"_blank\" rel=\"noopener\" href=\"'+directions(p)+'\">Directions \u2197</a>');\n   if(fly){\n     showSatellite();\n     map.setView(coords(p),20,{animate:false});\n     document.getElementById('sf941-map').scrollIntoView({behavior:'smooth',block:'center'});\n     setTimeout(()=>map.invalidateSize(false),250);\n   }\n   activePin.openPopup();\n   root.querySelectorAll('.sf-park').forEach(el=>el.classList.toggle('sf-active',el.dataset.parkId===selected));\n }\n function card(p,forceMapDistance=false){const article=document.createElement('article');article.className='sf-park'+(id(p)===selected?' sf-active':'');article.dataset.parkId=id(p);if(valid(p)){article.dataset.sfWeatherLat=String(p.latitude);article.dataset.sfWeatherLon=String(p.longitude)}let d=(mapBrowseMode||forceMapDistance)?distance([map.getCenter().lat,map.getCenter().lng],coords(p)):p.distance_miles!=null?Number(p.distance_miles):origin?distance([origin.lat,origin.lon],coords(p)):null;let city=esc(parkArea(p)|| (parkZip(p)?'ZIP '+parkZip(p):'Location shown on map'));article.innerHTML='<div class=\"sf-park-head\"><div class=\"sf-park-card-heading\"><img class=\"sf-card-type-icon\" alt=\"\" aria-hidden=\"true\" src=\"'+PARK_ICON_URL+'\"><div class=\"sf-park-title\"><h3>'+esc(niceName(p))+'</h3></div></div>'+'<div class=\"sf-park-head-right\">'+(d!==null&&Number.isFinite(d)?'<span class=\"sf-park-distance\">'+d.toFixed(1)+' mi</span>':'')+'<button type=\"button\" class=\"sf-fav sf-fav-mini'+(favorites.has(id(p))?' is-saved':'')+'\" data-action=\"favorite\" aria-pressed=\"'+favorites.has(id(p))+'\" aria-label=\"'+(favorites.has(id(p))?'Remove from favorites':'Add to favorites')+'\" title=\"'+(favorites.has(id(p))?'Remove from favorites':'Add to favorites')+'\">'+(favorites.has(id(p))?'\u2665':'\u2661')+'</button></div></div><p class=\"'+(!p.city?'sf-unknown':'')+'\">'+city+'</p>'+(p.address?'<p>'+esc(p.address)+'</p>':'')+'<div class=\"sf-park-actions\"><button type=\"button\" data-action=\"map\">View on map</button><a href=\"'+directions(p)+'\" target=\"_blank\" rel=\"noopener\">Directions \u2197</a></div><div class=\"sf-edit-row\"><button type=\"button\" class=\"sf-edit-button\" data-action=\"edit\">\u270E Suggest an Edit</button></div>';\n article.querySelector('[data-action=edit]').onclick=()=>suggestEdit(p);article.querySelector('[data-action=map]').onclick=()=>setActive(p);article.querySelector('[data-action=favorite]').onclick=()=>{favorites.has(id(p))?favorites.delete(id(p)):favorites.add(id(p));saveFav();drawCards()};return article;}\n // Shared live-card constructors, used by the combined All Spots results.\n let parkCardEpoch=0;\n window.sf941MapBridge.getVisibleParkRows=()=>parks.slice();\n window.sf941MapBridge.makeParkCard=(p,options={})=>card(p,Boolean(options.fromMapCenter));\n window.sf941MapBridge.parkUpdateVersion=()=>parkCardEpoch;\n function drawCards(){const list=$('#sf941-list');list.innerHTML='';let filtered=view==='favorites'?parks.filter(p=>favorites.has(id(p))):parks;if(!filtered.length){list.innerHTML='<p class=\"sf-list-note\">'+(view==='favorites'?'No saved parks on this page.':(($('#sf941-query').value||'').trim()?'No skateparks matched this name. Check the Street Spots tab or try another search.':(mapBrowseMode?'No skateparks in this map view. Pan or zoom out to see more.':'No skateparks found. Try a wider radius or another location.')))+'</p>';}else{const note=document.createElement('p');note.className='sf-list-note';note.textContent=mapBrowseMode?'Skateparks in the visible map area \u00B7 closest to center first':origin?'Closest parks first \u00B7 '+$('#sf941-radius').value+'-mile search':'Browse results \u00B7 select a card to find its pin';list.appendChild(note);filtered.slice(0,shown).forEach(p=>list.appendChild(card(p)));if(filtered.length>shown){const b=document.createElement('button');b.className='sf-more';b.textContent='Show more on this page ('+(filtered.length-shown)+' remaining)';b.onclick=()=>{shown+=8;drawCards()};list.appendChild(b)}}if(view!=='favorites'&&(pageOffset>0||hasMore)){const nav=document.createElement('div');nav.className='sf-toolbar';nav.style.padding='12px 4px';if(pageOffset>0){const prev=document.createElement('button');prev.textContent='\u2190 Previous 250';prev.onclick=()=>load(currentParams,pageOffset-PAGE_SIZE);nav.appendChild(prev)}if(hasMore){const next=document.createElement('button');next.textContent='Next 250 \u2192';next.onclick=()=>load(currentParams,pageOffset+PAGE_SIZE);nav.appendChild(next)}list.appendChild(nav)}\n  ++parkCardEpoch;\n  root.dispatchEvent(new CustomEvent('sf941:park-cards-updated'));\n }\n function fitSearch(){\n   // A delayed search should not override deliberate map navigation.\n   if(mapBrowseMode)return;\n   map.invalidateSize(false);\n   if(origin){\n     const r=Number($('#sf941-radius').value)*1609.344;\n     const circle=L.circle([origin.lat,origin.lon],{radius:r,opacity:0,fillOpacity:0,interactive:false}).addTo(map);\n     map.fitBounds(circle.getBounds(),{padding:[20,20],animate:false,maxZoom:12});map.removeLayer(circle);\n   }else if(!$('#sf941-query').value.trim()){\n     map.fitBounds([[24,-125],[50,-66]],{padding:[22,22],animate:false,maxZoom:5});\n   }\n }\n function render(data){\n   namedSearchPins.clearLayers();\n   parks=data.filter(valid);shown=8;selected=null;view='nearby';\n   if(activePin){map.removeLayer(activePin);activePin=null}\n   drawCards();\n   status((resultTotal||parks.length)+' skateparks found'+(origin?' within '+$('#sf941-radius').value+' miles':'')+(resultTotal>PAGE_SIZE?' \u00B7 showing '+(pageOffset+1)+'\u2013'+(pageOffset+parks.length):''));\n   // Changing result pages must not reset the geographic map view.\n   if(!mapBrowseMode&&pageOffset===0&&!new URLSearchParams(window.location.search).has('sfspot'))requestAnimationFrame(()=>fitSearch());\n }\n async function load(params={},offset=0){\n  const n=++requestId;currentParams={...params};pageOffset=offset;\n  status('Searching skateparks\u2026');\n  const u=new URL(API+'/api/parks');\n  Object.entries({...params,limit:PAGE_SIZE,offset}).forEach(([k,v])=>{\n   if(v!==null&&v!==undefined&&v!=='')u.searchParams.set(k,v);\n  });\n  try{\n   const r=await fetch(u),d=await r.json();\n   if(n!==requestId)return {stale:true};\n   if(!r.ok||!d.ok)throw Error(d.error||'Server error');\n   resultTotal=Number(d.total)||0;hasMore=Boolean(d.has_more);\n   render(d.parks||[]);\n   return {ok:true,parks:parks.slice(),hasMore};\n  }catch(e){\n   if(n!==requestId)return {stale:true};\n   parks=[];resultTotal=0;hasMore=false;drawCards();\n   status('Unable to load skateparks');\n   return {ok:false,error:e.message||'Could not retrieve skateparks'};\n  }\n }\n\n let mapSeq=0,mapTimer=null,sfLastParkViewport='',sfLastParkFetchAt=0;\n // Park pins came from the map, but sidebar cards used an earlier search.\n // Once the visitor intentionally pans/zooms, both follow the same bounds.\n let mapBrowseMode=false,parkViewportTimer=null,parkViewportRequest=0,mapBrowseSignature='';\n function activateMapBrowsing(){\n   markVisitorInteraction();\n   if(!mapBrowseMode){\n     mapBrowseMode=true;\n     ++requestId;        // cancel earlier location-search fetches\n     ++searchGeneration;  // cancel pending name/geocoder lookups\n     origin=null;currentParams={};pageOffset=0;hasMore=false;shown=8;\n     // Never leave the earlier city in the sidebar while a new area loads.\n     parks=[];resultTotal=0;mapBrowseSignature='__loading__';\n     root.dispatchEvent(new CustomEvent('sf941:park-cards-updated'));\n     $('#sf941-list').innerHTML='<p class=\"sf-list-note\">Loading skateparks in this map area\u2026</p>';\n     status('Loading skateparks in this map area\u2026');\n     $('#sf941-query').value='';\n     namedSearchPins.clearLayers();\n     window.sf941MapBridge.clearStreetSearch?.();\n   }\n   // Cancel any result started for the previous map center immediately.\n   ++parkViewportRequest;\n   clearTimeout(parkViewportTimer);\n   parkViewportTimer=setTimeout(refreshParkViewportCards,300);\n }\n async function refreshParkViewportCards(){\n   if(!mapBrowseMode)return;\n   const generation=++parkViewportRequest;\n   const bounds=map.getBounds(),center=map.getCenter();\n   const radius=Math.min(250,Math.max(2,\n     Math.ceil(distance([center.lat,center.lng],[bounds.getNorth(),bounds.getEast()])*1.06)));\n   const u=new URL(API+'/api/parks');\n   for(const [key,val] of Object.entries({\n     lat:center.lat.toFixed(5),lon:center.lng.toFixed(5),\n     radius,limit:PAGE_SIZE,offset:0\n   }))u.searchParams.set(key,val);\n   try{\n     const response=await fetch(u,{cache:'no-store'});\n     const data=await response.json();\n     if(generation!==parkViewportRequest||!mapBrowseMode)return;\n     if(!response.ok||!data.ok||!Array.isArray(data.parks))throw Error('Map-area parks unavailable');\n     const found=data.parks.filter(p=>valid(p)&&bounds.contains(coords(p)));\n     found.sort((a,b)=>distance([center.lat,center.lng],coords(a))-distance([center.lat,center.lng],coords(b)));\n     const signature=center.lat.toFixed(3)+','+center.lng.toFixed(3)+'|'+found.map(p=>id(p)).join('|');\n     if(signature!==mapBrowseSignature){\n       parks=found;mapBrowseSignature=signature;shown=8;pageOffset=0;\n       hasMore=false;resultTotal=found.length;\n       drawCards();\n     }\n     status(found.length+' skatepark'+(found.length===1?'':'s')+\n       ' in the visible map area'+(data.has_more?' \u00B7 zoom in for more':''));\n   }catch(err){\n     if(generation!==parkViewportRequest||!mapBrowseMode)return;\n     parks=[];mapBrowseSignature='__error__';drawCards();\n     status('Could not load parks in this map area. Move the map to retry.');\n   }\n }\n const mapNotice=document.createElement('div');mapNotice.className='sf-map-message';mapNotice.hidden=true;\n $('.sf-map-panel').appendChild(mapNotice);\n function mapWarning(msg){mapNotice.textContent=msg;mapNotice.hidden=!msg}\n async function updateMap(){\n   const n=++mapSeq,b=map.getBounds(),u=new URL(API+'/api/map');\n   const west=Math.max(-180,b.getWest()),east=Math.min(180,b.getEast());\n   Object.entries({south:Math.max(-90,b.getSouth()),north:Math.min(90,b.getNorth()),west,east,zoom:map.getZoom()}).forEach(([k,v])=>u.searchParams.set(k,v));\n   try{\n     if(u.href===sfLastParkViewport && Date.now()-sfLastParkFetchAt<8000)return;\n      const r=await fetch(u),d=await r.json();if(n!==mapSeq)return;\n     if(!r.ok||!d.ok)throw Error(d.error||'Map unavailable');sfLastParkViewport=u.href;sfLastParkFetchAt=Date.now();\n     const nextMarkers=new Map();\n     for(const x of d.items||[]){\n       if(!Number.isFinite(Number(x.latitude))||!Number.isFinite(Number(x.longitude)))continue;\n       let m;\n       if(d.mode==='clusters'){\n         const count=Number(x.count)||0;\n         if(count===1){\n           // The map API supplies cluster coordinates/count, not a park ID.\n           // Show the park artwork; zoom on click to request the individual park record.\n           m=L.marker([x.latitude,x.longitude],{icon:parkIcon(),title:'Skatepark \u2014 click to view closer'});\n           m.on('click',()=>{activateMapBrowsing();map.setView([x.latitude,x.longitude],Math.min(18,map.getZoom()+3),{animate:false})});\n         }else{\n           const html='<span class=\"sf-cluster\">'+count+'</span>';\n           const ico=L.divIcon({html,className:'',iconSize:[43,43],iconAnchor:[21,21]});\n           m=L.marker([x.latitude,x.longitude],{icon:ico,title:count+' skateparks'});\n           m.on('click',()=>{activateMapBrowsing();map.setView([x.latitude,x.longitude],Math.min(13,map.getZoom()+2),{animate:false})});\n         }\n       }else{\n         m=L.marker([x.latitude,x.longitude],{icon:parkIcon(false,false,x),title:niceName(x)});\n         m.bindPopup('<strong>'+esc(niceName(x))+'</strong><div>'+esc(locationText(x))+'</div><button type=\"button\" class=\"sf-map-detail\">Park details</button>');\n         m.on('click',activateMapBrowsing);\n          m.on('popupopen',e=>{const btn=e.popup.getElement()?.querySelector('.sf-map-detail');if(btn)btn.onclick=async()=>{\n           try{const r=await fetch(API+'/api/park?id='+encodeURIComponent(x.id)),d=await r.json();if(r.ok&&d.ok)detail(d.park)}catch{}\n         }});\n         markerById.set(String(x.id),m);\n       }\n       const key=d.mode==='clusters'?'cluster:'+x.latitude+':'+x.longitude+':'+x.count:'park:'+x.id;\n       nextMarkers.set(key,m);\n     }\n     // Swap layers only after the new marker set is ready; avoid a blank zoom frame.\n     for(const [key,old] of window.sf941ParkMarkerCache||[]){if(!nextMarkers.has(key))layer.removeLayer(old)}\n     for(const [key,m] of nextMarkers){if(window.sf941ParkMarkerCache?.has(key)){nextMarkers.set(key,window.sf941ParkMarkerCache.get(key))}else layer.addLayer(m)}\n     window.sf941ParkMarkerCache=nextMarkers;\n     mapWarning(d.has_more?'More parks in this view. Zoom in to see every marker.':'');\n   }catch(e){if(n===mapSeq)mapWarning('Map data could not load. Zoom or refresh to retry.');}\n }\n function queueMap(){clearTimeout(mapTimer);mapTimer=setTimeout(updateMap,180)}\n map.on('moveend',queueMap);\n map.on('moveend',()=>{\n   if(!mapBrowseMode)return;\n   ++parkViewportRequest; // invalidate old response before debounce begins\n   clearTimeout(parkViewportTimer);\n   parkViewportTimer=setTimeout(refreshParkViewportCards,320);\n });\n\n async function geocode(q){const url='https://nominatim.openstreetmap.org/search?format=json&limit=1&countrycodes=us&q='+encodeURIComponent(/^\\d{5}$/.test(q)?q+', USA':q);const r=await fetch(url,{headers:{'Accept':'application/json'}});if(!r.ok)throw Error('Location lookup unavailable');const j=await r.json();if(!j.length)throw Error('Location not found');return {lat:Number(j[0].lat),lon:Number(j[0].lon)}}\n // Name lookup comes first. City, state and ZIP are location fallbacks.\n const normalizeName=s=>String(s??'').toLowerCase().normalize('NFKD')\n   .replace(/[\\u0300-\\u036f]/g,'').replace(/[^a-z0-9]+/g,' ').trim();\n function focusNamedResults(parkMatches,streetMatches){\n   namedSearchPins.clearLayers();\n   const points=[];\n   for(const p of parkMatches.slice(0,50)){\n     const position=coords(p);points.push(position);\n     const marker=L.marker(position,{icon:parkIcon(false,false,p),title:niceName(p),zIndexOffset:1100}).addTo(namedSearchPins);\n     marker.on('click',()=>setActive(p,false));\n   }\n   for(const s of streetMatches.slice(0,50)){\n     const latlng=[Number(s.latitude),Number(s.longitude)];\n     if(latlng.every(Number.isFinite))points.push(latlng);\n   }\n   if(!points.length)return;\n   map.invalidateSize(false);\n   if(points.length===1)map.setView(points[0],16,{animate:false});\n   else map.fitBounds(L.latLngBounds(points),{padding:[40,40],maxZoom:14,animate:false});\n   if(parkMatches.length===1&&streetMatches.length===0)setActive(parkMatches[0],false);\n   setTimeout(()=>map.invalidateSize(false),140);\n }\n async function search(){\n   markVisitorInteraction();\n   const token=++searchGeneration;\n   mapBrowseMode=false;++parkViewportRequest;clearTimeout(parkViewportTimer);\n   mapBrowseSignature='';\n   const query=$('#sf941-query').value.trim(),radius=$('#sf941-radius').value;\n   if(!query){\n     window.sf941MapBridge.clearStreetSearch?.();\n     namedSearchPins.clearLayers();\n     if(origin)return load({...origin,radius});\n     origin=null;return load();\n   }\n   status('Searching named parks and street spots\u2026');\n   origin=null;\n   const [parksResponse,streetsResponse]=await Promise.allSettled([\n     load({q:query}),\n     window.sf941MapBridge.searchStreetNames?\n       window.sf941MapBridge.searchStreetNames(query):\n       Promise.resolve({matches:[],unavailable:true})\n   ]);\n   if(token!==searchGeneration)return;\n   const parkResult=parksResponse.status==='fulfilled'?parksResponse.value:{ok:false};\n   const streetResult=streetsResponse.status==='fulfilled'?streetsResponse.value:{matches:[],unavailable:true};\n   const streets=Array.isArray(streetResult?.matches)?streetResult.matches:[];\n   const needle=normalizeName(query);\n   const matches=parkResult?.ok?parks.filter(p=>normalizeName(niceName(p)).includes(needle)):[];\n   if(matches.length||streets.length){\n     parks=matches;resultTotal=matches.length;hasMore=false;pageOffset=0;shown=8;selected=null;view='nearby';\n     drawCards();\n     status(matches.length+' skatepark'+(matches.length===1?'':'s')+' and '+streets.length+\n       ' street spot'+(streets.length===1?'':'s')+' matching \u201C'+query+'\u201D'+\n       (streetResult.partial?' \u00B7 more spots may exist':''));\n     focusNamedResults(matches,streets);\n     return;\n   }\n   namedSearchPins.clearLayers();\n   try{\n     status('No matching spot names found; checking city or ZIP\u2026');\n     const loc=await geocode(query);\n     if(token!==searchGeneration)return;\n     window.sf941MapBridge.clearStreetSearch?.();\n     origin=loc;\n     const nearby=await load({...loc,radius});\n     if(token!==searchGeneration)return;\n     if(nearby?.ok&&!parks.length){\n       status('No skateparks within '+radius+' miles of \u201C'+query+'\u201D. Check Street Spots or increase the radius.');\n     }\n   }catch(e){\n     if(token!==searchGeneration)return;\n     ++requestId;origin=null;parks=[];resultTotal=0;hasMore=false;shown=8;selected=null;\n     namedSearchPins.clearLayers();drawCards();\n     if(!parkResult?.ok||streetResult.unavailable){\n       status('Search is partially unavailable. Try again or use a city / ZIP.');\n     }else{\n       status('No skateparks or street spots found for \u201C'+query+'\u201D. Try a shorter name or a different location.');\n     }\n   }\n }\n $('#sf941-search').onclick=search;$('#sf941-query').addEventListener('keydown',e=>{if(e.key==='Enter')search()});$('#sf941-radius').onchange=()=>{markVisitorInteraction();if(origin){mapBrowseMode=false;++parkViewportRequest;load({...origin,radius:$('#sf941-radius').value})}};$('#sf941-all').onclick=()=>{markVisitorInteraction();mapBrowseMode=false;++parkViewportRequest;clearTimeout(parkViewportTimer);++searchGeneration;window.sf941MapBridge.clearStreetSearch?.();namedSearchPins.clearLayers();origin=null;$('#sf941-query').value='';load()};\n // Jump to the actual map only when the visitor taps Use My Location.\n // Automatic geolocation on returning visits must never scroll the page.\n function showMapAfterLocationTap(){\n   if(!window.matchMedia('(max-width:700px)').matches)return;\n   const target=$('#sf941-map');\n   if(!target)return;\n   // Respect a sticky Shopify header instead of hiding the map beneath it.\n   const header=document.querySelector('sticky-header, .section-header, .shopify-section-header-sticky');\n   const rect=header?.getBoundingClientRect();\n   const headerOffset=rect&&rect.top<=4&&rect.bottom>0?Math.min(180,Math.max(0,rect.bottom))+12:16;\n   target.style.scrollMarginTop=headerOffset+'px';\n   const reduceMotion=window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n   target.scrollIntoView({behavior:reduceMotion?'auto':'smooth',block:'start'});\n   // The map may have just changed its mobile viewport height.\n   window.setTimeout(()=>map.invalidateSize(false),420);\n }\n $('#sf941-near').onclick=()=>{markVisitorInteraction();mapBrowseMode=false;++parkViewportRequest;clearTimeout(parkViewportTimer);++searchGeneration;window.sf941MapBridge.clearStreetSearch?.();namedSearchPins.clearLayers();if(!navigator.geolocation){status('Location unavailable. Search by city or ZIP.');return}showMapAfterLocationTap();status('Waiting for location permission\u2026');navigator.geolocation.getCurrentPosition(pos=>{updateVisitorLocation(pos.coords);origin={lat:pos.coords.latitude,lon:pos.coords.longitude};$('#sf941-query').value='';load({...origin,radius:$('#sf941-radius').value})},()=>status('Location not shared. Search by city or ZIP instead.'),{enableHighAccuracy:true,maximumAge:60000,timeout:12000})};\n $('#sf941-surprise').onclick=()=>{if(!parks.length){status('Search for parks first.');return}const p=parks[Math.floor(Math.random()*parks.length)];setActive(p);detail(p)};\n $('#sf941-favs').onclick=()=>{root.dispatchEvent(new CustomEvent('sf941:open-parks-tab'));view=view==='favorites'?'nearby':'favorites';shown=8;$('#sf941-favs').textContent=view==='favorites'?'\u2190 All results':'\u2661 Saved spots';drawCards()};\n $('#sf941-add').onclick=()=>{openModal('<h2 id=\"sf941-dialog-title\">Suggest a Skatepark</h2><p class=\"sf-small\">Suggestions are reviewed before publishing.</p><form id=\"sf941-form\"><input name=\"park_name\" required minlength=\"3\" placeholder=\"Skatepark name *\"><input name=\"address\" placeholder=\"Street address\"><input name=\"city\" required placeholder=\"City *\"><input name=\"state\" required placeholder=\"State *\"><input name=\"zip\" placeholder=\"ZIP\"><input name=\"website\" placeholder=\"Website (optional)\"><textarea name=\"details\" placeholder=\"Tell us about the park\"></textarea><input name=\"submitter_name\" placeholder=\"Your name (optional)\"><input name=\"submitter_email\" type=\"email\" placeholder=\"Email (optional)\"><div class=\"sf-edit-honey\" aria-hidden=\"true\"><label>Company website<input name=\"company_website\" tabindex=\"-1\" autocomplete=\"off\"></label></div><div class=\"sf-turnstile\" aria-label=\"Cloudflare security verification\"></div><p class=\"sf-turnstile-message\" aria-live=\"polite\">Loading Cloudflare verification\u2026</p><button type=\"button\" class=\"sf-turnstile-retry\">\u21BB Retry verification</button><button class=\"sf-primary\" type=\"submit\">Send for review</button><p id=\"sf941-form-status\" aria-live=\"polite\"></p></form>');wireSecurityRetry($('#sf941-form'));mountTurnstile($('#sf941-form'));$('#sf941-form').onsubmit=async e=>{e.preventDefault();const form=e.currentTarget,data=Object.fromEntries(new FormData(form).entries());data.turnstile_token=turnstileToken(form);if(!data.turnstile_token){$('#sf941-form-status').textContent='Complete Cloudflare verification or use Retry verification before submitting.';return}$('#sf941-form-status').textContent='Submitting\u2026';try{const r=await fetch(API+'/api/submit',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(data)}),d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Unable to submit');form.reset();cleanupTurnstile();$('#sf941-form-status').textContent='Thanks! Your suggestion is awaiting review.'}catch(err){$('#sf941-form-status').textContent=err.message}}};\n // Automatically locate returning visitors ONLY when location permission was already granted.\n // Do not prompt first-time visitors; never override a search or deliberate map movement.\n async function usePreviouslyGrantedLocation(){\n   if(new URLSearchParams(window.location.search).has('sfspot'))return;\n   if(!navigator.geolocation || !navigator.permissions?.query || !window.isSecureContext)return;\n   let permission;\n   try{permission=await navigator.permissions.query({name:'geolocation'})}catch{return}\n   if(permission.state!=='granted' || visitorInteracted)return;\n   navigator.geolocation.getCurrentPosition(pos=>{\n     if(visitorInteracted || $('#sf941-query').value.trim())return;\n     const lat=pos.coords.latitude,lon=pos.coords.longitude;\n     if(!Number.isFinite(lat)||!Number.isFinite(lon))return;\n     updateVisitorLocation(pos.coords);\n     origin={lat,lon};\n     load({...origin,radius:$('#sf941-radius').value});\n   },()=>{/* Keep the nationwide view when location is unavailable. */},{enableHighAccuracy:false,maximumAge:300000,timeout:8000});\n }\n // A visitor moving the map intentionally should prevent a late location lookup from recentering it.\n map.on('dragstart',activateMapBrowsing);\n map.on('dblclick',activateMapBrowsing);\n map.getContainer().querySelectorAll('.leaflet-control-zoom a').forEach(\n   button=>button.addEventListener('click',activateMapBrowsing)\n );\n map.getContainer().addEventListener('touchstart',e=>{\n   if(e.touches.length>=2)activateMapBrowsing();\n },{passive:true});\n map.getContainer().addEventListener('wheel',e=>{\n   if(e.ctrlKey||e.metaKey)activateMapBrowsing();\n },{passive:true});\n $('#sf941-query').addEventListener('input',markVisitorInteraction);\n load();queueMap();usePreviouslyGrantedLocation();setTimeout(()=>map.invalidateSize(false),300);setTimeout(()=>map.invalidateSize(false),1200);window.addEventListener('resize',()=>map.invalidateSize(false));if(window.ResizeObserver)new ResizeObserver(()=>map.invalidateSize(false)).observe($('#sf941-map'));\n})();\n\n;\n\n(function(){\n  function integrate(){\n    var finder=document.getElementById('sf941');if(!finder)return;\n    var host=finder.querySelector('#sf941-featured');if(!host||host.dataset.done)return;\n    var section=finder.closest('.shopify-section');\n    var parent=section&&section.parentElement;\n    var candidates=parent?Array.from(parent.querySelectorAll('.shopify-section')):Array.from(document.querySelectorAll('.shopify-section'));\n    var original=candidates.find(function(s){return s!==section&&s.querySelectorAll('.multicolumn-list__item').length>=3});\n    if(!original){host.innerHTML='<p class=\"sf-feature-empty\">Our featured local parks will appear here shortly.</p>';return}\n    var items=Array.from(original.querySelectorAll('.multicolumn-list__item'));\n    var count=0;host.innerHTML='';\n    items.forEach(function(item){\n      var heading=item.querySelector('h3,.inline-richtext,.multicolumn-card__info h2');\n      var img=item.querySelector('img');\n      if(!heading||!img)return;\n      var body=item.querySelector('.multicolumn-card__info')||item;\n      var title=heading.textContent.trim();\n      var card=document.createElement('article');card.className='sf-feature-card';\n      var picture=document.createElement('img');picture.src=img.currentSrc||img.src;picture.alt=img.alt||title;picture.loading='lazy';\n      card.appendChild(picture);\n      var copy=document.createElement('div');copy.className='sf-feature-copy';\n      var h=document.createElement('h3');h.textContent=title;copy.appendChild(h);\n      Array.from(body.children).forEach(function(node){\n        if(node===heading||node.contains(heading)){\n          if(node===heading)return;\n          var c=node.cloneNode(true);c.querySelectorAll('h3,h2').forEach(function(x){x.remove()});\n          if(c.textContent.trim())copy.appendChild(c);\n        }else if(node.classList&&node.classList.contains('multicolumn-card__image-wrapper'))return;\n        else{var clone=node.cloneNode(true);if(clone.textContent.trim())copy.appendChild(clone)}\n      });\n      card.appendChild(copy);host.appendChild(card);count++;\n    });\n    if(count>=3){host.dataset.done='1';original.style.display='none';original.setAttribute('data-sf941-original','preserved');}\n    else{host.innerHTML='<p class=\"sf-feature-empty\">Featured local parks are temporarily unavailable.</p>'}\n  }\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',integrate);else integrate();\n  setTimeout(integrate,800);\n})();\n\n\n\n"],
  "mappings": "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",
  "names": ["coords", "id", "editFields", "status", "r", "d"]
}
