1import{a as Ft,_ as Nt}from"./BSQY1ppH.js";import{a as kt,d as K,o as $,c as oe,w as F,r as re,a1 as Qe,u as x,$ as Bt,a3 as Vt,b as V,k as p,l as C,F as be,m as ve,Q as Rt,h as Ze,z as St,y as pt,M as Pe,ah as Ye,ai as Gt,j as Le,n as ee,e as se,v as ge,aj as Ht,f as qt,Y as Ut,K as Kt,L as Yt,O as Xt,I as Jt,i as Qt,_ as Zt,ak as Wt,p as $e,t as de,q as en,s as tn,al as nn,am as on,X as Ge,J as rn,A as mt,x as ke}from"./DfMkgiUT.js";import{_ as sn}from"./CkETumDo.js";import{_ as an}from"./Bqv-H_z2.js";import{C as ln,R as cn}from"./Bvnrm6eZ.js";import{u as un}from"./CnVSBrlm.js";import{A as He}from"./4Mo8fJXc.js";import{D as dn}from"./D97vaVX9.js";import{C as fn}from"./3pi6BA5L.js";import"./B7CxnO0I.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"02b00fabbe1395f3354278c4bba153e90d8fe508"};var t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7c8694ad-6f3b-48c8-ad07-3b0f0a348c25",e._sentryDebugIdIdentifier="sentry-dbid-7c8694ad-6f3b-48c8-ad07-3b0f0a348c25")}catch{}})();const pn=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],mn=kt("chevron-left",pn);const gn=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],hn=kt("loader-circle",gn);var xn=K({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(e){const t=e;return un(),(o,s)=>($(),oe(x(Bt),Qe(t,{onMousedown:s[0]||(s[0]=a=>{!a.defaultPrevented&&a.detail>1&&a.preventDefault()})}),{default:F(()=>[re(o.$slots,"default")]),_:3},16))}}),bn=xn;const vn={},wn={class:"relative z-40"},_n={class:"mx-auto flex min-h-16 w-full max-w-[1480px] items-center justify-center px-[clamp(18px,3vw,34px)]"};function yn(e,t){const o=Ft;return $(),V("header",wn,[p("div",_n,[C(o,{variant:"minimal",label:"Explore Lokimaps"})])])}const kn=Object.assign(Vt(vn,[["render",yn]]),{__name:"HomeNavigation"}),Sn={class:"flex items-center justify-center gap-[clamp(4px,1.4vw,14px)]"},Ln={class:"h-auto w-[clamp(42px,7vw,58px)] flex-none text-primary",viewBox:"-14 -2 46 150","aria-hidden":"true"},An=["d"],Mn=["transform"],En={class:"flex min-w-[clamp(96px,16vw,128px)] flex-col items-center text-center"},In={class:"h-auto w-[clamp(42px,7vw,58px)] flex-none scale-x-[-1] text-primary",viewBox:"-14 -2 46 150","aria-hidden":"true"},Cn=["d"],Tn=["transform"],qe=8,$n=58,Dn=78,gt=52,De=124,ht=236,xt=24,bt="M0 0 C6.5 -6 5.5 -16.5 0 -22.5 C-5.5 -16.5 -6.5 -6 0 0 Z",Pn=K({__name:"LaurelBadge",setup(e){const t=Math.PI/180;function o(n){const l=n*t;return{x:$n+gt*Math.cos(l),y:Dn+gt*Math.sin(l)}}const s=(()=>{const l=[];for(let i=0;i<=26;i++){const c=o(De+(ht-De)*i/26);l.push(`${i===0?"M":"L"}${c.x.toFixed(1)} ${c.y.toFixed(1)}`)}return l.join(" ")})();function a(n,l,i){const c=n*t,g=o(n),f={x:-Math.sin(c),y:Math.cos(c)},h={x:Math.cos(c),y:Math.sin(c)},v=l*t,m={x:f.x*Math.cos(v)+h.x*Math.sin(v),y:f.y*Math.cos(v)+h.y*Math.sin(v)},b=Math.atan2(m.x,-m.y)*180/Math.PI;return`translate(${g.x.toFixed(1)} ${g.y.toFixed(1)}) rotate(${b.toFixed(1)}) scale(${i.toFixed(3)})`}const r=(()=>{const n=[];for(let l=0;l<qe;l++){const i=l/(qe-1),c=De+(ht-De)*i,g=.6+.5*Math.sin(i*Math.PI);n.push(a(c,xt,g)),l>0&&l<qe-1&&n.push(a(c,-xt*.55,g*.76))}return n})();return(n,l)=>($(),V("div",Sn,[($(),V("svg",Ln,[p("path",{class:"fill-none stroke-current opacity-85 [stroke-linecap:round] [stroke-width:2]",d:x(s)},null,8,An),($(!0),V(be,null,ve(x(r),(i,c)=>($(),V("path",{key:c,class:"fill-current",d:bt,transform:i},null,8,Mn))),128))])),p("div",En,[re(n.$slots,"default")]),($(),V("svg",In,[p("path",{class:"fill-none stroke-current opacity-85 [stroke-linecap:round] [stroke-width:2]",d:x(s)},null,8,Cn),($(!0),V(be,null,ve(x(r),(i,c)=>($(),V("path",{key:c,class:"fill-current",d:bt,transform:i},null,8,Tn))),128))]))]))}}),jn=Object.assign(Pn,{__name:"LaurelBadge"}),On=Rt("/screenshots/lokimaps-spain-topo.webp");function zn(e){return Object.prototype.toString.call(e)==="[object Object]"}function vt(e){return zn(e)||Array.isArray(e)}function Fn(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function We(e,t){const o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;const a=JSON.stringify(Object.keys(e.breakpoints||{})),r=JSON.stringify(Object.keys(t.breakpoints||{}));return a!==r?!1:o.every(n=>{const l=e[n],i=t[n];return typeof l=="function"?`${l}`==`${i}`:!vt(l)||!vt(i)?l===i:We(l,i)})}function wt(e){return e.concat().sort((t,o)=>t.name>o.name?1:-1).map(t=>t.options)}function Nn(e,t){if(e.length!==t.length)return!1;const o=wt(e),s=wt(t);return o.every((a,r)=>
vendor: 5,106 bytes, line 1
1{const n=s[r];return We(a,n)})}function et(e){return typeof e=="number"}function Xe(e){return typeof e=="string"}function Oe(e){return typeof e=="boolean"}function _t(e){return Object.prototype.toString.call(e)==="[object Object]"}function O(e){return Math.abs(e)}function tt(e){return Math.sign(e)}function Ae(e,t){return O(e-t)}function Bn(e,t){if(e===0||t===0||O(e)<=O(t))return 0;const o=Ae(O(e),O(t));return O(o/e)}function Vn(e){return Math.round(e*100)/100}function Me(e){return Ee(e).map(Number)}function te(e){return e[Ce(e)]}function Ce(e){return Math.max(0,e.length-1)}function nt(e,t){return t===Ce(e)}function yt(e,t=0){return Array.from(Array(e),(o,s)=>t+s)}function Ee(e){return Object.keys(e)}function Lt(e,t){return[e,t].reduce((o,s)=>(Ee(s).forEach(a=>{const r=o[a],n=s[a],l=_t(r)&&_t(n);o[a]=l?Lt(r,n):n}),o),{})}function Je(e,t){return typeof t.MouseEvent<"u"&&e instanceof t.MouseEvent}function Rn(e,t){const o={start:s,center:a,end:r};function s(){return 0}function a(i){return r(i)/2}function r(i){return t-i}function n(i,c){return Xe(e)?o[e](i):e(t,i,c)}return{measure:n}}function Ie(){let e=[];function t(a,r,n,l={passive:!0}){let i;if("addEventListener"in a)a.addEventListener(r,n,l),i=()=>a.removeEventListener(r,n,l);else{const c=a;c.addListener(n),i=()=>c.removeListener(n)}return e.push(i),s}function o(){e=e.filter(a=>a())}const s={add:t,clear:o};return s}function Gn(e,t,o,s){const a=Ie(),r=1e3/60;let n=null,l=0,i=0;function c(){a.add(e,"visibilitychange",()=>{e.hidden&&m()})}function g(){v(),a.clear()}function f(w){if(!i)return;n||(n=w,o(),o());const u=w-n;for(n=w,l+=u;l>=r;)o(),l-=r;const _=l/r;s(_),i&&(i=t.requestAnimationFrame(f))}function h(){i||(i=t.requestAnimationFrame(f))}function v(){t.cancelAnimationFrame(i),n=null,l=0,i=0}function m(){n=null,l=0}return{init:c,destroy:g,start:h,stop:v,update:o,render:s}}function Hn(e,t){const o=t==="rtl",s=e==="y",a=s?"y":"x",r=s?"x":"y",n=!s&&o?-1:1,l=g(),i=f();function c(m){const{height:b,width:w}=m;return s?b:w}function g(){return s?"top":o?"right":"left"}function f(){return s?"bottom":o?"left":"right"}function h(m){return m*n}return{scroll:a,cross:r,startEdge:l,endEdge:i,measureSize:c,direction:h}}function he(e=0,t=0){const o=O(e-t);function s(c){return c<e}function a(c){return c>t}function r(c){return s(c)||a(c)}function n(c){return r(c)?s(c)?e:t:c}function l(c){return o?c-o*Math.ceil((c-t)/o):c}return{length:o,max:t,min:e,constrain:n,reachedAny:r,reachedMax:a,reachedMin:s,removeOffset:l}}function At(e,t,o){const{constrain:s}=he(0,e),a=e+1;let r=n(t);function n(h){return o?O((a+h)%a):s(h)}function l(){return r}function i(h){return r=n(h),f}function c(h){return g().set(l()+h)}function g(){return At(e,l(),o)}const f={get:l,set:i,add:c,clone:g};return f}function qn(e,t,o,s,a,r,n,l,i,c,g,f,h,v,m,b,w,u,_){const{cross:S,direction:I}=e,T=["INPUT","SELECT","TEXTAREA"],y={passive:!1},d=Ie(),L=Ie(),M=he(50,225).constrain(v.measure(20)),P={mouse:300,touch:400},A={mouse:500,touch:600},z=m?43:25;let q=!1,R=0,E=0,B=!1,Q=!1,Z=!1,W=!1;function fe(k){if(!_)return;function D(H){(Oe(_)||_(k,H))&&_e(H)}const N=t;d.add(N,"dragstart",H=>H.preventDefault(),y).add(N,"touchmove",()=>{},y).add(N,"touchend",()=>{}).add(N,"touchstart",D).add(N,"mousedown",D).add(N,"touchcancel",G).add(N,"contextmenu",G).add(N,"click",ae,!0)}function Y(){d.clear(),L.clear()}function le(){const k=W?o:t;L.add(k,"touchmove",U,y).add(k,"touchend",G).add(k,"mousemove",U,y).add(k,"mouseup",G)}function ce(k){const D=k.nodeName||"";return T.includes(D)}function X(){return(m?A:P)[W?"mouse":"touch"]}function we(k,D){const N=f.add(tt(k)*-1),H=g.byDistance(k,!m).distance;return m||O(k)<M?H:w&&D?H*.5:g.byIndex(N.get(),0).distance}function _e(k){const D=Je(k,s);W=D,Z=m&&D&&!k.buttons&&q,q=Ae(a.get(),n.get())>=2,!(D&&k.button!==0)&&(ce(k.target)||(B=!0,r.pointerDown(k),c.useFriction(0).useDuration(0),a.set(n),le(),R=r.readPoint(k),E=r.readPoint(k,S),h.emit("pointerDown")))}function U(k){if(!Je(k,s)&&k.touches.length>=2)return G(k);const N=r.readPoint(k),H=r.readPoint(k,S),ne=Ae(N,R),ie=Ae(H,E);if(!Q&&!W&&(!k.cancelable||(Q=ne>ie,!Q)))return G(k);const pe=r.pointerMove(k);ne>b&&(Z=!0),c.useFriction(.3).useDuration(.75),l.start(),a.add(I(pe)),k.preventDefault()}function G(k){const N=g.byDistance(0,!1).index!==f.get(),H=r.pointerUp(k)*X(),ne=we(I(H),N),ie=Bn(H,ne),pe=z-10*ie,ue=u+ie/50;Q=!1,B=!1,L.clear(),c.useDuration(pe).useFriction(ue),i.distance(ne,!m),W=!1,h.emit("pointerUp")}function ae(k){Z&&(k.stopPropagation(),k.preventDefault(),Z=!1)}function J(){return B}return{init:fe,destroy:Y,pointerDown:J}}function Un(e,t){let s,a;function r(f){return f.timeStamp}function n(f,h){const m=`client${(h||e.scroll)==="x"?"X":"Y"}`;return(Je(f,t)?f:f.touches[0])[m]}function l(f){return s=f,a=f,n(f)}function i(f){const h=n(f)-n(a),v=r(f)-r(s)>170;return a=f,v&&(s=f),h}function c(f){if(!s||!a)return 0;const h=n(a)-n(s),v=r(f)-r(s),m=r(f)-r(a)>170,b=h/v;return v&&!m&&O(b)>.1?b:0}return{pointerDown:l,pointerMove:i,pointerUp:c,readPoint:n}}function Kn(){function e(o){const{offsetTop:s,offsetLeft:a,offsetWidth:r,offsetHeight:n}=o;
vendor: 8,335 bytes, line 1
1return{top:s,right:a+r,bottom:s+n,left:a,width:r,height:n}}return{measure:e}}function Yn(e){function t(s){return e*(s/100)}return{measure:t}}function Xn(e,t,o,s,a,r,n){const l=[e].concat(s);let i,c,g=[],f=!1;function h(w){return a.measureSize(n.measure(w))}function v(w){if(!r)return;c=h(e),g=s.map(h);function u(_){for(const S of _){if(f)return;const I=S.target===e,T=s.indexOf(S.target),y=I?c:g[T],d=h(I?e:s[T]);if(O(d-y)>=.5){w.reInit(),t.emit("resize");break}}}i=new ResizeObserver(_=>{(Oe(r)||r(w,_))&&u(_)}),o.requestAnimationFrame(()=>{l.forEach(_=>i.observe(_))})}function m(){f=!0,i&&i.disconnect()}return{init:v,destroy:m}}function Jn(e,t,o,s,a,r){let n=0,l=0,i=a,c=r,g=e.get(),f=0;function h(){const y=s.get()-e.get(),d=!i;let L=0;return d?(n=0,o.set(s),e.set(s),L=y):(o.set(e),n+=y/i,n*=c,g+=n,e.add(n),L=g-f),l=tt(L),f=g,T}function v(){const y=s.get()-t.get();return O(y)<.001}function m(){return i}function b(){return l}function w(){return n}function u(){return S(a)}function _(){return I(r)}function S(y){return i=y,T}function I(y){return c=y,T}const T={direction:b,duration:m,velocity:w,seek:h,settled:v,useBaseFriction:_,useBaseDuration:u,useFriction:I,useDuration:S};return T}function Qn(e,t,o,s,a){const r=a.measure(10),n=a.measure(50),l=he(.1,.99);let i=!1;function c(){return!(i||!e.reachedAny(o.get())||!e.reachedAny(t.get()))}function g(v){if(!c())return;const m=e.reachedMin(t.get())?"min":"max",b=O(e[m]-t.get()),w=o.get()-t.get(),u=l.constrain(b/n);o.subtract(w*u),!v&&O(w)<r&&(o.set(e.constrain(o.get())),s.useDuration(25).useBaseFriction())}function f(v){i=!v}return{shouldConstrain:c,constrain:g,toggleActive:f}}function Zn(e,t,o,s,a){const r=he(-t+e,0),n=f(),l=g(),i=h();function c(m,b){return Ae(m,b)<=1}function g(){const m=n[0],b=te(n),w=n.lastIndexOf(m),u=n.indexOf(b)+1;return he(w,u)}function f(){return o.map((m,b)=>{const{min:w,max:u}=r,_=r.constrain(m),S=!b,I=nt(o,b);return S?u:I||c(w,_)?w:c(u,_)?u:_}).map(m=>parseFloat(m.toFixed(3)))}function h(){if(t<=e+a)return[r.max];if(s==="keepSnaps")return n;const{min:m,max:b}=l;return n.slice(m,b)}return{snapsContained:i,scrollContainLimit:l}}function Wn(e,t,o){const s=t[0],a=o?s-e:te(t);return{limit:he(a,s)}}function eo(e,t,o,s){const r=t.min+.1,n=t.max+.1,{reachedMin:l,reachedMax:i}=he(r,n);function c(h){return h===1?i(o.get()):h===-1?l(o.get()):!1}function g(h){if(!c(h))return;const v=e*(h*-1);s.forEach(m=>m.add(v))}return{loop:g}}function to(e){const{max:t,length:o}=e;function s(r){const n=r-t;return o?n/-o:0}return{get:s}}function no(e,t,o,s,a){const{startEdge:r,endEdge:n}=e,{groupSlides:l}=a,i=f().map(t.measure),c=h(),g=v();function f(){return l(s).map(b=>te(b)[n]-b[0][r]).map(O)}function h(){return s.map(b=>o[r]-b[r]).map(b=>-O(b))}function v(){return l(c).map(b=>b[0]).map((b,w)=>b+i[w])}return{snaps:c,snapsAligned:g}}function oo(e,t,o,s,a,r){const{groupSlides:n}=a,{min:l,max:i}=s,c=g();function g(){const h=n(r),v=!e||t==="keepSnaps";return o.length===1?[r]:v?h:h.slice(l,i).map((m,b,w)=>{const u=!b,_=nt(w,b);if(u){const S=te(w[0])+1;return yt(S)}if(_){const S=Ce(r)-te(w)[0]+1;return yt(S,te(w)[0])}return m})}return{slideRegistry:c}}function ro(e,t,o,s,a){const{reachedAny:r,removeOffset:n,constrain:l}=s;function i(m){return m.concat().sort((b,w)=>O(b)-O(w))[0]}function c(m){const b=e?n(m):l(m),w=t.map((_,S)=>({diff:g(_-b,0),index:S})).sort((_,S)=>O(_.diff)-O(S.diff)),{index:u}=w[0];return{index:u,distance:b}}function g(m,b){const w=[m,m+o,m-o];if(!e)return m;if(!b)return i(w);const u=w.filter(_=>tt(_)===b);return u.length?i(u):te(w)-o}function f(m,b){const w=t[m]-a.get(),u=g(w,b);return{index:m,distance:u}}function h(m,b){const w=a.get()+m,{index:u,distance:_}=c(w),S=!e&&r(w);if(!b||S)return{index:u,distance:m};const I=t[u]-_,T=m+g(I,0);return{index:u,distance:T}}return{byDistance:h,byIndex:f,shortcut:g}}function so(e,t,o,s,a,r,n){function l(f){const h=f.distance,v=f.index!==t.get();r.add(h),h&&(s.duration()?e.start():(e.update(),e.render(1),e.update())),v&&(o.set(t.get()),t.set(f.index),n.emit("select"))}function i(f,h){const v=a.byDistance(f,h);l(v)}function c(f,h){const v=t.clone().set(f),m=a.byIndex(v.get(),h);l(m)}return{distance:i,index:c}}function ao(e,t,o,s,a,r,n,l){const i={passive:!0,capture:!0};let c=0;function g(v){if(!l)return;function m(b){if(new Date().getTime()-c>10)return;n.emit("slideFocusStart"),e.scrollLeft=0;const _=o.findIndex(S=>S.includes(b));et(_)&&(a.useDuration(0),s.index(_,0),n.emit("slideFocus"))}r.add(document,"keydown",f,!1),t.forEach((b,w)=>{r.add(b,"focus",u=>{(Oe(l)||l(v,u))&&m(w)},i)})}function f(v){v.code==="Tab"&&(c=new Date().getTime())}return{init:g}}function Se(e){let t=e;function o(){return t}function s(i){t=n(i)}function a(i){t+=n(i)}function r(i){t-=n(i)}function n(i){return et(i)?i:i.get()}return{get:o,set:s,add:a,subtract:r}}function Mt(e,t){const o=e.scroll==="x"?n:l,s=t.style;let a=null,r=!1;function n(h){return`translate3d(${h}px,0px,0px)`}function l(h){return`translate3d(0px,${h}px,0px)`}function i(h){if(r)return;const v=Vn(e.direction(h));v!==a&&(s.transform=o(v),a=v)}function c(h){r=!h}function g(){r||(s.transform="",t.getAttribute("style")||t.removeAttribute("style"))}return{clear:g,to:i,toggleActive:c}}function io(e,t,o,s,a,r,n,l,i){const g=Me(a),f=Me(a).reverse(),h=u().concat(_());function v(d,L){return d.reduce((M,P)=>M-a[P],L)}function m(d,L){return d.reduce((M,P)=>v(M,L)>0?M.concat([P]):M,[])}function b(d){return r.map((L,M)=>({start:L-s[M]+.5+d,end:L+t-.5+d}))}function w(d,L,M){const P=b(L);return d.map(A=>{const z=M?0:-o,q=M?o:0,R=M?"end":"start",E=P[A][R];return{index:A,loopPoint:E,slideLocation:Se(-1),translate:Mt(e,i[A]),target:()=>l.get()>E?z:q}})}function u(){const d=n[0],L=m(f,d);return w(L,o,!1)}function _(){const d=t-n[0]-1,L=m(g,d);return w(L,-o,!0)}function S(){return h.every(({index:d})=>{const L=g.filter(M=>M!==d);return v(L,t)<=.1})}function I(){h.forEach(d=>{const{target:L,translate:M,slideLocation:P}=d,A=L();A!==P.get()&&(M.to(A),P.set(A))})}function T(){h.forEach(d=>d.translate.clear())}return{canLoop:S,clear:T,loop:I,loopPoints:h}}function lo(e,t,o){let s,a=!1;function r(i){if(!o)return;function c(g){for(const f of g)if(f.type==="childList"){i.reInit(),t.emit("slidesChanged");break}}s=new MutationObserver(g=>{a||(Oe(o)||o(i,g))&&c(g)}),s.observe(e,{childList:!0})}function n(){s&&s.disconnect(),a=!0}return{init:r,destroy:n}}function co(e,t,o,s){const a={};let r=null,n=null,l,i=!1;function c(){l=new IntersectionObserver(m=>{i||(m.forEach(b=>{const w=t.indexOf(b.target);a[w]=b}),r=null,n=null,o.emit("slidesInView"))},{root:e.parentElement,threshold:s}),t.forEach(m=>l.observe(m))}function g(){l&&l.disconnect(),i=!0}function f(m){return Ee(a).reduce((b,w)=>{const u=parseInt(w),{isIntersecting:_}=a[u];return(m&&_||!m&&!_)&&b.push(u),b},[])}function h(m=!0){if(m&&r)return r;if(!m&&n)return n;const b=f(m);return m&&(r=b),m||(n=b),b}return{init:c,destroy:g,get:h}}function uo(e,t,o,s,a,r){const{measureSize:n,startEdge:l,endEdge:i}=e,c=o[0]&&a,g=m(),f=b(),h=o.map(n),v=w();function m(){if(!c)return 0;const _=o[0];return O(t[l]-_[l])}function b(){if(!c)return 0;const _=r.getComputedStyle(te(s));return parseFloat(_.getPropertyValue(`margin-${i}`))}function w(){return o.map((_,S,I)=>{const T=!S,y=nt(I,S);return T?h[S]+g:y?h[S]+f:I[S+1][l]-_[l]}).map(O)}return{slideSizes:h,slideSizesWithGaps:v,startGap:g,endGap:f}}function fo(e,t,o,s,a,r,n,l,i){const{startEdge:c,endEdge:g,direction:f}=e,h=et(o);function v(u,_){return Me(u).filter(S=>S%_===0).map(S=>u.slice(S,S+_))}function m(u){return u.length?Me(u).reduce((_,S,I)=>{const T=te(_)||0,y=T===0,d=S===Ce(u),L=a[c]-r[T][c],M=a[c]-r[S][g],P=!s&&y?f(n):0,A=!s&&d?f(l):0,z=O(M-A-(L+P));return I&&z>t+i&&_.push(S),d&&_.push(u.length),_},[]).map((_,S,I)=>{const T=Math.max(I[S-1]||0);return u.slice(T,_)}):[]}function b(u){return h?v(u,o):m(u)}return{groupSlides:b}}function po(e,t,o,s,a,r,n){const{align:l,axis:i,direction:c,startIndex:g,loop:f,duration:h,dragFree:v,dragThreshold:m,inViewThreshold:b,slidesToScroll:w,skipSnaps:u,containScroll:_,watchResize:S,watchSlides:I,watchDrag:T,watchFocus:y}=r,d=2,L=Kn(),M=L.measure(t),P=o.map(L.measure),A=Hn(i,c),z=A.measureSize(M),q=Yn(z),R=Rn(l,z),E=!f&&!!_,B=f||!!_,{slideSizes:Q,slideSizesWithGaps:Z,startGap:W,endGap:fe}=uo(A,M,P,o,B,a),Y=fo(A,z,w,f,M,P,W,fe,d),{snaps:le,snapsAligned:ce}
vendor: 5,595 bytes, line 1
1=no(A,R,M,P,Y),X=-te(le)+te(Z),{snapsContained:we,scrollContainLimit:_e}=Zn(z,X,ce,_,d),U=E?we:ce,{limit:G}=Wn(X,U,f),ae=At(Ce(U),g,f),J=ae.clone(),j=Me(o),k=({dragHandler:xe,scrollBody:Ve,scrollBounds:Re,options:{loop:Te}})=>{Te||Re.constrain(xe.pointerDown()),Ve.seek()},D=({scrollBody:xe,translate:Ve,location:Re,offsetLocation:Te,previousLocation:Ct,scrollLooper:Tt,slideLooper:$t,dragHandler:Dt,animation:Pt,eventHandler:it,scrollBounds:jt,options:{loop:lt}},ct)=>{const ut=xe.settled(),Ot=!jt.shouldConstrain(),dt=lt?ut:ut&&Ot,ft=dt&&!Dt.pointerDown();ft&&Pt.stop();const zt=Re.get()*ct+Ct.get()*(1-ct);Te.set(zt),lt&&(Tt.loop(xe.direction()),$t.loop()),Ve.to(Te.get()),ft&&it.emit("settle"),dt||it.emit("scroll")},N=Gn(s,a,()=>k(Be),xe=>D(Be,xe)),H=.68,ne=U[ae.get()],ie=Se(ne),pe=Se(ne),ue=Se(ne),me=Se(ne),ye=Jn(ie,ue,pe,me,h,H),Fe=ro(f,U,X,G,me),Ne=so(N,ae,J,ye,Fe,me,n),rt=to(G),st=Ie(),Et=co(t,o,n,b),{slideRegistry:at}=oo(E,_,U,_e,Y,j),It=ao(e,o,at,Ne,ye,st,n,y),Be={ownerDocument:s,ownerWindow:a,eventHandler:n,containerRect:M,slideRects:P,animation:N,axis:A,dragHandler:qn(A,e,s,a,me,Un(A,a),ie,N,Ne,ye,Fe,ae,n,q,v,m,u,H,T),eventStore:st,percentOfView:q,index:ae,indexPrevious:J,limit:G,location:ie,offsetLocation:ue,previousLocation:pe,options:r,resizeHandler:Xn(t,n,a,o,A,S,L),scrollBody:ye,scrollBounds:Qn(G,ue,me,ye,q),scrollLooper:eo(X,G,ue,[ie,ue,pe,me]),scrollProgress:rt,scrollSnapList:U.map(rt.get),scrollSnaps:U,scrollTarget:Fe,scrollTo:Ne,slideLooper:io(A,z,X,Q,Z,le,U,ue,o),slideFocus:It,slidesHandler:lo(t,n,I),slidesInView:Et,slideIndexes:j,slideRegistry:at,slidesToScroll:Y,target:me,translate:Mt(A,t)};return Be}function mo(){let e={},t;function o(c){t=c}function s(c){return e[c]||[]}function a(c){return s(c).forEach(g=>g(t,c)),i}function r(c,g){return e[c]=s(c).concat([g]),i}function n(c,g){return e[c]=s(c).filter(f=>f!==g),i}function l(){e={}}const i={init:o,emit:a,off:n,on:r,clear:l};return i}const go={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function ho(e){function t(r,n){return Lt(r,n||{})}function o(r){const n=r.breakpoints||{},l=Ee(n).filter(i=>e.matchMedia(i).matches).map(i=>n[i]).reduce((i,c)=>t(i,c),{});return t(r,l)}function s(r){return r.map(n=>Ee(n.breakpoints||{})).reduce((n,l)=>n.concat(l),[]).map(e.matchMedia)}return{mergeOptions:t,optionsAtMedia:o,optionsMediaQueries:s}}function xo(e){let t=[];function o(r,n){return t=n.filter(({options:l})=>e.optionsAtMedia(l).active!==!1),t.forEach(l=>l.init(r,e)),n.reduce((l,i)=>Object.assign(l,{[i.name]:i}),{})}function s(){t=t.filter(r=>r.destroy())}return{init:o,destroy:s}}function je(e,t,o){const s=e.ownerDocument,a=s.defaultView,r=ho(a),n=xo(r),l=Ie(),i=mo(),{mergeOptions:c,optionsAtMedia:g,optionsMediaQueries:f}=r,{on:h,off:v,emit:m}=i,b=A;let w=!1,u,_=c(go,je.globalOptions),S=c(_),I=[],T,y,d;function L(){const{container:j,slides:k}=S;y=(Xe(j)?e.querySelector(j):j)||e.children[0];const N=Xe(k)?y.querySelectorAll(k):k;d=[].slice.call(N||y.children)}function M(j){const k=po(e,y,d,s,a,j,i);if(j.loop&&!k.slideLooper.canLoop()){const D=Object.assign({},j,{loop:!1});return M(D)}return k}function P(j,k){w||(_=c(_,j),S=g(_),I=k||I,L(),u=M(S),f([_,...I.map(({options:D})=>D)]).forEach(D=>l.add(D,"change",A)),S.active&&(u.translate.to(u.location.get()),u.animation.init(),u.slidesInView.init(),u.slideFocus.init(J),u.eventHandler.init(J),u.resizeHandler.init(J),u.slidesHandler.init(J),u.options.loop&&u.slideLooper.loop(),y.offsetParent&&d.length&&u.dragHandler.init(J),T=n.init(J,I)))}function A(j,k){const D=Y();z(),P(c({startIndex:D},j),k),i.emit("reInit")}function z(){u.dragHandler.destroy(),u.eventStore.clear(),u.translate.clear(),u.slideLooper.clear(),u.resizeHandler.destroy(),u.slidesHandler.destroy(),u.slidesInView.destroy(),u.animation.destroy(),n.destroy(),l.clear()}function q(){w||(w=!0,l.clear(),z(),i.emit("destroy"),i.clear())}function R(j,k,D){!S.active||w||(u.scrollBody.useBaseFriction().useDuration(k===!0?0:S.duration),u.scrollTo.index(j,D||0))}function E(j){const k=u.index.add(1).get();R(k,j,-1)}function B(j){const k=u.index.add(-1).get();R(k,j,1)}function Q(){return u.index.add(1).get()!==Y()}function Z(){return u.index.add(-1).get()!==Y()}function W(){return u.scrollSnapList}function fe(){return u.scrollProgress.get(u.offsetLocation.get())}function Y(){return u.index.get()}function le(){return u.indexPrevious.get()}function ce(){return u.slidesInView.get()}function X(){return u.slidesInView.get(!1)}function we(){return T}function _e(){return u}function U(){return e}function G(){return y}function ae(){return d}const J={canScrollNext:Q,canScrollPrev:Z,containerNode:G,internalEngine:_e,destroy:q,off:v,on:h,emit:m,plugins:we,previousScrollSnap:le,reInit:b,rootNode:U,scrollNext:E,scrollPrev:B,scrollProgress:fe,scrollSnapList:W,scrollTo:R,selectedScrollSnap:Y,slideNodes:ae,slidesInView:ce,slidesNotInView:X};return P(t,o),setTimeout(()=>i.emit("init"),0),J}je.globalOptions=void 0;function ot(e={},t=[]){const o=Pe(e),s=Pe(t);let a=o?e.value:e,r=s?t.value:t;const n=Ye(),l=Ye();function i(){l.value&&l.value.reInit(a,r)}return Ze(()=>{!Fn()||!n.value||(je.globalOptions=ot.globalOptions,l.value=je(n.value,a,r))}),St(()=>{l.value&&l.value.destroy()}),o&&pt(e,c=>{We(a,c)||(a=c,i())}),s&&pt(t,c=>{Nn(r,c)||(r=c,i())}),[n,l]}ot.globalOptions=void 0;const[bo,vo]=Gt(({opts:e,orientation:t,plugins:o},s)=>
1{const[a,r]=ot({...e,axis:t==="horizontal"?"x":"y"},o);function n(){r.value?.scrollPrev()}function l(){r.value?.scrollNext()}const i=Le(!1),c=Le(!1);function g(f){i.value=f?.canScrollNext()||!1,c.value=f?.canScrollPrev()||!1}return Ze(()=>{r.value&&(r.value?.on("init",g),r.value?.on("reInit",g),r.value?.on("select",g),s("init-api",r.value))}),{carouselRef:a,carouselApi:r,canScrollPrev:c,canScrollNext:i,scrollPrev:n,scrollNext:l,orientation:t}});function ze(){const e=vo();if(!e)throw new Error("useCarousel must be used within a <Carousel />");return e}const wo=K({__name:"Carousel",props:{opts:{},plugins:{},orientation:{default:"horizontal"},class:{type:[Boolean,null,String,Object,Array]}},emits:["init-api"],setup(e,{expose:t,emit:o}){const s=e,a=o,{canScrollNext:r,canScrollPrev:n,carouselApi:l,carouselRef:i,orientation:c,scrollNext:g,scrollPrev:f}=bo(s,a);t({canScrollNext:r,canScrollPrev:n,carouselApi:l,carouselRef:i,orientation:c,scrollNext:g,scrollPrev:f});function h(v){const m=s.orientation==="vertical"?"ArrowUp":"ArrowLeft",b=s.orientation==="vertical"?"ArrowDown":"ArrowRight";if(v.key===m){v.preventDefault(),f();return}v.key===b&&(v.preventDefault(),g())}return(v,m)=>($(),V("div",{"data-slot":"carousel",class:ee(x(se)("relative",s.class)),role:"region","aria-roledescription":"carousel",tabindex:"0",onKeydown:h},[re(v.$slots,"default",{canScrollNext:x(r),canScrollPrev:x(n),carouselApi:x(l),carouselRef:x(i),orientation:x(c),scrollNext:x(g),scrollPrev:x(f)})],34))}}),_o=K({inheritAttrs:!1,__name:"CarouselContent",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,{carouselRef:o,orientation:s}=ze();return(a,r)=>($(),V("div",{ref_key:"carouselRef",ref:o,"data-slot":"carousel-content",class:"overflow-hidden"},[p("div",Qe({class:x(se)("flex",x(s)==="horizontal"?"-ml-4":"-mt-4 flex-col",t.class)},a.$attrs),[re(a.$slots,"default")],16)],512))}}),yo=K({__name:"CarouselItem",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,{orientation:o}=ze();return(s,a)=>($(),V("div",{"data-slot":"carousel-item",role:"group","aria-roledescription":"slide",class:ee(x(se)("min-w-0 shrink-0 grow-0 basis-full",x(o)==="horizontal"?"pl-4":"pt-4",t.class))},[re(s.$slots,"default")],2))}}),ko=K({__name:"CarouselNext",props:{variant:{default:"outline"},size:{default:"icon-sm"},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,{orientation:o,canScrollNext:s,scrollNext:a}=ze();return(r,n)=>($(),oe(x(ge),{"data-slot":"carousel-next",disabled:!x(s),class:ee(x(se)("rounded-full absolute touch-manipulation",x(o)==="horizontal"?"top-1/2 -right-12 -translate-y-1/2":"-bottom-12 left-1/2 -translate-x-1/2 rotate-90",t.class)),variant:e.variant,size:e.size,onClick:x(a)},{default:F(()=>[re(r.$slots,"default",{},()=>[C(x(ln),{class:"cn-rtl-flip"}),n[0]||(n[0]=p("span",{class:"sr-only"},"Next slide",-1))])]),_:3},8,["disabled","class","variant","size","onClick"]))}}),So=K({__name:"CarouselPrevious",props:{variant:{default:"outline"},size:{default:"icon-sm"},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,{orientation:o,canScrollPrev:s,scrollPrev:a}=ze();return(r,n)=>($(),oe(x(ge),{"data-slot":"carousel-previous",disabled:!x(s),class:ee(x(se)("rounded-full absolute touch-manipulation",x(o)==="horizontal"?"top-1/2 -left-12 -translate-y-1/2":"-top-12 left-1/2 -translate-x-1/2 rotate-90",t.class)),variant:e.variant,size:e.size,onClick:x(a)},{default:F(()=>[re(r.$slots,"default",{},()=>[C(x(mn),{class:"cn-rtl-flip"}),n[0]||(n[0]=p("span",{class:"sr-only"},"Previous slide",-1))])]),_:3},8,["disabled","class","variant","size","onClick"]))}}),Lo=["data-orientation"],Ao=K({__name:"Field",props:{class:{type:[Boolean,null,String,Object,Array]},orientation:{default:"vertical"}},setup(e){const t=e;return(o,s)=>($(),V("div",{role:"group","data-slot":"field","data-orientation":e.orientation,class:ee(x(se)(x(Io)({orientation:e.orientation}),t.class))},[re(o.$slots,"default")],10,Lo))}}),Mo=K({__name:"Label",props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e,o=Ht(t,"class");return(s,a)=>($(),oe(x(bn),Qe({"data-slot":"label"}
1,x(o),{class:x(se)("gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",t.class)}),{default:F(()=>[re(s.$slots,"default")]),_:3},16,["class"]))}}),Eo=K({__name:"FieldLabel",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(o,s)=>($(),oe(x(Mo),{"data-slot":"field-label",class:ee(x(se)("has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary/30 dark:has-data-[state=checked]:border-primary/20 dark:has-data-[state=checked]:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 group/field-label peer/field-label flex w-fit leading-snug","has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",t.class))},{default:F(()=>[re(o.$slots,"default")]),_:3},8,["class"]))}}),Io=qt("data-[invalid=true]:text-destructive gap-2 group/field flex w-full",{variants:{orientation:{vertical:"flex-col *:w-full [&>.sr-only]:w-auto",horizontal:"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",responsive:"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"}},defaultVariants:{orientation:"vertical"}}),Co=K({__name:"Input",props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:["update:modelValue"],setup(e,{emit:t}){const o=e,a=Ut(o,"modelValue",t,{passive:!0,defaultValue:o.defaultValue});return(r,n)=>Kt(($(),V("input",{"onUpdate:modelValue":n[0]||(n[0]=l=>Pe(a)?a.value=l:null),"data-slot":"input",class:ee(x(se)("dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",o.class))},null,2)),[[Yt,x(a)]])}}),To=K({__name:"Spinner",props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){const t=e;return(o,s)=>($(),oe(x(hn),{role:"status","aria-label":"Loading",class:ee(x(se)("size-4 animate-spin",t.class))},null,8,["class"]))}}),$o={id:"home-content",class:"relative z-1 mx-auto grid w-full max-w-[1120px] flex-1 grid-cols-1 items-center gap-x-[clamp(2rem,5vw,4.5rem)] px-[clamp(1.375rem,5vw,3.5rem)] pt-[clamp(2rem,7vw,5.5rem)] pb-[clamp(2rem,5vw,4.5rem)] text-center lg:grid-cols-[1.05fr_0.95fr] lg:grid-rows-[1fr_auto_auto_1fr] lg:text-left",tabindex:"-1"},Do={class:"min-w-0 lg:col-start-1 lg:row-start-2"},Po={class:"mb-[clamp(1.375rem,4vw,2.5rem)] flex justify-center lg:justify-start"},jo={class:"mt-[clamp(1.625rem,3.5vw,2.375rem)] flex flex-wrap items-center justify-center gap-4 lg:justify-start"},Oo={class:"mt-[clamp(2.5rem,9vw,3.75rem)] min-w-0 lg:col-start-2 lg:row-span-4 lg:row-start-1 lg:mt-0","aria-labelledby":"showcase-title"},zo={class:"mx-auto w-full max-w-[540px]"},Fo={class:"mb-3 flex items-baseline justify-between gap-4 px-2"},No={class:"text-[0.8125rem] font-bold tracking-[0.04em] text-[var(--ink-soft)] tabular-nums","aria-hidden":"true"},Bo=["src","alt","loading"],Vo={class:"mt-5 min-h-13 text-center","aria-hidden":"true"},Ro={class:"text-xs font-bold tracking-[0.08em] text-[var(--green)] uppercase"},Go={class:"mt-1 text-[1.0625rem] leading-tight font-bold text-[var(--ink)]"},Ho={class:"mt-4 flex justify-center gap-1",role:"group","aria-label":"Choose a screenshot"},qo={class:"sr-only","aria-live":"polite","aria-atomic":"true"},Uo={class:"mt-[clamp(2rem,5vw,3rem)] grid list-none grid-cols-1 gap-x-5 gap-y-3 p-0 sm:grid-cols-2 lg:col-start-1 lg:row-start-3 lg:justify-self-start"},Ko={class:"grid size-9 shrink-0 place-items-center rounded-xl bg-[var(--green-soft)] text-[var(--green)]"},Yo={class:"relative z-1 px-[clamp(1.375rem,5vw,3.5rem)] pb-[clamp(3rem,8vw,6.5rem)]","aria-labelledby":"maps-first-title"},Xo={class:"mx-auto grid w-full max-w-[1120px] overflow-hidden rounded-[clamp(1.75rem,4vw,2.5rem)] bg-[#193326] text-[#fbf7ec] shadow-[0_32px_90px_-48px_rgba(13,20,16,0.86)] lg:grid-cols-[minmax(0,1.08fr)_minmax(360px,0.92fr)]"},Jo={class:"flex flex-col justify-center p-[clamp(1.75rem,5vw,4.5rem)]"},Qo={class:"mt-7 flex list-none flex-wrap gap-2 p-0","aria-label":"Official topographic map coverage"},Zo={class:"relative z-1 px-[clamp(1.375rem,5vw,3.5rem)] pb-[clamp(2.5rem,7vw,5rem)]","aria-labelledby":"proof-title"},Wo={class:"mx-auto flex w-full max-w-[720px] flex-col items-center text-center"},er={class:"mt-[clamp(1.75rem,4vw,2.875rem)] flex flex-wrap justify-center gap-[clamp(1.125rem,4vw,3.5rem)]"},tr={id:"android-waitlist",class:"relative z-1 scroll-mt-6 px-[clamp(1.375rem,5vw,3.5rem)] pb-[clamp(2.5rem,7vw,5rem)]","aria-labelledby":"android-title"},nr={class:"mx-auto w-full max-w-[920px]"},or={class:"grid items-center gap-[clamp(1.75rem,5vw,4rem)] text-center md:grid-cols-[minmax(0,0.9fr)_minmax(320px,1fr)] md:text-left"},rr=["aria-busy"],sr={class:"grid grid-cols-1 gap-2 rounded-[18px] border border-[var(--line)] bg-white/55 p-1.5 shadow-[0_18px_38px_-28px_rgba(27,42,35,0.52)] transition-[border-color,box-shadow] focu
1s-within:border-[color-mix(in_srgb,var(--green)_42%,var(--line))] focus-within:shadow-[0_0_0_3px_color-mix(in_srgb,var(--green)_16%,transparent),0_18px_38px_-28px_rgba(27,42,35,0.52)] sm:grid-cols-[minmax(0,1fr)_auto] dark:bg-white/4"},ar={class:"relative z-1 px-[clamp(1.375rem,5vw,3.5rem)] pb-[clamp(2.5rem,7vw,5rem)]","aria-labelledby":"updates-title"},ir={class:"mx-auto flex w-full max-w-[720px] flex-col items-center text-center"},Ue="Lokimaps: official topographic maps for the outdoors",Ke="Explore Finland, Sweden, Norway and Spain with official topographic maps on iPhone and iPad. Download maps offline, plan routes, record tracks, use GPX and work with precise coordinates.",br=K({__name:"index",setup(e){const t=[{src:"/screenshots/lokimaps-hero.jpg",alt:"Lokimaps topographic map shown on an iPhone for outdoor navigation",kicker:"Outdoor ready",caption:"For trips where road maps arenât enough"},{src:"/screenshots/lokimaps-offline.jpg",alt:"Lokimaps downloading an offline map area across the FinnishâNorwegian border",kicker:"Offline maps",caption:"Download maps before coverage ends"},{src:"/screenshots/lokimaps-nordic-maps.jpg",alt:"Lokimaps showing Finnish, Swedish and Norwegian topographic maps together",kicker:"Nordic coverage",caption:"Finland, Sweden and Norway in one app"},{src:"/screenshots/lokimaps-spain.jpg",alt:"Lokimaps showing Spainâs official topographic map around Tajo del Caballo in Sierra de Mijas",kicker:"Spain in detail",caption:"Official topographic maps from IGN"},{src:"/screenshots/lokimaps-route-planner.jpg",alt:"Lokimaps route planner with a walking route and waypoints on a topographic map",kicker:"Route planner",caption:"Plan your route before you leave"},{src:"/screenshots/lokimaps-measure.jpg",alt:"Lokimaps measure tool showing distance and bearing between two points",kicker:"Measure tool",caption:"Measure distance and bearing"},{src:"/screenshots/lokimaps-track-recording.jpg",alt:"Lokimaps recording a hiking track on a topographic map of Koli",kicker:"Track recording",caption:"Record your route as you go"},{src:"/screenshots/lokimaps-location-sharing.jpg",alt:"Lokimaps location sharing group screen for hiking friends",kicker:"Location sharing",caption:"Share locations with your group"},{src:"/screenshots/lokimaps-specialist-maps.jpg",alt:"Lokimaps nautical chart and historic Helsinki map shown on two iPhones",kicker:"Specialist maps",caption:"Go deeper with nautical and historic maps"}],o=[{title:"Official topographic maps",icon:nn},{title:"Works offline",icon:dn},{title:"Plan & record routes",icon:cn},{title:"GPX & precise coordinates",icon:fn}],s=Xt();Jt({title:Ue,description:Ke,ogTitle:Ue,ogDescription:Ke,ogType:"website",ogUrl:"https://www.lokimaps.com/",ogImage:"/maastokartta-app-icon.png",twitterCard:"summary_large_image",twitterTitle:Ue,twitterDescription:Ke,twitterImage:"/maastokartta-app-icon.png"}),Qt({htmlAttrs:{lang:"en"},link:[{rel:"canonical",href:"https://www.lokimaps.com/"}],meta:[{name:"viewport",content:"width=device-width, initial-scale=1, viewport-fit=cover"},{name:"theme-color",content:"#f1e7d2",media:"(prefers-color-scheme: light)"},{name:"theme-color",content:"#0d1410",media:"(prefers-color-scheme: dark)"}]});const a=t.length,r=Le(0),n=Ye(),l=ke(()=>t[r.value]??t[0]),i=ke(()=>{const y=l.value;return`Screenshot ${r.value+1} of ${a}: ${y.kicker}. ${y.caption}`}),c=ke(()=>`${String(r.value+1).padStart(2,"0")} / ${String(a).padStart(2,"0")}`);function g(y){const d=y??n.value;d&&(r.value=d.selectedScrollSnap(),v(d))}let f;function h(y){const d=y.rootNode().getBoundingClientRect(),L=d.left+d.width/2;y.slideNodes().forEach((M,P)=>{const A=M.querySelector("[data-carousel-card]");if(!A)return;const z=M.getBoundingClientRect(),R=(z.left+z.width/2-L)/z.width,E=Math.abs(R),B=Math.min(E,1),Q=Math.max(.72,1-E*.18),Z=-R*z.width*.6,W=-Math.min(E,1.5)*90,fe=-Math.max(-1,Math.min(1,R))*18,Y=Math.max(0,Math.min(1,1-Math.max(0,E-1)*2.4)),le=1-B*.2,ce=1-B*.06;A.style.transform=`perspective(1500px) translate3d(${Z}px, 0, ${W}px) rotateY(${fe}deg) scale(${Q})`,A.style.opacity=String(Y),A.style.filter=`brightness(${le}) saturate(${ce})`;const X=String(P===r.value?40:Math.round(30-Math.min(E,2)*10));M.style.zIndex=X,A.style.zIndex=X,A.style.pointerEvents=E>1.35?"none":"auto"})}function v(y){const d=y??n.value;!d||typeof window>"u"||f!==void 0||(f=window.requestAnimationFrame(()=>{f=void 0,h(d)}))}function m(y){y&&(n.value?.off("select",g),n.value?.off("reInit",g),n.value?.off("reInit",v),n.value?.off("scroll",v),n.value?.off("settle",v),n.value=y,g(y),h(y),y.on("select",g),y.on("reInit",g),y.on("reInit",v),y.on("scroll",v),y.on("settle",v))}function b(y){n.value?.scrollTo(y)}const w=Le(""),u=Le("idle"),_=ke(()=>{switch(u.value){case"submitting":return"Sending confirmation email...";case"sent":return"Check your email to confirm your place on the Android waitlist.";case"confirmed":return"You are confirmed on the Android waitlist.";case"already-confirmed":return"You are already confirmed on the Android waitlist.";case"expired":return"That confirmation link has expired. Enter your email to get a new one.";
1case"invalid":return"That confirmation link was not valid. Enter your email to get a new one.";case"error":return"Something went wrong. Please try again in a moment.";default:return"We will email you a confirmation link before adding you."}}),S=ke(()=>{switch(u.value){case"sent":case"confirmed":case"already-confirmed":return"success";case"expired":case"invalid":case"error":return"error";default:return"neutral"}});async function I(){if(u.value==="submitting")return;const y=w.value.trim();if(y){u.value="submitting";try{const d=await $fetch("/api/android-waitlist",{method:"POST",body:{email:y}});u.value=d.ok?"sent":"error",w.value=""}catch{u.value="error"}}}function T(y){const d=Array.isArray(y)?y[0]:y;switch(d){case"confirmed":case"already-confirmed":case"expired":case"invalid":case"error":return d;default:return}}return Ze(()=>{u.value=T(s.query.android_waitlist)??u.value}),St(()=>{n.value?.off("select",g),n.value?.off("reInit",g),n.value?.off("reInit",v),n.value?.off("scroll",v),n.value?.off("settle",v),f!==void 0&&window.cancelAnimationFrame(f)}),(y,d)=>{const L=kn,M=Wt,P=sn,A=an,z=jn,q=Nt,R=Zt;return $(),oe(R,null,{default:F(()=>[d[22]||(d[22]=p("a",{class:"fixed top-3 left-3 z-[100] -translate-y-20 rounded-lg bg-primary px-3 py-2 text-sm font-semibold text-primary-foreground shadow-lg outline-none transition-transform focus:translate-y-0 focus-visible:ring-3 focus-visible:ring-ring/50 motion-reduce:transition-none",href:"#home-content"}," Skip to content ",-1)),C(L),p("main",$o,[p("div",Do,[p("div",Po,[C(M,{size:"lg"})]),C(x(ge),{"as-child":"",variant:"outline",class:"group/news mb-4 h-auto max-w-full justify-start rounded-full border-transparent bg-[color-mix(in_srgb,var(--green)_12%,var(--cream-2))] px-3 py-1.5 text-left text-xs font-medium text-[var(--ink-soft)] shadow-none hover:border-transparent hover:bg-[color-mix(in_srgb,var(--green)_12%,var(--cream-2))] hover:text-[var(--ink)] motion-reduce:transition-none"},{default:F(()=>[C(P,{to:"/release-notes#5-3-0"},{default:F(()=>[d[1]||(d[1]=p("span",{class:"truncate"},"Explore the new navigation experience",-1)),C(x(He),{"data-icon":"inline-end",class:"size-3.5 text-[var(--green)] opacity-80 transition-transform group-hover/news:translate-x-0.5 motion-reduce:transition-none","aria-hidden":"true"})]),_:1})]),_:1}),d[3]||(d[3]=p("h1",{class:"text-[clamp(2.375rem,6.2vw,4.125rem)] leading-[1.04] font-extrabold tracking-[-0.025em] text-[var(--ink)]"},[$e(" The outdoors,"),p("br"),$e("in remarkable detail. ")],-1)),d[4]||(d[4]=p("p",{class:"mx-auto mt-4 max-w-[36ch] text-[clamp(1.03125rem,1.6vw,1.25rem)] leading-[1.5] text-[var(--ink-soft)] lg:mx-0"}," Explore Finland, Sweden, Norway and Spain with official national topographic maps, clear at every scale and ready offline when coverage ends. ",-1)),p("div",jo,[C(A),C(x(ge),{"as-child":"",variant:"outline",class:"store-button-motion h-[52px] rounded-[9px] border-[var(--line)] bg-[var(--cream-1)] px-5 text-[0.9375rem] font-bold text-[var(--ink)] shadow-[0_12px_22px_-16px_rgba(27,42,35,0.32)] transition-[transform,box-shadow] hover:bg-[var(--cream-1)] hover:shadow-[0_16px_28px_-16px_rgba(27,42,35,0.4)] active:not-aria-[haspopup]:scale-100 motion-reduce:transition-none dark:shadow-[0_14px_24px_-18px_rgba(0,0,0,0.42)] dark:hover:bg-[var(--cream-1)] dark:hover:shadow-[0_18px_30px_-18px_rgba(0,0,0,0.52)]"},{default:F(()=>[...d[2]||(d[2]=[p("a",{href:"#android-waitlist","aria-label":"Join the Lokimaps Android waitlist on Google Play"},[p("svg",{class:"size-5",viewBox:"0 0 24 24","aria-hidden":"true"},[p("path",{fill:"#00C566",d:"M4 3.2 4 12 11.5 12Z"}),p("path",{fill:"#00A0FF",d:"M4 12 4 20.8 11.5 12Z"}),p("path",{fill:"#FFCE00",d:"M4 3.2 11.5 12 20.5 12Z"}),p("path",{fill:"#FF3D43",d:"M4 20.8 11.5 12 20.5 12Z"})]),p("span",null,"Join Android waitlist")],-1)])]),_:1})])]),p("section",Oo,[p("div",zo,[p("header",Fo,[d[5]||(d[5]=p("p",{id:"showcase-title",class:"text-[0.8125rem] font-bold tracking-[0.08em] text-[var(--green)] uppercase"}," Inside Lokimaps ",-1)),p("p",No,de(x(c)),1)]),C(x(wo),{class:"mx-auto w-full rounded-[2rem] focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-[var(--green)] focus-visible:ring-offset-4 focus-visible:ring-offset-[var(--cream-2)] [&_[data-slot=carou
1sel-content]]:overflow-visible",opts:{align:"center",loop:!0},"aria-label":"Lokimaps app screenshots",onInitApi:m},{default:F(()=>[d[6]||(d[6]=p("div",{class:"pointer-events-none absolute top-1/2 left-1/2 -z-1 h-4/5 w-[118%] -translate-x-1/2 -translate-y-1/2 rounded-full bg-[radial-gradient(closest-side,color-mix(in_srgb,var(--green)_28%,transparent),transparent_72%)] blur-xl","aria-hidden":"true"},null,-1)),C(x(_o),{class:"ml-0"},{default:F(()=>[($(),V(be,null,ve(t,(E,B)=>C(x(yo),{key:E.src,class:"relative basis-[64%] pl-0 sm:basis-[62%] lg:basis-[60%]","aria-label":`${B+1} of ${x(a)}`},{default:F(()=>[C(x(en),{"data-carousel-card":"",class:ee(["relative overflow-hidden rounded-[1.875rem] border-0 bg-transparent py-0 ring-0 will-change-[transform,opacity,filter]",B===0?"opacity-100":"opacity-0"])},{default:F(()=>[C(x(tn),{class:"p-0"},{default:F(()=>[p("img",{class:"block aspect-[6/13] w-full rounded-[1.875rem] bg-[#173325] object-cover shadow-[0_32px_76px_-38px_rgba(27,42,35,0.82)] ring-1 ring-white/30 select-none",src:E.src,alt:E.alt,width:"720",height:"1560",loading:B===0?"eager":"lazy",draggable:"false"},null,8,Bo)]),_:2},1024)]),_:2},1032,["class"])]),_:2},1032,["aria-label"])),64))]),_:1}),C(x(So),{class:"left-1 z-40 size-11 border-[var(--line)] bg-[var(--surface)] text-[var(--ink)] shadow-lg backdrop-blur-md hover:bg-[color-mix(in_srgb,var(--surface)_74%,var(--green)_16%)] sm:left-3"}),C(x(ko),{class:"right-1 z-40 size-11 border-[var(--line)] bg-[var(--surface)] text-[var(--ink)] shadow-lg backdrop-blur-md hover:bg-[color-mix(in_srgb,var(--surface)_74%,var(--green)_16%)] sm:right-3"})]),_:1}),p("div",Vo,[p("p",Ro,de(x(l).kicker),1),p("p",Go,de(x(l).caption),1)]),p("div",Ho,[($(),V(be,null,ve(t,(E,B)=>C(x(ge),{key:E.src,type:"button",variant:"ghost",size:"icon-xs",class:"rounded-full hover:bg-[var(--green-soft)]","aria-label":`Show the ${E.kicker} screenshot`,"aria-pressed":B===x(r),onClick:Q=>b(B)},{default:F(()=>[p("span",{class:ee(["block rounded-full bg-[var(--green)] transition-[width,opacity] motion-reduce:transition-none",B===x(r)?"h-2 w-6 opacity-100":"size-2 opacity-35"]),"aria-hidden":"true"},null,2)]),_:2},1032,["aria-label","aria-pressed","onClick"])),64))]),p("p",qo,de(x(i)),1)])]),p("ul",Uo,[($(),V(be,null,ve(o,E=>p("li",{key:E.title,class:"flex items-center gap-2.5 text-[0.9375rem] font-semibold text-[var(--ink)]"},[p("span",Ko,[($(),oe(on(E.icon),{class:"size-5","aria-hidden":"true"}))]),p("span",null,de(E.title),1)])),64))])]),p("section",Yo,[p("div",Xo,[p("div",Jo,[d[7]||(d[7]=p("p",{class:"text-xs font-bold tracking-[0.1em] text-[#9bc6a9] uppercase"}," Maps first ",-1)),d[8]||(d[8]=p("h2",{id:"maps-first-title",class:"mt-4 max-w-[12ch] text-[clamp(2.25rem,5vw,4rem)] leading-[1.02] font-extrabold tracking-[-0.045em]"}," See the terrain, not just the trail. ",-1)),d[9]||(d[9]=p("p",{class:"mt-6 max-w-[55ch] text-[clamp(1.03125rem,1.7vw,1.1875rem)] leading-7 text-[#dbe9df]"}," Lokimaps starts with detailed cartography from the national mapping agencies of Finland, Sweden, Norway and Spain. Local symbols, place names and terrain detail stay intact, so you can understand the place for yourself. ",-1)),p("ul",Qo,[($(),V(be,null,ve(["Finland","Sweden","Norway","Spain"],E=>p("li",{key:E,class:"rounded-full border border-white/15 bg-white/8 px-3.5 py-1.5 text-sm font-bold text-[#fbf7ec]"},de(E),1)),64))]),d[10]||(d[10]=p("dl",{class:"mt-9 grid gap-6 border-t border-white/15 pt-7 sm:grid-cols-2"},[p("div",null,[p("dt",{class:"text-sm font-extrabold text-[#fbf7ec]"},"Ready beyond reception"),p("dd",{class:"mt-2 text-sm leading-6 text-[#c7d8cc]"}," Download the map area you need before mobile coverage ends. ")]),p("div",null,[p("dt",{class:"text-sm font-extrabold text-[#fbf7ec]"},"Tools built around the map"),p("dd",{class:"mt-2 text-sm leading-6 text-[#c7d8cc]"}," Plan routes, record tracks and work with GPX and coordinates without losing sight of the map. ")])],-1))]),d[11]||(d[11]=p("figure",{class:"relative min-h-[440px] overflow-hidden lg:min-h-[680px]"},[p("img",{class:"absolute inset-0 size-full object-cover object-[center_42%]",src:On,alt:"Detailed contour lines on Spainâs official topographic map around Tajo del Caballo in Lokimaps",width:"1320",height:"2868",loading:"lazy"}),p("div",{class:"pointer-events-none absolute inset-0 bg-[linear-gradient(180deg,rgba(8,20,14,0.02)_45%,rgba(8,20,14,0.82)_100%)] lg:bg-[linear-gradient(90deg,rgba(25,51,38,0.55)_0%,transparent_25%),linear-gradient(180deg,transparent_55%,rgba(8,20,14,0.82)_100%)]","aria-hidden":"true"}),p("figcaption",{class:"absolute right-5 bottom-5 left-5 flex items-end justify-between gap-4 roun
1ded-2xl border border-white/15 bg-[#102219]/78 px-4 py-3.5 shadow-xl backdrop-blur-md"},[p("span",null,[p("span",{class:"block text-xs font-bold tracking-[0.09em] text-[#9bc6a9] uppercase"},"Spain"),p("span",{class:"mt-1 block text-sm leading-5 font-bold text-[#fbf7ec]"},"Official topographic map from IGN")]),p("span",{class:"shrink-0 text-xs font-semibold text-[#c7d8cc]"},"Sierra de Mijas")])],-1))])]),p("section",Zo,[p("div",Wo,[C(x(Ge),{class:"mb-[clamp(2.5rem,6vw,4.5rem)] bg-[var(--line)]"}),d[14]||(d[14]=p("p",{class:"text-[0.8125rem] font-bold tracking-[0.08em] text-[var(--green)] uppercase"}," Sixteen years of outdoor mapping ",-1)),d[15]||(d[15]=p("h2",{id:"proof-title",class:"mt-3 max-w-[20ch] text-[clamp(1.625rem,3.6vw,2.375rem)] leading-[1.1] font-extrabold tracking-[-0.02em] text-[var(--ink)]"}," Trusted by people who want the whole map ",-1)),p("div",er,[C(z,null,{default:F(()=>[...d[12]||(d[12]=[p("span",{class:"text-[clamp(2.25rem,5vw,3.25rem)] leading-none font-extrabold tracking-[-0.02em] text-[var(--ink)] tabular-nums"},"120 000",-1),p("span",{class:"mt-2.5 text-[0.84375rem] font-semibold tracking-[0.05em] text-[var(--ink-soft)]"},"Installs",-1)])]),_:1}),C(z,null,{default:F(()=>[...d[13]||(d[13]=[p("span",{class:"text-[clamp(2.25rem,5vw,3.25rem)] leading-none font-extrabold tracking-[-0.02em] text-[var(--ink)] tabular-nums"},"4.5",-1),p("span",{class:"relative mt-2 inline-block text-[0.9375rem] leading-none tracking-[1px] whitespace-nowrap","aria-hidden":"true"},[p("span",{class:"text-[color-mix(in_srgb,var(--ink)_20%,transparent)]"},"â
â
â
â
â
"),p("span",{class:"absolute inset-0 w-[90%] overflow-hidden text-[var(--gold)]"},"â
â
â
â
â
")],-1),p("span",{class:"mt-2.5 text-[0.84375rem] font-semibold tracking-[0.05em] text-[var(--ink-soft)]"},"App Store rating",-1),p("span",{class:"sr-only"},"4.5 out of 5 stars on the App Store",-1)])]),_:1})])])]),p("section",tr,[p("div",nr,[C(x(Ge),{class:"mb-[clamp(2.5rem,6vw,4.5rem)] bg-[var(--line)]"}),p("div",or,[d[17]||(d[17]=p("div",null,[p("p",{class:"text-[0.8125rem] font-bold tracking-[0.08em] text-[var(--green)] uppercase"}," Android waitlist "),p("h2",{id:"android-title",class:"mx-auto mt-3 max-w-[16ch] text-[clamp(1.875rem,4vw,2.375rem)] leading-[1.08] font-extrabold text-[var(--ink)] md:mx-0"}," Lokimaps for Android is coming "),p("p",{class:"mx-auto mt-4 max-w-[44ch] text-[clamp(1rem,2vw,1.125rem)] leading-6 text-[var(--ink-soft)] md:mx-0"}," Lokimaps is currently available for iPhone and iPad. Join the Android waitlist and we will let you know
1when early access is ready. ")],-1)),p("form",{class:"min-w-0","aria-busy":x(u)==="submitting",onSubmit:rn(I,["prevent"])},[C(x(Ao),null,{default:F(()=>[C(x(Eo),{for:"android-email",class:"sr-only"},{default:F(()=>[...d[16]||(d[16]=[$e("Email address",-1)])]),_:1}),p("div",sr,[C(x(Co),{id:"android-email",modelValue:x(w),"onUpdate:modelValue":d[0]||(d[0]=E=>Pe(w)?w.value=E:null),class:"h-[50px] min-w-0 rounded-xl border-0 bg-transparent px-3 text-base text-[var(--ink)] shadow-none placeholder:text-[color-mix(in_srgb,var(--ink-soft)_68%,transparent)] focus-visible:border-0 focus-visible:ring-0 md:text-base dark:bg-transparent",type:"email",name:"email",autocomplete:"email",inputmode:"email",placeholder:"[email protected]",required:"","aria-describedby":"android-waitlist-message",disabled:x(u)==="submitting"},null,8,["modelValue","disabled"]),C(x(ge),{type:"submit",class:"group/submit h-[50px] w-full rounded-[14px] bg-[var(--green)] px-5 text-[0.9375rem] font-bold text-[var(--cream-1)] hover:bg-[var(--green)] motion-reduce:transition-none sm:w-auto dark:hover:bg-[var(--green)]",disabled:x(u)==="submitting"},{default:F(()=>[x(u)==="submitting"?($(),oe(x(To),{key:0,"aria-hidden":"true"})):mt("",!0),p("span",null,de(x(u)==="submitting"?"Sending":"Join waitlist"),1),x(u)!=="submitting"?($(),oe(x(He),{key:1,"data-icon":"inline-end",class:"transition-transform group-hover/submit:translate-x-0.5 motion-reduce:transition-none","aria-hidden":"true"})):mt("",!0)]),_:1},8,["disabled"])]),p("p",{id:"android-waitlist-message",class:ee(["mx-1.5 mt-3 min-h-5.5 text-sm leading-[1.45] font-semibold",x(S)==="success"?"text-[var(--green)]":x(S)==="error"?"text-destructive":"text-[var(--ink-soft)]"]),"aria-live":"polite","aria-atomic":"true"},de(x(_)),3)]),_:1})],40,rr)])])]),p("section",ar,[p("div",ir,[C(x(Ge),{class:"mb-[clamp(2.5rem,6vw,4.5rem)] bg-[var(--line)]"}),d[19]||(d[19]=p("p",{class:"text-[0.8125rem] font-bold tracking-[0.08em] text-[var(--green)] uppercase"}," Always improving ",-1)),d[20]||(d[20]=p("h2",{id:"updates-title",class:"mt-3 max-w-[18ch] text-[clamp(1.75rem,4vw,2.5rem)] leading-[1.08] font-extrabold tracking-[-0.02em] text-[var(--ink)]"}," Regular updates, all year round ",-1)),d[21]||(d[21]=p("p",{class:"mt-4 max-w-[52ch] text-[clamp(1rem,1.6vw,1.1875rem)] leading-7 text-[var(--ink-soft)]"}," Lokimaps keeps getting better. New maps, sharper tools and steady fixes arrive throughout the year. See what has landed lately. ",-1)),C(x(ge),{"as-child":"",size:"lg",class:"group/updates mt-[clamp(1.5rem,3.5vw,2.125rem)] h-13 rounded-xl bg-[var(--green)] px-6 text-base font-bold text-[var(--cream-1)] shadow-[0_16px_30px_-18px_rgba(27,42,35,0.55)] hover:bg-[color-mix(in_srgb,var(--green)_88%,black)] motion-reduce:transition-none"},{default:F(()=>[C(P,{to:"/release-notes"},{default:F(()=>[d[18]||(d[18]=$e(" Read the release notes ",-1)),C(x(He),{"data-icon":"inline-end",class:"transition-transform group-hover/updates:translate-x-0.5 motion-reduce:transition-none","aria-hidden":"true"})]),_:1})]),_:1})])]),C(q)]),_:1})}}});
1export{br 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.