PageSourceSearch

https://romagotland.se/assets/Discover-BJT8AOXg.js

js romagotland.se collected 2026-10-02 22:39:28 UTC 40,218 bytes, 181 lines download raw bytes

1import{c as ee,r as n,j as e,X as fe,L as _e,S as K,a as Ke,R as De}from"./index-BeM7rp_7.js";import{B as D,I as We}from"./input-C2g4k-13.js";import{S as O}from"./skeleton-DO1ASwnm.js";import{V as He}from"./VenueCard-yeMMWNMM.js";import{m as X,N as ne}from"./mapbox-gl-CtpAI_6E.js";import{g as Be,u as qe}from"./useLociVenues-BJtMNaYy.js";import{s as be}from"./client-DbZkl5kT.js";import{L as Oe}from"./loader-circle-BO-sXfzM.js";import{P as Ze}from"./phone-BMfTK2X2.js";import{G as Ge,u as Qe,N as Fe}from"./Navigation-CZQKgO8y.js";import{U as Ye,M as Xe}from"./utensils-crossed-BIJbBv2_.js";import{S as Ee}from"./search-D0OF08Sv.js";import{M as Je}from"./map-pin-B9ENgZOp.js";import{C as et}from"./chevron-up-CHl8Hww-.js";import{F as tt}from"./Footer-DHzpYQM8.js";import{S as st}from"./SEO-B4mQkztP.js";import"./tagTranslation-1wprKnOI.js";import"./index-n8A5wJEh.js";import"./Combination-R7LCEZTW.js";import"./index-DGEjRiYR.js";import"./chevron-right-Dax6NYoV.js";import"./check-aMAWkP20.js";import"./calendar-CiIaAgRi.js";import"./external-link-BBHHhY2-.js";import"./dialog-DNIkaG2Z.js";import"./index-Ct2HZ-4Z.js";import"./textarea-XfU5AEsf.js";import"./label-Cns8gwXT.js";import"./send-Cwxt_j4Y.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const rt=ee("BedDouble",[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8",key:"1k78r4"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"fb3tl2"}],["path",{d:"M12 4v6",key:"1dcgq2"}],["path",{d:"M2 18h20",key:"ajqnye"}]]);/**
7 * @license lucide-react v0.462.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const at=ee("Hammer",[["path",{d:"m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9",key:"eefl8a"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"b7pghm"}]]);/**
12 * @license lucide-react v0.462.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const nt=ee("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/**
17 * @license lucide-react v0.462.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const ot=ee("ShoppingBag",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/**
22 * @license lucide-react v0.462.0 - ISC
23 *
24 * This source code is licensed under the ISC license.
25 * See the LICENSE file in the root directory of this source tree.
26 */const it=ee("Wheat",[["path",{d:"M2 22 16 8",key:"60hf96"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1rdhi6"}],["path",{d:"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1sdzmb"}],["path",{d:"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"eoatbi"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z",key:"19rau1"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"tc8ph9"}],["path",{d:"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"2m8kc5"}],["path",{d:"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"vex3ng"}]]);/**
27 * @license lucide-react v0.462.0 - ISC
28 *
29 * This source code is licensed under the ISC license.
30 * See the LICENSE file in the root directory of this source tree.
31 */const lt=ee("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);function ct(){const[t,i]=n.useState({latitude:null,longitude:null,error:null,isLoading:!1,isEnabled:!1}),l=n.useCallback(()=>
31{if(!navigator.geolocation){i(d=>({...d,error:"Din webbläsare stöder inte platsdelning",isLoading:!1}));return}i(d=>({...d,isLoading:!0,error:null})),navigator.geolocation.getCurrentPosition(d=>{i({latitude:d.coords.latitude,longitude:d.coords.longitude,error:null,isLoading:!1,isEnabled:!0})},d=>{let b="Kunde inte hämta din position";switch(d.code){case d.PERMISSION_DENIED:b="Du nekade platsdelning. Aktivera det i webbläsarens inställningar.";break;case d.POSITION_UNAVAILABLE:b="Platsinformation är inte tillgänglig";break;case d.TIMEOUT:b="Tidsgränsen för platsförfrågan överskreds";break}i(o=>({...o,error:b,isLoading:!1,isEnabled:!1}))},{enableHighAccuracy:!0,timeout:1e4,maximumAge:3e5})},[]),r=n.useCallback(()=>{i({latitude:null,longitude:null,error:null,isLoading:!1,isEnabled:!1})},[]);return{...t,requestLocation:l,clearLocation:r}}function xe(t,i,l,r){const b=le(l-t),o=le(r-i),v=Math.sin(b/2)*Math.sin(b/2)+Math.cos(le(t))*Math.cos(le(l))*Math.sin(o/2)*Math.sin(o/2);return 6371*(2*Math.atan2(Math.sqrt(v),Math.sqrt(1-v)))}function le(t){return t*(Math.PI/180)}function dt(t){return t<1?`${Math.round(t*1e3)} m`:t<10?`${t.toFixed(1)} km`:`${Math.round(t)} km`}const mt=new Set(["Prästgården - Myresjö","Kyrkskolan - Stenberga","Loaklev Lustgård"]),de=t=>t.toLowerCase().trim(),A=(t,i)=>(t.tags||[]).some(l=>i.some(r=>de(l).includes(r))),J=(t,i)=>{const l=de(t.name||"");return i.some(r=>l.includes(r))},ge=(t,i)=>i.map(de).includes(de(t.venueType||"")),z=(t,i=20)=>`<svg xmlns="http://www.w3.org/2000/svg" width="${i}" height="${i}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${t}</svg>`,ut=t=>z('<path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/>',t),ht={mat:z('<path d="m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8"/><path d="M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7"/><path d="m2.1 21.8 6.4-6.3"/><path d="m19 5-7 7"/>'),gardsbutik:z('<path d="M2 22 16 8"/><path d="M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"/><path d="M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"/><path d="M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"/>'),butik:z('<path d="M16 10a4 4 0 0 1-8 0"/><path d="M3.103 6.034h17.794"/><path d="M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z"/>'),hantverk:z('<path d="m15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9"/><path d="M17.64 15 22 10.64"/><path d="m20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91"/>'),bil:z('<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>'),halsa:z('<path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.29 1.51 4.04 3 5.5l7 7Z"/><path d="M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27"/>'),boende:z('<path d="M2 4v16"/><path d="M2 8h18a2 2 0 0 1 2 2v10"/><path d="M2 17h20"/><path d="M6 8v9"/>'),sevart:z('<path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/>')},ce=[{id:"mat",label:"Mat & Café",color:"14 90% 55%",icon:Ye,match:t=>ge(t,["Eatery"])||A(t,["mat","restaurang","café","cafe","catering","bakverk","pizza","servering","krog","whisky","bryggeri","dryck"])||J(t,["gårdskrog","krog","whisky","bryggeri"])},{id:"gardsbutik",label:"Gårdsbutik",color:"88 55% 42%",icon:it,match:t=>A(t,["gårdsbutik","lantbruk","trädgård"])||J(t,["grönt centrum"])},{id:"butik",label:"Butik",color:"270 60% 55%",icon:ot,match:t=>A(t,["butik"])&&!A(t,["gårdsbutik"])||A(t,["återbruk","second hand","loppis"])||J(t,["återbruksladan"])},{id:"hantverk",label:"Hantverk & Bygg",color:"28 80% 48%",icon:at,match:t=>A(t,["hantverkare","bygg","plattsättning","renovering","golv","el","larm","elinstallation","formsprutning","verktyg","
31industri","konstruktion","fastighet"])||J(t,["el & larm","verktyg","formsprutning","fastighet","miljö i roma"])},{id:"bil",label:"Bil & Service",color:"210 75% 50%",icon:lt,match:t=>A(t,["däck","serviceverkstad","service","verkstad"])},{id:"halsa",label:"Hälsa",color:"340 70% 55%",icon:nt,match:t=>A(t,["hälsa","healing","massage","tandhygienist","tandvård","klinik"])||J(t,["tandhygienist","tandläkare"])},{id:"boende",label:"Boende",color:"195 70% 45%",icon:rt,match:t=>ge(t,["Accommodation"])||A(t,["boende","hotell","stuga"])},{id:"sevart",label:"Sevärt",color:"160 60% 40%",icon:K,match:t=>ge(t,["PointOfInterest","Activity"])||A(t,["natur","mötesplats","sevärt","hembygd","glasbruk","museum","kultur"])||J(t,["hembygd","glasbruk","recordghost"])}],pt=({venues:t,onClose:i,userLocation:l})=>{var se;const[r,d]=n.useState(null),[b,o]=n.useState(null),[v,W]=n.useState(null),[Z,H]=n.useState(!0),[N,w]=n.useState(!1),[y,C]=n.useState(null),g=n.useRef(null),M=n.useRef(null),E=n.useRef([]),G=n.useRef(null);n.useEffect(()=>{(async()=>{try{const{data:f,error:m}=await be.functions.invoke("mapbox-token");if(m)throw m;if(f!=null&&f.token)W(f.token),X.accessToken=f.token;else throw new Error("No token received")}catch(f){console.error("Failed to fetch Mapbox token:",f),C("Kunde inte ladda kartan")}finally{H(!1)}})()},[]);const te=n.useMemo(()=>{if(l)return[l.longitude,l.latitude];if(t.length===0)return[15,57.1];const a=t.filter(h=>h.latitude&&h.longitude);if(a.length===0)return[15,57.1];const f=a.reduce((h,k)=>h+k.latitude,0)/a.length;return[a.reduce((h,k)=>h+k.longitude,0)/a.length,f]},[t,l]),V=n.useMemo(()=>{const a=t.filter(m=>m.latitude&&m.longitude);if(!b)return a;const f=ce.find(m=>m.id===b);return f?a.filter(f.match):a},[t,b]),U=n.useMemo(()=>{const a=t.filter(m=>m.latitude&&m.longitude),f={};return ce.forEach(m=>{f[m.id]=a.filter(m.match).length}),f},[t]),S=a=>ce.find(f=>f.match(a))||null,ye=a=>!l||!a.latitude||!a.longitude?null:xe(l.latitude,l.longitude,a.latitude,a.longitude);return n.useEffect(()=>{if(!M.current||g.current||!v)return;const a=new X.Map({container:M.current,style:"mapbox://styles/mapbox/streets-v12",center:te,zoom:11,pitch:0,bearing:0});return a.on("load",()=>{console.log("Mapbox map loaded"),w(!0)}),a.addControl(new X.NavigationControl,"bottom-right"),a.addControl(new X.ScaleControl({maxWidth:100}),"bottom-left"),g.current=a,()=>{a.remove(),g.current=null,w(!1)}},[v]),n.useEffect(()=>{if(!(!g.current||!N)){if(console.log("Adding markers, venues with coords:",V.length),E.current.forEach(a=>a.remove()),E.current=[],G.current&&(G.current.remove(),G.current=null),l){const a=document.createElement("div");a.className="user-location-marker",a.innerHTML=`
32        <div class="user-dot"></div>
33        <div class="user-pulse"></div>
34      `,G.current=new X.Marker(a).setLngLat([l.longitude,l.latitude]).addTo(g.current)}V.forEach(a=>{const f=(r==null?void 0:r.id)===a.id,m=mt.has(a.name),h=S(a);h==null||h.color;const k=document.createElement("div");k.className="venue-marker-wrapper";const T=document.createElement("div");T.className=`venue-marker ${f?"selected":""} ${m?"premium":""}`,!m&&h&&(T.style.background=`hsl(${h.color})`),T.innerHTML=`
35        ${ht[(h==null?void 0:h.id)??""]??ut(m?24:20)}
36        ${m?`<span class="venue-label">${a.name}</span>`:""}
37      `,k.appendChild(T);const R=new X.Marker({element:k,anchor:"center"}).setLngLat([a.longitude,a.latitude]).addTo(g.current);k.addEventListener("click",()=>{var I;d(a),(I=g.current)==null||I.flyTo({center:[a.longitude,a.latitude],zoom:12,duration:800})}),E.current.push(R)})}},[V,l,r,N]),n.useEffect(()=>{g.current&&g.current.flyTo({center:te,duration:1e3})},[te]),Z?e.jsx("div",{className:"fixed inset-0 z-50 bg-background flex items-center justify-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx(Oe,{className:"h-8 w-8 animate-spin text-primary"}),e.jsx("span",{className:"text-muted-foreground",children:"Laddar karta..."})]})}):y?e.jsx("div",{className:"fixed inset-0 z-50 bg-background flex items-center justify-center",children:e.jsxs("div",{className:"flex flex-col items-center gap-4 text-center px-4",children:[e.jsx("p",{className:"text-destructive",children:y}),e.jsx(D,{variant:"outline",onClick:i,children:"Stäng"})]})}):e.jsxs("div",{className:"fixed inset-0 z-50 bg-background",children:[e.jsxs("div",{className:"absolute top-0 left-0 right-0 z-[1000] bg-background/95 backdrop-blur-sm border-b border-border px-4 py-3 space-y-3",children:[e.jsxs("div",{className:"max-w-7xl mx-auto flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ne,{className:"h-5 w-5 text-primary"}),e.jsxs("span",{className:"font-medium",children:[V.length," platser på kartan"]})]}),e.jsx(D,{variant:"ghost",size:"icon",onClick:i,children:e.jsx(fe,{className:"h-5 w-5"})})]}),e.jsx("div",{className:"max-w-7xl mx-auto flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 scrollbar-none",children:ce.filter(a=>U[a.id]>0).map(a=>{const f=a.icon,m=b===a.id;return e.jsxs("button",{onClick:()=>o(m?null:a.id),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-full border whitespace-nowrap text-sm transition-all ${m?"border-transparent text-white shadow-sm":"border-border bg-background hover:bg-muted text-foreground"}`,style:m?{backgroundColor:`hsl(${a.color})`}:void 0,children:[e.jsx(f,{className:"h-4 w-4",style:m?void 0:{color:`hsl(${a.color})`}}),e.jsx("span",{className:"font-medium",children:a.label}),e.jsx("span",{className:`text-xs ${m?"opacity-90":"text-muted-foreground"}`,children:U[a.id]})]},a.id)})})]}),e.jsx("div",{ref:M,className:"w-full h-full pt-28"}),r&&e.jsx("div",{className:"absolute bottom-0 left-0 right-0 z-[1000] p-4 bg-gradient-to-t from-background via-background to-transparent",children:e.jsx("div",{className:"max-w-lg mx-auto bg-card rounded-2xl shadow-xl border border-border overflow-hidden",children:e.jsxs("div",{className:"flex",children:[((se=r.imageUrls)==null?void 0:se[0])&&e.jsx("div",{className:"w-28 h-28 flex-shrink-0",children:e.jsx("img",{src:r.imageUrls[0],alt:r.name,className:"w-full h-full object-cover"})}),e.jsxs("div",{className:"flex-1 p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold text-foreground line-clamp-1",children:r.name}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r.city}
37),l&&e.jsx("p",{className:"text-sm text-primary font-medium mt-1",children:dt(ye(r)||0)})]}),e.jsx("button",{onClick:()=>d(null),className:"p-1 rounded-full hover:bg-muted transition-colors",children:e.jsx(fe,{className:"h-4 w-4 text-muted-foreground"})})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-3",children:[r.phoneNumber&&e.jsx("a",{href:`tel:${r.phoneNumber}`,className:"p-2 rounded-full bg-muted hover:bg-primary hover:text-primary-foreground transition-colors",children:e.jsx(Ze,{className:"h-4 w-4"})}),r.websiteUrl&&e.jsx("a",{href:r.websiteUrl,target:"_blank",rel:"noopener noreferrer",className:"p-2 rounded-full bg-muted hover:bg-primary hover:text-primary-foreground transition-colors",children:e.jsx(Ge,{className:"h-4 w-4"})}),e.jsx(_e,{to:Be(r.name,r.city),className:"ml-auto px-4 py-2 text-sm font-medium rounded-full bg-primary text-primary-foreground hover:bg-primary/90 transition-colors",children:"Visa mer"})]})]})]})})}),e.jsx("style",{children:`
38        .venue-marker-wrapper {
39          /* Empty on purpose: Mapbox positions the wrapper */
40        }
41
42        .venue-marker {
43          position: relative;
44          width: 40px;
45          height: 40px;
46          background: linear-gradient(135deg, hsl(var(--primary)) 0%, hsl(var(--primary) / 0.8) 100%);
47          border-radius: 50%;
48          border: 3px solid white;
49          box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
50          display: flex;
51          align-items: center;
52          justify-content: center;
53          cursor: pointer;
54          transition: all 0.2s ease;
55          color: white;
56          z-index: 1;
57        }
58        
59        .venue-marker:hover {
60          transform: scale(1.15);
61          box-shadow: 0 6px 16px rgba(0, 0, 0, 0.25);
62        }
63        
64        .venue-marker.selected {
65          width: 48px;
66          height: 48px;
67          background: linear-gradient(135deg, hsl(var(--primary)) 0%, hsl(25 95% 45%) 100%);
68          box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
69          z-index: 10;
70        }
71        
72        /* Premium marker styles */
73        .venue-marker.premium {
74          width: 52px;
75          height: 52px;
76          background: linear-gradient(135deg, hsl(42 85% 32%) 0%, hsl(44 90% 45%) 50%, hsl(48 100% 60%) 100%);
77          border: 4px solid hsl(48 100% 60%);
78          box-shadow: 0 4px 16px hsl(44 90% 45% / 0.35), 0 0 20px hsl(48 100% 60% / 0.25);
79          z-index: 5;
80          animation: premium-pulse 3s ease-in-out infinite;
81        }
82        
83        .venue-marker.premium:hover {
84          transform: scale(1.2);
85          box-shadow: 0 6px 20px hsl(44 90% 45% / 0.45), 0 0 30px hsl(48 100% 60% / 0.35);
86          animation: none;
87        }
88        
89        .venue-marker.premium.selected {
90          width: 58px;
91          height: 58px;
92          z-index: 15;
93          animation: none;
94        }
95        
96        @keyframes premium-pulse {
97          0%, 100% {
98            box-shadow: 0 4px 16px hsl(44 90% 45% / 0.35), 0 0 20px hsl(48 100% 60% / 0.25);
99          }
100          50% {
101            box-shadow: 0 4px 20px hsl(44 90% 45% / 0.5), 0 0 35px hsl(48 100% 60% / 0.4);
102          }
103        }
104        
105        .venue-label {
106          position: absolute;
107          top: -28px;
108          left: 50%;
109          transform: translateX(-50%);
110          background: linear-gradient(135deg, hsl(42 85% 32%) 0%, hsl(44 90% 45%) 100%);
111          color: white;
112          padding: 4px 10px;
113          border-radius: 12px;
114          font-size: 11px;
115          font-weight: 600;
116          white-space: nowrap;
117          box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
118          border: 2px solid hsl(48 100% 60%);
119          letter-spacing: 0.02em;
120          opacity: 0;
121          pointer-events: none;
122          transition: opacity 0.2s ease;
123        }
124        
125        .venue-marker:hover .venue-label,
126        .venue-marker.selected .venue-label {
127          opacity: 1;
128        }
129        
130        .user-location-marker {
131          position: relative;
132          width: 20px;
133          height: 20px;
134        }
135        
136        .user-dot {
137          position: absolute;
138          width: 16px;
139          height: 16px;
140          background: #3b82f6;
141          border-radius: 50%;
142          border: 3px solid white;
143          box-shadow: 0 2px 8px rgba(59, 130, 246, 0.5);
144          top: 50%;
145          left: 50%;
146          transform: translate(-50%, -50%);
147          z-index: 2;
148        }
149        
150        .user-pulse {
151          position: absolute;
152          width: 40px;
153          height: 40px;
154          background: rgba(59, 130, 246, 0.3);
155          border-radius: 50%;
156          top: 50%;
157          left: 50%;
158          transform: translate(-50%, -50%);
159          animation: pulse 2s ease-out infinite;
160          z-index: 1;
161        }
162        
163        @keyframes pulse {
164          0% {
165            transform: translate(-50%, -50%) scale(0.5);
166            opacity: 1;
167          }
168          100% {
169            transform: translate(-50%, -50%) scale(2);
170            opacity: 0;
171          }
172        }
173        
174        .mapboxgl-ctrl-bottom-left {
175          bottom: 80px !important;
176        }
177        
178        .mapboxgl-ctrl-bottom-right {
179          bottom: 80px !important;
180        }
181      `})]})};function gt(t,i=300){const[l,r]=n.useState(t);return n.useEffect(()=>{const d=setTimeout(()=>{r(t)},i);return()=>{clearTimeout(d)}},[t,i]),l}const ft=[{text:"Boende",isAi:!1,translationKey:"examples.accommodation"},{text:"Äta",isAi:!1,translationKey:"examples.eat"},{text:"mysigt café",isAi:!0,translationKey:"examples.cozyFika"},{text:"natur och vandring",isAi:!0,translationKey:"examples.natureHiking"},{text:"hantverk",isAi:!0,translationKey:"examples.crafts"},{text:"träning och gym",isAi:!0,translationKey:"examples.trainingGym"},{text:"familjeaktiviteter",isAi:!0,translationKey:"examples.familyActivities"},{text:"Bygg & Hantverkare",isAi:!1,translationKey:"examples.buildersCraftsmen"},{text:"företagstjänster",isAi:!0,translationKey:"examples.businessServices"},{text:"historia och kultur",isAi:!0,translationKey:"examples.skiing"}];
181function xt(){const[t,i]=n.useState(!1),[l,r]=n.useState(""),[d,b]=n.useState([]),[o,v]=n.useState(null);return{searchWithAi:async(Z,H)=>{if(!Z.trim()||H.length===0)return[];i(!0),v(null),r(""),b([]);try{const{data:N,error:w}=await be.functions.invoke("ai-search",{body:{query:Z,venues:H}});if(w)throw new Error(w.message);const y=N;if(y.error)return v(y.error),[];r(y.interpretation||""),b(y.followUpQueries||[]);const C=[];for(const g of y.results||[]){const M=H.find(E=>E.id===g.id);M&&C.push({...M,matchReason:g.matchReason,relevanceScore:g.relevanceScore})}return C.sort((g,M)=>M.relevanceScore-g.relevanceScore),C}catch(N){return console.error("AI Search error:",N),v(N instanceof Error?N.message:"Sökningen misslyckades"),[]}finally{i(!1)}},isSearching:t,interpretation:l,followUpQueries:d,error:o}}function bt(){const t=n.useRef(typeof window<"u"&&sessionStorage.getItem("search_session_id")||crypto.randomUUID());return typeof window<"u"&&sessionStorage.setItem("search_session_id",t.current),{logSearch:n.useCallback(async(l,r,d,b)=>{if(!(!l||l.trim().length<2))try{await be.functions.invoke("log-search",{body:{query:l,searchType:r,resultsCount:d,sessionId:t.current,venueIds:b||[]}})}catch(o){console.debug("Search logging failed:",o)}},[])}}const yt="/assets/klosterruinen-BxVlPNUr.jpg",kt=()=>{const{venues:t,isLoading:i,error:l}=qe(),{t:r}=Qe(),[d,b]=Ke(),[o,v]=n.useState(()=>d.get("q")||""),W=gt(o,300),[Z,H]=n.useState(!1),N=n.useRef(null),{latitude:w,longitude:y,isLoading:C,isEnabled:g,error:M,requestLocation:E,clearLocation:G}=ct(),[te,V]=n.useState(()=>d.get("map")==="1");n.useEffect(()=>{d.get("map")==="1"&&V(!0)},[d]);const{searchWithAi:U,isSearching:S,interpretation:ye,followUpQueries:se,error:a}=xt(),[f,m]=n.useState([]),[h,k]=n.useState(!1),[T,R]=n.useState(!1),{logSearch:I}=bt();n.useEffect(()=>{const s=d.get("q")||"",u=d.get("ai")==="true",p={};o&&(p.q=o),h&&T&&(p.ai="true"),(o!==s||(h&&T)!==u)&&(Object.keys(p).length>0?b(p,{replace:!0}):b({},{replace:!0}))},[o,h,T,d,b]),n.useEffect(()=>{const s=d.get("q")||"",u=d.get("ai")==="true";s&&s!==o&&v(s),s&&u&&!T&&t.length>0&&!i&&(k(!0),R(!0),U(s,t).then(m))},[d,t,i]);const oe=n.useCallback(()=>{if(N.current){const u=N.current.getBoundingClientRect().top+window.pageYOffset+-20;window.scrollTo({top:u,behavior:"smooth"})}},[]);n.useEffect(()=>{const s=()=>{H(window.scrollY>400)};return window.addEventListener("scroll",s,{passive:!0}),()=>window.removeEventListener("scroll",s)},[]);const Re=()=>{window.scrollTo({top:0,behavior:"smooth"})},ie=n.useMemo(()=>{const s=o.trim().split(/\s+/),u=["mysigt","trevligt","romantisk","familj","barn","natur","nära","bra","fint","lugnt","för"];return s.length>2||s.some(p=>u.includes(p.toLowerCase()))},[o]),ke=n.useMemo(()=>{const s=o.toLowerCase();return["nära mig","i närheten","runt mig","här nära","nearby","near me"].some(p=>s.includes(p))},[o]);n.useEffect(()=>{ke&&!g&&!C&&E()},[ke,g,C,E]);const Q=n.useCallback(async()=>{if(!o.trim()||t.length===0)return;k(!0),R(!0);const s=await U(o,t);m(s);const u=s.map(p=>p.id);I(o,"ai",s.length,u),setTimeout(oe,100)},[o,t,U,oe,I]);n.useEffect(()=>{o.trim()||(k(!1),m([]),R(!1))},[o]);const ve=n.useCallback(s=>{const u=new Date,p=u.getFullYear()*1e4+(u.getMonth()+1)*100+u.getDate(),q=j=>{const $=Math.sin(j)*1e4;return $-Math.floor($)},c=[...s];let L=p;for(let j=c.length-1;j>0;j--){L=p+j;const $=Math.floor(q(L)*(j+1));[c[j],c[$]]=[c[$],c[j]]}return c},[]),me=n.useCallback(s=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),[]),F=n.useMemo(()=>({boende:{venueTypes:["accommodation"]},övernattning:{venueTypes:["accommodation"]},hotell:{venueTypes:["accommodation"]},stuga:{venueTypes:["accommodation"]},"b&b":{venueTypes:["accommodation"]},sovplats:{venueTypes:["accommodation"]},sova:{venueTypes:["accommodation"]},camping:{venueTypes:["accommodation"]},vandrarhem:{venueTypes:["accommodation"]},mat:{venueTypes:["eatery","restaurant","café","cafe"]},restaurang:{venueTypes:["eatery","restaurant"]},äta:{venueTypes:["eatery","restaurant"]},lunch:{venueTypes:["eatery","restaurant"]},middag:{venueTypes:["eatery","restaurant"]},frukost:{venueTypes:["eatery","restaurant","café","cafe"]},kvällsmat:{venueTypes:["eatery","restaurant"]},pizza:{venueTypes:["eatery","restaurant"]},sushi:{venueTypes:["eatery","restaurant"]},fika:{venueTypes:["eatery","café","cafe"]},café:{venueTypes:["eatery","café","cafe"]},cafe:{venueTypes:["eatery","café","cafe"]},kaffe:{venueTypes:["eatery","café","cafe"]},bageri:{venueTypes:["eatery","café","cafe"]},konditori:{venueTypes:["eatery","café","cafe"]},aktivitet:{venueTypes:["activity"]},upplevelse:{venueTypes:["activity","pointofinterest"]},göra:{venueTypes:["activity","pointofinterest"]},sevärdhet:{venueTypes:["pointofinterest"]},besöka:{venueTypes:["pointofinterest","activity"]},vandring:{searchTerms:["vandring","vandringsled","vandringsleder","hiking","naturreservat","stigar","promenad"]},vandra:{searchTerms:["vandring","vandringsled","vandringsleder","hiking","naturreservat","stigar","promenad"]},skog:{searchTerms:["skog","natur","naturreservat","skogspromenad"]},sjö:{searchTerms:["sjö","badplats","fiske","paddl"]}
181,simma:{searchTerms:["badplats","badet","simhall","simning","strandbad","havsbad"]},bada:{searchTerms:["badplats","badet","simhall","simning","strandbad","havsbad"]},bad:{searchTerms:["badplats","badet","simhall","simning","strandbad","havsbad","pool"]},paddla:{searchTerms:["paddl","kanot","kajak"]},fiska:{searchTerms:["fisk","sportfiske"]},fiske:{searchTerms:["fisk","sportfiske"]},cykel:{searchTerms:["cykl","cykel","bike"]},cykla:{searchTerms:["cykl","cykel","bike"]},gym:{searchTerms:["gym","träning","fitness"]},träning:{searchTerms:["gym","träning","fitness","idrott"]},träna:{searchTerms:["gym","träning","fitness","idrott"]},idrott:{searchTerms:["idrott","sport","gym","träning"]},sport:{searchTerms:["sport","idrott","gym","träning"]},museum:{venueTypes:["pointofinterest"],searchTerms:["museum"]},konst:{searchTerms:["konst","galleri","utställning","konsthall"]},butik:{searchTerms:["butik","shopping","affär","lanthandel"]},shopping:{searchTerms:["butik","shopping","affär","lanthandel"]},glasbruk:{searchTerms:["glasbruk","glasblås","glaskonst","glashytta"]},spa:{searchTerms:["spa","wellness","relax"]},massage:{searchTerms:["massage","spa","wellness"]},wellness:{searchTerms:["wellness","spa"]},avkoppling:{searchTerms:["spa","wellness","relax","rofylld"]},skidåkning:{searchTerms:["skid","skidåkning","slalom","utförsåkning","längdskid","skidbacke"]},skidor:{searchTerms:["skid","skidåkning","slalom","utförsåkning","längdskid","skidbacke"]}}),[]),ue=n.useMemo(()=>({}),[]),he=n.useMemo(()=>{const s=o.trim().toLowerCase();if(!s||s.split(/\s+/).length>1||s.length>4||ue[s])return!1;const p=F[s];return!(p!=null&&p.venueTypes&&p.venueTypes.length>0)},[o,F,ue]),B=n.useMemo(()=>{if(!W.trim())return ve(t);const s=W.toLowerCase().trim(),u=ue[s];if(u)return t.filter(c=>{const L=(c.tags||[]).map(j=>(j||"").toLowerCase());return u.some(j=>L.some($=>$.includes(j.toLowerCase())))});const p=s.split(/\s+/).filter(c=>c.length>1&&!["i","på","och","för","med","av","till","en","ett","den","det"].includes(c));return t.map(c=>{var Le;const L=(c.name||"").toLowerCase(),j=(c.description||"").toLowerCase(),$=(c.city||"").toLowerCase(),Me=(c.venueType||"").toLowerCase(),pe=(c.tags||[]).map(Y=>(Y||"").toLowerCase()),ze=pe.join(" ");let Se=0,Ce=!0;for(const Y of p){const Ve=me(Y),re=new RegExp(`(?:^|[\\s,;.!?()/"-])${Ve}(?=$|[\\s,;.!?()/"-])`,"i");let x=0;if(re.test(L)&&(x=Math.max(x,100)),pe.some(_=>re.test(_))&&(x=Math.max(x,70)),re.test(Me)&&(x=Math.max(x,50)),re.test($)&&(x=Math.max(x,40)),!(((Le=F[Y])==null?void 0:Le.venueTypes)&&F[Y].venueTypes.length>0)&&re.test(j)&&(x=Math.max(x,20)),x===0){const _=F[Y];if(_&&(_.venueTypes&&(_.venueTypes.some(ae=>Me.includes(ae))?x=Math.max(x,50):_.venueTypes.some(ae=>ze.includes(ae))&&(x=Math.max(x,40))),x===0&&_.searchTerms))for(const ae of _.searchTerms){const Ue=me(ae.trim()),Ae=new RegExp(`(?:^|[\\s,;.!?()/"-])${Ue}`,"i");if(Ae.test(L)?x=Math.max(x,90):pe.some(Pe=>Ae.test(Pe))&&(x=Math.max(x,60)),x>0)break}}if(x===0){Ce=!1;break}Se+=x}return{venue:c,score:Ce?Se:0}}).filter(c=>c.score>0).sort((c,L)=>L.score-c.score).map(c=>c.venue)},[t,W,F,me,ve]),we=n.useCallback(()=>{if(!o.trim()||h)return;const s=B.slice(0,20).map(u=>u.id);if(I(o,"standard",B.length,s),B.length===0){Q();return}oe()},[o,h,B,I,oe,Q]),je=n.useMemo(()=>!g||w===null||y===null?B:B.map(s=>({...s,distanceKm:s.latitude&&s.longitude?xe(w,y,s.latitude,s.longitude):1/0})).sort((s,u)=>s.distanceKm-u.distanceKm),[B,g,w,y]),Ne=n.useMemo(()=>!g||w===null||y===null?f:f.map(s=>({...s,distanceKm:s.latitude&&s.longitude?xe(w,y,s.latitude,s.longitude):1/0})).sort((s,u)=>s.distanceKm-u.distanceKm),[f,g,w,y]),P=n.useMemo(()=>h&&T?Ne:je,[h,T,Ne,je]),Te=()=>{v(""),b({},{replace:!0}),k(!1),m([]),R(!1)},Ie=De.useMemo(()=>[...ft].sort(()=>Math.random()-.5).slice(0,6),[]),$e=()=>o.trim()?S?r("results.searching"):P.length===0?r("results.noResults",{query:o}):P.length===1?r("results.oneResult",{query:o}):r("results.multipleResults",{count:P.length,query:o}):r("results.venuesInRegion",{count:t.length});return e.jsxs("main",{className:"flex-1",children:[e.jsxs("div",{className:"relative h-[400px] sm:h-[500px] lg:h-[600px] xl:h-[700px] bg-cover bg-[center_65%] flex items-center justify-center",style:{backgroundImage:`url(${yt})`},children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-black/30 via-black/20 to-black/40"}),e.jsx("div",{className:"relative z-10 text-center px-4 sm:px-6 lg:px-8 max-w-4xl mx-auto pt-20 sm:pt-10",children:e.jsxs("div",{className:"space-y-4 sm:sp
181ace-y-6",children:[e.jsx("h1",{className:"text-3xl sm:text-5xl lg:text-6xl font-bold text-white drop-shadow-[0_4px_12px_rgba(0,0,0,0.8)] font-serif",children:r("hero.title")}),e.jsx("p",{className:"text-lg sm:text-xl lg:text-2xl text-white/90 drop-shadow-[0_2px_8px_rgba(0,0,0,0.7)]",children:r("hero.subtitle")}),e.jsxs("div",{className:"relative max-w-2xl mx-auto mt-6 sm:mt-8",children:[e.jsx(Ee,{className:"absolute left-4 sm:left-5 top-1/2 -translate-y-1/2 h-5 w-5 text-muted-foreground"}),e.jsx(We,{type:"text",placeholder:r("hero.searchPlaceholder"),value:o,onChange:s=>v(s.target.value),onKeyDown:s=>{s.key==="Enter"&&(ie||he?Q():o.trim()&&we())},className:"w-full h-12 sm:h-14 pl-12 sm:pl-14 pr-24 sm:pr-28 text-base rounded-full border-0 bg-white shadow-lg placeholder:text-muted-foreground/70"}),e.jsxs("div",{className:"absolute right-2 sm:right-3 top-1/2 -translate-y-1/2 flex items-center gap-1",children:[o&&e.jsx("button",{onClick:Te,className:"h-8 w-8 rounded-full bg-muted hover:bg-muted-foreground/20 flex items-center justify-center transition-colors",children:e.jsx(fe,{className:"h-4 w-4 text-muted-foreground"})}),o&&(ie||he)&&!S&&e.jsxs("button",{onClick:Q,className:"h-8 px-3 rounded-full bg-amber-500 hover:bg-amber-600 flex items-center gap-1.5 transition-colors text-white text-sm font-medium",children:[e.jsx(K,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"AI"})]}),o&&!ie&&!he&&!S&&e.jsxs("button",{onClick:we,className:"h-8 px-3 rounded-full bg-primary hover:bg-primary/90 flex items-center gap-1.5 transition-colors text-primary-foreground text-sm font-medium",children:[e.jsx(Ee,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:r("hero.search")})]}),S&&e.jsxs("div",{className:"h-8 px-3 rounded-full bg-amber-500 flex items-center gap-1.5 text-white text-sm font-medium",children:[e.jsx("div",{className:"h-3.5 w-3.5 rounded-full border-2 border-white border-t-transparent animate-spin"}),e.jsx("span",{className:"hidden sm:inline",children:r("results.searchingAmong",{count:t.length})}),e.jsx("span",{className:"sm:hidden",children:r("results.aiSearching")})]})]})]}),e.jsx("div",{className:"flex flex-wrap gap-2 sm:gap-3 justify-center mt-4 sm:mt-6",children:Ie.map((s,u)=>e.jsxs("button",{onClick:()=>{v(s.text),s.isAi?setTimeout(()=>{k(!0),R(!0),U(s.text,t).then(p=>{m(p);const q=p.map(c=>c.id);I(s.text,"ai",p.length,q)})},100):(setTimeout(()=>{const p=t.filter(c=>`${c.name} ${c.description} ${c.city} ${c.venueType}`.toLowerCase().includes(s.text.toLowerCase())),q=p.slice(0,20).map(c=>c.id);I(s.text,"standard",p.length,q)},100),k(!1),R(!1))},className:`px-4 py-2 sm:px-5 sm:py-2.5 text-sm rounded-full backdrop-blur-sm border transition-colors text-white font-medium flex items-center gap-1.5 ${s.isAi?"bg-amber-500/30 border-amber-400/50 hover:bg-amber-500/40":"bg-white/15 border-white/25 hover:bg-white/25"}`,children:[s.isAi&&e.jsx(K,{className:"h-3.5 w-3.5"}),s.translationKey?r(s.translationKey):s.text]},u))})]})}),e.jsx("div",{className:"absolute bottom-6 left-1/2 -translate-x-1/2 animate-bounce z-10",children:e.jsx("div",{className:"w-7 h-11 rounded-full border-2 border-white/60 flex items-start justify-center p-2",children:e.jsx("div",{className:"w-1 h-3 bg-white/60 rounded-full"})})})]}),e.jsx("section",{ref:N,className:"py-8 sm:py-12 px-4 sm:px-6 lg:px-8 bg-background",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[M&&e.jsxs("div",{className:"flex items-center gap-3 mb-6 p-4 rounded-xl bg-orange-50 border border-orange-200",children:[e.jsx(ne,{className:"h-5 w-5 text-orange-600 flex-shrink-0"}),e.jsx("p",{className:"text-orange-800 text-sm",children:M})]}),a&&e.jsx("div",{className:"flex items-center gap-3 mb-6 p-4 rounded-xl bg-red-50 border border-red-200",children:e.jsx("p",{className:"text-red-800",children:a})}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 mb-6 sm:mb-8",children:[e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground flex-wrap",children:[h?e.jsx(K,{className:"h-5 w-5 text-amber-500 flex-shrink-0"}):g?e.jsx(ne,{className:"h-5 w-5 text-blue-500 flex-shrink-0"}):e.jsx(Je,{className:"h-5 w-5 flex-shrink-0"}),i?e.jsx(O,{className:"h-5 w-40"}):e.jsx("span",{className:"text-base sm:text-lg",children:$e()}),o&&!h&&!S&&!i&&e.jsxs("button",{onClick:Q,className:"inline-flex items-center gap-1 px-2.5 py-1 text-sm font-medium text-amber-700 bg-amber-50 hover:bg-amber-100 border border-amber-200 rounded-full transition-colors",children:[e.jsx(K,{className:"h-3.5 w-3.5"}),r("results.expandWithAi")]})]}
181),e.jsxs("div",{className:"flex items-center gap-2 self-start sm:self-auto flex-wrap",children:[g?e.jsxs(D,{variant:"default",size:"sm",onClick:G,className:"bg-blue-500 hover:bg-blue-600 text-white",children:[e.jsx(ne,{className:"h-4 w-4 mr-1.5"}),r("results.nearMe")]}):e.jsxs(D,{variant:"outline",size:"sm",onClick:E,disabled:C,className:"border-blue-300 text-blue-700 hover:bg-blue-50",children:[C?e.jsx("div",{className:"h-4 w-4 mr-1.5 rounded-full border-2 border-blue-600 border-t-transparent animate-spin"}):e.jsx(ne,{className:"h-4 w-4 mr-1.5"}),r("results.nearMe")]}),e.jsxs(D,{variant:"outline",size:"sm",onClick:()=>V(!0),children:[e.jsx(Xe,{className:"h-4 w-4 mr-1.5"}),r("results.showOnMap")]})]})]}),l&&e.jsxs("div",{className:"text-center py-16",children:[e.jsx("p",{className:"text-destructive mb-4",children:l}),e.jsx(D,{onClick:()=>window.location.reload(),children:r("results.tryAgain")})]}),(i||S)&&e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6",children:[...Array(6)].map((s,u)=>e.jsxs("div",{className:"bg-card rounded-2xl overflow-hidden border border-border",children:[e.jsx(O,{className:"aspect-[16/10]"}),e.jsxs("div",{className:"p-5 space-y-3",children:[e.jsx(O,{className:"h-6 w-3/4"}),e.jsx(O,{className:"h-4 w-1/2"}),e.jsx(O,{className:"h-16 w-full"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(O,{className:"h-6 w-16 rounded-full"}),e.jsx(O,{className:"h-6 w-20 rounded-full"})]})]})]},u))}),!i&&!S&&!l&&P.length>0&&e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 animate-in fade-in duration-500",children:P.map(s=>e.jsx(He,{venue:s,distanceKm:g?s.distanceKm:void 0,matchReason:h?s.matchReason:void 0},s.id))}),h&&T&&!S&&se.length>0&&P.length>0&&e.jsxs("div",{className:"mt-8 p-5 rounded-xl bg-gradient-to-r from-amber-50 to-orange-50 border border-amber-200",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(K,{className:"h-4 w-4 text-amber-600"}),e.jsx("span",{className:"text-sm font-medium text-amber-800",children:r("results.exploreMore")})]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:se.map((s,u)=>e.jsxs("button",{onClick:()=>{v(s),k(!0),R(!0),U(s,t).then(m)},className:"px-4 py-2 text-sm rounded-full bg-white border border-amber-300 text-amber-800 hover:bg-amber-100 hover:border-amber-400 transition-colors flex items-center gap-1.5 shadow-sm",children:[e.jsx(K,{className:"h-3 w-3"}),s]},u))})]}),!i&&!S&&!l&&P.length===0&&o&&e.jsxs("div",{className:"text-center py-16",children:[e.jsx("p",{className:"text-muted-foreground mb-4",children:r("results.noVenuesFound",{query:o})}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[!h&&ie&&e.jsxs(D,{onClick:Q,className:"bg-amber-500 hover:bg-amber-600",children:[e.jsx(K,{className:"h-4 w-4 mr-2"}),r("results.tryAiSearch")]}),e.jsx(D,{variant:"outline",onClick:Te,children:r("results.showAll")})]})]})]})}),e.jsx("button",{onClick:Re,className:`fixed bottom-6 right-6 z-50 p-3 rounded-full bg-primary text-primary-foreground shadow-lg hover:bg-primary/90 active:scale-95 transition-all duration-300 ${Z?"opacity-100 translate-y-0":"opacity-0 translate-y-4 pointer-events-none"}`,"aria-label":r("results.backToTop"),children:e.jsx(et,{className:"h-5 w-5"})}),te&&e.jsx(pt,{venues:P,onClose:()=>V(!1),userLocation:g&&w&&y?{latitude:w,longitude:y}:null})]})},Yt=()=>{const t="https://romagotland.se",i=[{"@context":"https://schema.org","@type":"SearchResultsPage",url:`${t}
181/upptack`,name:"Upptäck Roma",description:"Sök och upptäck boenden, restauranger och upplevelser i Roma på Gotland.",isPartOf:{"@id":`${t}/#website`},inLanguage:"sv-SE",potentialAction:{"@type":"SearchAction",target:{"@type":"EntryPoint",urlTemplate:`${t}/upptack?q={search_term_string}`},"query-input":"required name=search_term_string"},about:{"@type":"TouristDestination",name:"Roma, Gotland",touristType:["Cultural tourism","Nature tourism","Food tourism"]}},{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Hem",item:t},{"@type":"ListItem",position:2,name:"Upptäck",item:`${t}/upptack`}]}];return e.jsxs("div",{className:"min-h-screen flex flex-col bg-background",children:[e.jsx(st,{title:"Upptäck Roma",description:"Sök och upptäck boenden, restauranger och upplevelser i Roma på Gotland. Hitta lokala företag och platser att besöka.",image:`${t}/og-image.jpg`,url:`${t}/upptack`,structuredData:i}),e.jsx(Fe,{}),e.jsx(kt,{}),e.jsx(tt,{})]})};export{Yt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.