{
  "version": 3,
  "sources": ["/cdn/shop/t/73/assets/sf941-map-spots.js?build=20261107findernamelegendv1"],
  "sourcesContent": ["(()=>{\n const root=document.getElementById('sf941'),bridge=window.sf941MapBridge;\n if(!root||!bridge||!window.L)return;\n const map=bridge.map,API='https://941-skatepark-finder.justin-22b.workers.dev',q=id=>root.querySelector('#'+id)||document.getElementById(id);\n const escape=s=>String(s??'').replace(/[&<>\"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n\n  // Source provenance is retained by the backend, not shown on public spot cards.\n // Cluster street spots independently from parks. Individual spots retain their custom icon.\n  const streetLayer=L.markerClusterGroup({\n    showCoverageOnHover:false,\n    spiderfyOnMaxZoom:true,\n    zoomToBoundsOnClick:true,\n    maxClusterRadius:65,\n    iconCreateFunction:cluster=>{\n      const count=cluster.getChildCount();\n      return L.divIcon({\n        html:'<span class=\"sf941-street-cluster\">'+count+'</span>',\n        className:'sf941-street-cluster-holder',iconSize:[43,43],iconAnchor:[21,21]\n      });\n    }\n  }).addTo(map);\n  // The marker-cluster plugin only creates clusters for multiple markers.\n  const streetClusterStyle=document.createElement('style');\n  streetClusterStyle.textContent='#sf941 .sf941-street-cluster-holder{background:transparent!important;border:0!important}#sf941 .sf941-street-cluster{display:grid;place-items:center;width:43px;height:43px;border-radius:50%;background:#08080a;color:#c99aff;border:3px solid #ae72ed;font:900 17px/1 system-ui,sans-serif;box-shadow:0 3px 12px #0007}';\n  document.head.appendChild(streetClusterStyle);\n const STREET_ICON_URL='https://cdn.shopify.com/s/files/1/0619/9761/3194/files/street.png?v=1793060008';\n const streetIcon=L.icon({iconUrl:STREET_ICON_URL,iconSize:[54,54],iconAnchor:[27,49],className:'sf941-native-street-icon'});\n const isIconicSpot=x=>!!x&&(x.is_iconic===1||x.is_iconic===true||String(x.is_iconic)==='1');\n const ICONIC_PIN_SVG='<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 54 54\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M27 3C15 3 6.5 12.1 6.5 23.3c0 13 13.6 22.8 20.5 28.2 6.9-5.4 20.5-15.2 20.5-28.2C47.5 12.1 39 3 27 3Z\" fill=\"#6500a5\" stroke=\"#82c948\" stroke-width=\"3\"/><circle cx=\"27\" cy=\"23\" r=\"14\" fill=\"#fff\"/><polygon points=\"27,11.7 30.45,19 38.5,20.05 32.45,25.45 34.25,33.3 27,29.4 19.75,33.3 21.55,25.45 15.5,20.05 23.55,19\" fill=\"#82c948\" stroke=\"#4a0876\" stroke-width=\"1.1\"/></svg>';\n const iconicStreetIcon=L.divIcon({className:'sf941-iconic-street-icon',html:ICONIC_PIN_SVG,iconSize:[54,54],iconAnchor:[27,49]});\n const streetIconFor=x=>isIconicSpot(x)?iconicStreetIcon:streetIcon;\n const iconicBadge=x=>isIconicSpot(x)?'<span class=\"sf941-iconic-label\" aria-label=\"Iconic skate spot\">\u2605 ICONIC</span>':'';\n const iconicTitle=x=>'<div class=\"sf941-iconic-title-row\"><h3>'+escape(x.name)+'</h3>'+iconicBadge(x)+'</div>';\n\n const cleanSpotPublicCopy=raw=>{\n  let full=String(raw||'').replace(/\\s+/g,' ').trim();\n  const genericSuffixes=[\n   'Coverage publication does not prove filming date or permission.',\n   '2026 video catalog entries do not establish date of on-site skating or unrestricted access.',\n   'current video listing is not a current access certification.',\n   'Later videos on spot catalog do NOT independently prove ban lifted.',\n   'A video publication is not proof of permitted skating.',\n   '2026 article is retrospective, not current skate access evidence.',\n   'Historical and new obstacles share venue but have different exact feature pins.',\n   '2025/26 videos on source page do not independently establish where or when clips were filmed.',\n   'the 2026 Violet SQUEAKY spot tag is editorial indexing, not evidence of exact filming date or access.',\n   'Do not infer current skateability from video release.',\n   'SkateSeeker has a named matching listing but no obstacle coordinates accessible.',\n   'current site geometry not verified.',\n   'This supports cultural significance and recent fountain skating but not a verified manual-pad condition or access policy.',\n   'no evidence exact gap is skateable today.',\n   'older videos and upload dates do not establish present condition.',\n   'Do not collapse with Hart Plaza Ledges/Gap candidate #39.',\n   'Recent video listing does NOT prove filming date or current unrestricted skateability.',\n   \"Source-listed skate spot. Feature details and current condition are not yet community-verified.\",\n   \"Current conditions and access have not been independently verified.\",\n   \"This listing is not confirmation of present access or condition.\"\n  ];\n  for(const phrase of genericSuffixes){\n   const pattern=phrase.replace(/[.*+?^\\${}()|[\\]\\\\]/g,'\\\\$&').replace(/\\s+/g,'\\\\s+');\n   full=full.replace(new RegExp(pattern,'gi'),'');\n  }\n  return full.replace(/\\s+([.,;:!?])/g,'$1').replace(/[;,\\s]+$/g,'').trim();\n };\n const iconicHistory=x=>{\n  if(!isIconicSpot(x))return '';\n  const full=cleanSpotPublicCopy(x.iconic_history);\n  if(!full)return '';\n  if(full.length<=125)return '<p class=\"sf941-iconic-history sf941-iconic-history-short\">'+escape(full)+'</p>';\n  const lead=full.slice(0,92);\n  const split=lead.lastIndexOf(' ');\n  const preview=(split>60?lead.slice(0,split):lead).trim().replace(/[.,;:!?-]+$/,'')+'\u2026';\n  return '<details class=\"sf941-iconic-history\">'+\n    '<summary><span class=\"sf941-iconic-history-preview\">'+escape(preview)+'</span> '+\n    '<span class=\"sf941-iconic-history-more\">Read more</span><span class=\"sf941-iconic-history-less\">Show less</span></summary>'+\n    '<p class=\"sf941-iconic-history-full\">'+escape(full)+'</p></details>';\n };\n let enabled=true,filter='all',seq=0,markers=new Map(),placing=false,chosen=null,pin=null,latest=[];\n // Named search is independent of whichever street spots happen to be on the map.\n const nameSearchPins=L.layerGroup().addTo(map);\n let streetSearchMatches=null,streetSearchQuery='',streetSearchSerial=0,streetSearchCache=null;\n // List-only tabs. They do not control which markers appear on the map.\n // Keep both contribution actions together. Move the original node, never clone it:\n // the existing skatepark suggestion form handler remains attached.\n const sf941SuggestPark=q('sf941-add');\n const sf941Actions=root.querySelector('.sf-street-toolbar');\n const sf941FilterButtons=root.querySelector('.sf-type-filters');\n if(sf941SuggestPark&&sf941Actions&&sf941FilterButtons){\n   sf941SuggestPark.textContent='+ Suggest a Skatepark';\n   sf941Actions.querySelector('.sf-add-menu-content').appendChild(sf941SuggestPark);\n   const oldUtility=root.querySelector('.sf-utility');\n   if(oldUtility)oldUtility.remove();\n }\n const resultsPanel=q('sf941-list').parentNode;\n\n const resultTabs=document.createElement('div');\n resultTabs.id='sf941-results-tabs';\n resultTabs.setAttribute('role','tablist');\n resultTabs.setAttribute('aria-label','Types of spots in the map area');\n resultTabs.innerHTML='<button type=\"button\" id=\"sf941-tab-all\" role=\"tab\" aria-selected=\"true\" aria-controls=\"sf-street-results\"><span>All Spots</span><small id=\"sf941-all-tab-count\"></small></button>'+\n   '<button type=\"button\" id=\"sf941-tab-streets\" role=\"tab\" aria-selected=\"false\" aria-controls=\"sf-street-results\"><img alt=\"\" aria-hidden=\"true\" src=\"'+STREET_ICON_URL+'\"><span>Street</span><small id=\"sf941-street-tab-count\"></small></button>'+\n   '<button type=\"button\" id=\"sf941-tab-parks\" role=\"tab\" aria-selected=\"false\" aria-controls=\"sf941-list\"><img alt=\"\" aria-hidden=\"true\" src=\"https://cdn.shopify.com/s/files/1/0619/9761/3194/files/park.png?v=1793059993\"><span>Parks</span><small id=\"sf941-park-tab-count\"></small></button>';\n resultsPanel.insertBefore(resultTabs,q('sf941-list'));\n let sideTab='all',sideTabTouched=false,lastStreetCount=0;\n const chooseSideTab=(tab,fromUser=false)=>{\n   if(fromUser)sideTabTouched=true;\n   sideTab=tab==='street'||tab==='parks'?tab:'all';\n   const streetBox=q('sf-street-results'),parkBox=q('sf941-list');\n   if(streetBox){\n     streetBox.hidden=sideTab==='parks';\n     streetBox.style.display='';\n     streetBox.setAttribute('aria-labelledby',sideTab==='all'?'sf941-tab-all':'sf941-tab-streets');\n   }\n   parkBox.hidden=sideTab!=='parks';parkBox.style.display='';\n   for(const name of ['all','street','parks']){\n     resultTabs.querySelector('#sf941-tab-'+(name==='street'?'streets':name))\n       .setAttribute('aria-selected',String(sideTab===name));\n   }\n   if(fromUser)renderStreetResults();\n };\n const syncSidebarTabs=(streetCount,parkCount=0)=>{\n   lastStreetCount=streetCount;\n   resultTabs.querySelector('#sf941-all-tab-count').textContent='('+(streetCount+parkCount)+')';\n   resultTabs.querySelector('#sf941-street-tab-count').textContent='('+streetCount+')';\n   resultTabs.querySelector('#sf941-park-tab-count').textContent='('+parkCount+')';\n   chooseSideTab(sideTab);\n };\n for(const name of ['all','street','parks']){\n   resultTabs.querySelector('#sf941-tab-'+(name==='street'?'streets':name))\n     .addEventListener('click',()=>chooseSideTab(name,true));\n }\n resultTabs.addEventListener('keydown',e=>{\n   if(!['ArrowLeft','ArrowRight','Home','End'].includes(e.key))return;\n   e.preventDefault();\n   const options=['all','street','parks'];\n   const next=e.key==='Home'?'all':e.key==='End'?'parks':\n     options[(options.indexOf(sideTab)+(e.key==='ArrowLeft'?-1:1)+options.length)%options.length];\n   chooseSideTab(next,true);\n   resultTabs.querySelector('#sf941-tab-'+(next==='street'?'streets':next)).focus();\n });\n const sidebarStyle=document.createElement('style');\n sidebarStyle.id='sf941-list-tab-style';\n sidebarStyle.textContent=\"\\n #sf941 #sf941-results-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;padding:8px 8px;background:#f6f6f8;border-bottom:1px solid #dbcdea}\\n #sf941 #sf941-results-tabs button{min-width:0;display:flex;align-items:center;justify-content:center;gap:6px;min-height:48px;padding:7px 3px!important;background:#fff!important;border:2px solid #ddd5e8!important;border-radius:10px!important;color:#31273d!important;font-size:clamp(11px,.9vw,13px)!important;font-weight:900!important;white-space:nowrap!important;line-height:1.1!important}\\n #sf941 #sf941-results-tabs button[aria-selected=\\\"true\\\"]{background:#e8f9d4!important;border-color:#91c84a!important;box-shadow:inset 0 -3px 0 #91c84a!important}\\n #sf941 #sf941-results-tabs button:focus-visible{outline:3px solid #9561cc!important;outline-offset:1px!important}\\n #sf941 #sf941-results-tabs img,#sf941 .sf-street-card-head img.sf-card-type-icon,#sf941 .sf-park-card-heading img.sf-card-type-icon{width:38px!important;height:38px!important;max-width:38px!important;max-height:38px!important;min-width:38px!important;min-height:38px!important;object-fit:contain!important;float:none!important;margin:0!important;border:0!important;box-shadow:none!important;background:transparent!important;border-radius:0!important;display:block!important;cursor:default!important}\\n #sf941 #sf941-results-tabs img{width:23px!important;height:23px!important;max-width:23px!important;max-height:23px!important;min-width:30px!important;min-height:30px!important}\\n #sf941 #sf941-results-tabs small{font-size:10px!important;color:#614b75!important}\\n #sf941 #sf941-list[hidden],#sf941 #sf-street-results[hidden]{display:none!important}\\n #sf941 .sf-park-card-heading,#sf941 .sf-street-card-label{display:flex!important;align-items:flex-start;gap:9px;min-width:0;flex:1}\\n #sf941 .sf-park-card-heading .sf-park-title,#sf941 .sf-street-card-label>div{min-width:0;flex:1}\\n #sf941 .sf-street-card-head{align-items:flex-start!important;gap:10px!important}\\n #sf941 .sf-street-card-head img.sf-street-thumbnail{flex:none;width:82px!important;height:72px!important;object-fit:cover!important;border-radius:8px!important;cursor:zoom-in!important}\\n /* The entire sidebar matches the map. Header + tabs use their actual height,\\n    and only the remaining space scrolls (including the LAST card). */\\n #sf941 .sf-layout>.sf-panel:first-child{height:clamp(580px,82dvh,1150px)!important;max-height:clamp(580px,82dvh,1150px)!important;min-height:0!important;display:flex!important;flex-direction:column!important;overflow:hidden!important}\\n #sf941 .sf-layout>.sf-panel:first-child>.sf-topline,\\n #sf941 .sf-layout>.sf-panel:first-child>#sf941-results-tabs{flex:0 0 auto!important}\\n #sf941 #sf-street-results,#sf941 #sf941-list{flex:1 1 auto!important;height:auto!important;max-height:none!important;min-height:0!important;overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior-y:contain!important;scrollbar-gutter:stable;padding-bottom:44px!important;scroll-padding-bottom:24px!important}\\n #sf941 #sf-street-results{background:#faf9fc}\\n @media(max-width:900px){#sf941 .sf-layout>.sf-panel:first-child{height:auto!important;max-height:none!important;min-height:0!important}#sf941 #sf-street-results,#sf941 #sf941-list{flex:0 1 auto!important;height:auto!important;max-height:460px!important;overflow-y:auto!important;padding-bottom:34px!important}}\\n\\n @media(max-width:580px){#sf941 #sf941-results-tabs{gap:6px;padding:7px}#sf941 #sf941-results-tabs button{min-height:49px;padding:6px 3px!important;font-size:11px!important}#sf941 .sf-card-type-icon{width:34px!important;height:34px!important;max-width:34px!important;max-height:34px!important;min-width:34px!important;min-height:34px!important}#sf941 .sf-street-card-head img.sf-street-thumbnail{width:70px!important;height:64px!important}}\\n \";\n document.head.appendChild(sidebarStyle);\n chooseSideTab('all');\n // The park and street API calls finish independently. Merge on either update.\n root.addEventListener('sf941:park-cards-updated',()=>{\n   if(sideTab==='all')renderStreetResults();\n   else syncSidebarTabs(lastStreetCount,bridge.getVisibleParkRows?.().length||0);\n });\n root.addEventListener('sf941:open-parks-tab',()=>chooseSideTab('parks',true));\n\n   // Complete map legend: the exact single-pin artwork plus cluster / overlap signals.\n  const legendCSS=document.createElement('style');\n  legendCSS.textContent=`\n  #sf941 .sf941-map-key{background:rgba(255,255,255,.98);border:1px solid #ded6e4;border-radius:13px;box-shadow:0 4px 16px #0002;padding:10px 12px;color:#241a2b;font:650 12px/1.4 system-ui,sans-serif;max-width:245px;margin:0 0 16px 10px}\n  #sf941 .sf941-map-key-title{font-size:11px;letter-spacing:.075em;font-weight:900;margin-bottom:7px;color:#6500a5}\n  #sf941 .sf941-map-key-row{display:flex;align-items:center;gap:9px;margin:3px 0;white-space:nowrap;min-height:32px}\n  #sf941 .sf941-map-key-icon{display:inline-grid;place-items:center;flex:none;width:34px;height:34px}\n  #sf941 .sf941-map-key-icon img{display:block;width:34px!important;height:34px!important;max-width:34px!important;max-height:34px!important;object-fit:contain!important}\n  #sf941 .sf941-map-key-icon.sf941-key-iconic svg{display:block;width:34px;height:34px;filter:drop-shadow(0 1px 2px #0002)}\n  #sf941 .sf941-map-key-divider{height:1px;background:#e7dfeb;margin:6px 0}\n  #sf941 .sf941-map-key-dot{width:27px;height:27px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none;font-size:12px;font-weight:900;background:#132018;color:#b4f467;border:2px solid #b4f467;margin:0 3px}\n  #sf941 .sf941-map-key-dot.street{background:#09090b;color:#c99aff;border-color:#ae72ed}\n  #sf941 .sf941-map-key-dot.mixed{background:linear-gradient(90deg,#b4f467 0 50%,#ad74eb 50% 100%);color:#fff;border:2px solid #fff;box-shadow:0 0 0 1px #8954b5,0 1px 6px #0002;text-shadow:0 1px 2px #0009}\n  #sf941 .sf941-map-key-name-iconic{font-weight:850;color:#6500a5}\n  #sf941 .sf941-map-key summary{cursor:pointer;list-style:none;display:none;font-size:12px;font-weight:850}\n  #sf941 .sf941-map-key summary::-webkit-details-marker{display:none}\n  @media(max-width:700px){#sf941 .sf941-map-key{padding:8px 10px;max-width:220px;margin:0 0 9px 6px}#sf941 .sf941-map-key summary{display:block}#sf941 .sf941-map-key:not([open]) .sf941-map-key-body{display:none}#sf941 .sf941-map-key[open] .sf941-map-key-body{margin-top:8px}#sf941 .sf941-map-key-title{display:none}}\n\n  /* Bigger tappable legend header, plus an unmistakable dismiss button. */\n  @media(max-width:700px){\n    #sf941 .sf941-map-key{padding:0;min-width:158px;max-width:min(265px,calc(100vw - 40px))}\n    #sf941 .sf941-map-key summary{display:flex;align-items:center;min-height:54px;min-width:158px;padding:14px 17px;font-size:14px;line-height:1.2;font-weight:900;border-radius:12px;touch-action:manipulation}\n    #sf941 .sf941-map-key[open] summary{border-bottom:1px solid #e5d8ee;border-radius:12px 12px 0 0}\n    #sf941 .sf941-map-key .sf941-map-key-body{padding:8px 12px 12px}\n    #sf941 .sf941-map-key .sf941-map-key-close{display:block;width:100%;min-height:48px;margin-top:12px;padding:10px 12px;background:#5e267e!important;color:#fff!important;border:1px solid #452061!important;border-radius:9px;font-size:14px;font-weight:900;touch-action:manipulation}\n  }\n  @media(min-width:701px){#sf941 .sf941-map-key-close{display:none}}\n  /* Legend is a real, collapsible control at ALL screen sizes. */\n  #sf941 .sf941-map-key{\n    padding:0!important;\n    width:auto;\n    min-width:162px;\n    margin:0 0 12px 8px;\n  }\n  #sf941 .sf941-map-key summary{\n    display:flex!important;\n    align-items:center;\n    justify-content:space-between;\n    gap:11px;\n    min-width:162px;\n    min-height:48px;\n    padding:11px 14px!important;\n    font-size:13px;\n    line-height:1.2;\n    font-weight:850;\n    touch-action:manipulation;\n    user-select:none;\n  }\n  #sf941 .sf941-map-key summary::after{\n    content:'\u2304';\n    display:inline-block;\n    font-size:19px;\n    line-height:1;\n    margin-left:auto;\n    transition:transform .15s ease;\n  }\n  #sf941 .sf941-map-key[open] summary::after{\n    transform:rotate(180deg);\n  }\n  #sf941 .sf941-map-key summary:focus-visible{\n    outline:3px solid #82c948;\n    outline-offset:2px;\n  }\n  #sf941 .sf941-map-key:not([open]) .sf941-map-key-body{\n    display:none!important;\n  }\n  #sf941 .sf941-map-key .sf941-map-key-body{\n    padding:8px 12px 12px!important;\n  }\n  #sf941 .sf941-map-key .sf941-map-key-close{\n    display:block!important;\n    width:100%!important;\n    min-height:44px!important;\n    margin-top:9px!important;\n    background:#5e267e!important;\n    color:#fff!important;\n    border:1px solid #452061!important;\n    border-radius:8px!important;\n    font-size:12px!important;\n  }\n  @media(max-width:700px){\n    #sf941 .sf941-map-key summary{min-height:50px;font-size:13px}\n    #sf941 .sf941-map-key{margin:0 0 9px 6px}\n  }\n  @media(prefers-reduced-motion:reduce){\n    #sf941 .sf941-map-key summary::after{transition:none}\n  }\n  `;\n  document.head.appendChild(legendCSS);\n  const mapKeyControl=L.control({position:'bottomleft'});\n  let mapKeyElement;\n  mapKeyControl.onAdd=()=>{\n    const container=L.DomUtil.create('details','sf941-map-key');\n    container.setAttribute('aria-label','Map legend');\n    // Compact by default on both desktop and mobile; the visitor controls it.\n    container.open=false;\n    container.innerHTML='<summary>\u25C9 Map Legend</summary><div class=\"sf941-map-key-body\"><div class=\"sf941-map-key-title\">MAP LEGEND</div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-icon\"><img src=\"https://cdn.shopify.com/s/files/1/0619/9761/3194/files/park.png?v=1793059993\" alt=\"\" aria-hidden=\"true\"></span><span>Skatepark</span></div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-icon\"><img src=\"'+STREET_ICON_URL+'\" alt=\"\" aria-hidden=\"true\"></span><span>Street spot</span></div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-icon sf941-key-iconic\">'+ICONIC_PIN_SVG+'</span><span class=\"sf941-map-key-name-iconic\">\u2605 Iconic / Legendary</span></div>'\n     +'<div class=\"sf941-map-key-divider\" role=\"separator\"></div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-dot\">3</span><span>Skatepark cluster</span></div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-dot street\">3</span><span>Street spot cluster</span></div>'\n     +'<div class=\"sf941-map-key-row\"><span class=\"sf941-map-key-dot mixed\">2</span><span>Park + street overlap</span></div>'\n     +'<button type=\"button\" class=\"sf941-map-key-close\">\u2715 Close legend</button></div>';\n    container.querySelector('.sf941-map-key-close').addEventListener('click',()=>{\n      container.open=false;\n      container.querySelector('summary')?.focus({preventScroll:true});\n    });\n    L.DomEvent.disableClickPropagation(container);L.DomEvent.disableScrollPropagation(container);\n    mapKeyElement=container;return container;\n  };\n  mapKeyControl.addTo(map);\n  const mapCreditsStyle=document.createElement('style');\n  mapCreditsStyle.textContent='#sf941 #sf941-map .leaflet-bottom.leaflet-left{bottom:calc(var(--sf941-credit-height,0px) + 8px)!important}#sf941 #sf941-map .sf941-map-key{margin-bottom:0!important}';\n  document.head.appendChild(mapCreditsStyle);\n  const mapContainer=map.getContainer();\n  const credits=mapContainer.querySelector('.leaflet-control-attribution');\n  const positionLegendAboveCredits=()=>{\n    const height=credits?Math.ceil(credits.getBoundingClientRect().height):0;\n    mapContainer.style.setProperty('--sf941-credit-height',height+'px');\n  };\n  const creditResizeObserver=typeof ResizeObserver!=='undefined'?new ResizeObserver(positionLegendAboveCredits):null;\n  if(credits)creditResizeObserver?.observe(credits);\n  creditResizeObserver?.observe(mapContainer);\n  map.on('resize layeradd layerremove',positionLegendAboveCredits);\n  positionLegendAboveCredits();\n  window.addEventListener('pagehide',()=>{creditResizeObserver?.disconnect();map.off('resize layeradd layerremove',positionLegendAboveCredits)},{once:true});\n\n  // Leave expanded/collapsed state under visitor control across screen rotations.\n  // Do not auto-expand the legend when entering desktop layout.\n  const syncMapKey=()=>{if(mapKeyElement)mapKeyElement.dataset.filter=filter};\n  syncMapKey();\n\n // Merge visually overlapping skatepark/street map icons into one split-color pin.\n // This is a DISPLAY-ONLY treatment. Underlying park and street locations remain independent,\n // can be reached through the split pin, and are restored when the overlap disappears.\n const mixedLayer=L.layerGroup().addTo(map);\n const mixedStyle=document.createElement('style');mixedStyle.id='sf941-mixed-map-pin-style';\n mixedStyle.textContent=`\n #sf941 .sf941-mixed-pin-holder{background:transparent!important;border:0!important}\n #sf941 .sf941-mixed-map-dot{display:grid!important;place-items:center!important;box-sizing:border-box!important;width:46px!important;height:46px!important;border-radius:50%!important;border:3px solid #fff!important;background:linear-gradient(90deg,#b4f467 0 50%,#a96de5 50% 100%)!important;box-shadow:0 0 0 2px #472469,0 4px 11px #0007!important}\n #sf941 .sf941-mixed-map-total{display:grid!important;place-items:center!important;min-width:25px!important;height:25px!important;padding:0 2px!important;border-radius:50%!important;background:#1a1820!important;color:#fff!important;font:900 13px/1 system-ui,sans-serif!important;border:1px solid #fff9!important}\n #sf941 .sf941-mixed-map-dot{cursor:zoom-in!important}\n #sf941 .sf941-mixed-spider-pin{background:transparent!important;border:0!important}\n #sf941 .sf941-mixed-spider-pin .sf941-mixed-spider-icon{width:46px;height:46px;display:grid;place-items:center;border:3px solid #fff;border-radius:50%;box-shadow:0 2px 8px #0006;background:#a8f05e;color:#24172c;font:900 14px/1 system-ui,sans-serif}\n #sf941 .sf941-mixed-spider-pin .sf941-mixed-spider-icon.street{background:#a96de5;color:#fff}\n `;\n document.head.appendChild(mixedStyle);\n let hiddenMixedIcons=[],mixedRefreshTimer=null;\n const spiderLayer=L.layerGroup().addTo(map);\n let activeMixedSpider=false;\n // Same interaction pattern as Leaflet's other clusters: click to zoom; at the\n // maximum zoom, fan the members out so even co-located pins can be selected.\n function clearMixedSpider(){if(!activeMixedSpider)return;activeMixedSpider=false;spiderLayer.clearLayers();scheduleMixedIcons()}\n function spiderfyMixed(group,center,mixed){\n   spiderLayer.clearLayers();activeMixedSpider=true;\n   const members=[];const seen=new Set();\n   for(const node of group){\n     const children=typeof node.marker.getAllChildMarkers==='function'?node.marker.getAllChildMarkers():[node.marker];\n     for(const original of children){const id=L.stamp(original);if(seen.has(id))continue;seen.add(id);members.push({original,kind:node.kind})}\n   }\n   // Individual original markers remain in their data layers. These are only\n   // temporary visual proxies, with no duplicate records or location changes.\n   mixedLayer.removeLayer(mixed);\n   const base=map.latLngToLayerPoint(center),n=members.length;\n   members.forEach(({original,kind},index)=>{\n     // Leaflet-style circle for small groups, spiral for larger groups.\n     const angle=index*Math.PI*(3-Math.sqrt(5));\n     const radius=n<=8?Math.max(49,20*n):45+14*Math.sqrt(index);\n     const a=n<=8?(2*Math.PI*index/n-Math.PI/2):angle;\n     const target=map.layerPointToLatLng(L.point(base.x+Math.cos(a)*radius,base.y+Math.sin(a)*radius));\n     spiderLayer.addLayer(L.polyline([center,target],{color:kind==='park'?'#57892d':'#8950bd',weight:2,opacity:.8,interactive:false}));\n     // Reuse the original pin artwork, not an approximation of its shape.\n     const fallback=L.divIcon({className:'sf941-mixed-spider-pin',html:'<span class=\"sf941-mixed-spider-icon '+(kind==='street'?'street':'')+'\">'+(kind==='street'?'S':'P')+'</span>',iconSize:[46,46],iconAnchor:[23,23]});\n     const proxy=L.marker(target,{icon:original.options?.icon||fallback,zIndexOffset:1500,keyboard:true,title:(kind==='park'?'Skatepark':'Street spot')+' \u2014 view details'});\n     proxy.on('click',()=>{\n       if(original.fire)original.fire('click');\n       if(original.getPopup?.()&&original.openPopup)original.openPopup();\n     });\n     spiderLayer.addLayer(proxy);\n   });\n }\n // Moving the map, changing its zoom, or clicking outside the spider closes it.\n map.on('movestart click',clearMixedSpider);\n\n const restoreMixedIcons=()=>{for(const item of hiddenMixedIcons){if(item.el&&item.el.isConnected)item.el.style.visibility=item.oldVisibility}hiddenMixedIcons=[]};\n function refreshMixedIcons(){\n   if(activeMixedSpider)return;\n   restoreMixedIcons();mixedLayer.clearLayers();\n   if(filter!=='all'||!map.hasLayer(bridge.parkLayer)||!map.hasLayer(streetLayer))return;\n   const mapRect=map.getContainer().getBoundingClientRect();if(mapRect.width<20||mapRect.height<20)return;\n   const getNode=(marker,kind,count)=>{\n     const el=marker?marker._icon:null;\n     if(!el||!el.isConnected)return null;\n     const r=el.getBoundingClientRect();\n     if(r.width<5||r.height<5||r.right<mapRect.left||r.left>mapRect.right||r.bottom<mapRect.top||r.top>mapRect.bottom)return null;\n     return {marker,el,kind,count,px:r.left+r.width/2-mapRect.left,py:r.top+r.height/2-mapRect.top};\n   };\n   const parksVisible=[];\n   bridge.parkLayer.eachLayer(marker=>{\n     const clusterText=marker._icon?.querySelector('.sf-cluster')?.textContent;\n     const count=clusterText?Math.max(1,Number(clusterText)||1):1;\n     const node=getNode(marker,'park',count);if(node)parksVisible.push(node);\n   });\n   const streetsVisible=[];const streetParents=new Set();\n   for(const rawMarker of markers.values()){\n     const marker=streetLayer.getVisibleParent(rawMarker);\n     if(!marker||streetParents.has(L.stamp(marker)))continue;\n     streetParents.add(L.stamp(marker));\n     const count=typeof marker.getChildCount==='function'?marker.getChildCount():1;\n     const node=getNode(marker,'street',count);if(node)streetsVisible.push(node);\n   }\n   if(!parksVisible.length||!streetsVisible.length)return;\n   const nodes=parksVisible.concat(streetsVisible),parent=nodes.map((_,i)=>i);\n   const rootIndex=i=>{while(parent[i]!==i){parent[i]=parent[parent[i]];i=parent[i]}return i};\n   const combine=(i,j)=>{const a=rootIndex(i),b=rootIndex(j);if(a!==b)parent[b]=a};\n   // Restrict fusion to pins whose visual centers genuinely collide on screen.\n   // 32px allows a 43px cluster and a 54px artwork marker to overlap without\n   // combining otherwise separate parks and street spots in the same neighborhood.\n   const radius=32,cell=40,grid=new Map();\n   streetsVisible.forEach((node,j)=>{const gx=Math.floor(node.px/cell),gy=Math.floor(node.py/cell),key=gx+','+gy;if(!grid.has(key))grid.set(key,[]);grid.get(key).push(parksVisible.length+j)});\n   parksVisible.forEach((node,i)=>{\n     const gx=Math.floor(node.px/cell),gy=Math.floor(node.py/cell);\n     for(let x=gx-1;x<=gx+1;x++)for(let y=gy-1;y<=gy+1;y++){\n       for(const j of grid.get(x+','+y)||[]){const other=nodes[j];if(Math.hypot(node.px-other.px,node.py-other.py)<=radius)combine(i,j)}\n     }\n   });\n   const groups=new Map();nodes.forEach((node,i)=>{const key=rootIndex(i);if(!groups.has(key))groups.set(key,[]);groups.get(key).push(node)});\n   for(const group of groups.values()){\n     const groupParks=group.filter(x=>x.kind==='park'),groupStreets=group.filter(x=>x.kind==='street');\n     if(!groupParks.length||!groupStreets.length)continue;\n     const parksCount=groupParks.reduce((n,x)=>n+x.count,0),streetsCount=groupStreets.reduce((n,x)=>n+x.count,0);\n     const x=group.reduce((n,v)=>n+v.px,0)/group.length,y=group.reduce((n,v)=>n+v.py,0)/group.length;\n     const latlng=map.containerPointToLatLng([x,y]);\n     const label=parksCount+streetsCount>99?'99+':String(parksCount+streetsCount);\n     const ico=L.divIcon({className:'sf941-mixed-pin-holder',html:'<span class=\"sf941-mixed-map-dot\"><span class=\"sf941-mixed-map-total\">'+label+'</span></span>',iconSize:[46,46],iconAnchor:[23,23]});\n     const mixed=L.marker(latlng,{icon:ico,zIndexOffset:1200,keyboard:true,title:parksCount+' skatepark location'+(parksCount===1?'':'s')+' and '+streetsCount+' street spot'+(streetsCount===1?'':'s')+' overlap'});\n     mixed.on('click',()=>{\n       const max=typeof map.getMaxZoom==='function'?map.getMaxZoom():19;\n       const zoomLimit=Math.min(Number.isFinite(max)?max:19,19);\n       if(map.getZoom()<zoomLimit){\n         // Like existing cluster markers, zoom toward the members rather than\n         // opening a category choice popup. Repeated taps keep drilling in.\n         map.setView(latlng,Math.min(zoomLimit,map.getZoom()+2),{animate:true});\n       }else{\n         // Identical coordinates cannot be separated by zoom alone.\n         spiderfyMixed(group,latlng,mixed);\n       }\n     });\n     mixedLayer.addLayer(mixed);\n     for(const node of group){hiddenMixedIcons.push({el:node.el,oldVisibility:node.el.style.visibility});node.el.style.visibility='hidden'}\n   }\n }\n const scheduleMixedIcons=()=>{clearTimeout(mixedRefreshTimer);mixedRefreshTimer=setTimeout(refreshMixedIcons,160)};\n map.on('moveend zoomend',scheduleMixedIcons);\n if(bridge.parkLayer)bridge.parkLayer.on('layeradd layerremove',scheduleMixedIcons);\n streetLayer.on('animationend spiderfied unspiderfied',scheduleMixedIcons);\n\n const recentLayer=L.layerGroup().addTo(map); let recentItems=[],showRecentDiscovery=false;\n async function preparePhoto(file){\n  if(!file||!file.size)return null;\n  if(!['image/jpeg','image/png','image/webp','image/heic','image/heif'].includes(file.type)&&!/(jpe?g|png|webp|heic|heif)$/i.test(file.name))throw Error('Please choose a photo from your phone.');\n  try{\n   const bitmap=await createImageBitmap(file),canvas=document.createElement('canvas');\n   const scale=Math.min(1,1200/Math.max(bitmap.width,bitmap.height));\n   canvas.width=Math.max(1,Math.round(bitmap.width*scale));canvas.height=Math.max(1,Math.round(bitmap.height*scale));\n   canvas.getContext('2d').drawImage(bitmap,0,0,canvas.width,canvas.height);bitmap.close?.();\n   let blob;\n   for(const quality of [.78,.65,.5]){blob=await new Promise(resolve=>canvas.toBlob(resolve,'image/jpeg',quality));if(blob&&blob.size<=1000000)break}\n   if(!blob||blob.size>1000000)throw Error('Photo too large after compression');\n   return new File([blob],'street-spot.jpg',{type:'image/jpeg'});\n  }catch(e){throw Error('Could not prepare '+file.name+'. Try a JPG or PNG. '+e.message)}\n }\n\n const videoStyle=document.createElement('style');videoStyle.id='sf941-street-video-ui';\n videoStyle.textContent=`\n #sf941 .sf941-video-section{margin:12px 0;padding:12px;border:1px solid #d7c5e8;border-radius:12px;background:#fcfaff}\n #sf941 .sf941-video-section strong{color:#562880;font-size:16px}\n #sf941 .sf941-video-section video{display:block;width:100%;max-height:340px;margin:8px 0;border-radius:9px;background:#141218;object-fit:contain}\n #sf941 .sf941-video-section button{font:750 13px/1.3 system-ui;padding:8px 11px;border:1px solid #c8b3dc;border-radius:8px;background:white;color:#58307d;cursor:pointer}\n #sf941 .sf941-video-section p{font:600 12px/1.35 system-ui;margin:6px 0;color:#62566d}\n #sf941 #sf-spot-form input[name=video]{display:block;width:100%;max-width:100%;box-sizing:border-box}\n #sf941 #sf-spot-form .sf941-video-hint{font-size:12px;line-height:1.4;display:block;margin-top:6px}\n /* Sidebar video-only cards use a compact poster, never download full videos for thumbnails. */\n #sf941 #sf-street-results .sf941-video-thumb{position:relative!important;display:block!important;flex:none!important;overflow:hidden!important;width:82px!important;height:72px!important;min-width:82px!important;min-height:72px!important;margin:0!important;padding:0!important;border:0!important;border-radius:8px!important;background:#21152c!important;color:#fff!important;cursor:pointer!important;box-shadow:none!important}\n #sf941 #sf-street-results .sf941-video-thumb img.sf941-video-poster{display:block!important;position:absolute!important;inset:0!important;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;object-fit:cover!important;margin:0!important;border:0!important;border-radius:0!important;cursor:pointer!important}\n #sf941 #sf-street-results .sf941-video-thumb .sf941-video-play{position:absolute!important;inset:0!important;display:grid!important;place-items:center!important;background:linear-gradient(0deg,#0005,#0001)!important;color:#fff!important;font:900 28px/1 system-ui,sans-serif!important;text-shadow:0 2px 4px #000!important;pointer-events:none!important}\n #sf941 #sf-street-results .sf941-video-thumb:focus-visible{outline:3px solid #b4f467!important;outline-offset:2px!important}\n @media(max-width:580px){#sf941 #sf-street-results .sf941-video-thumb{width:70px!important;height:64px!important;min-width:70px!important;min-height:64px!important}}\n `;document.head.appendChild(videoStyle);\n const videoUrl=spot=>API+'/api/street/video/'+encodeURIComponent(spot.id);\n const videoPosterUrl=spot=>API+'/api/street/video/poster/'+encodeURIComponent(spot.id);\n const videoCount=spot=>Math.max(0,Number(spot.video_count||0));\n const videoPanel=spot=>videoCount(spot)?'<section class=\"sf941-video-section\"><strong>\u25B6 Street spot video</strong><video controls preload=\"none\" playsinline poster=\"'+videoPosterUrl(spot)+'\" aria-label=\"Video of '+escape(spot.name)+'\" src=\"'+videoUrl(spot)+'\"></video><button type=\"button\" data-report-video>\u22EF Report video</button><p>Plays only when you press Play. Reported videos are hidden immediately.</p></section>':'';\n // 941 FREE VIDEO COMPRESSION \u2014 Mediabunny 1.64.0, lazily loaded only on large uploads.\n // The original file stays on the visitor's device. Only the optimized MP4 reaches R2.\n // The Worker still enforces its independent 12 MB / 10\u201330 second hard limits.\n const SF_VIDEO_LIMIT=12000000;\n const SF_SOURCE_LIMIT=1073741824; // 1 GiB source cap; NOT a storage/upload allowance.\n const SF_MEDIABUNNY_JS='https://cdn.jsdelivr.net/npm/mediabunny@1.64.0/dist/bundles/mediabunny.min.cjs';\n const SF_PRORES_JS='https://cdn.jsdelivr.net/npm/@mediabunny/prores@1.64.0/dist/bundles/mediabunny-prores.min.js';\n let sfMbLoading=null,sfProresLoading=null;\n function sfLoadVendor(url,globalName){\n  return new Promise((resolve,reject)=>{\n   if(window[globalName])return resolve(window[globalName]);\n   const s=document.createElement('script');s.src=url;s.async=true;s.crossOrigin='anonymous';\n   const alarm=setTimeout(()=>{s.remove();reject(Error('Video processor could not load. Check your connection and try again.'))},25000);\n   s.onload=()=>{clearTimeout(alarm);window[globalName]?resolve(window[globalName]):reject(Error('Video processor did not initialize on this browser.'))};\n   s.onerror=()=>{clearTimeout(alarm);s.remove();reject(Error('Could not load the free video processor. Try again with a stable connection.'))};\n   document.head.appendChild(s);\n  });\n }\n async function sfMediabunny(){\n  if(window.Mediabunny)return window.Mediabunny;\n  if(!sfMbLoading)sfMbLoading=sfLoadVendor(SF_MEDIABUNNY_JS,'Mediabunny').catch(e=>{sfMbLoading=null;throw e});\n  return sfMbLoading;\n }\n async function sfEnableProres(){\n  if(!sfProresLoading)sfProresLoading=sfLoadVendor(SF_PRORES_JS,'MediabunnyProres').then(x=>{x.registerProresDecoder();return x}).catch(e=>{sfProresLoading=null;throw e});\n  return sfProresLoading;\n }\n function sfValidateSourceFile(file){\n  if(!file||file.size<1000)throw Error('Choose a video clip.');\n  if(file.size>SF_SOURCE_LIMIT)throw Error('This source file is over 1 GB. Choose a smaller recording.');\n  if(!/\\.(mp4|mov)$/i.test(file.name)&&!['video/mp4','video/quicktime'].includes(file.type))throw Error('Choose an iPhone MOV or MP4 video.');\n }\n async function sfVideoSourceMeta(file){\n  sfValidateSourceFile(file);\n  // Tiny files follow the existing native metadata path; no vendor download is needed.\n  if(file.size<=SF_VIDEO_LIMIT)return videoMeta(file);\n  const m=await sfMediabunny();\n  const input=new m.Input({formats:m.ALL_FORMATS,source:new m.BlobSource(file)});\n  const duration=await input.computeDuration();\n  const track=await input.getPrimaryVideoTrack();\n  if(!track||!Number.isFinite(duration)||duration<10||duration>30)throw Error('Video must be between 10 and 30 seconds.');\n  return {file,seconds:duration,needsCompression:true};\n }\n async function sfPrepareUploadVideo(file,update=()=>{}){\n  const original=await sfVideoSourceMeta(file);\n  if(file.size<=SF_VIDEO_LIMIT)return file; // Preserve existing small-video path.\n  update('Preparing your iPhone video\u2026 0%');\n  const m=await sfMediabunny();\n  if(!window.VideoEncoder||!window.VideoDecoder)throw Error('This browser cannot compress video. Try a newer Safari or Chrome version.');\n  const input=new m.Input({formats:m.ALL_FORMATS,source:new m.BlobSource(file)});\n  const track=await input.getPrimaryVideoTrack();\n  if(!track)throw Error('No video track was found.');\n  const codec=await track.getCodec();\n  if(codec==='prores'){\n   update('Preparing high-quality iPhone recording\u2026');\n   try{await sfEnableProres()}catch(e){throw Error('This ProRes recording needs a browser decoder that could not load. '+e.message)}\n  }\n  if(!await track.canDecode())throw Error('This iPhone video format cannot be decoded in your browser. Try a standard MOV/MP4 recording.');\n  // Use safe 720p sizing, preserve up to 60 fps, and target a bit rate under 12 MB.\n  // Retry with a lower bit rate if MP4 overhead makes the first output too large.\n  const seconds=original.seconds;\n  let width=1280,height=720;\n  try{if((await track.getDisplayHeight())>(await track.getDisplayWidth())){width=720;height=1280;}}catch{}\n  let fps=60;\n  try{const info=await track.computeFrameRateMetrics();const originalFps=Number(info?.bestGuessFrameRate);if(Number.isFinite(originalFps)&&originalFps>0)fps=Math.min(60,originalFps);}catch{}\n  let targetBps=Math.max(1400000,Math.min(4400000,Math.floor((10700000*8/seconds)-110000)));\n  for(let attempt=0;attempt<2;attempt++){\n   const output=new m.Output({format:new m.Mp4OutputFormat({fastStart:'in-memory'}),target:new m.BufferTarget()});\n   const conversion=await m.Conversion.init({input,output,tracks:'primary',tags:{},\n    video:{codec:'avc',width,height,fit:'contain',frameRate:fps,quality:new m.Quality({bitrate:targetBps}),hardwareAcceleration:'prefer-hardware',forceTranscode:true},\n    audio:{codec:'aac',numberOfChannels:2,quality:new m.Quality({bitrate:96000})}\n   });\n   if(!conversion.isValid)throw Error('Your browser cannot encode this clip to web-friendly MP4. Try updating Safari/Chrome.');\n   conversion.onProgress=f=>update('Preparing your video\u2026 '+Math.max(0,Math.min(99,Math.round(f*100)))+'%');\n   try{await conversion.execute()}catch(err){throw Error('Video compression could not finish on this device. '+(err?.message||String(err)))}\n   const buffer=output.target.buffer;\n   if(!buffer||!buffer.byteLength)throw Error('Video compression produced an empty file.');\n   if(buffer.byteLength<=SF_VIDEO_LIMIT){\n    const result=new File([buffer],'941-spot-'+Date.now()+'.mp4',{type:'video/mp4'});\n    // Validate the actual compressed output, not only input metadata.\n    await videoMeta(result);\n    update('Video ready \u00B7 '+(result.size/1000000).toFixed(1)+' MB (original '+(file.size/1000000).toFixed(0)+' MB)');\n    return result;\n   }\n   if(attempt===0){targetBps=Math.max(750000,Math.floor(targetBps*.67));update('Fine-tuning video size\u2026');}\n  }\n  throw Error('This video stayed over 12 MB after compression. Try a shorter clip or another recording mode.');\n }\n const videoMeta=async file=>{\n  if(!file)return null;\n  if(file.size>SF_VIDEO_LIMIT||file.size<1000)throw Error('Processed video must be under 12 MB.');\n  if(!/\\.(mp4|mov)$/i.test(file.name)&&!['video/mp4','video/quicktime'].includes(file.type))throw Error('Choose an MP4 or MOV video.');\n  const url=URL.createObjectURL(file);\n  try{\n   const video=document.createElement('video');video.preload='metadata';video.muted=true;video.playsInline=true;\n   const seconds=await new Promise((resolve,reject)=>{\n    const stop=setTimeout(()=>reject(Error('Video metadata could not be read. Try another clip.')),12000);\n    video.onloadedmetadata=()=>{clearTimeout(stop);resolve(video.duration)};\n    video.onerror=()=>{clearTimeout(stop);reject(Error('This browser cannot read the video.'))};\n    video.src=url;video.load();\n   });\n   if(!Number.isFinite(seconds)||seconds<10||seconds>30)throw Error('Video must be between 10 and 30 seconds.');\n   return {file,seconds};\n  }finally{URL.revokeObjectURL(url)}\n };\n\n const photoCount=x=>Math.max(0,Number(x.photo_count??(x.photo_key?1:0)));\n const FINDER_URL='https://941skateshop.com/pages/local-skate-parks';\n const BUST_LABELS=['','Never Been Kicked Out','Rarely Busted','Sometimes Busted','Frequently Busted','Almost Always Busted'];\n const bustLabel=n=>BUST_LABELS[Math.max(0,Math.min(5,Math.round(Number(n)||0)))]||'Not rated';\n // Distinct, color-coded *security badge* illustrations: teal/green, turquoise, gold, purple, red.\n // The colors indicate community-reported likelihood of getting asked to leave\u2014not legality or safety.\n const BUST_COLORS=[\n   {face:'#b4aec1',edge:'#807389',soft:'#f1eff4'}, // Not rated\n   {face:'#169967',edge:'#0b6748',soft:'#e7f8ef'}, // 1 Never kicked out\n   {face:'#1e9ba5',edge:'#126b74',soft:'#e4f7f8'}, // 2 Rarely busted\n   {face:'#d6a021',edge:'#8e6311',soft:'#fff5da'}, // 3 Sometimes busted \u2014 gold\n   {face:'#8450c9',edge:'#512991',soft:'#f1e9fc'}, // 4 Frequently busted \u2014 purple\n   {face:'#dd3c50',edge:'#992439',soft:'#ffeaee'}  // 5 Almost always busted \u2014 red\n ];\n const shieldMark=(selected=false,level=0)=>{\n   const tier=BUST_COLORS[Math.max(0,Math.min(5,Math.round(Number(level)||0)))];\n   const opacity=selected||level===0?1:.9;\n   return `<svg class=\"sf-bust-shield\" viewBox=\"0 0 32 36\" width=\"29\" height=\"33\" focusable=\"false\" aria-hidden=\"true\" style=\"opacity:${opacity}\">\n    <path d=\"M16 1 29 5.5v11.2C29 25.3 23.6 31.3 16 35 8.4 31.3 3 25.3 3 16.7V5.5Z\" fill=\"${tier.edge}\"/>\n    <path d=\"M16 3.5 26.5 7v9.7C26.5 23.7 22.4 28.8 16 32 9.6 28.8 5.5 23.7 5.5 16.7V7Z\" fill=\"${tier.face}\"/>\n    <path d=\"M16 4.9 25 7.9v5.8L7 10V7.9Z\" fill=\"#fff\" fill-opacity=\".24\"/>\n    <path d=\"m16 10.1 2.0 4.1 4.5.65-3.25 3.16.77 4.47L16 20.4l-4.02 2.08.77-4.47L9.5 14.85l4.5-.65Z\" fill=\"#fff\"/>\n    <path d=\"M9.2 24.9c1.6 2.0 3.8 3.7 6.8 4.5\" fill=\"none\" stroke=\"#fff\" stroke-opacity=\".45\" stroke-width=\"1.15\" stroke-linecap=\"round\"/>\n   </svg>`;\n };\n const bustIcon=x=>shieldMark(true,Number(x.bust_votes)>0?Math.round(Number(x.bust_average)||0):0);\n\n const bustBrief=x=>Number(x.bust_votes)>0?'Bust Factor '+Number(x.bust_average).toFixed(1)+'/5 \u00B7 '+Number(x.bust_votes)+' report'+(Number(x.bust_votes)===1?'':'s'):'Bust Factor \u00B7 Not rated yet';\n // D1 CURRENT_TIMESTAMP is in UTC; never label a spot report as a site verification.\n const bustReportDate=raw=>{\n  if(!raw||typeof raw!=='string')return null;\n  const utc=/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/.test(raw)?raw.replace(' ','T')+'Z':raw;\n  const parsed=new Date(utc);\n  return Number.isNaN(parsed.getTime())?null:new Intl.DateTimeFormat('en-US',{month:'short',day:'numeric',year:'numeric',timeZone:'UTC'}).format(parsed);\n };\n\n const SHARE_GLYPH='<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"19\" height=\"19\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"18\" cy=\"5\" r=\"2.5\"/><circle cx=\"5\" cy=\"12\" r=\"2.5\"/><circle cx=\"18\" cy=\"19\" r=\"2.5\"/><path d=\"m7.3 10.8 8.4-4.7M7.3 13.2l8.4 4.7\"/></svg>';\n const NAV_GLYPH='<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"19\" height=\"19\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 11 2-6h6l2 6\"/><path d=\"M5 17h14\"/><path d=\"M5 17v-5a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v5\"/><path d=\"M5 17v2\"/><path d=\"M19 17v2\"/><path d=\"M7 14h.01\"/><path d=\"M17 14h.01\"/></svg>';\n const MAP_GLYPH='<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><path d=\"m3 6 6-3 6 3 6-3v15l-6 3-6-3-6 3Z\"/><path d=\"M9 3v15M15 6v15\"/></svg>';\n const CAMERA_GLYPH='<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 7h4l2-3h6l2 3h4v13H3Z\"/><circle cx=\"12\" cy=\"13\" r=\"3.5\"/></svg>';\n const spotShareUrl=x=>FINDER_URL+'?sfspot='+encodeURIComponent(String(x.id));\n const spotDirectionsUrl=x=>'https://www.google.com/maps/dir/?api=1&destination='+encodeURIComponent(x.latitude+','+x.longitude)+'&travelmode=driving';\n async function shareLocation(x,directions=false,msgEl=null){\n  const url=directions?spotDirectionsUrl(x):spotShareUrl(x);\n  const title=directions?'Directions to '+x.name:x.name+' \u00B7 941 Street Spot Finder';\n  const text=directions?'Driving directions to '+x.name:'Check out this street spot on the free 941 Skatepark Finder. Open the link for photos and directions.';\n  try{\n   if(navigator.share){await navigator.share({title,text,url});if(msgEl)msgEl.textContent='Shared!';return;}\n   if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(url);if(msgEl)msgEl.textContent=directions?'Directions link copied!':'Spot link copied!';return;}\n   window.prompt('Copy this link to send to your friends:',url);\n   if(msgEl)msgEl.textContent='Copy and send the link above.';\n  }catch(e){if(e?.name==='AbortError')return;if(msgEl)msgEl.textContent='Could not share. Try copying the link.';}\n }\n const photoUrl=(x,i=0)=>API+'/api/street/photo/'+x.id+'/'+i;\n const gallery=x=>{const n=Math.min(5,photoCount(x));if(!n)return '';return '<div class=\"sf-gallery-head\"><strong>Spot photos <small>('+n+'/5)</small></strong><button type=\"button\" class=\"sf-gallery-edit\" data-edit-gallery aria-label=\"Edit photos or add a spot video\" title=\"Edit photos or add video\">\u270E <span>Edit media</span></button></div><div class=\"sf-street-gallery\">'+Array.from({length:n},(_,i)=>'<div class=\"sf-photo-tile\"><img loading=\"lazy\" alt=\"Street spot photo '+(i+1)+'\" src=\"'+photoUrl(x,i)+'\" onerror=\"this.parentNode.style.display=\\'none\\'\"></div>').join('')+'</div>'};\n\n // Grab a real frame from the selected clip, compress to a tiny JPEG, and upload once.\n // This lets sidebar cards show a true preview without fetching a 12 MB video per card.\n async function makeVideoPoster(file){\n  const url=URL.createObjectURL(file),video=document.createElement('video');\n  video.preload='auto';video.muted=true;video.playsInline=true;\n  try{\n   return await new Promise((resolve,reject)=>{\n    let done=false;\n    const fail=msg=>{if(done)return;done=true;clearTimeout(timer);reject(Error(msg))};\n    const timer=setTimeout(()=>fail('Could not capture a video preview. Try MP4 (H.264) at 720p.'),12000);\n    const capture=()=>{\n     if(done||video.readyState<2||!video.videoWidth||!video.videoHeight)return;\n     const scale=Math.min(1,480/Math.max(video.videoWidth,video.videoHeight));\n     const canvas=document.createElement('canvas');\n     canvas.width=Math.max(1,Math.round(video.videoWidth*scale));canvas.height=Math.max(1,Math.round(video.videoHeight*scale));\n     try{canvas.getContext('2d').drawImage(video,0,0,canvas.width,canvas.height)}catch{return fail('Could not capture this video frame. Try MP4/H.264.')}\n     canvas.toBlob(blob=>{\n      if(!blob||blob.size<100||blob.size>200000)return fail('Video preview is too large or unreadable.');\n      if(done)return;done=true;clearTimeout(timer);resolve(new File([blob],'street-spot-preview.jpg',{type:'image/jpeg'}));\n     },'image/jpeg',.68);\n    };\n    video.onloadedmetadata=()=>{try{video.currentTime=Math.min(1,Math.max(0.25,video.duration/5))}catch{fail('Unable to read a frame from this video.')}};\n    video.onseeked=capture;\n    video.onloadeddata=()=>{if(video.currentTime>=0.24&&!video.seeking)capture()};\n    video.onerror=()=>fail('This browser cannot preview the video. Try MP4/H.264.');\n    video.src=url;video.load();\n   });\n  }finally{video.pause();video.removeAttribute('src');video.load();URL.revokeObjectURL(url)}\n }\n async function uploadSpotVideo(spotId,file,token='',update=()=>{}){\n  const ready=await sfPrepareUploadVideo(file,update);\n  update('Creating video preview\u2026');\n  const details=await videoMeta(ready),poster=await makeVideoPoster(ready),fd=new FormData();\n  fd.append('spot_id',spotId);fd.append('photo_token',token);fd.append('video',details.file,details.file.name);fd.append('poster',poster,poster.name);\n  update('Uploading optimized video\u2026');\n  const res=await fetch(API+'/api/street/video',{method:'POST',body:fd});\n  const data=await res.json();if(!res.ok||!data.ok)throw Error(data.error||'Video upload failed');return data;\n }\n // Keep legacy entry points pointing to the same combined media editor.\n\n const notice=s=>{const el=q('sf-street-message');if(el)el.textContent=s};\n const refreshStats=async()=>{try{const r=await fetch(API+'/api/street/stats'),d=await r.json();if(d.ok)q('sf-street-counts').textContent=`${d.new_week} new this week \u00B7 ${d.total} street spots \u00B7 ${d.updated_week} recently updated`;}catch{q('sf-street-counts').textContent='Community spots unavailable';}};\n const editor=document.createElement('div');editor.id='sf-street-editor';editor.hidden=true;editor.setAttribute('aria-hidden','true');editor.innerHTML='<div class=\"sf-editor-backdrop\" data-close></div><section class=\"sf-editor-sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"sf-editor-title\"><header><div><span class=\"sf-editor-kicker\">941 COMMUNITY</span><h2 id=\"sf-editor-title\">Photos &amp; video</h2></div><button type=\"button\" class=\"sf-editor-close\" data-close aria-label=\"Close editor\">\u2715</button></header><div id=\"sf-editor-content\"></div></section>';document.body.appendChild(editor);\n let editorPreviousFocus=null,editorCloseCallback=null;\n const closeEditor=()=>{editor.hidden=true;editor.setAttribute('aria-hidden','true');editor.classList.remove('sf-street-create-open');document.body.classList.remove('sf-editor-open');if(editorCloseCallback){const cb=editorCloseCallback;editorCloseCallback=null;cb()}editorPreviousFocus?.focus?.()};\n const openEditor=(title,html,onReady,onClose)=>{editorPreviousFocus=document.activeElement;editorCloseCallback=onClose||null;editor.querySelector('#sf-editor-title').textContent=title;const content=editor.querySelector('#sf-editor-content');content.innerHTML=html;editor.hidden=false;editor.setAttribute('aria-hidden','false');document.body.classList.add('sf-editor-open');onReady?.(content);editor.classList.toggle('sf-street-create-open',!!editor.querySelector('#sf-spot-form'));\n  const createActions=editor.querySelector('#sf-spot-form > .sf-street-actions');\n  if(createActions&&window.matchMedia('(max-width: 700px)').matches){\n    photoUIStyle(createActions,{'position':'fixed','display':'grid','grid-template-columns':'minmax(0,2fr) minmax(0,1fr)','gap':'8px','bottom':'0','left':'0','right':'0','width':'100%','max-width':'100%','margin':'0','padding':'10px 12px calc(10px + env(safe-area-inset-bottom))','background':'#fff','box-sizing':'border-box','border-top':'2px solid #d5e3cf','z-index':'2147483000','box-shadow':'0 -5px 20px #0002'});\n  }\n  editor.querySelector('.sf-editor-close').focus()};\n // Story-friendly spot image: created locally on the visitor's device, never uploaded.\n // File sharing uses the native OS Share sheet; Instagram/TikTok may or may not accept\n // web-origin files depending on device and installed app. Always supply save fallback.\n async function buildStoryCard(spot){\n   const cv=document.createElement('canvas');cv.width=1080;cv.height=1920;\n   const c=cv.getContext('2d');if(!c)throw Error('This browser cannot render a share image.');\n   const bg=c.createLinearGradient(0,0,1080,1920);bg.addColorStop(0,'#160c26');bg.addColorStop(.5,'#462073');bg.addColorStop(1,'#111c17');c.fillStyle=bg;c.fillRect(0,0,1080,1920);\n   c.fillStyle='#b4f467';c.fillRect(0,0,1080,20);\n   c.font='900 78px Arial, sans-serif';c.fillStyle='#b4f467';c.fillText('941',64,132);\n   c.font='800 35px Arial, sans-serif';c.fillStyle='#fff';c.fillText('SKATEPARK & STREET SPOT FINDER',250,113);\n   const photo=photoCount(spot)?await new Promise(resolve=>{\n     const im=new Image();im.crossOrigin='anonymous';\n     const timeout=setTimeout(()=>resolve(null),3500);\n     im.onload=()=>{clearTimeout(timeout);resolve(im)};\n     im.onerror=()=>{clearTimeout(timeout);resolve(null)};\n     im.src=photoUrl(spot);\n   }):null;\n   c.save();c.beginPath();c.rect(60,210,960,950);c.clip();\n   if(photo&&photo.naturalWidth){const r=Math.max(960/photo.naturalWidth,950/photo.naturalHeight);const w=photo.naturalWidth*r,h=photo.naturalHeight*r;c.drawImage(photo,60+(960-w)/2,210+(950-h)/2,w,h);}\n   else{const fg=c.createLinearGradient(60,210,1000,1160);fg.addColorStop(0,'#7f55ad');fg.addColorStop(1,'#273a25');c.fillStyle=fg;c.fillRect(60,210,960,950);c.fillStyle='#b4f467';c.font='900 175px Arial, sans-serif';c.textAlign='center';c.fillText('941',540,710);c.font='700 42px Arial, sans-serif';c.fillStyle='#fff';c.fillText('STREET SPOT',540,795);c.textAlign='left'}\n   c.restore();\n   const overlay=c.createLinearGradient(0,900,0,1340);overlay.addColorStop(0,'#160c2600');overlay.addColorStop(1,'#160c26');c.fillStyle=overlay;c.fillRect(0,900,1080,440);\n   c.font='900 41px Arial, sans-serif';c.fillStyle='#b4f467';c.fillText(String(spot.kind||'STREET SPOT').toUpperCase(),64,1268);\n   c.fillStyle='#fff';c.font='900 74px Arial, sans-serif';\n   const text=String(spot.name||'Street Spot');const words=text.split(/\\s+/).filter(Boolean);let lines=[],line='';\n   for(const word of words){const trial=line?line+' '+word:word;if(c.measureText(trial).width>920&&line){lines.push(line);line=word;}else line=trial;}\n   if(line)lines.push(line);\n   for(let i=0;i<Math.min(lines.length,3);i++)c.fillText(lines[i],64,1370+i*85,955);\n   const y=Math.max(1560,1370+Math.min(lines.length,3)*85+28);\n   c.fillStyle='#b4f467';c.fillRect(64,y,952,5);\n   c.fillStyle='#fff';c.font='700 39px Arial, sans-serif';c.fillText('DISCOVER THE SPOT. SHARE THE SESSION.',64,y+90);\n   c.fillStyle='#c9b2ed';c.font='700 36px Arial, sans-serif';c.fillText('941skateshop.com  \u00B7  941 Finder',64,1830);\n   return await new Promise((resolve,reject)=>cv.toBlob(blob=>{\n     if(!blob){reject(Error('Unable to export the share image.'));return;}\n     resolve(new File([blob],'941-street-spot-'+spot.id+'.png',{type:'image/png'}));\n   },'image/png'));\n }\n function saveStoryCard(file){\n   const u=URL.createObjectURL(file);const a=document.createElement('a');a.href=u;a.download=file.name;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(u),12000);\n }\n function openSpotShare(spot){\n   const spotUrl=spotShareUrl(spot);\n   openEditor('Share this street spot',`<div class=\"sf-share-sheet\"><p class=\"sf-share-lead\">Send friends the spot and directions, or share a 9:16 image to your skate crew.</p><div class=\"sf-share-sheet-grid\"><button type=\"button\" data-sf-share-link>${SHARE_GLYPH}<span>Send spot link</span></button><button type=\"button\" data-sf-share-route>${NAV_GLYPH}<span>Share directions</span></button><button type=\"button\" data-sf-share-copy>\uD83D\uDD17<span>Copy spot link</span></button><button type=\"button\" data-sf-share-image disabled>\uD83D\uDCF8<span>Preparing Story image\u2026</span></button><button type=\"button\" data-sf-share-save disabled>\u2B07<span>Save image</span></button></div><div class=\"sf-share-sheet-preview\" hidden><img alt=\"941 street spot Story preview\"></div><p class=\"sf-share-sheet-note\">For Instagram Stories or TikTok: use <b>Share Story image</b> and choose an available app. If your phone does not show that app, save the image and upload it from its gallery. Copy the spot link separately if you want viewers to open the map.</p><p class=\"sf-share-sheet-message\" role=\"status\" aria-live=\"polite\"></p></div>`,content=>{\n     const msg=content.querySelector('.sf-share-sheet-message');\n     content.querySelector('[data-sf-share-link]').onclick=()=>shareLocation(spot,false,msg);\n     content.querySelector('[data-sf-share-route]').onclick=()=>shareLocation(spot,true,msg);\n     content.querySelector('[data-sf-share-copy]').onclick=async()=>{\n       try{if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(spotUrl);msg.textContent='Spot link copied.';}else window.prompt('Copy this link:',spotUrl)}catch{window.prompt('Copy this link:',spotUrl)}\n     };\n     const imgBtn=content.querySelector('[data-sf-share-image]'),saveBtn=content.querySelector('[data-sf-share-save]');\n     let previewUrl=null;\n     buildStoryCard(spot).then(file=>{\n       if(!content.isConnected)return;\n       imgBtn.disabled=false;saveBtn.disabled=false;\n       imgBtn.querySelector('span').textContent='Share Story image';\n       saveBtn.onclick=()=>{saveStoryCard(file);msg.textContent='Image saved/downloaded. Open Instagram or TikTok and choose it from your photos.'};\n       imgBtn.onclick=async()=>{\n         try{\n           if(navigator.share&&navigator.canShare?.({files:[file]})){\n             await navigator.share({files:[file],title:spot.name+' \u00B7 941 Finder'});\n             msg.textContent='Image shared. Add the spot link if your app supports it.';\n           }else{saveStoryCard(file);msg.textContent='Your browser cannot directly share an image. Save it, then upload it in Instagram or TikTok.'}\n         }catch(err){if(err?.name!=='AbortError')msg.textContent='Could not share directly. Try Save image instead.'}\n       };\n       previewUrl=URL.createObjectURL(file);const preview=content.querySelector('.sf-share-sheet-preview');preview.hidden=false;preview.querySelector('img').src=previewUrl;\n     }).catch(err=>{imgBtn.querySelector('span').textContent='Story image unavailable';msg.textContent=err.message||'Unable to build Story image.'});\n   },()=>{/* The browser releases preview object URLs on navigation; no map state changes. */});\n }\n editor.querySelectorAll('[data-close]').forEach(b=>b.addEventListener('click',closeEditor));\n editor.addEventListener('keydown',e=>{if(e.key==='Escape'){e.preventDefault();closeEditor()}if(e.key==='Tab'){const f=[...editor.querySelectorAll('button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),a[href]')].filter(x=>x.getClientRects().length);if(!f.length)return;const first=f[0],last=f[f.length-1];if(e.shiftKey&&document.activeElement===first){e.preventDefault();last.focus()}else if(!e.shiftKey&&document.activeElement===last){e.preventDefault();first.focus()}}});\n const viewer=document.createElement('div');viewer.id='sf-street-lightbox';viewer.hidden=true;\n viewer.innerHTML='<div class=\"sf-lightbox-shade\" aria-hidden=\"true\"></div><div class=\"sf-lightbox-frame\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Street spot photo viewer\"><div class=\"sf-lightbox-media\" title=\"Select photo to zoom; scroll when zoomed\"><img alt=\"Enlarged street spot photo\" tabindex=\"0\" role=\"button\" aria-label=\"Zoom photo\"></div><button type=\"button\" class=\"sf-lightbox-close\" aria-label=\"Close photo\">\u2715</button><button type=\"button\" class=\"sf-lightbox-prev\" aria-label=\"Previous photo\">\u2039</button><button type=\"button\" class=\"sf-lightbox-next\" aria-label=\"Next photo\">\u203A</button><span class=\"sf-lightbox-counter\" aria-live=\"polite\"></span><span class=\"sf-lightbox-help\">Tap photo to zoom \u00B7 Scroll to explore</span></div>';\n document.body.appendChild(viewer);\n let viewerPhotos=[],viewerIndex=0,viewerReturn=null,viewerTouchX=null,viewerSpot=null;\n const viewerMedia=viewer.querySelector('.sf-lightbox-media'),viewerPhoto=viewerMedia.querySelector('img');\n const reportMenu=document.createElement('button');reportMenu.type='button';reportMenu.className='sf-photo-report-menu';reportMenu.textContent='\u22EF Report photo';viewer.querySelector('.sf-lightbox-frame').appendChild(reportMenu);\n reportMenu.onclick=async()=>{if(!viewerSpot||!confirm('Report this photo? It will be hidden immediately.'))return;reportMenu.disabled=true;try{const r=await fetch(API+'/api/street/photo/report',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spot_id:viewerSpot.id,index:viewerIndex,reason:'Inappropriate image'})}),d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Report failed');viewerClose();showDetails(viewerSpot)}catch(e){alert(e.message)}finally{reportMenu.disabled=false}};\n const viewerDraw=()=>{viewerMedia.classList.remove('sf-photo-zoomed');viewerMedia.scrollTop=0;viewerMedia.scrollLeft=0;viewerPhoto.src=viewerPhotos[viewerIndex];viewer.querySelector('.sf-lightbox-counter').textContent=(viewerIndex+1)+' / '+viewerPhotos.length;viewer.querySelector('.sf-lightbox-prev').hidden=viewerPhotos.length<2;viewer.querySelector('.sf-lightbox-next').hidden=viewerPhotos.length<2};\n const viewerClose=()=>{if(viewer.hidden)return;viewer.hidden=true;viewerMedia.classList.remove('sf-photo-zoomed');document.body.classList.remove('sf-photo-open');viewerReturn?.focus?.()};\n const viewerMove=delta=>{if(viewerPhotos.length){viewerIndex=(viewerIndex+delta+viewerPhotos.length)%viewerPhotos.length;viewerDraw()}};\n const viewerZoom=()=>{viewerMedia.classList.toggle('sf-photo-zoomed');viewerMedia.scrollTop=0;viewerMedia.scrollLeft=0;viewerPhoto.setAttribute('aria-label',viewerMedia.classList.contains('sf-photo-zoomed')?'Fit photo to screen':'Zoom photo')};\n // The frame used to cover the full-screen shade; catch clicks in the EMPTY frame/media space, not just on the shade.\n viewer.addEventListener('click',e=>{if(viewer.hidden||e.target===viewerPhoto||e.target.closest('button'))return;viewerClose()});\n viewer.querySelector('.sf-lightbox-close').onclick=viewerClose;\n viewer.querySelector('.sf-lightbox-prev').onclick=()=>viewerMove(-1);\n viewer.querySelector('.sf-lightbox-next').onclick=()=>viewerMove(1);\n viewerPhoto.addEventListener('click',viewerZoom);\n viewerPhoto.addEventListener('keydown',e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();viewerZoom()}});\n viewer.addEventListener('touchstart',e=>{viewerTouchX=e.touches.length===1?e.touches[0].clientX:null},{passive:true});\n viewer.addEventListener('touchend',e=>{if(viewerTouchX===null||viewerMedia.classList.contains('sf-photo-zoomed')){viewerTouchX=null;return}const dx=(e.changedTouches[0]?.clientX??viewerTouchX)-viewerTouchX;if(Math.abs(dx)>55)viewerMove(dx<0?1:-1);viewerTouchX=null},{passive:true});\n document.addEventListener('keydown',e=>{if(viewer.hidden)return;if(e.key==='Escape'){e.preventDefault();viewerClose()}else if(e.key==='ArrowRight'){e.preventDefault();viewerMove(1)}else if(e.key==='ArrowLeft'){e.preventDefault();viewerMove(-1)}});\n const openViewer=(spot,index=0,from=null)=>{const photos=[...details.querySelectorAll('.sf-photo-tile img')].filter(im=>im.getClientRects().length&&im.complete&&im.naturalWidth).map(im=>im.src);if(!photos.length)return;viewerReturn=from||document.activeElement;viewerSpot=spot;viewerPhotos=photos;viewerIndex=Math.max(0,Math.min(index,photos.length-1));viewer.hidden=false;document.body.classList.add('sf-photo-open');viewerDraw();viewer.querySelector('.sf-lightbox-close').focus()};\n // Self-contained lightbox styling: overrides any old theme/lightbox rules, with a bounded scrollable photo area.\n const photoViewerCSS=document.createElement('style');photoViewerCSS.id='sf941-lightbox-v2';photoViewerCSS.textContent=`\n  html body.sf-photo-open{overflow:hidden!important}\n  #sf-street-lightbox[hidden],#sf-street-lightbox[hidden] *{display:none!important}\n  #sf-street-lightbox{position:fixed!important;left:0!important;top:0!important;right:auto!important;bottom:auto!important;width:100vw!important;height:100dvh!important;max-width:100vw!important;max-height:100dvh!important;z-index:2147483646!important;display:grid!important;place-items:center!important;isolation:isolate!important;overflow:hidden!important;background:rgba(10,9,14,.88)!important;box-sizing:border-box!important}\n  #sf-street-lightbox .sf-lightbox-shade{position:absolute!important;inset:0!important;z-index:0!important;background:rgba(10,9,14,.88)!important;cursor:zoom-out!important}\n  #sf-street-lightbox .sf-lightbox-frame{position:relative!important;z-index:1!important;display:block!important;width:min(calc(100vw - 32px),1120px)!important;max-width:1120px!important;height:min(calc(100dvh - 24px),900px)!important;max-height:calc(100dvh - 24px)!important;margin:0 auto!important;padding:0!important;background:#131319!important;border:1px solid #ffffff30!important;border-radius:14px!important;box-sizing:border-box!important;overflow:hidden!important;box-shadow:0 16px 54px #000a!important}\n  #sf-street-lightbox .sf-lightbox-media{position:absolute!important;top:58px!important;bottom:66px!important;left:66px!important;right:66px!important;min-height:0!important;max-height:none!important;width:auto!important;height:auto!important;display:flex!important;align-items:center!important;justify-content:center!important;overflow:auto!important;overscroll-behavior:contain!important;scrollbar-width:thin!important;box-sizing:border-box!important;cursor:zoom-out!important}\n  #sf-street-lightbox .sf-lightbox-media img{position:relative!important;display:block!important;flex:0 1 auto!important;max-width:100%!important;max-height:100%!important;width:auto!important;height:auto!important;min-width:0!important;min-height:0!important;object-fit:contain!important;margin:auto!important;border:0!important;cursor:zoom-in!important;touch-action:pan-x pan-y pinch-zoom!important}\n  #sf-street-lightbox .sf-lightbox-media.sf-photo-zoomed{display:block!important;overflow:auto!important;cursor:grab!important}\n  #sf-street-lightbox .sf-lightbox-media.sf-photo-zoomed img{display:block!important;flex:none!important;max-width:none!important;max-height:none!important;min-width:0!important;min-height:0!important;width:auto!important;height:auto!important;margin:0 auto!important;cursor:zoom-out!important}\n  #sf-street-lightbox button{z-index:5!important;box-sizing:border-box!important;cursor:pointer!important}\n  #sf-street-lightbox .sf-lightbox-close{position:absolute!important;right:13px!important;top:10px!important;left:auto!important;bottom:auto!important;transform:none!important;width:44px!important;height:44px!important;border-radius:50%!important;background:#fff!important;color:#18141d!important;border:2px solid #e0d5e8!important;display:grid!important;place-items:center!important;font:700 24px/1 system-ui!important;box-shadow:0 3px 9px #0005!important}\n  #sf-street-lightbox .sf-lightbox-prev,#sf-street-lightbox .sf-lightbox-next{position:absolute!important;top:50%!important;bottom:auto!important;transform:translateY(-50%)!important;width:44px!important;height:54px!important;border:1px solid #ffffff55!important;border-radius:12px!important;background:#fff!important;color:#22152f!important;font:700 34px/1 system-ui!important;display:grid!important;place-items:center!important}\n  #sf-street-lightbox .sf-lightbox-prev{left:10px!important;right:auto!important}\n  #sf-street-lightbox .sf-lightbox-next{right:10px!important;left:auto!important}\n  #sf-street-lightbox .sf-lightbox-prev[hidden],#sf-street-lightbox .sf-lightbox-next[hidden]{display:none!important}\n  #sf-street-lightbox .sf-lightbox-counter{position:absolute!important;left:50%!important;top:auto!important;bottom:14px!important;right:auto!important;transform:translateX(-50%)!important;background:#251d2c!important;color:#fff!important;border:1px solid #ffffff44!important;border-radius:30px!important;padding:7px 14px!important;font:700 13px/1.3 system-ui!important;white-space:nowrap!important;z-index:4!important}\n  #sf-street-lightbox .sf-lightbox-help{position:absolute!important;right:12px!important;bottom:20px!important;color:#e6ddef!important;font:500 12px/1.2 system-ui!important;z-index:4!important}\n  #sf-street-lightbox .sf-photo-report-menu{position:absolute!important;left:12px!important;top:12px!important;right:auto!important;bottom:auto!important;transform:none!important;width:auto!important;min-height:40px!important;height:auto!important;border:1px solid #ffffff77!important;border-radius:8px!important;padding:8px 12px!important;background:#fff!important;color:#24152d!important;font:700 12px/1.2 system-ui!important;z-index:5!important}\n  #sf-street-lightbox button:focus-visible,#sf-street-lightbox img:focus-visible{outline:3px solid #b4f467!important;outline-offset:3px!important}\n  @media(max-width:700px){\n   #sf-street-lightbox .sf-lightbox-frame{width:100vw!important;height:100dvh!important;max-height:100dvh!important;border-radius:0!important;border:0!important}\n   #sf-street-lightbox .sf-lightbox-media{top:70px!important;bottom:92px!important;left:9px!important;right:9px!important}\n   #sf-street-lightbox .sf-lightbox-prev,#sf-street-lightbox .sf-lightbox-next{top:auto!important;bottom:16px!important;transform:none!important;width:48px!important;height:46px!important}\n   #sf-street-lightbox .sf-lightbox-counter{bottom:21px!important}\n   #sf-street-lightbox .sf-lightbox-help{left:0!important;right:0!important;bottom:76px!important;text-align:center!important;font-size:11px!important}\n   #sf-street-lightbox .sf-lightbox-close{top:max(12px,env(safe-area-inset-top))!important;right:12px!important}\n  }\n `;document.head.appendChild(photoViewerCSS);\n const details=document.createElement('section');details.id='sf-street-detail';details.hidden=true;details.setAttribute('aria-label','Street spot details');q('sf941-map').parentNode.appendChild(details);\n const mobileDetails=()=>window.matchMedia('(max-width: 700px)').matches;\n const closeDetails=()=>{details.hidden=true;details.classList.remove('sf-mobile-detail-open');document.body.classList.remove('sf-street-detail-open')};\n const detailShade=document.createElement('div');detailShade.id='sf-street-detail-shade';detailShade.hidden=true;document.body.appendChild(detailShade);\n const syncDetailOverlay=()=>{const open=!details.hidden&&mobileDetails();details.classList.toggle('sf-mobile-detail-open',open);detailShade.hidden=!open;document.body.classList.toggle('sf-street-detail-open',open)};\n detailShade.addEventListener('click',()=>{closeDetails();detailShade.hidden=true});\n window.addEventListener('resize',syncDetailOverlay);\n document.addEventListener('keydown',e=>{if(e.key==='Escape'&&details.classList.contains('sf-mobile-detail-open')&&viewer.hidden){closeDetails();detailShade.hidden=true}});\n const detailStyles=document.createElement('style');detailStyles.textContent=`\n /* Desktop: the map panel clips content below the map; keep spot details accessible on top of it. */\n @media(min-width:701px){\n  #sf941 .sf-map-panel{position:relative!important}\n  #sf941 #sf-street-detail:not([hidden]):not(.sf-mobile-detail-open){\n   display:block!important;position:absolute!important;right:12px!important;top:76px!important;bottom:auto!important;\n   width:min(396px,calc(100% - 28px))!important;max-width:396px!important;\n   max-height:calc(100% - 92px)!important;min-height:0!important;\n   overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior:contain!important;\n   z-index:1600!important;background:#fff!important;border:2px solid #cab2df!important;\n   border-radius:14px!important;box-shadow:0 12px 32px #0005!important;\n   padding:14px!important;box-sizing:border-box!important;\n  }\n  #sf941 #sf-street-detail:not([hidden]):not(.sf-mobile-detail-open) .sf-detail-close{\n   position:sticky!important;top:0!important;float:right!important;z-index:3!important;\n   background:#e9e2ef!important;width:36px!important;height:36px!important;border-radius:50%!important;\n  }\n }\n /* The current Bust Factor on sidebar cards is also the desktop entry to change a rating. */\n #sf941 #sf-street-results .sf-bust-card-action{\n  display:inline-flex!important;align-items:center!important;justify-content:flex-start!important;\n  text-align:left!important;background:transparent!important;border:1px solid transparent!important;\n  box-shadow:none!important;border-radius:8px!important;padding:5px 6px!important;margin:4px 0 0 -6px!important;\n  width:auto!important;max-width:100%!important;min-height:34px!important;height:auto!important;\n  white-space:normal!important;line-height:1.25!important;color:#502b78!important;\n  font:800 13px/1.25 system-ui,sans-serif!important;cursor:pointer!important;\n }\n #sf941 #sf-street-results .sf-bust-card-action:hover{background:#f1e9fb!important;border-color:#d4bee8!important}\n #sf941 #sf-street-results .sf-bust-card-action:focus-visible{outline:3px solid #9d61ce!important;outline-offset:2px!important}\n #sf941 .sf-bust-panel{border:2px solid #e3d5f1;background:#faf7ff;border-radius:13px;padding:12px;margin:10px 0;color:#241a30}\n #sf941 .sf-bust-heading{display:flex;gap:10px;justify-content:space-between;flex-wrap:wrap;align-items:center}\n #sf941 .sf-bust-heading strong{font-size:20px;color:#492477}\n #sf941 .sf-bust-heading span{font-size:13px;font-weight:800;color:#59317a}\n #sf941 .sf-bust-panel p{font-size:14px!important;line-height:1.4!important;color:#3f3450!important;margin:9px 0!important}\n #sf941 .sf-bust-panel small{font-size:12px;color:#685877;line-height:1.4}\n #sf941 .sf-bust-panel .sf-bust-last-report{font-size:12px!important;font-weight:750!important;color:#61467a!important;margin:8px 0!important}\n #sf941 .sf-bust-votes{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px}\n #sf941 .sf-bust-votes button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-width:0;min-height:64px;border:2px solid #ddd4e5!important;border-radius:12px;background:#fff!important;color:#3a274b!important;font-size:14px;font-weight:900;padding:8px 0!important;cursor:pointer}\n #sf941 .sf-bust-votes button{transition:background .15s ease,border-color .15s ease,box-shadow .15s ease,transform .15s ease}\n #sf941 .sf-bust-votes button.sf-bust-selected{border-color:var(--sf-risk-edge,#622e96)!important;background:var(--sf-risk-soft,#f0e5fc)!important;box-shadow:0 0 0 1px var(--sf-risk-edge,#622e96),0 2px 9px #0001!important}\n #sf941 .sf-bust-votes button.sf-bust-selected svg{filter:drop-shadow(0 2px 2px #0003);transform:translateY(-1px)}\n #sf941 .sf-bust-votes button[aria-pressed=\"true\"]{box-shadow:0 0 0 2px var(--sf-risk-edge,#622e96),0 4px 12px #0002!important}\n #sf941 .sf-bust-summary{display:inline-flex;align-items:center;gap:5px}\n #sf941 .sf-bust-summary svg{height:24px!important;width:22px!important;flex:none}\n #sf941 .sf-bust-card{display:flex!important;align-items:center;gap:6px}\n #sf941 .sf-bust-card svg{height:24px!important;width:22px!important;max-width:22px!important;flex:none}\n #sf941 .sf-bust-votes button:nth-child(1){--sf-risk-edge:#0b6748;--sf-risk-soft:#e7f8ef}\n #sf941 .sf-bust-votes button:nth-child(2){--sf-risk-edge:#126b74;--sf-risk-soft:#e4f7f8}\n #sf941 .sf-bust-votes button:nth-child(3){--sf-risk-edge:#8e6311;--sf-risk-soft:#fff5da}\n #sf941 .sf-bust-votes button:nth-child(4){--sf-risk-edge:#512991;--sf-risk-soft:#f1e9fc}\n #sf941 .sf-bust-votes button:nth-child(5){--sf-risk-edge:#992439;--sf-risk-soft:#ffeaee}\n #sf941 .sf-bust-votes button svg{width:29px!important;height:33px!important;flex:none}\n\n #sf941 .sf-bust-votes button:focus-visible{outline:3px solid #ae74db;outline-offset:2px}\n #sf941 .sf-bust-votes button:disabled{opacity:.5;cursor:wait}\n #sf941 .sf-bust-panel .sf-bust-label{font-weight:900!important;color:#512783!important}\n #sf941 .sf-bust-panel .sf-bust-message{min-height:18px;font-weight:800!important;color:#2f6b35!important}\n #sf941 .sf-bust-card{font-weight:800!important;color:#502b78!important;font-size:13px!important}\n #sf941 .sf-share-message{min-height:15px;color:#396329;font-weight:800}\n #sf-street-editor .sf-editor-camera,#sf-street-editor #sf-street-panel .sf-spot-camera,#sf941 .sf-spot-camera{display:flex!important;align-items:center;justify-content:center;min-height:52px;border:2px solid #5f328c!important;border-radius:12px!important;background:#6d3b9b!important;color:#fff!important;font-weight:900!important;margin:10px 0!important;padding:10px!important;box-shadow:0 3px 10px #48257730!important;cursor:pointer!important}\n #sf-street-editor .sf-editor-camera input,#sf-street-editor #sf-street-panel .sf-spot-camera input,#sf941 .sf-spot-camera input{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;overflow:hidden!important;pointer-events:none!important}\n #sf941 #sf-street-detail .sf-detail-actions>*{min-height:48px!important}\n @media(max-width:700px){#sf941 .sf-bust-panel{padding:12px;margin:12px 0}#sf941 .sf-bust-votes{gap:4px}#sf941 .sf-bust-votes button{min-height:58px;font-size:13px}#sf941 .sf-bust-heading strong{font-size:18px}#sf941 .sf-street-card-actions{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important}#sf941 .sf-street-card-actions>*{min-height:44px!important;text-align:center!important}}\n\n #sf-street-lightbox{z-index:2147483646!important}\n #sf-street-lightbox .sf-lightbox-frame{width:min(100%,1100px)!important;height:min(100%,100dvh)!important;margin:auto!important;padding:60px 55px 48px!important}\n #sf-street-lightbox img{max-height:calc(100dvh - 125px)!important;max-width:100%!important;object-fit:contain!important}\n #sf-street-lightbox .sf-lightbox-close{position:absolute!important;right:clamp(12px,3vw,32px)!important;top:max(16px,env(safe-area-inset-top))!important;width:52px!important;height:52px!important;background:#fff!important;color:#101510!important;border:3px solid #18211b!important;box-shadow:0 2px 18px #0008!important;font-size:29px!important;z-index:30!important}\n #sf-street-lightbox .sf-photo-report-menu{position:absolute!important;left:clamp(12px,3vw,32px)!important;top:max(19px,env(safe-area-inset-top))!important;width:auto!important;height:42px!important;font:700 13px system-ui!important;z-index:25!important}\n #sf-street-detail-shade[hidden]{display:none!important}\n @media(max-width:700px){\n #sf-street-detail-shade{position:fixed;inset:0;background:#0c1712a8;z-index:2147482000}\n #sf941 #sf-street-detail.sf-mobile-detail-open{display:block!important;position:fixed!important;z-index:2147482001!important;left:0!important;right:0!important;bottom:0!important;top:auto!important;width:100%!important;max-width:none!important;max-height:85dvh!important;overflow-y:auto!important;overscroll-behavior:contain!important;border-radius:22px 22px 0 0!important;background:#fff!important;box-shadow:0 -12px 45px #0004!important;padding:25px 18px max(24px,env(safe-area-inset-bottom))!important;box-sizing:border-box!important}\n #sf941 #sf-street-detail.sf-mobile-detail-open .sf-detail-close{position:sticky!important;top:0!important;float:right!important;z-index:5!important;width:44px!important;height:44px!important;border-radius:50%!important;background:#e7eee7!important;font-size:22px!important}\n #sf941 #sf-street-detail.sf-mobile-detail-open .sf-detail-actions{grid-template-columns:repeat(2,minmax(0,1fr))!important}\n #sf941 #sf-street-detail.sf-mobile-detail-open .sf-detail-actions>*{font-size:14px!important;min-height:46px!important}\n #sf-street-lightbox .sf-lightbox-frame{padding:75px 10px 60px!important}\n #sf-street-lightbox img{max-height:calc(100dvh - 150px)!important}\n }\n `;document.head.appendChild(detailStyles);\n const compactActionsStyles=document.createElement('style');compactActionsStyles.id='sf941-compact-share-actions-v4';\n compactActionsStyles.textContent=`\n /* Exactly one desktop row: no full-width Directions button */\n #sf941 #sf-street-results .sf-street-card-actions{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(0,1fr) 50px 50px!important;gap:6px!important;align-items:stretch!important;margin-top:10px!important}\n #sf941 #sf-street-results .sf-street-card-actions>*{grid-column:auto!important;min-width:0!important;width:100%!important;height:45px!important;min-height:45px!important;padding:4px 3px!important;margin:0!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:1px!important;border-radius:9px!important;box-sizing:border-box!important;text-decoration:none!important;white-space:nowrap!important;font:800 11px/1.15 system-ui,sans-serif!important}\n #sf941 #sf-street-results .sf-street-card-actions svg{width:18px!important;height:18px!important;min-width:18px!important;max-width:18px!important;min-height:18px!important;max-height:18px!important;flex:none!important}\n #sf941 #sf-street-results .sf-street-card-actions button[data-view]{background:#b4f467!important;border:1px solid #88bc43!important;color:#18251c!important}\n #sf941 #sf-street-results .sf-street-card-actions [data-share]{background:#f4eafc!important;border:1px solid #ccb1e6!important;color:#542684!important}\n #sf941 #sf-street-results .sf-street-card-actions a{background:#eef3e9!important;border:1px solid #b7cab0!important;color:#263e2c!important}\n #sf941 #sf-street-results .sf-street-card-actions>*:focus-visible{outline:3px solid #8954b5!important;outline-offset:2px!important}\n @media(max-width:370px){#sf941 #sf-street-results .sf-street-card-actions{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 45px 45px!important;gap:4px!important}}\n #sf941 #sf-street-detail .sf-detail-actions.sf-detail-actions-main{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:7px!important;margin:12px 0 7px!important}\n #sf941 #sf-street-detail .sf-detail-actions.sf-detail-actions-main>*{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:3px!important;grid-column:auto!important;padding:7px 4px!important;margin:0!important;min-height:54px!important;font:850 12px/1.2 system-ui,sans-serif!important;white-space:nowrap!important;text-decoration:none!important}\n #sf941 #sf-street-detail .sf-detail-actions.sf-detail-actions-main svg{height:19px!important;width:19px!important;flex:none!important}\n #sf941 #sf-street-detail .sf-detail-actions.sf-detail-actions-main [data-action=share]{background:#f4eafc!important;color:#512582!important;border-color:#d2b7e6!important}\n #sf941 #sf-street-detail .sf-spot-status-link{display:block!important;margin:7px 0 2px auto!important;background:transparent!important;color:#604879!important;border:0!important;padding:5px 0!important;text-decoration:underline!important;font:750 12px/1.3 system-ui,sans-serif!important;width:auto!important}\n @media(max-width:700px){#sf941 #sf-street-detail.sf-mobile-detail-open .sf-detail-actions.sf-detail-actions-main{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:5px!important}#sf941 #sf-street-detail.sf-mobile-detail-open .sf-detail-actions.sf-detail-actions-main>*{font-size:11px!important;padding:5px 2px!important;min-height:51px!important}}\n #sf-street-editor .sf-share-sheet{width:100%;max-width:680px;color:#282336;font-family:system-ui,sans-serif}\n #sf-street-editor .sf-share-lead{font-size:15px!important;line-height:1.45!important;color:#4b3a56!important;margin:0 0 14px!important}\n #sf-street-editor .sf-share-sheet-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}\n #sf-street-editor .sf-share-sheet-grid>button{display:flex!important;align-items:center!important;gap:9px!important;justify-content:flex-start!important;padding:13px 11px!important;margin:0!important;border-radius:11px!important;min-width:0!important;min-height:53px!important;color:#301e48!important;background:#f6f0fc!important;border:1px solid #d7bee9!important;font:800 14px/1.3 system-ui,sans-serif!important;text-align:left!important;cursor:pointer!important}\n #sf-street-editor .sf-share-sheet-grid>button:first-child{background:#b4f467!important;border-color:#8bc64b!important;color:#19321e!important}\n #sf-street-editor .sf-share-sheet-grid>button[disabled]{opacity:.58!important;cursor:wait!important}\n #sf-street-editor .sf-share-sheet-grid svg{flex:none;height:21px!important;width:21px!important}\n #sf-street-editor .sf-share-sheet-note{margin:12px 0 6px!important;color:#5a4a61!important;font:500 12px/1.5 system-ui,sans-serif!important}\n #sf-street-editor .sf-share-sheet-message{margin:8px 0 0!important;color:#2d6634!important;font:750 13px/1.4 system-ui,sans-serif!important;min-height:16px}\n #sf-street-editor .sf-share-sheet-preview:not([hidden]){margin:12px auto!important;display:flex!important;align-items:center!important;justify-content:center!important}\n #sf-street-editor .sf-share-sheet-preview img{width:110px!important;height:195px!important;max-width:110px!important;max-height:195px!important;object-fit:cover!important;border-radius:9px!important;border:2px solid #b7d37a!important}\n #sf-street-editor .sf-share-sheet-preview[hidden]{display:none!important}\n @media(max-width:450px){#sf-street-editor .sf-share-sheet-grid{grid-template-columns:1fr}#sf-street-editor .sf-share-sheet-grid>button{min-height:49px!important}}\n `;document.head.appendChild(compactActionsStyles);\n\n \n\n  function openMediaEditor(spot){\n   // A media upload is one modal workflow. Do not open details and the editor together.\n   closeDetails();detailShade.hidden=true;map.closePopup();\n   const existing=Math.min(5,photoCount(spot)),available=Math.max(0,5-existing);\n   const heading='Photos & video \u00B7 '+spot.name;\n   const editIntro=existing?`<p class=\"sf-editor-intro\">${existing} of 5 photos. Manage your existing photos or contribute a short video.</p>`:`<p class=\"sf-editor-intro\">Add a photo or a short video to <strong>${escape(spot.name)}</strong>. Either is optional.</p>`;\n   const existingMarkup=existing?`<div class=\"sf-existing-photo-grid\">${Array.from({length:existing},(_,i)=>`<div class=\"sf-existing-photo-item\"><img alt=\"Current photo ${i+1}\" src=\"${photoUrl(spot,i)}\"><label class=\"sf-existing-replace\">\u270E Replace photo ${i+1}<input type=\"file\" accept=\"image/*\" data-replace-index=\"${i}\"></label></div>`).join('')}</div><p class=\"sf-editor-replace-note\">Replacements are reviewed before appearing publicly. Select a current photo to replace it.</p><div class=\"sf-editor-replace-preview\"></div><button type=\"button\" class=\"sf-editor-replace-submit\" disabled>Submit replacement for review</button>`:'';\n   const adding=available?`<div class=\"sf-editor-add-more\"><h3>${existing?'Add more photos':'Add photos'} <small>${available} slot${available===1?'':'s'} available</small></h3><div class=\"sf-editor-photo-grid\"><label class=\"sf-editor-photo-picker\">\uFF0B<span>Choose photos</span><input type=\"file\" accept=\"image/*\" multiple></label><div class=\"sf-editor-photo-help\">JPG, PNG or supported phone photos. Maximum 5 per spot.</div></div><div class=\"sf-editor-previews\" aria-live=\"polite\"></div><button type=\"button\" class=\"sf-editor-save\" disabled>Upload photos</button></div>`:'';\n   const videoMarkup=videoCount(spot)\n    ? `<section class=\"sf941-media-editor-video\"><h3>\uD83C\uDFAC Spot video</h3><p>This spot already has a video (one per spot). Watch it in the spot details. Videos can be reported if inappropriate.</p></section>`\n    : `<section class=\"sf941-media-editor-video\"><h3>\uD83C\uDFAC Add a short video</h3><p>10\u201330 seconds \u00B7 iPhone MOV/MP4 accepted, including large originals. Video is optimized privately on your device before upload. Only a file under 12 MB is stored. Publishes immediately.</p><label class=\"sf941-media-video-picker\">Choose a video clip<input type=\"file\" accept=\"video/mp4,video/quicktime,.mp4,.mov\" data-video-file></label><p class=\"sf941-media-video-feedback\" data-video-message role=\"status\" aria-live=\"polite\">No video selected</p><button type=\"button\" class=\"sf941-media-video-upload\" data-video-submit disabled>Upload video clip</button></section>`;\n   openEditor(heading,editIntro+videoMarkup+existingMarkup+adding+`<p class=\"sf-editor-message\" role=\"status\" aria-live=\"polite\"></p>`,content=>{\n    const msg=content.querySelector('.sf-editor-message');\n    const fetchSpot=async(countDelta=0)=>{\n     try{const r=await fetch(API+'/api/street/spot?id='+encodeURIComponent(spot.id),{cache:'no-store'}),j=await r.json();if(!r.ok||!j.ok)throw Error('Unable to refresh spot');Object.assign(spot,j.spot)}\n     catch{if(countDelta)spot.photo_count=Math.min(5,photoCount(spot)+countDelta)}\n     // Update in-memory map/list records without clearing markers or changing location.\n     for(const source of [latest,recentItems])for(const item of source)if(Number(item.id)===Number(spot.id))Object.assign(item,spot);\n     const box=q('sf-street-results');if(box)delete box.dataset.sfCardSignature;\n     renderStreetResults();\n    };\n    const finishMediaUpdate=async countDelta=>{await fetchSpot(countDelta);closeEditor();showDetails(spot)};\n    const replacementInputs=[...content.querySelectorAll('[data-replace-index]')],replaceBtn=content.querySelector('.sf-editor-replace-submit'),replacePreview=content.querySelector('.sf-editor-replace-preview');\n    let replacement=null;\n    const showReplacement=()=>{if(!replacePreview)return;replacePreview.replaceChildren();replaceBtn.disabled=!replacement;if(replacement){const label=document.createElement('p');label.textContent='Replacing photo '+(replacement.index+1)+' \u00B7 '+replacement.file.name;replacePreview.append(label);replacePreview.append(buildPhotoChoice(replacement.file,replacement.index,()=>{replacement=null;showReplacement()},true))}};\n    replacementInputs.forEach(inp=>inp.onchange=()=>{const file=inp.files?.[0];inp.value='';if(!file)return;replacement={index:Number(inp.dataset.replaceIndex),file};msg.textContent='';showReplacement()});\n    if(replaceBtn)replaceBtn.onclick=async()=>{if(!replacement)return;replaceBtn.disabled=true;try{msg.textContent='Sending replacement for review\u2026';const up=new FormData();up.append('spot_id',spot.id);up.append('index',replacement.index);up.append('photo',await preparePhoto(replacement.file));const r=await fetch(API+'/api/street/photo/replace',{method:'POST',body:up}),j=await r.json();if(!r.ok||!j.ok)throw Error(j.error||'Request failed');msg.textContent=j.message;replacement=null;showReplacement()}catch(e){msg.textContent=e.message;replaceBtn.disabled=false}};\n    // Video is available on every existing spot, even when all 5 photo slots are occupied.\n    const vidInput=content.querySelector('[data-video-file]'),vidBtn=content.querySelector('[data-video-submit]'),vidMsg=content.querySelector('[data-video-message]');\n    if(vidInput&&vidBtn){\n     vidInput.addEventListener('change',async()=>{\n      const f=vidInput.files?.[0];vidBtn.disabled=true;\n      if(!f){vidMsg.textContent='No video selected';return}\n      vidMsg.textContent='Checking video length and size\u2026';\n      try{const meta=await sfVideoSourceMeta(f);vidMsg.textContent=f.name+' \u00B7 '+meta.seconds.toFixed(1)+' seconds \u00B7 '+(f.size/1000000).toFixed(1)+' MB'+(f.size>SF_VIDEO_LIMIT?' \u00B7 Will compress automatically':'');vidBtn.disabled=false}\n      catch(e){vidMsg.textContent='\u26A0 '+e.message;vidInput.value=''}\n     });\n     vidBtn.addEventListener('click',async()=>{\n      const file=vidInput.files?.[0];if(!file)return;\n      vidBtn.disabled=true;vidInput.disabled=true;vidMsg.textContent='Creating video preview and uploading\u2026';\n      try{await uploadSpotVideo(spot.id,file,'',message=>{vidMsg.textContent=message});spot.video_count=1;await finishMediaUpdate(0)}\n      catch(e){vidMsg.textContent='\u26A0 '+e.message;vidBtn.disabled=false;vidInput.disabled=false}\n     });\n    }\n    const input=content.querySelector('.sf-editor-photo-picker input'),btn=content.querySelector('.sf-editor-save'),previews=content.querySelector('.sf-editor-previews');\n    if(!input)return;\n    let files=[];const camera=document.createElement('label');camera.className='sf-editor-camera';camera.textContent='\uD83D\uDCF7 Open Camera to Take Photo';camera.title='Open your device camera to take a new photo';const cameraInput=document.createElement('input');cameraInput.type='file';cameraInput.accept='image/*';cameraInput.setAttribute('capture','environment');camera.appendChild(cameraInput);input.closest('label').insertAdjacentElement('afterend',camera);\n    const draw=()=>{previews.replaceChildren();const compact=photoCompactMobile();photoUIStyle(previews,{'display':'grid','grid-template-columns':compact?'minmax(0,1fr)':'repeat(3,minmax(0,1fr))','width':'100%','max-width':'100%','min-width':'0','gap':'8px'});files.forEach((f,i)=>previews.appendChild(buildPhotoChoice(f,i,()=>{files.splice(i,1);draw()},true)));btn.disabled=!files.length};\n    const add=chosen=>{if(chosen.length+files.length>available){msg.textContent=`Only ${available} additional photo slot(s) available.`;return}files.push(...chosen);msg.textContent='';draw()};input.onchange=()=>{add([...input.files]);input.value=''};cameraInput.onchange=()=>{add([...cameraInput.files]);cameraInput.value=''};draw();\n    btn.onclick=async()=>{if(!files.length)return;btn.disabled=true;let ok=0;for(const f of files){try{msg.textContent=`Uploading photo ${ok+1} of ${files.length}\u2026`;const up=new FormData();up.append('spot_id',spot.id);up.append('photo',await preparePhoto(f));const r=await fetch(API+'/api/street/photo',{method:'POST',body:up}),j=await r.json();if(!r.ok||!j.ok)throw Error(j.error||'Upload failed');ok++}catch(e){msg.textContent=e.message;break}}if(ok){msg.textContent=`${ok} photo(s) uploaded.`;files=[];draw();await finishMediaUpdate(ok)}else btn.disabled=false};\n   });\n  }\n\n const showDetails=x=>{\n  details.classList.toggle('sf-has-photo',photoCount(x)>0);\n  details.scrollTop=0;\n  details.hidden=false;\n  syncDetailOverlay();\n  // Only hide the default importer boilerplate; preserve real user-supplied descriptions.\n  const publicDescription=cleanSpotPublicCopy(x.description);\n  const importerBoilerplate='Source-listed skate spot. Feature details and current condition are not yet community-verified.';\n  const detailDescription=(publicDescription && publicDescription.toLowerCase()!==importerBoilerplate.toLowerCase() && !/^Iconic skateboarding landmark\\. Source-listed location near\\b/i.test(publicDescription))\n    ? `<p>${escape(publicDescription)}</p>` : '';\n  details.innerHTML=`<button class=\"sf-detail-close\" type=\"button\" aria-label=\"Close details\">\u2715</button><div class=\"sf-detail-head\"><div><span class=\"sf-detail-type\">${isIconicSpot(x)?escape(x.kind||'Street spot'):escape(x.kind)+' \u00B7 Street spot'}</span>${iconicTitle(x)}${detailDescription}${iconicHistory(x)}</div><span class=\"sf-detail-condition\">${escape(x.condition==='Unconfirmed'?'':x.condition)}</span></div>${Number.isFinite(Number(x.latitude))&&Number.isFinite(Number(x.longitude))?'<div class=\"sf941-detail-weather-location\" data-sf-weather-lat=\"'+Number(x.latitude)+'\" data-sf-weather-lon=\"'+Number(x.longitude)+'\" role=\"group\" aria-label=\"Nearby weather observation\"></div>':''}${gallery(x)}${videoPanel(x)}<section class=\"sf-bust-panel\" data-bust-spot=\"${Number(x.id)}\"><div class=\"sf-bust-heading\"><strong>Bust Factor</strong><span class=\"sf-bust-summary\" data-bust-summary>${bustIcon(x)}<span>${escape(bustBrief(x))}</span></span></div><div class=\"sf-bust-votes\" role=\"group\" aria-label=\"Rate your experience with security or police: 1 means you have never been kicked out, and 5 means almost always busted\">${[1,2,3,4,5].map(n=>`<button type=\"button\" data-bust-rating=\"${n}\" aria-label=\"${n} out of 5: ${BUST_LABELS[n]}\" title=\"${BUST_LABELS[n]}\">${shieldMark(false,n)}<span>${n}</span></button>`).join('')}</div><p class=\"sf-bust-scale\" data-bust-label aria-live=\"polite\">1 = Never Been Kicked Out \u00B7 5 = Almost Always Busted</p><p class=\"sf-bust-last-report\" data-bust-last-reported>Last report: checking\u2026</p><p data-bust-message class=\"sf-bust-message\" role=\"status\" aria-live=\"polite\"></p></section><div class=\"sf-detail-actions sf-detail-actions-main\"><button type=\"button\" data-action=\"locate\">${MAP_GLYPH} Map</button><button type=\"button\" data-action=\"media\">${CAMERA_GLYPH} Add media</button><a target=\"_blank\" rel=\"noopener\" href=\"${spotDirectionsUrl(x)}\" aria-label=\"Open driving directions\">${NAV_GLYPH} Directions</a><button type=\"button\" data-action=\"share\">${SHARE_GLYPH} Share</button></div><button type=\"button\" class=\"sf-spot-status-link\" data-action=\"status\">Spot status / Report an issue</button><p class=\"sf-share-message\" data-share-message role=\"status\" aria-live=\"polite\"></p><div id=\"sf-detail-extra\" hidden></div>`;\n  details.querySelector('[data-report-video]')?.addEventListener('click',async ev=>{\n   if(!confirm('Report this video? It will be hidden immediately and sent for review.'))return;\n   const btn=ev.currentTarget;btn.disabled=true;\n   try{\n    const r=await fetch(API+'/api/street/video/report',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spot_id:x.id,reason:'Other'})});\n    const d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Could not report video');\n    x.video_count=0;details.querySelector('.sf941-video-section')?.remove();\n    q('sf-street-results').removeAttribute('data-sf-card-signature');renderStreetResults();\n   }catch(e){alert(e.message);btn.disabled=false}\n  });\n  details.querySelectorAll('.sf-photo-tile img').forEach((im,i)=>{im.tabIndex=0;im.setAttribute('role','button');im.setAttribute('aria-label','Enlarge photo '+(i+1));im.onclick=()=>openViewer(x,i,im);im.onkeydown=e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();openViewer(x,i,im)}}});\n  details.querySelector('.sf-detail-close').onclick=()=>{closeDetails();detailShade.hidden=true;map.closePopup()};\n  details.querySelector('[data-action=locate]').onclick=()=>{focusLocation(x);if(mobileDetails()){closeDetails();detailShade.hidden=true;}map.getContainer().scrollIntoView({behavior:'smooth',block:'center'});};\n  details.querySelector('[data-action=share]').onclick=()=>openSpotShare(x);\n  const bustBox=details.querySelector('[data-bust-spot]');\n  let chosenBust=null,voteStarted=false;\n  const syncBust=()=>{\n   if(!bustBox?.isConnected||Number(bustBox.dataset.bustSpot)!==Number(x.id))return;\n   bustBox.querySelector('[data-bust-summary]').innerHTML=bustIcon(x)+'<span>'+escape(bustBrief(x))+'</span>';\n   const last=bustBox.querySelector('[data-bust-last-reported]');\n   if(last){const date=bustReportDate(x.bust_last_rated);\n    last.textContent=date?'Last community report: '+date:(Number(x.bust_votes)>0?'Last report date: checking\u2026':'No community reports yet');\n   }\n   bustBox.querySelectorAll('[data-bust-rating]').forEach(btn=>{\n    const value=Number(btn.dataset.bustRating),active=chosenBust!==null&&value<=chosenBust;\n    btn.classList.toggle('sf-bust-selected',active);\n    btn.setAttribute('aria-pressed',String(chosenBust===value));\n    btn.querySelector('svg').outerHTML=shieldMark(active,value);\n   });\n   const bustLabelNode=bustBox.querySelector('[data-bust-label]');\n   if(bustLabelNode)bustLabelNode.textContent=chosenBust===null?'1 = Never Been Kicked Out \u00B7 5 = Almost Always Busted':chosenBust+'/5 \u2014 '+bustLabel(chosenBust);\n  };\n  bustBox.querySelectorAll('[data-bust-rating]').forEach(btn=>btn.onclick=async()=>{\n   const score=Number(btn.dataset.bustRating),message=bustBox.querySelector('[data-bust-message]');voteStarted=true;\n   bustBox.querySelectorAll('[data-bust-rating]').forEach(b=>b.disabled=true);\n   message.textContent='Saving your report\u2026';\n   try{\n    const r=await fetch(API+'/api/street/bust/vote',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spot_id:x.id,rating:score})});\n    const d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Could not save rating');\n    chosenBust=Number(d.your_vote);x.bust_average=d.bust_average;x.bust_votes=d.bust_votes;x.bust_last_rated=d.bust_last_rated||null;\n    message.textContent=d.message==='Rating updated'?'Your Bust Factor report was updated.':'Thanks! Your Bust Factor report was saved.';\n    syncBust();const box=q('sf-street-results');if(box)delete box.dataset.sfCardSignature;renderStreetResults();\n   }catch(e){message.textContent=e.message}finally{bustBox.querySelectorAll('[data-bust-rating]').forEach(b=>b.disabled=false)}\n  });\n  syncBust();\n  fetch(API+'/api/street/bust/summary?spot_id='+encodeURIComponent(x.id)).then(r=>r.json()).then(d=>{\n   if(!d.ok||!bustBox.isConnected||voteStarted)return;\n   chosenBust=d.your_vote?Number(d.your_vote):null;\n   x.bust_average=d.bust_average;x.bust_votes=d.bust_votes;x.bust_last_rated=d.bust_last_rated||null;\n   syncBust();\n  }).catch(()=>{const last=bustBox.querySelector('[data-bust-last-reported]');if(last&&last.textContent.includes('checking'))last.textContent='Last report date temporarily unavailable';});\n  details.querySelector('[data-action=media]')?.addEventListener('click',()=>openMediaEditor(x));\n  details.querySelector('[data-edit-gallery]')?.addEventListener('click',()=>openMediaEditor(x));\n  details.querySelector('[data-action=status]').onclick=()=>{\n   const extra=details.querySelector('#sf-detail-extra');extra.hidden=false;extra.innerHTML='<p>How is this spot looking?</p><div class=\"sf-detail-actions\"><button data-act=\"Still Skatable\">\u2713 Still Skatable</button><button data-act=\"Busted\">\u26A0 Busted</button><button data-act=\"Removed\">\u2715 Removed</button><button data-act=\"Report\">Report spot</button></div><p data-message aria-live=\"polite\"></p>';\n   extra.querySelectorAll('[data-act]').forEach(b=>b.onclick=async()=>{const action=b.dataset.act;if(['Removed','Report'].includes(action)&&!confirm('Submit this report?'))return;b.disabled=true;try{const r=await fetch(API+'/api/street/feedback',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({id:x.id,action})}),d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Report failed');extra.querySelector('[data-message]').textContent=d.message}catch(e){extra.querySelector('[data-message]').textContent=e.message}finally{b.disabled=false}});\n  };\n  details.querySelectorAll('[data-photo-report]').forEach(b=>b.onclick=async()=>{if(!confirm('Report this photo? It will be hidden immediately.'))return;b.disabled=true;try{const r=await fetch(API+'/api/street/photo/report',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spot_id:x.id,index:Number(b.dataset.photoReport),reason:'Inappropriate image'})}),d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Report failed');b.closest('.sf-photo-tile').remove()}catch(e){alert(e.message);b.disabled=false}});\n };\n root.addEventListener('sf941:park-selected',()=>{closeDetails();detailShade.hidden=true;viewerSpot=null;map.closePopup()});\n const focusLocation=x=>{const lat=Number(x.latitude),lon=Number(x.longitude);if(!Number.isFinite(lat)||!Number.isFinite(lon))return;map.invalidateSize({pan:false,animate:false});map.setView([lat,lon],18,{animate:false});requestAnimationFrame(()=>map.invalidateSize({pan:false,animate:false}));};\n const spotPopup=x=>{const wrap=document.createElement('div');wrap.className='sf-street-preview';wrap.innerHTML=`<div class=\"sf941-iconic-popup-title\"><strong>${escape(x.name)}</strong>${iconicBadge(x)}</div><span>${isIconicSpot(x)?escape(x.kind||'Street spot'):escape(x.kind)+' \u00B7 Street spot'}</span><button type=\"button\">View details & photos \u2192</button>`;wrap.querySelector('button').onclick=()=>{focusLocation(x);showDetails(x);map.closePopup()};return wrap};\n const focusSpot=x=>{root.dispatchEvent(new CustomEvent('sf941:street-selected',{detail:{id:x.id}}));const lat=Number(x.latitude),lon=Number(x.longitude);focusLocation(x);recentLayer.clearLayers();const m=L.marker([lat,lon],{icon:streetIconFor(x),zIndexOffset:1000}).addTo(recentLayer);m.bindPopup(()=>spotPopup(x),{maxWidth:230,autoPan:false});showDetails(x);};\n let sfLastStreetViewport='',sfLastStreetFetchAt=0;\n  async function refreshMap(){if(!enabled)return;const n=++seq,b=map.getBounds(),u=new URL(API+'/api/street/list');\n  for(const [k,v] of Object.entries({south:Math.max(-90,b.getSouth()),north:Math.min(90,b.getNorth()),west:Math.max(-180,b.getWest()),east:Math.min(180,b.getEast())}))u.searchParams.set(k,v);\n  if(u.href===sfLastStreetViewport && Date.now()-sfLastStreetFetchAt<8000)return;\n   try{const r=await fetch(u),d=await r.json();if(n!==seq)return;sfLastStreetViewport=u.href;sfLastStreetFetchAt=Date.now();if(!r.ok||!d.ok)throw Error(d.error||'Could not load spots');latest=d.items||[];\n   // Diff markers instead of clearing the entire cluster layer on every pan/zoom.\n   // This prevents a transient blank map while Leaflet rebuilds its clusters.\n   const incoming=new Set(latest.map(x=>String(x.id)));\n   for(const [key,marker] of markers){if(!incoming.has(String(key))){streetLayer.removeLayer(marker);markers.delete(key)}}\n   for(const x of latest){const key=String(x.id);if(markers.has(key)){const prior=markers.get(key),nextIconic=isIconicSpot(x);if(Boolean(prior.options.sf941Iconic)!==nextIconic){prior.setIcon(streetIconFor(x));prior.options.sf941Iconic=nextIconic;}continue;}const lat=Number(x.latitude),lon=Number(x.longitude);if(!Number.isFinite(lat)||!Number.isFinite(lon))continue;const m=L.marker([lat,lon],{icon:streetIconFor(x),title:x.name,sf941Iconic:isIconicSpot(x)});m.bindPopup(()=>spotPopup(x));streetLayer.addLayer(m);markers.set(key,m)}\n   if(d.has_more)notice('Many street spots here \u2014 zoom in for more.');renderStreetResults();scheduleMixedIcons();\n  }catch(e){q('sf-street-recent').textContent='Street spots unavailable: '+e.message}\n }\n async function loadRecentMarkers(){try{const r=await fetch(API+'/api/street/recent',{cache:'no-store'}),d=await r.json();if(!r.ok||!d.ok)throw Error(d.error||'Could not load newest spots');recentItems=d.items||[];recentLayer.clearLayers();if(enabled && showRecentDiscovery)for(const x of recentItems){const m=L.marker([Number(x.latitude),Number(x.longitude)],{icon:streetIconFor(x),title:x.name});m.bindPopup(()=>spotPopup(x));recentLayer.addLayer(m)}renderStreetResults();return recentItems}catch(e){q('sf-street-recent').textContent='Street spot loading error: '+e.message;return []}}\n let timer;map.on('moveend',()=>{clearTimeout(timer);timer=setTimeout(refreshMap,350)});\n async function showNewest(){chooseSideTab('street',true);showRecentDiscovery=true;const out=q('sf-street-recent');out.textContent='Finding recent street spots\u2026';const items=await loadRecentMarkers();if(!items.length){out.textContent='No recent street spots found (or loading failed).';return}out.replaceChildren();const heading=document.createElement('strong');heading.textContent='Newest community street spots';out.appendChild(heading);const list=document.createElement('div');list.className='sf-street-newest-list';for(const x of items.slice(0,20)){const b=document.createElement('button');b.type='button';b.textContent=x.name+' \u00B7 '+x.kind;b.onclick=()=>{if(!enabled)setFilter('street');const lat=Number(x.latitude),lon=Number(x.longitude);map.setView([lat,lon],18);focusSpot(x);refreshMap()};list.appendChild(b)}out.appendChild(list);const first=items[0];if(first){map.setView([Number(first.latitude),Number(first.longitude)],16);refreshMap()}}\n function setFilter(value){if(activeMixedSpider){activeMixedSpider=false;spiderLayer.clearLayers()}sfLastStreetViewport='';showRecentDiscovery=false;recentLayer.clearLayers();filter=value;enabled=value!=='parks';root.querySelectorAll('[data-sf-filter]').forEach(b=>b.setAttribute('aria-pressed',String(b.dataset.sfFilter===value)));if(enabled){map.addLayer(streetLayer);map.addLayer(recentLayer);refreshMap()}else{map.removeLayer(streetLayer);map.removeLayer(recentLayer);seq++}\n  if(bridge.parkLayer){if(value==='street')map.removeLayer(bridge.parkLayer);else map.addLayer(bridge.parkLayer)}\n   syncMapKey();scheduleMixedIcons();\n // Changing map filters does not change the results-list tab.\n  renderStreetResults();}\n const buildStreetCard=x=>{const card=document.createElement('article');card.className='sf-street-result'+(photoCount(x)?' sf-has-photo':'')+(isIconicSpot(x)?' sf941-is-iconic':'');if(Number.isFinite(Number(x.latitude))&&Number.isFinite(Number(x.longitude))){card.dataset.sfWeatherLat=String(x.latitude);card.dataset.sfWeatherLon=String(x.longitude)}card.innerHTML=`<div class=\"sf-street-card-head\"><div class=\"sf-street-card-label\"><img class=\"sf-card-type-icon\" alt=\"\" aria-hidden=\"true\" src=\"${STREET_ICON_URL}\"><div><span class=\"sf-detail-type\">${isIconicSpot(x)?escape(x.kind||'Street spot'):escape(x.kind)+' \u00B7 Street spot'}</span>${iconicTitle(x)}${!isIconicSpot(x)&&x.condition&&x.condition!=='Unconfirmed'?`<p class=\"sf-street-condition\">${escape(x.condition)}</p>`:''}${!isIconicSpot(x)&&videoCount(x)?'<small style=\"display:block;color:#60328b;font-weight:800\">\u25B6 Spot video available</small>':''}<button type=\"button\" class=\"sf-bust-card sf-bust-card-action\" data-rate-bust aria-label=\"Rate or update Bust Factor for ${escape(x.name)}\" title=\"Rate or update Bust Factor\">${bustIcon(x)}<span>${escape(bustBrief(x))}</span></button></div></div>${photoCount(x)?`<img class=\"sf-street-thumbnail\" loading=\"lazy\" alt=\"${escape(x.name)}\" src=\"${photoUrl(x)}\">`:videoCount(x)?`<button type=\"button\" class=\"sf941-video-thumb\" data-open-video aria-label=\"Open video preview for ${escape(x.name)}\" title=\"View street spot video\"><img class=\"sf941-video-poster\" loading=\"lazy\" alt=\"\" src=\"${videoPosterUrl(x)}\" onerror=\"this.style.display='none'\"><span class=\"sf941-video-play\" aria-hidden=\"true\">\u25B6</span></button>`:'<span class=\"sf-no-photo\">\uD83D\uDCF7</span>'}</div><div class=\"sf-street-card-actions\"><button type=\"button\" data-view aria-label=\"View spot on map\">${MAP_GLYPH}<span>Map</span></button><button type=\"button\" data-photo aria-label=\"Add photos or a video to spot\">${CAMERA_GLYPH}<span>Media</span></button><button type=\"button\" data-share aria-label=\"Share spot\" title=\"Share this spot\">${SHARE_GLYPH}<span>Share</span></button><a target=\"_blank\" rel=\"noopener\" href=\"${spotDirectionsUrl(x)}\" aria-label=\"Driving directions\" title=\"Driving directions\">${NAV_GLYPH}<span>Directions</span></a></div>`;card.querySelector('[data-view]').onclick=()=>focusSpot(x);\n card.querySelector('[data-rate-bust]').onclick=()=>{\n  showDetails(x);\n  // Expose the voting controls immediately, including on desktop where map details are an overlay.\n  requestAnimationFrame(()=>{const panel=details.querySelector('.sf-bust-panel');if(!panel||details.hidden)return;\n   details.scrollTop+=panel.getBoundingClientRect().top-details.getBoundingClientRect().top-12;\n  });\n };\n const thumb=card.querySelector('img.sf-street-thumbnail');if(thumb){thumb.tabIndex=0;thumb.setAttribute('role','button');thumb.setAttribute('aria-label','Enlarge street spot photo');thumb.onclick=()=>{showDetails(x);openViewer(x,0,thumb)};thumb.onkeydown=e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();thumb.click()}}}card.querySelector('[data-open-video]')?.addEventListener('click',()=>{showDetails(x);const videoSection=details.querySelector('.sf941-video-section');if(videoSection)details.scrollTop+=videoSection.getBoundingClientRect().top-details.getBoundingClientRect().top-12;});card.querySelector('[data-photo]')?.addEventListener('click',()=>openMediaEditor(x));card.querySelector('[data-share]').onclick=()=>openSpotShare(x);return card;};\n function renderStreetResults(){let box=q('sf-street-results');if(!box){box=document.createElement('div');box.id='sf-street-results';box.setAttribute('role','tabpanel');box.setAttribute('aria-labelledby','sf941-tab-streets');q('sf941-list').parentNode.insertBefore(box,q('sf941-list'));q('sf941-list').setAttribute('role','tabpanel');q('sf941-list').setAttribute('aria-labelledby','sf941-tab-parks')}\n  const bounds=map.getBounds();\n  const items=streetSearchMatches!==null?streetSearchMatches:[...new Map([...latest,...(showRecentDiscovery?recentItems:[])].map(x=>[x.id,x])).values()].filter(x=>Number.isFinite(Number(x.latitude))&&Number.isFinite(Number(x.longitude))&&(showRecentDiscovery||bounds.contains([Number(x.latitude),Number(x.longitude)])));\n  const center=map.getCenter();\n  const areaParks=(bridge.getVisibleParkRows?.()||[]).filter(p=>\n    Number.isFinite(Number(p.latitude))&&Number.isFinite(Number(p.longitude))&&\n    bounds.contains([Number(p.latitude),Number(p.longitude)]));\n  const combined=sideTab==='all'?[\n    ...areaParks.map(p=>({type:'park',item:p,lat:Number(p.latitude),lon:Number(p.longitude)})),\n    ...items.map(p=>({type:'street',item:p,lat:Number(p.latitude),lon:Number(p.longitude)}))\n  ].sort((a,b)=>map.distance(center,[a.lat,a.lon])-map.distance(center,[b.lat,b.lon])||\n    (a.type==='street'?-1:1)):[];\n  syncSidebarTabs(items.length,areaParks.length);\n  // Keep existing cards and image nodes if results are unchanged.\n  // Rebuilding <img> nodes on every map move caused repeated /api/street/photo requests.\n  const cardSignature=JSON.stringify([sideTab,filter,showRecentDiscovery,streetSearchQuery,sideTab==='all'?[center.lat.toFixed(3),center.lng.toFixed(3),bridge.parkUpdateVersion?.()||0,combined.slice(0,60).map(v=>v.type+':'+String(v.item.id))]:null,items.slice(0,60).map(x=>[x.id,x.name,x.kind,x.condition,x.latitude,x.longitude,x.photo_key,x.photo_count,x.bust_average,x.bust_votes,x.video_count,x.source_provider,x.source_url,x.is_iconic,x.iconic_history,x.iconic_access_status])]);\n  if(box.dataset.sfCardSignature===cardSignature)return;\n  box.dataset.sfCardSignature=cardSignature;\n  box.replaceChildren();\n  const h=document.createElement('strong');h.textContent=sideTab==='all'?'All Spots \u00B7 visible map area':streetSearchMatches!==null?'Street spots matching \u201C'+streetSearchQuery+'\u201D':'Street spots \u00B7 visible map area';box.appendChild(h);\n  if(sideTab==='all'){\n    const summary=document.createElement('p');summary.className='sf-list-note sf941-all-results-summary';\n    summary.textContent=areaParks.length+' skatepark'+(areaParks.length===1?'':'s')+' \u00B7 '+items.length+' street spot'+(items.length===1?'':'s')+' \u00B7 closest first';\n    box.appendChild(summary);\n  }\n  if(sideTab==='all'?!combined.length:!items.length){\n    const m=document.createElement('p');\n    m.textContent=sideTab==='all'?'No skateparks or street spots in this map view. Pan or zoom to explore.':streetSearchMatches!==null?'No street spots match this name. Check Parks or try another search.':'No street spots loaded yet. Try moving the map.';\n    box.appendChild(m);\n  }\n  const status=q('sf941-status');if(status&&streetSearchMatches===null){\n    const parkCount=areaParks.length,streetCount=items.length;\n    status.textContent=(parkCount+streetCount)+' spot'+(parkCount+streetCount===1?'':'s')+' in this map area';\n  }\n  if(sideTab==='all'){\n   combined.slice(0,60).forEach(entry=>\n     box.appendChild(entry.type==='park'?bridge.makeParkCard(entry.item,{fromMapCenter:true}):buildStreetCard(entry.item)));\n  }else{\n   items.slice(0,60).forEach(x=>box.appendChild(buildStreetCard(x)));\n  }\n }\n\n // Explicit street-name search uses the nationwide public street directory,\n // not just markers currently loaded in the map viewport.\n const cleanSearchName=s=>String(s??'').toLowerCase().normalize('NFKD')\n   .replace(/[\\u0300-\\u036f]/g,'').replace(/[^a-z0-9]+/g,' ').trim();\n bridge.clearStreetSearch=()=>{\n   ++streetSearchSerial;streetSearchQuery='';streetSearchMatches=null;\n   nameSearchPins.clearLayers();sideTabTouched=false;\n   const box=q('sf-street-results');if(box)delete box.dataset.sfCardSignature;\n   renderStreetResults();\n };\n bridge.searchStreetNames=async name=>{\n   const serial=++streetSearchSerial;\n   streetSearchQuery=String(name||'').trim();\n   streetSearchMatches=[];nameSearchPins.clearLayers();sideTabTouched=false;\n   if(!streetSearchQuery){renderStreetResults();return {matches:[]};}\n   try{\n     if(!streetSearchCache||Date.now()-streetSearchCache.at>120000){\n       const u=new URL(API+'/api/street/list');\n       Object.entries({south:-90,north:90,west:-180,east:180})\n         .forEach(([key,value])=>u.searchParams.set(key,value));\n       const r=await fetch(u,{cache:'no-store'}),d=await r.json();\n       if(!r.ok||!d.ok||!Array.isArray(d.items))throw Error(d.error||'Street search unavailable');\n       streetSearchCache={items:d.items,partial:Boolean(d.has_more),at:Date.now()};\n     }\n     if(serial!==streetSearchSerial)return {stale:true,matches:[]};\n     const needle=cleanSearchName(streetSearchQuery);\n     const all=[...new Map([...streetSearchCache.items,...latest,...recentItems]\n       .map(x=>[String(x.id),x])).values()];\n     const matching=all.filter(x=>cleanSearchName(x.name).includes(needle)\n       &&Number.isFinite(Number(x.latitude))&&Number.isFinite(Number(x.longitude)));\n     matching.sort((a,b)=>{\n       const aa=cleanSearchName(a.name),bb=cleanSearchName(b.name);\n       return Number(bb===needle)-Number(aa===needle)||aa.localeCompare(bb);\n     });\n     streetSearchMatches=matching.slice(0,80);\n     for(const spot of streetSearchMatches.slice(0,50)){\n       const marker=L.marker([Number(spot.latitude),Number(spot.longitude)],\n         {icon:streetIconFor(spot),title:spot.name,zIndexOffset:1200}).addTo(nameSearchPins);\n       marker.bindPopup(()=>spotPopup(spot));\n       marker.on('click',()=>focusSpot(spot));\n     }\n     const box=q('sf-street-results');if(box)delete box.dataset.sfCardSignature;\n     renderStreetResults();\n     return {matches:streetSearchMatches.slice(),partial:streetSearchCache.partial};\n   }catch(error){\n     if(serial!==streetSearchSerial)return {stale:true,matches:[]};\n     streetSearchMatches=[];nameSearchPins.clearLayers();\n     const box=q('sf-street-results');if(box)delete box.dataset.sfCardSignature;\n     renderStreetResults();\n     return {matches:[],unavailable:true,error:String(error.message||error)};\n   }\n };\n\n root.querySelectorAll('[data-sf-filter]').forEach(b=>b.onclick=()=>setFilter(b.dataset.sfFilter));\n q('sf-street-newest').onclick=()=>{setFilter('street');showNewest()};\n q('sf-street-counts').style.cursor='pointer';q('sf-street-counts').title='Click to view newest street spots';q('sf-street-counts').onclick=()=>{setFilter('street');showNewest()};\n const panel=q('sf-street-panel');panel.innerHTML=`<h3>Add a street spot</h3><p>Use your phone's GPS or place a pin on the map. Public street spots appear immediately. Please do not mark private homes, restricted property or sensitive locations.</p><div class=\"sf-street-actions\"><button type=\"button\" id=\"sf-spot-gps\">\u25CE Use my location</button><button type=\"button\" id=\"sf-spot-pin\">\uD83D\uDCCD Drop pin on map</button></div><p id=\"sf-spot-coords\" class=\"sf-street-muted\" role=\"status\" aria-live=\"polite\">\uD83D\uDCCD No location selected yet. Choose GPS or drop a pin.</p><form id=\"sf-spot-form\"><div class=\"sf-street-grid\"><label>Type<select name=\"kind\" required><option>Ledge</option><option>Curb</option><option>Rail</option><option>Stairs</option><option>Gap</option><option>Manual Pad</option><option>Bank</option><option>Wallride</option><option>Transition</option><option>Other</option></select></label><label>Spot name (optional)<input name=\"name\" maxlength=\"90\" placeholder=\"Downtown ledge\"></label></div><label>Description (optional)<textarea name=\"description\" maxlength=\"500\" rows=\"2\" placeholder=\"What makes this spot good?\"></textarea></label><label>Up to 5 photos (optional)<input type=\"file\" name=\"photos\" accept=\"image/*\" multiple><small>Choose up to five. Photos are resized automatically before uploading.</small></label><p id=\"sf-photo-count\" class=\"sf-photo-count\" aria-live=\"polite\">No photos selected</p><div id=\"sf-photo-preview\" class=\"sf-photo-preview\" role=\"list\" aria-label=\"Selected photo previews\"></div><label>Short spot video (optional)<input type=\"file\" name=\"video\" accept=\"video/mp4,video/quicktime,.mp4,.mov\"><small class=\"sf941-video-hint\">One 10\u201330 second iPhone MOV or MP4. Large original clips are automatically optimized on your device before upload.</small></label><p id=\"sf-video-selection\" role=\"status\" aria-live=\"polite\">No video selected</p><div style=\"display:none!important\" aria-hidden=\"true\">Website<input name=\"company_website\" tabindex=\"-1\" autocomplete=\"off\"></div><div class=\"sf-street-actions\"><button type=\"submit\" class=\"sf-primary\">Publish Street Spot</button><button type=\"button\" id=\"sf-spot-cancel\">Cancel</button></div><p id=\"sf-street-message\" aria-live=\"polite\"></p></form>`;\n // The spot author may optionally submit the FIRST Bust Factor report while creating a spot.\n // It is a rating of how often skaters report being asked to leave, not permission to skate.\n const createForm=q('sf-spot-form');\n const createBust=document.createElement('fieldset');\n createBust.id='sf-spot-bust';createBust.className='sf-spot-bust';\n createBust.innerHTML=`<legend>\uD83D\uDEE1 Bust Factor <small>(optional)</small></legend><p class=\"sf-spot-bust-help\">What's your experience with security or police at this spot? Choose based on your experience, or skip if you haven't skated here.</p><div class=\"sf-spot-bust-options\" role=\"group\" aria-label=\"Your experience with security or police: 1 means you have never been kicked out, and 5 means almost always busted\">${[1,2,3,4,5].map(n=>`<button type=\"button\" data-create-bust=\"${n}\" aria-pressed=\"false\" aria-label=\"${n} out of 5: ${BUST_LABELS[n]}\" title=\"${BUST_LABELS[n]}\">${shieldMark(false,n)}<span>${n}</span></button>`).join('')}</div><div class=\"sf-spot-bust-caption\"><span id=\"sf-spot-bust-chosen\" role=\"status\" aria-live=\"polite\">No rating selected</span><button type=\"button\" id=\"sf-spot-bust-clear\" hidden>Clear rating</button></div>`;\n createForm.querySelector('[name=photos]').closest('label').insertAdjacentElement('beforebegin',createBust);\n let initialBustRating=null;\n const drawCreateBust=()=>{\n   createBust.querySelectorAll('[data-create-bust]').forEach(btn=>{\n     const n=Number(btn.dataset.createBust),active=initialBustRating!==null&&n<=initialBustRating;\n     btn.classList.toggle('sf-bust-selected',active);\n     btn.setAttribute('aria-pressed',String(initialBustRating===n));\n     btn.innerHTML=shieldMark(active,n)+'<span>'+n+'</span>';\n   });\n   createBust.querySelector('#sf-spot-bust-chosen').textContent=initialBustRating===null?'No rating selected':initialBustRating+'/5 \u2014 '+bustLabel(initialBustRating);\n   createBust.querySelector('#sf-spot-bust-clear').hidden=initialBustRating===null;\n };\n createBust.querySelectorAll('[data-create-bust]').forEach(btn=>btn.addEventListener('click',()=>{initialBustRating=Number(btn.dataset.createBust);drawCreateBust()}));\n createBust.querySelector('#sf-spot-bust-clear').onclick=()=>{initialBustRating=null;drawCreateBust()};\n drawCreateBust();\n // The editor is moved outside #sf941 on mobile; styles must target both locations.\n const createBustStyles=document.createElement('style');createBustStyles.id='sf941-create-bust-styles';\n createBustStyles.textContent=`\n #sf941 .sf-spot-bust,#sf-street-editor .sf-spot-bust{min-inline-size:0;width:100%;max-width:100%;box-sizing:border-box;border:2px solid #e0d4ed;border-radius:14px;padding:12px;margin:14px 0;background:#faf8fe;color:#2d2140}\n #sf941 .sf-spot-bust legend,#sf-street-editor .sf-spot-bust legend{font-size:17px;font-weight:900;line-height:1.35;color:#4c257a;padding:0 6px}\n #sf941 .sf-spot-bust legend small,#sf-street-editor .sf-spot-bust legend small{font-size:12px;color:#665576;font-weight:600}\n #sf941 .sf-spot-bust .sf-spot-bust-help,#sf-street-editor .sf-spot-bust .sf-spot-bust-help{font-size:14px!important;line-height:1.45!important;margin:2px 0 12px!important;color:#352a43!important;font-weight:500}\n #sf941 .sf-spot-bust-options,#sf-street-editor .sf-spot-bust-options{display:grid!important;grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:5px!important;max-width:100%;width:100%;box-sizing:border-box}\n #sf941 .sf-spot-bust-options button,#sf-street-editor .sf-spot-bust-options button{display:flex!important;flex-direction:column!important;justify-content:center!important;align-items:center!important;gap:3px!important;min-width:0!important;width:100%!important;min-height:64px!important;margin:0!important;padding:6px 0!important;border:2px solid #d3c6dd!important;border-radius:10px!important;background:#fff!important;color:#3e3051!important;box-sizing:border-box!important;font:900 14px/1.1 system-ui,sans-serif!important;cursor:pointer!important}\n #sf941 .sf-spot-bust-options button,#sf-street-editor .sf-spot-bust-options button{transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}\n #sf941 .sf-spot-bust-options button.sf-bust-selected,#sf-street-editor .sf-spot-bust-options button.sf-bust-selected{background:var(--sf-risk-soft,#ede1fb)!important;border-color:var(--sf-risk-edge,#703e9b)!important;color:#302038!important;box-shadow:0 0 0 1px var(--sf-risk-edge,#703e9b),0 2px 8px #0001!important}\n #sf941 .sf-spot-bust-options button[aria-pressed=\"true\"],#sf-street-editor .sf-spot-bust-options button[aria-pressed=\"true\"]{box-shadow:0 0 0 2px var(--sf-risk-edge,#703e9b),0 4px 12px #0002!important}\n #sf941 .sf-spot-bust-options button.sf-bust-selected svg,#sf-street-editor .sf-spot-bust-options button.sf-bust-selected svg{filter:drop-shadow(0 2px 2px #0003)}\n #sf941 .sf-spot-bust-options button:nth-child(1),#sf-street-editor .sf-spot-bust-options button:nth-child(1){--sf-risk-edge:#0b6748;--sf-risk-soft:#e7f8ef}\n #sf941 .sf-spot-bust-options button:nth-child(2),#sf-street-editor .sf-spot-bust-options button:nth-child(2){--sf-risk-edge:#126b74;--sf-risk-soft:#e4f7f8}\n #sf941 .sf-spot-bust-options button:nth-child(3),#sf-street-editor .sf-spot-bust-options button:nth-child(3){--sf-risk-edge:#8e6311;--sf-risk-soft:#fff5da}\n #sf941 .sf-spot-bust-options button:nth-child(4),#sf-street-editor .sf-spot-bust-options button:nth-child(4){--sf-risk-edge:#512991;--sf-risk-soft:#f1e9fc}\n #sf941 .sf-spot-bust-options button:nth-child(5),#sf-street-editor .sf-spot-bust-options button:nth-child(5){--sf-risk-edge:#992439;--sf-risk-soft:#ffeaee}\n\n #sf941 .sf-spot-bust-options button:focus-visible,#sf-street-editor .sf-spot-bust-options button:focus-visible{outline:3px solid #a078ca!important;outline-offset:2px!important}\n #sf941 .sf-spot-bust-options svg,#sf-street-editor .sf-spot-bust-options svg{width:29px!important;height:33px!important;max-width:29px!important;max-height:33px!important;flex:none!important}\n #sf941 .sf-spot-bust-caption,#sf-street-editor .sf-spot-bust-caption{display:flex!important;justify-content:space-between!important;align-items:center!important;flex-wrap:wrap!important;gap:6px!important;margin:10px 0 4px!important;min-height:30px!important}\n #sf941 #sf-spot-bust-chosen,#sf-street-editor #sf-spot-bust-chosen{font-size:14px!important;font-weight:850!important;color:#4b2878!important}\n #sf941 #sf-spot-bust-clear,#sf-street-editor #sf-spot-bust-clear{min-height:32px!important;width:auto!important;background:#fff!important;color:#4b2878!important;border:1px solid #c0a2d9!important;font-size:12px!important;padding:5px 8px!important;margin:0!important;line-height:1.1!important}\n #sf941 #sf-spot-bust-clear[hidden],#sf-street-editor #sf-spot-bust-clear[hidden]{display:none!important}\n #sf941 .sf-spot-bust>small,#sf-street-editor .sf-spot-bust>small{display:block!important;color:#655770!important;font-size:12px!important;line-height:1.4!important}\n @media(max-width:380px){#sf941 .sf-spot-bust,#sf-street-editor .sf-spot-bust{padding:9px}#sf941 .sf-spot-bust-options,#sf-street-editor .sf-spot-bust-options{gap:3px!important}#sf941 .sf-spot-bust-options button,#sf-street-editor .sf-spot-bust-options button{min-height:57px!important;padding:4px 0!important}}\n `;\n document.head.appendChild(createBustStyles);\n const photoInput=q('sf-spot-form').querySelector('[name=photos]');\n const videoInput=q('sf-spot-form').querySelector('[name=video]');\n videoInput.addEventListener('change',async()=>{const f=videoInput.files?.[0],status=q('sf-video-selection');if(!f){status.textContent='No video selected';return}status.textContent='Checking video\u2026';try{const d=await sfVideoSourceMeta(f);status.textContent=f.name+' \u00B7 '+d.seconds.toFixed(1)+' sec \u00B7 '+(f.size/1000000).toFixed(1)+' MB'+(f.size>SF_VIDEO_LIMIT?' \u00B7 Will compress before upload':'')}catch(e){status.textContent='\u26A0 '+e.message;videoInput.value=''}});\n const spotCamera=document.createElement('label');spotCamera.className='sf-spot-camera';spotCamera.textContent='\uD83D\uDCF7 Open Camera to Take Photo';spotCamera.title='Open your device camera to take a new photo';const spotCameraInput=document.createElement('input');spotCameraInput.type='file';spotCameraInput.accept='image/*';spotCameraInput.setAttribute('capture','environment');spotCamera.appendChild(spotCameraInput);photoInput.closest('label').insertAdjacentElement('afterend',spotCamera);\n\n let selectedPhotos=[];\n const photoCompactMobile=()=>window.matchMedia('(max-width: 700px)').matches;\n const photoUIStyle=(el,styles)=>{for(const [k,v] of Object.entries(styles))el.style.setProperty(k,v,'important')};\n // Do not depend on Shopify's global image CSS. Explicitly size each photo and row in JS.\n const buildPhotoChoice=(file,index,onRemove,existing=false)=>{\n   const compact=photoCompactMobile();\n   const wrap=document.createElement('div');wrap.className=existing?'sf-editor-photo-preview':'sf-photo-preview-item';wrap.setAttribute('role','listitem');\n   if(compact)photoUIStyle(wrap,{'display':'grid','grid-template-columns':'64px minmax(0,1fr) 70px','align-items':'center','gap':'8px','width':'100%','max-width':'100%','min-width':'0','min-height':'68px','padding':'5px','box-sizing':'border-box','overflow':'hidden','flex-direction':'row'});\n   const img=document.createElement('img');const url=URL.createObjectURL(file);\n   img.src=url;img.alt='Selected photo '+(index+1);img.loading='eager';img.decoding='async';\n   img.setAttribute('width',compact?'64':'96');img.setAttribute('height',compact?'58':'88');\n   photoUIStyle(img,{'display':'block','width':compact?'64px':'100%','height':compact?'58px':'88px','max-width':compact?'64px':'100%','max-height':compact?'58px':'88px','min-width':'0','min-height':'0','object-fit':'cover','float':'none','margin':'0','padding':'0','border':'0','border-radius':'6px','aspect-ratio':'auto'});\n   img.onload=()=>URL.revokeObjectURL(url);\n   img.onerror=()=>{URL.revokeObjectURL(url);img.alt='Photo '+(index+1)+' selected'};\n   const label=document.createElement('span');label.className='sf-selected-photo-label';\n   label.textContent='Photo '+(index+1)+(file.name?' \u00B7 '+file.name:'');\n   photoUIStyle(label,{'display':compact?'block':'none','min-width':'0','max-width':'100%','overflow':'hidden','text-overflow':'ellipsis','white-space':'nowrap','font-size':'12px','font-weight':'700','color':'#243b2b'});\n   const btn=document.createElement('button');btn.type='button';btn.className='sf-photo-preview-remove';btn.textContent='Remove';btn.setAttribute('aria-label','Remove photo '+(index+1));btn.onclick=onRemove;\n   if(compact)photoUIStyle(btn,{'display':'block','width':'70px','max-width':'70px','min-width':'0','min-height':'40px','height':'40px','font-size':'12px','margin':'0','padding':'5px 1px','box-sizing':'border-box'});\n   wrap.append(img,label,btn);return wrap;\n };\n const renderPreview=()=>{\n   const el=q('sf-photo-preview'),count=q('sf-photo-count');\n   el.replaceChildren();\n   const compact=photoCompactMobile();\n   photoUIStyle(el,{'display':'grid','grid-template-columns':compact?'minmax(0,1fr)':'repeat(3,minmax(0,1fr))','gap':'8px','max-width':'100%','width':'100%','min-width':'0','box-sizing':'border-box'});\n   count.textContent=selectedPhotos.length?`${selectedPhotos.length} of 5 photos selected \u00B7 compact previews`:'No photos selected \u00B7 compact previews';\n   selectedPhotos.forEach((f,i)=>el.appendChild(buildPhotoChoice(f,i,()=>{selectedPhotos.splice(i,1);renderPreview()})));\n };\n const addSpotPhotoFiles=files=>{if(files.length+selectedPhotos.length>5){notice('You can add up to 5 photos.');return}selectedPhotos.push(...files);renderPreview()};\n photoInput.addEventListener('change',()=>{addSpotPhotoFiles([...photoInput.files]);photoInput.value=''});\n spotCameraInput.addEventListener('change',()=>{addSpotPhotoFiles([...spotCameraInput.files]);spotCameraInput.value=''});\n const showCoords=()=>{const el=q('sf-spot-coords');el.textContent=chosen?`\u2713 Location selected! ${chosen.lat.toFixed(5)}, ${chosen.lng.toFixed(5)}. You can drag the map marker to adjust.`:'\uD83D\uDCCD No location selected yet. Choose GPS or drop a pin.';el.classList.toggle('sf-location-confirmed',!!chosen)};\n function choose(lat,lng){chosen={lat,lng};if(pin)map.removeLayer(pin);pin=L.marker([lat,lng],{draggable:true,title:'Drag to adjust spot location'}).addTo(map);pin.on('dragend',()=>{chosen=pin.getLatLng();showCoords()});map.setView([lat,lng],Math.max(map.getZoom(),17));showCoords();placing=false;map.getContainer().style.cursor='';notice('Location selected. Choose the spot type and publish.')}\n q('sf-street-toggle').onclick=()=>{panel.hidden=false;if(window.matchMedia('(max-width: 700px)').matches){openEditor('Add a street spot','<div id=\"sf-editor-create-slot\"></div>',content=>{content.querySelector('#sf-editor-create-slot').appendChild(panel);panel.hidden=false},()=>{q('sf941-street-ui').insertBefore(panel,q('sf-street-recent'));panel.hidden=true})}else{panel.scrollIntoView({block:'nearest',behavior:'smooth'})}};\n q('sf-spot-gps').onclick=()=>{if(!navigator.geolocation){notice('GPS unavailable. Use the map pin instead.');return}notice('Getting your location\u2026');q('sf-spot-coords').classList.remove('sf-location-confirmed');q('sf-spot-coords').textContent='\u2316 Finding your location\u2026 Please allow location access if prompted.';navigator.geolocation.getCurrentPosition(p=>{bridge.setUserLocation?.(p.coords);choose(p.coords.latitude,p.coords.longitude)},e=>{q('sf-spot-coords').classList.remove('sf-location-confirmed');q('sf-spot-coords').textContent='\u26A0 Location unavailable: '+e.message+'. Check location permission or choose Drop pin on map.';notice('Could not get location: '+e.message+'. Try Drop pin on map.')},{enableHighAccuracy:true,timeout:18000,maximumAge:60000})};\n q('sf-spot-pin').onclick=()=>{placing=true;notice('Tap the map where the spot is located.');map.getContainer().style.cursor='crosshair';panel.hidden=true;if(!editor.hidden)closeEditor()};\n map.on('click',e=>{if(placing){choose(e.latlng.lat,e.latlng.lng);panel.hidden=false;if(window.matchMedia('(max-width: 700px)').matches){q('sf-street-toggle').click()}else panel.scrollIntoView({block:'nearest',behavior:'smooth'})}});\n q('sf-spot-cancel').onclick=()=>{placing=false;panel.hidden=true;if(!editor.hidden)closeEditor();map.getContainer().style.cursor='';if(pin){map.removeLayer(pin);pin=null}chosen=null};\n q('sf-spot-form').onsubmit=async e=>{e.preventDefault();if(!chosen){notice('Select GPS or drop a map pin first.');return}\n  const form=e.currentTarget,fd=new FormData(form),d=Object.fromEntries(fd);delete d.photos;delete d.video;d.latitude=chosen.lat;d.longitude=chosen.lng;\n  const button=form.querySelector('[type=submit]');button.disabled=true;\n  try{\n   const selectedVideo=form.querySelector('[name=video]').files?.[0]||null;\n   // Compress BEFORE creating a public spot, so a failed video conversion cannot leave a partial video-only submission.\n   const showVideoProgress=message=>{notice(message);const status=q('sf-video-selection');if(status)status.textContent=message;};\n   const optimizedVideo=selectedVideo?await sfPrepareUploadVideo(selectedVideo,showVideoProgress):null;\n   notice('Preparing '+selectedPhotos.length+' photo(s)\u2026');const photos=[];for(const f of selectedPhotos)photos.push(await preparePhoto(f));\n   notice('Publishing street spot\u2026');const r=await fetch(API+'/api/street/submit',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(d)}),j=await r.json();if(!r.ok||!j.ok)throw Error(j.error||'Submission failed');\n   let initialVote=null,initialVoteError='';\n   if(initialBustRating!==null){\n     notice('Street spot published. Saving Bust Factor\u2026');\n     try{\n       const vr=await fetch(API+'/api/street/bust/vote',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spot_id:j.id,rating:initialBustRating})});\n       const vj=await vr.json();\n       if(!vr.ok||!vj.ok)throw Error(vj.error||'Bust Factor could not be saved');\n       initialVote={average:Number(vj.bust_average),votes:Number(vj.bust_votes)};\n     }catch(e){initialVoteError=e.message||'Bust Factor could not be saved';}\n   }\n   let success=0,errors=[];\n   for(let i=0;i<photos.length;i++){\n    notice('Street spot published. Uploading photo '+(i+1)+' of '+photos.length+'\u2026');\n    try{const up=new FormData();up.append('spot_id',j.id);up.append('photo_token',j.photo_token);up.append('photo',photos[i]);const pr=await fetch(API+'/api/street/photo',{method:'POST',body:up}),pj=await pr.json();if(!pr.ok||!pj.ok)throw Error(pj.error||'Photo upload failed');success++}catch(err){errors.push(err.message)}\n   }\n   let videoSuccess=0,videoError='';\n   if(optimizedVideo){notice('Spot published. Uploading video\u2026');try{await uploadSpotVideo(j.id,optimizedVideo,j.photo_token,notice);videoSuccess=1}catch(error){videoError=error.message}}\n   notice('Street spot published! '+success+' of '+photos.length+' photos uploaded.'+(videoSuccess?' Video uploaded.':'')+(videoError?' Video not uploaded: '+videoError+'.':'')+(initialVoteError?' Bust Factor was not saved ('+initialVoteError+'); you can rate it on its spot page.':'')+(errors.length?' '+errors.join('; '):''));\n   form.reset();selectedPhotos=[];initialBustRating=null;drawCreateBust();renderPreview();if(!editor.hidden)closeEditor();if(pin){map.removeLayer(pin);pin=null}chosen=null;showCoords();setFilter('street');await refreshStats();await loadRecentMarkers();map.setView([d.latitude,d.longitude],18);await refreshMap();\n   const postedSpot={id:j.id,name:d.name||d.kind+' Spot',kind:d.kind,description:d.description||'',condition:'Unconfirmed',latitude:d.latitude,longitude:d.longitude,photo_count:success,video_count:videoSuccess,bust_votes:initialVote?.votes||0,bust_average:initialVote?.average??null};\n   focusSpot(postedSpot);\n   if(initialVoteError){const msg=details.querySelector('[data-bust-message]');if(msg)msg.textContent='Initial rating not saved. Please tap a shield below to try again.';}\n  }catch(err){notice(err.message)}finally{button.disabled=false}\n };\n refreshMap();refreshStats();loadRecentMarkers();renderStreetResults();\n const requestedSpotId=new URLSearchParams(window.location.search).get('sfspot');\n if(requestedSpotId&&/^\\d{1,12}$/.test(requestedSpotId)){\n   const openDeepLink=async()=>{\n    try{\n     const r=await fetch(API+'/api/street/spot?id='+encodeURIComponent(requestedSpotId),{cache:'no-store'}),d=await r.json();\n     if(!r.ok||!d.ok)throw Error(d.error||'Spot unavailable');\n     setFilter('all');focusSpot(d.spot);await refreshMap();\n     // Respect the shared location even while nearby skatepark results are loading.\n     map.setView([Number(d.spot.latitude),Number(d.spot.longitude)],18,{animate:false});\n    }catch(e){notice('Shared spot could not be opened: '+e.message)}\n   };\n   openDeepLink();\n }\n\n})();\n\n;(function(){if(document.getElementById(\"sf941-v416-extra-css\"))return;var e=document.createElement(\"style\");e.id=\"sf941-v416-extra-css\";e.textContent=\"\\n#sf941 .sf-street-toolbar{background:#f4f8f1;padding:10px;border-radius:12px;color:#18251a}\\n#sf941 .sf-street-ui{background:#f4f8f1;padding-top:8px;padding-bottom:8px}\\n#sf941 #sf-street-counts{color:#294d20;font-size:12px}\\n#sf941 .sf-type-filters{display:flex;gap:3px;background:#e1e9dd;border-radius:10px;padding:4px;flex-wrap:wrap}\\n#sf941 .sf-type-filters button{border:0!important;border-radius:7px!important;background:transparent!important;color:#233020!important;padding:8px 12px!important;min-height:36px!important;font-weight:800}\\n#sf941 .sf-type-filters button[aria-pressed=\\\"true\\\"]{background:#b4f467!important;color:#142015!important}\\n#sf941 #sf-street-panel,#sf941 #sf-street-panel *,#sf941 .leaflet-popup-content,#sf941 .leaflet-popup-content *{color:#19261c}\\n#sf941 #sf-street-panel label{color:#19261c;font-weight:700}\\n#sf941 #sf-street-panel button,#sf941 .sf-street-actions button{background:#edf3e9;color:#17231c;border:1px solid #839981}\\n#sf941 #sf-street-panel button.sf-primary{background:#b4f467;color:#142015}\\n#sf941 .sf-street-muted{color:#526451}\\n#sf941 #sf-street-panel input,#sf941 #sf-street-panel textarea,#sf941 #sf-street-panel select{color:#17231c!important;background:#fff!important;border:1px solid #879987}\\n#sf941 .sf-street-result{display:block;text-align:left;width:100%;padding:12px;margin:6px 0;border:1px solid #bbd0b5;border-radius:10px;background:#f4faef;color:#19261c;cursor:pointer}\\n#sf941 .sf-street-result img{width:76px;height:64px;object-fit:cover;float:right;margin-left:10px;border-radius:7px}\\n#sf941 .sf-street-result small{display:block;color:#50614d;margin-top:5px}\\n#sf941 .sf-street-photo{display:block;width:100%;max-height:240px;object-fit:cover;border-radius:8px;margin:8px 0}\\n#sf941 #sf-street-newest{background:#e5f1db!important;color:#1a291b!important}\\n@media(max-width:650px){#sf941 .sf-street-toolbar{gap:6px}#sf941 .sf-type-filters{order:2;width:100%;justify-content:space-around}#sf941 .sf-type-filters button{flex:1;padding:8px 5px!important}#sf941 #sf-street-counts{order:3;width:100%}}\\n\";document.head.appendChild(e)})();\n\n;window.sf941StreetCardBuild='20261031-detail-panel-v2';\n;(()=>{const st=document.createElement(\"style\");st.textContent='\\n/* 941 mobile street spot submission usability */\\n@media(max-width:700px){\\n#sf941 #sf941-street-ui{margin-top:8px!important;margin-right:0!important;width:100%!important}\\n#sf941 .sf-street-toolbar{display:flex!important;flex-direction:column!important;gap:9px!important;width:100%!important}\\n#sf941 #sf-street-toggle,#sf-street-toggle{order:0!important;width:100%!important;min-height:52px!important;justify-content:center!important;font-size:21px!important;line-height:1.25!important;font-weight:900!important;padding:15px!important;background:#b4f467!important;color:#152017!important}\\n#sf941 .sf-type-filters{order:1!important;width:100%!important;display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:4px!important}\\n#sf941 .sf-type-filters button{min-height:44px!important;font-size:clamp(12px,3.2vw,15px)!important;padding:8px 3px!important}\\n#sf941 .sf-mobile-extras{order:2!important;align-self:flex-end!important;width:auto!important}\\n#sf-street-editor .sf-editor-sheet{width:100%!important;max-width:100%!important;max-height:100dvh!important;height:100dvh!important;border-radius:0!important;overflow-y:auto!important;overscroll-behavior:contain!important;padding:0 16px 32px!important;background:#fff!important;color:#18251c!important}\\n#sf-street-editor .sf-editor-sheet header{position:sticky!important;top:0!important;z-index:3!important;background:#fff!important;padding:16px 0!important;border-bottom:1px solid #d9e1da!important}\\n#sf-street-editor .sf-editor-sheet header h2{font-size:25px!important;color:#17231c!important;line-height:1.2!important}\\n#sf-street-editor #sf-editor-content{padding:14px 0 35px!important}\\n#sf-street-editor #sf-street-panel,#sf-street-editor #sf-street-panel *{color:#18251c}\\n#sf-street-editor #sf-street-panel h3{font-size:24px!important;line-height:1.2!important;margin:0 0 12px!important}\\n#sf-street-editor #sf-street-panel p{font-size:16px!important;line-height:1.5!important}\\n#sf-street-editor #sf-street-panel label{display:block!important;font-size:16px!important;line-height:1.4!important;font-weight:800!important;margin:14px 0!important}\\n#sf-street-editor #sf-street-panel input,#sf-street-editor #sf-street-panel select,#sf-street-editor #sf-street-panel textarea{display:block!important;width:100%!important;min-height:50px!important;margin:7px 0!important;padding:12px!important;font-size:16px!important;color:#18251c!important;background:#fff!important;border:2px solid #91a392!important;border-radius:10px!important;opacity:1!important}\\n#sf-street-editor #sf-street-panel textarea{min-height:110px!important}\\n#sf-street-editor #sf-street-panel button{min-height:48px!important;font-size:16px!important;font-weight:800!important;padding:11px!important;color:#17231c!important}\\n#sf-street-editor #sf-street-panel .sf-street-actions{display:grid!important;grid-template-columns:1fr!important;gap:10px!important}\\n#sf-street-editor #sf-street-panel .sf-street-grid{display:block!important}\\n#sf-street-editor #sf-spot-coords{background:#f0f2f0!important;border:2px solid #c5d0c6!important;border-radius:12px!important;padding:14px!important;margin:12px 0!important;font-size:16px!important;line-height:1.5!important;font-weight:800!important}\\n#sf-street-editor #sf-spot-coords.sf-location-confirmed{background:#e8fbd5!important;border-color:#8fc449!important;color:#23401c!important}\\n}\\n';document.head.appendChild(st)})();\n\n;(()=>{\n if(document.getElementById('sf941-photo-previews-css'))return;\n const st=document.createElement('style');st.id='sf941-photo-previews-css';\n st.textContent=`\n /* 941 Finder: small, predictable previews; never render source-size phone photos. */\n #sf941 #sf-photo-preview,#sf-street-editor #sf-photo-preview{\n   display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;\n   gap:8px!important;width:100%!important;max-width:100%!important;\n   margin:8px 0 14px!important;align-items:start!important;\n }\n #sf941 #sf-photo-preview .sf-photo-preview-item,\n #sf-street-editor #sf-photo-preview .sf-photo-preview-item{\n   display:flex!important;flex-direction:column!important;min-width:0!important;max-width:100%!important;\n   margin:0!important;padding:0!important;overflow:hidden!important;\n   border:1px solid #d4d9d4!important;border-radius:10px!important;\n   background:#f4f6f4!important;\n }\n #sf941 #sf-photo-preview img,#sf-street-editor #sf-photo-preview img{\n   display:block!important;width:100%!important;height:clamp(68px,22vw,105px)!important;\n   max-width:100%!important;max-height:105px!important;min-width:0!important;\n   object-fit:cover!important;object-position:center!important;\n   margin:0!important;padding:0!important;border:0!important;border-radius:0!important;\n   float:none!important;aspect-ratio:auto!important;\n }\n #sf941 #sf-photo-preview .sf-photo-preview-remove,\n #sf-street-editor #sf-photo-preview .sf-photo-preview-remove{\n   display:block!important;width:100%!important;min-width:0!important;min-height:36px!important;\n   padding:6px 2px!important;margin:0!important;border-radius:0!important;\n   background:#f5eaf3!important;color:#592657!important;\n   font-size:12px!important;font-weight:800!important;line-height:1.2!important;\n }\n #sf941 #sf-photo-count,#sf-street-editor #sf-photo-count{\n   margin:9px 0 4px!important;font-size:14px!important;line-height:1.35!important;\n   color:#335d2b!important;font-weight:800!important;\n }\n /* Existing street spots: photo uploads get the same compact grid treatment. */\n #sf-street-editor .sf-editor-previews{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:8px!important;max-width:100%!important}\n #sf-street-editor .sf-editor-photo-preview{min-width:0!important;max-width:100%!important;overflow:hidden!important}\n #sf-street-editor .sf-editor-photo-preview img{\n   width:100%!important;height:clamp(68px,22vw,105px)!important;\n   max-height:105px!important;max-width:100%!important;object-fit:cover!important;\n   display:block!important;margin:0!important;float:none!important;\n }\n #sf-street-editor .sf-editor-photo-preview button{width:100%!important;min-height:36px!important;font-size:12px!important;padding:5px 2px!important}\n @media(max-width:700px){\n  /* The submit bar remains in view while a skater selects photos on their phone. */\n  #sf-street-editor #sf-spot-form>.sf-street-actions{\n   position:fixed!important;bottom:0!important;left:0!important;right:0!important;\n   z-index:2147483000!important;display:grid!important;\n   grid-template-columns:minmax(0,2fr) minmax(0,1fr)!important;\n   gap:8px!important;margin:0!important;\n   padding:10px max(12px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))!important;\n   background:#fff!important;border-top:2px solid #d5e3cf!important;\n   box-shadow:0 -5px 20px #0002!important;\n  }\n  #sf-street-editor #sf-spot-form>.sf-street-actions button{\n   min-width:0!important;min-height:50px!important;margin:0!important;\n   font-size:clamp(13px,3.7vw,16px)!important;line-height:1.2!important;\n  }\n  #sf-street-editor #sf-spot-form>.sf-street-actions button[type=submit]{background:#b4f467!important;color:#17231c!important}\n  #sf-street-editor.sf-street-create-open .sf-editor-sheet{padding-bottom:calc(120px + env(safe-area-inset-bottom))!important}\n  #sf-street-editor #sf-spot-form #sf-street-message{padding-bottom:30px!important}\n }\n `;\n st.textContent+=`\n@media(max-width:700px){#sf-street-editor #sf-photo-preview,#sf-street-editor .sf-editor-previews{grid-template-columns:minmax(0,1fr)!important;max-width:100%!important}#sf-street-editor .sf-photo-preview-item,#sf-street-editor .sf-editor-photo-preview{height:auto!important;min-height:68px!important}#sf-street-editor .sf-photo-preview-item img,#sf-street-editor .sf-editor-photo-preview img{width:64px!important;height:58px!important;max-width:64px!important;max-height:58px!important}#sf-street-editor .sf-selected-photo-label{display:block!important}}`;\n document.head.appendChild(st);\n\n\n // Media-editor-specific styles: single modal, clear upload paths and no dashed camera affordance.\n const mediaEditorStyle=document.createElement('style');mediaEditorStyle.id='sf941-combined-media-editor-20261030';\n mediaEditorStyle.textContent=`\n #sf-street-editor .sf941-media-editor-video{margin:18px 0 14px;padding:15px;border:2px solid #decbea;border-radius:14px;background:#faf6ff;color:#2c2340}\n #sf-street-editor .sf941-media-editor-video h3{font:900 19px/1.3 system-ui,sans-serif;color:#4e2781;margin:0 0 7px}\n #sf-street-editor .sf941-media-editor-video p{font:550 14px/1.5 system-ui,sans-serif;margin:7px 0 12px;color:#453451}\n #sf-street-editor .sf941-media-video-picker{display:block;font:850 15px/1.4 system-ui,sans-serif;color:#38234e}\n #sf-street-editor .sf941-media-video-picker input{display:block;width:100%;max-width:100%;box-sizing:border-box;margin:8px 0;min-height:46px;border:1px solid #bba1d4;border-radius:9px;background:#fff;padding:9px;font-size:15px}\n #sf-street-editor .sf941-media-video-upload{display:block;width:100%;min-height:48px;border:1px solid #89b54c!important;border-radius:10px;background:#b4f467!important;color:#23351d!important;font-weight:900!important;padding:10px!important}\n #sf-street-editor .sf941-media-video-upload:disabled{opacity:.55;cursor:not-allowed}\n #sf-street-editor .sf-editor-camera{min-height:54px!important;min-width:0!important;border:2px solid #5f328c!important;border-radius:12px!important;background:#6d3b9b!important;color:#fff!important;box-shadow:0 3px 10px #48257730!important;font:900 15px/1.3 system-ui,sans-serif!important;padding:11px!important}\n #sf-street-editor .sf-editor-camera:focus-within,#sf941 .sf-spot-camera:focus-within{outline:3px solid #b4f467!important;outline-offset:3px!important}\n #sf941 .sf-spot-camera{background:#6d3b9b!important;color:#fff!important;border:2px solid #5f328c!important;border-radius:12px!important}\n #sf-street-editor .sf-editor-sheet{overscroll-behavior-y:contain!important}\n #sf-street-editor .sf-editor-close{cursor:pointer!important}\n #sf941 #sf-street-detail[hidden]{display:none!important}\n @media(max-width:700px){#sf-street-editor .sf941-media-editor-video{padding:12px;margin:14px 0 16px}}\n `;document.head.appendChild(mediaEditorStyle);\n\n;(function(){if(document.getElementById('sf941-photo5-styles'))return;const s=document.createElement('style');s.id='sf941-photo5-styles';s.textContent='\\n /* 941 Photo-first galleries. The existing photos, not the upload action, are the focus. */\\n #sf941 #sf-street-detail .sf-gallery-head{display:flex!important;justify-content:space-between!important;align-items:center!important;gap:12px!important;margin:12px 0 6px!important}\\n #sf941 #sf-street-detail .sf-gallery-head strong{font:850 14px/1.3 system-ui,sans-serif!important;color:#29203a!important}\\n #sf941 #sf-street-detail .sf-gallery-head small{font-weight:600!important;color:#6e637a!important}\\n #sf941 #sf-street-detail .sf-gallery-edit{display:inline-flex!important;align-items:center!important;justify-content:center!important;gap:5px!important;width:auto!important;min-height:33px!important;padding:5px 10px!important;border:1px solid #d3c5e7!important;border-radius:8px!important;background:#f7f3fc!important;color:#593780!important;font:750 12px/1.2 system-ui,sans-serif!important;white-space:nowrap!important}\\n #sf941 #sf-street-detail.sf-has-photo .sf-detail-actions-main{grid-template-columns:repeat(4,minmax(0,1fr))!important}\\n #sf941 #sf-street-results .sf-has-photo .sf-street-card-actions{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 50px 50px!important}\\n #sf-street-editor .sf-existing-photo-grid{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(130px,1fr))!important;gap:10px!important;margin:12px 0 8px!important}\\n #sf-street-editor .sf-existing-photo-item{display:flex!important;flex-direction:column!important;gap:6px!important;min-width:0!important;padding:6px!important;border:1px solid #e0d8e9!important;border-radius:9px!important;background:#fbfaff!important}\\n #sf-street-editor .sf-existing-photo-item>img{display:block!important;width:100%!important;height:110px!important;max-width:100%!important;max-height:110px!important;object-fit:cover!important;border-radius:7px!important}\\n #sf-street-editor .sf-existing-replace{display:block!important;position:relative!important;cursor:pointer!important;text-align:center!important;padding:8px 5px!important;border:1px solid #c9b4dc!important;border-radius:7px!important;color:#4e3272!important;background:#f2eafa!important;font:750 12px/1.25 system-ui,sans-serif!important}\\n #sf-street-editor .sf-existing-replace input{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;overflow:hidden!important}\\n #sf-street-editor .sf-editor-replace-note{font-size:12px!important;color:#66596c!important}\\n #sf-street-editor .sf-editor-replace-submit{background:#f1e3ff!important;color:#513077!important;border:1px solid #bc95dc!important;border-radius:9px!important;padding:10px 12px!important;margin:8px 0!important;width:100%!important}\\n #sf-street-editor .sf-editor-add-more{margin-top:15px!important;padding-top:10px!important;border-top:1px solid #e7dcec!important}\\n #sf-street-editor .sf-editor-add-more h3{margin:6px 0 8px!important;color:#342345!important;font:850 14px system-ui,sans-serif!important}\\n #sf-street-editor .sf-editor-add-more h3 small{font-size:12px;color:#786782}\\n @media(max-width:700px){#sf-street-editor .sf-existing-photo-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}#sf941 #sf-street-detail .sf-gallery-edit{min-height:40px!important}}\\n';document.head.appendChild(s)})();\n})();\n\n/* OCOL: place Suggest a Skatepark beside Add a Street Spot and filters. */\n;(()=>{\n if(document.getElementById('sf941-sidebar-actions-20261030'))return;\n const el=document.createElement('style');el.id='sf941-sidebar-actions-20261030';\n el.textContent=`\n #sf941 .sf-street-toolbar{display:flex!important;flex-flow:row wrap!important;align-items:center!important;gap:9px!important}\n #sf941 .sf-street-toolbar>#sf-street-toggle{order:0!important;width:auto!important;min-width:0!important;flex:0 1 auto!important;min-height:46px!important}\n #sf941 .sf-street-toolbar>#sf941-add{order:1!important;width:auto!important;min-width:0!important;flex:0 1 auto!important;min-height:46px!important;background:#fff!important;color:#4b2872!important;border:2px solid #a877d1!important;white-space:normal!important}\n #sf941 .sf-street-toolbar>.sf-type-filters{order:2!important;flex:1 1 310px!important;justify-content:flex-end!important;min-width:0!important}\n #sf941 .sf-street-toolbar>.sf-mobile-extras{order:3!important}\n @media(max-width:700px){\n  #sf941 .sf-street-toolbar{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important;align-items:stretch!important}\n  #sf941 .sf-street-toolbar>#sf-street-toggle,#sf941 .sf-street-toolbar>#sf941-add{width:100%!important;min-width:0!important;min-height:52px!important;font-size:clamp(13px,3.1vw,16px)!important;line-height:1.2!important;white-space:normal!important;display:flex!important;align-items:center!important;justify-content:center!important;padding:10px 8px!important}\n  #sf941 .sf-street-toolbar>#sf-street-toggle{grid-column:1!important;grid-row:1!important}\n  #sf941 .sf-street-toolbar>#sf941-add{grid-column:2!important;grid-row:1!important}\n  #sf941 .sf-street-toolbar>.sf-type-filters{grid-column:1/-1!important;grid-row:2!important;order:0!important;width:100%!important;display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;justify-content:stretch!important}\n  #sf941 .sf-street-toolbar>.sf-mobile-extras{grid-column:1/-1!important;grid-row:3!important;width:100%!important}\n }\n `;\n document.head.appendChild(el);\n})();\n\n\n/* Round 4: one authoritative mobile search layout, consistent with Custom Liquid. */\n;(()=>{\n if(document.getElementById('sf941-mobile-search-row-v2'))return;\n const st=document.createElement('style');\n st.id='sf941-mobile-search-row-v2';\n st.textContent=`\n @media(max-width:700px){\n  #sf941 .sf-hero .sf-actions{\n   display:grid!important;\n   grid-template-columns:minmax(0,1fr) clamp(96px,27vw,104px)!important;\n   grid-template-rows:auto auto auto!important;\n   column-gap:6px!important;row-gap:8px!important;\n   align-items:stretch!important;width:100%!important;min-width:0!important;\n  }\n  #sf941 .sf-hero .sf-actions #sf941-query,\n  #sf941 .sf-hero .sf-actions .sf-search{\n   grid-column:1!important;grid-row:1!important;\n   width:100%!important;min-width:0!important;max-width:100%!important;\n   margin:0!important;box-sizing:border-box!important;font-size:16px!important;\n  }\n  #sf941 .sf-hero .sf-actions #sf941-radius{\n   grid-column:2!important;grid-row:1!important;\n   width:100%!important;min-width:0!important;max-width:100%!important;\n   margin:0!important;box-sizing:border-box!important;\n   padding:6px 17px 6px 5px!important;font-size:clamp(13px,3.5vw,15px)!important;\n   visibility:visible!important;opacity:1!important;\n  }\n  #sf941 .sf-hero .sf-actions #sf941-near{\n   grid-column:1/-1!important;grid-row:2!important;\n   width:100%!important;min-width:0!important;max-width:100%!important;\n   margin:0!important;box-sizing:border-box!important;white-space:normal!important;\n   font-size:clamp(15px,4.2vw,17px)!important;\n  }\n  #sf941 .sf-hero .sf-actions #sf941-search{\n   grid-column:1/-1!important;grid-row:3!important;\n   width:100%!important;min-width:0!important;max-width:100%!important;\n   margin:0!important;box-sizing:border-box!important;\n   font-size:clamp(15px,4.2vw,17px)!important;\n  }\n  #sf941 .sf-hero .sf-actions #sf941-all{display:none!important}\n  #sf941 .sf-hero .sf-actions>*{min-width:0!important;max-width:100%!important}\n }\n `;\n document.head.appendChild(st);\n})();\n\n/* Move the EXISTING Suggest Skatepark button; retain its ID and click handlers. */\n;(()=>{\n const move=()=>{\n  const root=document.getElementById('sf941');\n  if(!root)return;\n  const toolbar=root.querySelector('.sf-add-menu-content');\n  const button=root.querySelector('#sf941-add');\n  if(!toolbar||!button||button.parentElement===toolbar)return;\n  const filters=toolbar.querySelector('.sf-type-filters');\n  toolbar.insertBefore(button,filters||null);\n };\n if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',move,{once:true});\n else move();\n})();\n\n/* OCOL 2026-10-30: Larger mobile button labels, without enlarging button boxes. */\n;(()=>{\n if(document.getElementById('sf941-mobile-button-type-v1'))return;\n const e=document.createElement('style');e.id='sf941-mobile-button-type-v1';\n e.textContent=`\n @media(max-width:700px){\n  /* Let existing button dimensions stand; recover space from inside padding. */\n  #sf941 button:not(.sf-spot-bust-options button),\n  #sf941 input[type=button],#sf941 input[type=submit],\n  #sf-street-editor button:not(.sf-spot-bust-options button){\n   padding-inline:clamp(3px,1.4vw,8px)!important;\n   font-size:clamp(15px,3.8vw,18px)!important;\n   line-height:1.15!important;\n   letter-spacing:-.015em!important;\n   box-sizing:border-box!important;\n  }\n  #sf941 .sf-street-toolbar>#sf-street-toggle,\n  #sf941 .sf-street-toolbar>#sf941-add{\n   font-size:clamp(14px,3.7vw,18px)!important;\n   padding-inline:4px!important;\n   padding-block:5px!important;\n   margin:0!important;\n  }\n  #sf941 .sf-street-toolbar .sf-type-filters button{\n   font-size:clamp(14px,3.8vw,17px)!important;\n   padding:4px 2px!important;\n   margin:0!important;\n  }\n  #sf941 .sf-street-card-actions button,\n  #sf941 .sf-detail-actions-main button{\n   font-size:clamp(13px,3.5vw,16px)!important;\n   padding-inline:3px!important;\n   margin-inline:0!important;\n  }\n  #sf941 button[aria-label]:not([data-create-bust]),\n  #sf-street-editor button[aria-label]:not([data-create-bust]){min-width:0}\n  #sf941 .sf-spot-bust-options button,\n  #sf-street-editor .sf-spot-bust-options button{\n   font-size:16px!important;\n   padding-inline:0!important;\n  }\n  #sf-street-editor .sf-photo-preview-remove,\n  #sf-street-editor .sf-editor-photo-preview button{\n   font-size:14px!important;\n   padding-inline:2px!important;\n  }\n  #sf941 button,#sf-street-editor button{overflow-wrap:normal}\n }\n @media(max-width:359px){\n  #sf941 .sf-street-toolbar>#sf-street-toggle,\n  #sf941 .sf-street-toolbar>#sf941-add{font-size:14px!important;letter-spacing:-.035em!important}\n }\n `;\n document.head.appendChild(e);\n})();\n\n// 941 Free Video Optimization OCOL v1.0 \u00B7 Existing site layout unchanged.\n\n\n// 941 Finder OCOL \u00B7 Street card declutter & proportion fix (2026-10-31).\n// Source attribution stays in expanded details; only compact cards are simplified.\n;(function(){\n  if(document.getElementById('sf941-clean-street-cards-20261031'))return;\n  const css=document.createElement('style');\n  css.id='sf941-clean-street-cards-20261031';\n  css.textContent=`\n  #sf941 #sf-street-results .sf-street-result{\n    box-sizing:border-box!important;\n    height:auto!important;\n    min-height:0!important;\n    padding:10px 12px!important;\n    margin:6px 0!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-head{\n    display:flex!important;\n    align-items:center!important;\n    justify-content:space-between!important;\n    gap:9px!important;\n    min-width:0!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-label{\n    min-width:0!important;\n    flex:1 1 auto!important;\n    align-items:flex-start!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-label>div{\n    min-width:0!important;\n    flex:1 1 auto!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-head img.sf-street-thumbnail,\n  #sf941 #sf-street-results .sf-street-card-head .sf941-video-thumb,\n  #sf941 #sf-street-results .sf-street-card-head .sf-no-photo{\n    width:76px!important;\n    height:68px!important;\n    min-width:76px!important;\n    min-height:68px!important;\n    max-width:76px!important;\n    max-height:68px!important;\n    flex:0 0 76px!important;\n    box-sizing:border-box!important;\n    object-fit:cover!important;\n    margin:0!important;\n    float:none!important;\n    border-radius:8px!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-head .sf-no-photo{\n    display:grid!important;\n    place-items:center!important;\n    font-size:23px!important;\n    background:#eee9f4!important;\n    color:#654387!important;\n    overflow:hidden!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-label h3{\n    overflow-wrap:anywhere!important;\n    line-height:1.22!important;\n  }\n  #sf941 #sf-street-results .sf-street-card-actions{\n    margin-top:8px!important;\n  }\n  @media(max-width:580px){\n    #sf941 #sf-street-results .sf-street-result{padding:9px 10px!important}\n    #sf941 #sf-street-results .sf-street-card-head img.sf-street-thumbnail,\n    #sf941 #sf-street-results .sf-street-card-head .sf941-video-thumb,\n    #sf941 #sf-street-results .sf-street-card-head .sf-no-photo{\n      width:68px!important;\n      height:62px!important;\n      min-width:68px!important;\n      min-height:62px!important;\n      max-width:68px!important;\n      max-height:62px!important;\n      flex-basis:68px!important;\n    }\n  }\n  `;\n  document.head.appendChild(css);\n})();\n\n\n\n\n;(()=>{\n const init=()=>{\n  const root=document.getElementById('sf941'),layout=root?.querySelector('.sf-layout'),details=root?.querySelector('#sf-street-detail');\n  if(!layout||!details)return;\n  const desktop=window.matchMedia('(min-width:901px)');\n  let frame=0;\n  const measure=()=>{\n   frame=0;\n   if(!desktop.matches||details.hidden){layout.style.removeProperty('--sf941-detail-map-height');return}\n   const height=Math.ceil(details.offsetTop+details.getBoundingClientRect().height+18);\n   const value=height+'px';\n   if(layout.style.getPropertyValue('--sf941-detail-map-height')!==value)layout.style.setProperty('--sf941-detail-map-height',value);\n  };\n  const schedule=()=>{if(!frame)frame=requestAnimationFrame(measure)};\n  const resize=typeof ResizeObserver==='function'?new ResizeObserver(schedule):null;\n  resize?.observe(details);\n  const changes=new MutationObserver(schedule);changes.observe(details,{attributes:true,attributeFilter:['hidden','class'],childList:true,subtree:true});\n  desktop.addEventListener('change',schedule);window.addEventListener('resize',schedule);schedule();\n  window.addEventListener('pagehide',()=>{resize?.disconnect();changes.disconnect();desktop.removeEventListener('change',schedule);window.removeEventListener('resize',schedule);if(frame)cancelAnimationFrame(frame)},{once:true});\n };\n if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init,{once:true});else init();\n})();\n"],
  "mappings": "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",
  "names": ["x", "timer", "details", "chosen", "panel", "e"]
}
