1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,4473,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(43531),s=e.i(74886);let n=(0,e.i(75254).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);var i=e.i(83086);let o={en:{copy:"Copy for LLM",copied:"Copied",view:"View as Markdown",ask:"Ask ChatGPT",prompt:"Read {url} and answer my questions about it."},es:{copy:"Copiar para LLM",copied:"Copiado",view:"Ver en Markdown",ask:"Preguntar a ChatGPT",prompt:"Lee {url} y responde mis preguntas sobre la página."},it:{copy:"Copia per LLM",copied:"Copiato",view:"Vedi in Markdown",ask:"Chiedi a ChatGPT",prompt:"Leggi {url} e rispondi alle mie domande."},fr:{copy:"Copier pour LLM",copied:"Copié",view:"Voir en Markdown",ask:"Demander à ChatGPT",prompt:"Lis {url} et réponds à mes questions."},de:{copy:"Für LLM kopieren",copied:"Kopiert",view:"Als Markdown ansehen",ask:"ChatGPT fragen",prompt:"Lies {url} und beantworte meine Fragen dazu."},pt:{copy:"Copiar para LLM",copied:"Copiado",view:"Ver em Markdown",ask:"Perguntar ao ChatGPT",prompt:"Leia {url} e responda minhas perguntas sobre a página."}},l="inline-flex items-center gap-1.5 rounded-full border border-slate-700 px-3 py-1 text-xs text-slate-400 hover:text-white hover:border-slate-500 transition-colors cursor-pointer";e.s(["AgentActions",0,function({mdPath:e,pageUrl:c,locale:d}){let u=o[d]??o.en,[m,p]=(0,a.useState)(!1);async function h(){try{let t=await fetch(e),a=await t.text();await navigator.clipboard.writeText(a),p(!0),setTimeout(()=>p(!1),2e3)}catch{window.open(e,"_blank")}}let g=`https://chatgpt.com/?q=${encodeURIComponent(u.prompt.replace("{url}",c))}`;return(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)("button",{type:"button",onClick:h,className:l,"aria-label":u.copy,children:[m?(0,t.jsx)(r.Check,{size:13,className:"text-primary"}):(0,t.jsx)(s.Copy,{size:13}),m?u.copied:u.copy]}),(0,t.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:l,children:[(0,t.jsx)(n,{size:13}),u.view]}),(0,t.jsxs)("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:l,children:[(0,t.jsx)(i.Sparkles,{size:13}),u.ask]})]})}],4473)},35031,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(80349),s=e.i(46932),n=e.i(75254);let i=(0,n.default)("calendar-check",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m9 16 2 2 4-4",key:"19s6y9"}]]),o=(0,n.default)("credit-card",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);var l=e.i(61911),c=e.i(48256);let d=(0,n.default)("chart-column",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);var u=e.i(39616),m=e.i(25652);let p=(0,n.default)("arrow-up-right",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);function h(e){return Math.round(e).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function g({kpi:e,inView:r,index:n}){let i=function(e,t){let[r,s]=(0,a.useState)(0);return(0,a.useEffect)(()=>{if(!t)return void s(0);let a=0,r=setInterval(()=>{let t;s(Math.min(((t=++a/60)<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2)*e,e)),a>=60&&clearInterval(r)},26.666666666666668);return()=>clearInterval(r)},[e,t]),r}(e.value,r),o=e.decimals?i.toFixed(e.decimals):h(i);return(0,t.jsxs)(s.motion.div,{className:"rounded-xl border border-slate-800 bg-slate-900/70 p-4",initial:{opacity:0,y:12},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.06*n,ease:"easeOut"},children:[(0,t.jsx)("div",{className:"text-xs text-slate-400",children:e.label}),(0,t.jsx)("div",{className:"mt-1 text-xl md:text-2xl font-bold",children:(0,t.jsxs)("span",{className:"bg-gradient-to-r from-primary to-orange-500 bg-clip-text text-transparent",children:[e.prefix,o,e.suffix]})}),(0,t.jsxs)("div",{className:"mt-1 flex items-center gap-1 text-[11px] text-green-500",children:[(0,t.jsx)(p,{size:12}),(0,t.jsx)("span",{children:e.delta})]})]})}e.s(["default",0,function({labels:e}){let{ref:a,inView:n}=(0,r.useInView)({threshold:.15,triggerOnce:!0}),p=[{icon:i,label:e.nav.reservations,active:!0},{icon:o,label:e.nav.transactions,active:!1},{icon:l.Users,label:e.nav.clients,active:!1},{icon:c.Globe,label:e.nav.website,active:!1},{icon:d,label:e.nav.marketing,active:!1},{icon:u.Settings,label:e.nav.settings,active:!1}],f=[{key:"revenue",label:e.kpis.revenue,value:184250,prefix:"$",delta:"+12.4%"},{key:"bookings",label:e.kpis.bookings,value:1280,delta:"+8.1%"},{key:"conversion",label:e.kpis.conversion,value:4.7,suffix:"%",decimals:1,delta:"+0.6 pts"},{key:"adr",label:e.kpis.adr,value:143,prefix:"$",delta:"+5.2%"},{key:"cancelRate",label:e.kpis.cancelRate,value:6.3,suffix:"%",decimals:1,delta:"-1.1 pts"},{key:"avgStay",label:e.kpis.avgStay,value:2.4,suffix:"n",decimals:1,delta:"+0.2"}],b={booked:{label:e.status.booked,cls:"bg-green-500/15 text-green-400 border-green-500/30"},cancelled:{label:e.status.cancelled,cls:"bg-red-500/15 text-red-400 border-red-500/30"},noShow:{label:e.status.noShow,cls:"bg-amber-500/15 text-amber-400 border-amber-500/30"}},y=[{label:e.funnel.started,pct:100,value:27200},{label:e.funnel.advanced,pct:46,value:12500},{label:e.funnel.confirmed,pct:17,value:1280}];return(0,t.jsxs)("div",{ref:a,className:"w-full rounded-2xl border border-slate-800 bg-slate-900 shadow-2xl overflow-hidden",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 border-b border-slate-800 bg-slate-950/60 px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex gap-1.5",children:[(0,t.jsx)("span",{className:"w-3 h-3 rounded-full bg-red-500/70"}),(0,t.jsx)("span",{className:"w-3 h-3 rounded-full bg-amber-500/70"}),(0,t.jsx)("span",{className:"w-3 h-3 rounded-full bg-green-500/70"})]}),(0,t.jsx)("div",{className:"flex-1 mx-2 truncate rounded-md bg-slate-800/70 px-3 py-1 text-center text-xs text-slate-400",children:"manager.guruhotel.com"}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-green-400",children:[(0,t.jsx)(s.motion.span,{className:"w-2 h-2 rounded-full bg-green-500",animate:{scale:[1,1.25,1]},transition:{repeat:1/0,duration:1.4}}),e.live]})]}),(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsx)("div",{className:"hidden sm:flex w-44 shrink-0 flex-col gap-1 border-r border-slate-800 bg-slate-950/30 p-3",children:p.map((e,a)=>{let r=e.icon;return(0,t.jsxs)("div",{className:`flex items-center gap-2.5 rounded-lg px-3 py-2 text-sm ${e.active?"bg-slate-800 text-white":"text-slate-400 hover:text-slate-200"}`,children:[(0,t.jsx)(r,{size:16,className:e.active?"text-primary":""}),e.label]},a)})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0 p-4 md:p-5",children:[(0,t.jsxs)("div",{className:"mb-4 flex items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-white font-semibold",children:e.nav.reservations}),(0,t.jsx)("div",{className:"text-xs text-slate-500",children:e.property})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-slate-400",children:[(0,t.jsx)(s.motion.span,{className:"w-1.5 h-1.5 rounded-full bg-green-500",animate:{scale:[1,1.3,1]},transition:{repeat:1/0,duration:1.4}}),e.syncing]})]}),(0,t.jsx)("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-3",children:f.map((e,a)=>(0,t.jsx)(g,{kpi:e,inView:n,index:a},e.key))}),(0,t.jsxs)("div",{className:"mt-4 grid grid-cols-1 lg:grid-cols-5 ga
1p-4",children:[(0,t.jsxs)("div",{className:"lg:col-span-3 rounded-xl border border-slate-800 bg-slate-900/70 overflow-hidden",children:[(0,t.jsx)("div",{className:"border-b border-slate-800 px-4 py-2.5 text-sm font-medium text-slate-200",children:e.table.title}),(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)("table",{className:"w-full text-sm",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{className:"text-left text-[11px] uppercase tracking-wide text-slate-500",children:[(0,t.jsx)("th",{className:"px-4 py-2 font-medium",children:e.table.guest}),(0,t.jsx)("th",{className:"px-4 py-2 font-medium",children:e.table.checkIn}),(0,t.jsx)("th",{className:"px-4 py-2 font-medium",children:e.table.status}),(0,t.jsx)("th",{className:"px-4 py-2 font-medium text-center",children:e.table.nights}),(0,t.jsx)("th",{className:"px-4 py-2 font-medium text-right",children:e.table.total})]})}),(0,t.jsx)("tbody",{children:[{guest:"MarÃa González",date:"Jun 12",status:"booked",nights:3,total:"$429"},{guest:"James Carter",date:"Jun 13",status:"booked",nights:2,total:"$286"},{guest:"Sofia Rossi",date:"Jun 14",status:"noShow",nights:4,total:"$612"},{guest:"Liam O'Brien",date:"Jun 15",status:"booked",nights:1,total:"$143"},{guest:"Chloé Dubois",date:"Jun 16",status:"cancelled",nights:5,total:"$795"},{guest:"Hans Müller",date:"Jun 17",status:"booked",nights:2,total:"$298"}].map((e,a)=>{let r=b[e.status];return(0,t.jsxs)(s.motion.tr,{className:"border-t border-slate-800/70",initial:{opacity:0,x:-8},whileInView:{opacity:1,x:0},viewport:{once:!0},transition:{duration:.4,delay:.2+.07*a},children:[(0,t.jsx)("td",{className:"px-4 py-2.5 text-slate-200 whitespace-nowrap",children:e.guest}),(0,t.jsx)("td",{className:"px-4 py-2.5 text-slate-400 whitespace-nowrap",children:e.date}),(0,t.jsx)("td",{className:"px-4 py-2.5",children:(0,t.jsx)("span",{className:`inline-block rounded-full border px-2 py-0.5 text-[11px] ${r.cls}`,children:r.label})}),(0,t.jsx)("td",{className:"px-4 py-2.5 text-center text-slate-300",children:e.nights}),(0,t.jsx)("td",{className:"px-4 py-2.5 text-right text-slate-200 font-medium",children:e.total})]},a)})})]})})]}),(0,t.jsxs)("div",{className:"lg:col-span-2 flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"rounded-xl border border-slate-800 bg-slate-900/70 p-4",children:[(0,t.jsx)("div",{className:"mb-3 text-sm font-medium text-slate-200",children:e.funnel.title}),(0,t.jsx)("div",{className:"flex flex-col gap-2.5",children:y.map((e,a)=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-1 flex justify-between text-[11px] text-slate-400",children:[(0,t.jsx)("span",{children:e.label}),(0,t.jsx)("span",{children:h(e.value)})]}),(0,t.jsx)("div",{className:"h-2 w-full rounded-full bg-slate-800 overflow-hidden",children:(0,t.jsx)(s.motion.div,{className:"h-full rounded-full bg-gradient-to-r from-primary to-orange-500",initial:{width:0},whileInView:{width:`${e.pct}%`},viewport:{once:!0},transition:{duration:.9,delay:.3+.15*a,ease:"easeOut"}})})]},a))})]}),(0,t.jsxs)("div",{className:"rounded-xl border border-slate-800 bg-slate-900/70 p-4",children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-slate-200",children:e.revenue.title}),(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-green-500",children:[(0,t.jsx)(m.TrendingUp,{size:12})," ",e.revenue.trailing]})]}),(0,t.jsx)("div",{className:"flex items-end gap-1.5 h-20",children:[38,52,44,61,57,73,68,81,76,88,84,96].map((e,a)=>(0,t.jsx)(s.motion.div,{className:"flex-1 rounded-t bg-gradient-to-t from-primary/40 to-orange-500/80",initial:{height:0},whileInView:{height:`${e}%`},viewport:{once:!0},transition:{duration:.7,delay:.2+.05*a,ease:"easeOut"}},a))})]})]})]})]})]})]})}],35031)},35407,e=>{"use strict";var t=e.i(43476);let a="gh_tool_currency",r="gh_tool_country",s=[{code:"USD",label:{en:"US dollar (USD)",es:"Dólar estadounidense (USD)"}},{code:"MXN",label:{en:"Mexican peso (MXN)",es:"Peso mexicano (MXN)"}},{code:"EUR",label:{en:"Euro (EUR)",es:"Euro (EUR)"}},{code:"GBP",label:{en:"British pound (GBP)",es:"Libra esterlina (GBP)"}},{code:"BRL",label:{en:"Brazilian real (BRL)",es:"Real brasileño (BRL)"}}
1,{code:"COP",label:{en:"Colombian peso (COP)",es:"Peso colombiano (COP)"}},{code:"ARS",label:{en:"Argentine peso (ARS)",es:"Peso argentino (ARS)"}},{code:"CLP",label:{en:"Chilean peso (CLP)",es:"Peso chileno (CLP)"}},{code:"PEN",label:{en:"Peruvian sol (PEN)",es:"Sol peruano (PEN)"}},{code:"DOP",label:{en:"Dominican peso (DOP)",es:"Peso dominicano (DOP)"}},{code:"CAD",label:{en:"Canadian dollar (CAD)",es:"Dólar canadiense (CAD)"}},{code:"AUD",label:{en:"Australian dollar (AUD)",es:"Dólar australiano (AUD)"}}],n=new Set(s.map(e=>e.code));function i(e){return"string"==typeof e&&n.has(e.toUpperCase())}function o(e,t,a,r=0){if(!isFinite(e))return"â";try{return new Intl.NumberFormat("es"===a?"es-MX":"en-US",{style:"currency",currency:i(t)?t.toUpperCase():"USD",maximumFractionDigits:r}).format(e)}catch{return`${e.toFixed(r)} ${t}`}}function l(e,t){return isFinite(e)?`${new Intl.NumberFormat("es"===t?"es-MX":"en-US",{maximumFractionDigits:1}).format(e)}%`:"â"}function c(e,t,a=1){return isFinite(e)?new Intl.NumberFormat("es"===t?"es-MX":"en-US",{maximumFractionDigits:a}).format(e):"â"}let d=new Map([{key:"revpar-calculator",name:{en:"RevPAR calculator",es:"Calculadora de RevPAR"},fields:[{key:"rooms",label:{en:"Rooms available (per night)",es:"Habitaciones disponibles (por noche)"},widget:"number",defaultValue:40,min:1},{key:"sold",label:{en:"Rooms sold (per night, average)",es:"Habitaciones vendidas (por noche, promedio)"},widget:"number",defaultValue:30,min:0},{key:"revenue",label:{en:"Room revenue (per night)",es:"Ingreso por habitaciones (por noche)"},widget:"number",money:!0,defaultValue:3600,min:0}],results:[{key:"occupancy",label:{en:"Occupancy",es:"Ocupación"},format:"percent"},{key:"adr",label:{en:"ADR",es:"ADR"},format:"money2"},{key:"revpar",label:{en:"RevPAR",es:"RevPAR"},format:"money2",highlight:!0}],compute:e=>({occupancy:e.sold/e.rooms*100,adr:e.revenue/e.sold,revpar:e.revenue/e.rooms}),interpret:(e,t,a,r)=>"es"===a?`Con ${l(t.occupancy,a)} de ocupaci\xf3n y un ADR de ${r(t.adr,2)}, cada habitaci\xf3n disponible de tu propiedad genera ${r(t.revpar,2)} por noche. El RevPAR combina precio y demanda en un solo n\xfamero: es tu m\xe9trica de referencia para comparar contra el mismo mes del a\xf1o pasado y contra tu set competitivo.`:`At ${l(t.occupancy,a)} occupancy and a ${r(t.adr,2)} ADR, every available room in your property generates ${r(t.revpar,2)} per night. RevPAR combines price and demand into one number: it's your reference metric against the same month last year and your competitive set.`,recommend:(e,t,a)=>"es"===a?["Compara este RevPAR contra el mismo mes del año anterior antes de tocar tarifas: la estacionalidad explica más de lo que parece.","Si la ocupación es alta pero el RevPAR se siente bajo, sube tarifa en fechas pico con estancias mÃnimas en lugar de descontar.","Revisa tu RevPAR neto: una reserva vÃa OTA deja 15â25% menos que la misma reserva en tu sitio web. Mover mezcla a directo sube el neto sin tocar la tarifa publicada."]:["Compare this RevPAR against the same month last year before touching rates: seasonality explains more than it seems.","If occupancy is high but RevPAR feels low, raise rates on peak dates with minimum stays instead of discounting.","Check your net RevPAR: an OTA booking nets 15â25% less than the same booking on your website. Moving mix to direct raises the net without touching the posted rate."]},{key:"ota-commission-calculator",name:{en:"OTA commission calculator",es:"Calculadora de comisiones OTA"},fields:[{key:"revenue",label:{en:"Monthly OTA booking revenue",es:"Ingreso mensual por reservas de OTA"},widget:"number",money:!0,defaultValue:2e4,min:0},{key:"commission",label:{en:"OTA commission",es:"Comisión de la OTA"},widget:"slider",percent:!0,defaultValue:18,min:10,max:30,step:.5}],results:[{key:"monthly",label:{en:"Commission paid per month",es:"Comisión pagada al mes"},format:"money"},{key:"yearly",label:{en:"Commission paid per year",es:"Comisión pagada al año"},format:"money",highlight:!0}],compute:e=>{let t=e.revenue*(e.commission/100);return{monthly:t,yearly:12*t}},interpret:(e,t,a,r)=>"es"===a?`Con ${r(e.revenue)} mensuales vendidos v\xeda OTAs al ${l(e.commission,a)}, est\xe1s pagando ${r(t.monthly)} al mes â ${r(t.yearly)} al a\xf1o â en comisiones. Ese monto se descuenta antes de llegar a tu cuenta, por eso rara vez se lee como el gasto de marketing que es.`:`Selling ${r(e.revenue)} per month through OTAs at ${l(e.commission,a)}, you're paying ${r(t.monthly)} a month â ${r(t.yearly)} a year â in commissions. That amount is deducted before the money reaches your account, which is why it's rarely read as the marketing expense it is.`,recommend:(e,t,a)=>"es"===a?["No se trata de dejar las OTAs: mantén las 2â3 que mueven tu mercado y usa el efecto escaparate a tu favor.","Convierte huéspedes recurrentes y búsquedas de marca en reservas directas: cada punto de mezcla que migre a directo recupera comisión completa.","Publica tu mejor tarifa en tu sitio oficial y en Google Hotels (enlace gratuito) para ganar el clic cuando el viajero compara."]:["This isn't about leaving OTAs: keep the 2â3 that move your market and use the billboard effect in your favor.","Convert repeat guests and brand searches into direct bookings: every point of mix moved to direct recovers the full commission.","Publish your best rate on your official site and in Google Hotels (free booking link) to win the click when travelers compare."]},{key:"direct-booking-calculator",name:{en:"Direct booking savings simulator",es:"Simulador de ahorro por reservas directas"},fields:[{key:"revenue",label:{en:"Annual room revenue",es:"Ingreso anual por habitaciones"},widget:"number",money:!0,defaultValue:3e5,min:0},{key:"commission",label:{en:"Average OTA commission",es:"Comisión OTA promedio"},widget:"slider",percent:!0,defaultValue:18,min:10,max:30,step:.5}
1,{key:"current",label:{en:"Current direct booking share",es:"Participación directa actual"},widget:"slider",percent:!0,defaultValue:15,min:0,max:100,step:1},{key:"target",label:{en:"Target direct booking share",es:"Participación directa objetivo"},widget:"slider",percent:!0,defaultValue:35,min:0,max:100,step:1}],results:[{key:"paidNow",label:{en:"Commission paid today",es:"Comisión pagada hoy"},format:"money"},{key:"paidAfter",label:{en:"Commission paid at target",es:"Comisión pagada en el objetivo"},format:"money"},{key:"savings",label:{en:"Annual savings",es:"Ahorro anual"},format:"money",highlight:!0}],compute:e=>{let t=e.revenue*((100-e.current)/100)*(e.commission/100),a=e.revenue*((100-Math.max(e.target,e.current))/100)*(e.commission/100);return{paidNow:t,paidAfter:a,savings:t-a}},interpret:(e,t,a,r)=>"es"===a?`Pasar de ${l(e.current,a)} a ${l(e.target,a)} de participaci\xf3n directa reduce tu comisi\xf3n anual de ${r(t.paidNow)} a ${r(t.paidAfter)}: ${r(t.savings)} que se quedan en tu propiedad cada a\xf1o, con la misma tarifa publicada. Es matem\xe1ticamente equivalente a un aumento de tarifa que el hu\xe9sped nunca ve.`:`Moving from ${l(e.current,a)} to ${l(e.target,a)} direct share cuts your annual commission from ${r(t.paidNow)} to ${r(t.paidAfter)}: ${r(t.savings)} that stays in your property every year, at the same posted rate. It's mathematically equivalent to a rate increase the guest never sees.`,recommend:(e,t,a)=>"es"===a?["Los hoteles independientes suelen partir de 10â20% directo; 30â40% es alcanzable en un año con sitio propio, mejor tarifa garantizada y remarketing post-estancia.","Captura el correo de cada huésped en el check-in: la segunda estancia es la reserva directa más fácil de ganar.","Ofrece beneficios que las OTAs no pueden igualar en tu canal directo: polÃticas flexibles, upgrades y atención directa."]:["Independent hotels typically start at 10â20% direct; 30â40% is achievable within a year with your own site, best-rate guarantee and post-stay remarketing.","Capture every guest's email at check-in: the second stay is the easiest direct booking you'll ever win.","Offer perks OTAs can't match on your direct channel: flexible policies, upgrades and direct communication."]},{key:"occupancy-calculator",name:{en:"Occupancy rate calculator",es:"Calculadora de ocupación"},fields:[{key:"rooms",label:{en:"Rooms in the property",es:"Habitaciones de la propiedad"},widget:"number",defaultValue:40,min:1},{key:"nights",label:{en:"Nights in the period",es:"Noches del periodo"},widget:"number",defaultValue:30,min:1},{key:"sold",label:{en:"Room nights sold",es:"Noches-habitación vendidas"},widget:"number",defaultValue:880,min:0}],results:[{key:"available",label:{en:"Room nights available",es:"Noches-habitación disponibles"},format:"integer"},{key:"occupancy",label:{en:"Occupancy rate",es:"Tasa de ocupación"},format:"percent",highlight:!0}],compute:e=>{let t=e.rooms*e.nights;return{available:t,occupancy:e.sold/t*100}},interpret:(e,t,a)=>"es"===a?`Vendiste ${c(e.sold,a,0)} de ${c(t.available,a,0)} noches-habitaci\xf3n disponibles en el periodo: ${l(t.occupancy,a)} de ocupaci\xf3n. La ocupaci\xf3n responde "qu\xe9 tan lleno"; l\xe9ela junto al ADR y el RevPAR para saber "qu\xe9 tan rentablemente lleno".`:`You sold ${c(e.sold,a,0)} of ${c(t.available,a,0)} available room-nights in the period: ${l(t.occupancy,a)} occupancy. Occupancy answers "how full"; read it next to ADR and RevPAR to know "how profitably full".`,recommend:(e,t,a)=>"es"===a?["Una ocupación alta con tarifas muy descontadas puede rendir menos que 70% con tarifa sana â verifica con el RevPAR.","Usa estancias mÃnimas en fechas pico para empujar ocupación hacia las noches valle.","Mantén una convención fija para habitaciones fuera de servicio (dentro o fuera del denominador) para que la tendencia sea comparable."]:["High occupancy at deeply discounted rates can yield less than 70% at a healthy rate â verify with RevPAR.","Use minimum stays on peak dates to push occupancy into shoulder nights.","Keep one fixed convention for out-of-order rooms (in or out of the denominator) so the trend stays comparable."]},{key:"adr-calculator",name:{en:"ADR calculator",es:"Calculadora de ADR"}
1,fields:[{key:"revenue",label:{en:"Room revenue in the period",es:"Ingreso por habitaciones del periodo"},widget:"number",money:!0,defaultValue:105600,min:0},{key:"sold",label:{en:"Rooms sold in the period",es:"Habitaciones vendidas en el periodo"},widget:"number",defaultValue:880,min:1}],results:[{key:"adr",label:{en:"ADR (average daily rate)",es:"ADR (tarifa promedio diaria)"},format:"money2",highlight:!0}],compute:e=>({adr:e.revenue/e.sold}),interpret:(e,t,a,r)=>"es"===a?`Cada habitaci\xf3n vendida en el periodo gener\xf3 en promedio ${r(t.adr,2)}. El ADR mide tu poder de precio; solo, puede halagarte mientras el edificio corre vac\xedo â acomp\xe1\xf1alo siempre de la ocupaci\xf3n y el RevPAR.`:`Each room sold in the period earned an average of ${r(t.adr,2)}. ADR measures your pricing power; alone, it can flatter you while the building runs empty â always pair it with occupancy and RevPAR.`,recommend:(e,t,a)=>"es"===a?["Sube el ADR con mezcla, no solo con tarifa: suites, upsells al reservar y en el check-in.","Precios dinámicos por demanda (eventos, temporada, dÃa de semana) superan a la tarjeta de tarifas plana.","Cuida el ADR neto: la misma tarifa vÃa OTA deja 15â25% menos que en tu canal directo."]:["Raise ADR with mix, not just rate: suites, upsells at booking and at check-in.","Demand-based dynamic pricing (events, season, day of week) beats a flat rate card.","Watch net ADR: the same rate via OTA nets 15â25% less than on your direct channel."]},{key:"breakeven-calculator",name:{en:"Hotel break-even calculator",es:"Calculadora de punto de equilibrio"},fields:[{key:"fixed",label:{en:"Fixed costs per month",es:"Costos fijos al mes"},widget:"number",money:!0,defaultValue:45e3,min:0},{key:"variable",label:{en:"Variable cost per occupied room-night",es:"Costo variable por habitación ocupada"},widget:"number",money:!0,defaultValue:25,min:0},{key:"adr",label:{en:"Average rate â ADR",es:"Tarifa promedio â ADR"},widget:"number",money:!0,defaultValue:120,min:1},{key:"rooms",label:{en:"Rooms in the property",es:"Habitaciones de la propiedad"},widget:"number",defaultValue:40,min:1}],results:[{key:"roomNights",label:{en:"Break-even room-nights / month",es:"Noches-habitación de equilibrio / mes"},format:"integer"},{key:"perNight",label:{en:"Break-even rooms / night",es:"Habitaciones de equilibrio / noche"},format:"number"},{key:"occupancy",label:{en:"Break-even occupancy",es:"Ocupación de equilibrio"},format:"percent",highlight:!0}],compute:e=>{let t=e.adr-e.variable,a=t>0?e.fixed/t:1/0,r=a/30;return{roomNights:a,perNight:r,occupancy:r/e.rooms*100}},interpret:(e,t,a,r)=>"es"===a?`Con ${r(e.fixed)} de costos fijos y un margen de contribuci\xf3n de ${r(e.adr-e.variable,2)} por habitaci\xf3n ocupada, necesitas ${isFinite(t.roomNights)?Math.ceil(t.roomNights):"â"} noches-habitaci\xf3n al mes â ${l(t.occupancy,a)} de ocupaci\xf3n â para cubrir costos. Todo lo que vendas encima de ese punto contribuye a utilidad.`:`With ${r(e.fixed)} in fixed costs and a contribution margin of ${r(e.adr-e.variable,2)} per occupied room, you need ${isFinite(t.roomNights)?Math.ceil(t.roomNights):"â"} room-nights per month â ${l(t.occupancy,a)} occupancy â to cover costs. Everything you sell above that point contributes to profit.`,recommend:(e,t,a)=>"es"===a?["Evalúa bloqueos de grupo y tarifas de temporada baja contra el margen de contribución, no contra el ADR completo.","Un aumento de 10% en ADR baja tu ocupación de equilibrio más de lo que la mayorÃa espera â corre el escenario.","Recuerda que el ADR efectivo de una reserva OTA es 15â25% menor: tu equilibrio real depende de la mezcla de canales."]:["Evaluate group blocks and low-season rates against contribution margin, not the full ADR.","A 10% ADR increase lowers your break-even occupancy more than most expect â run the scenario.","Remember an OTA booking's effective ADR is 15â25% lower: your true break-even depends on channel mix."]},{key:"chargeback-calculator",name:{en:"Chargeback loss calculator",es:"Calculadora de pérdidas por contracargos"}
1,fields:[{key:"count",label:{en:"Chargebacks per month",es:"Contracargos al mes"},widget:"number",defaultValue:4,min:0},{key:"value",label:{en:"Average booking value",es:"Valor promedio de la reserva"},widget:"number",money:!0,defaultValue:280,min:0},{key:"fee",label:{en:"Fee per chargeback",es:"Cuota por contracargo"},widget:"number",money:!0,defaultValue:15,min:0}],results:[{key:"monthly",label:{en:"Lost per month",es:"Perdido al mes"},format:"money"},{key:"feesYearly",label:{en:"Of which fees per year",es:"De los cuales cuotas al año"},format:"money"},{key:"yearly",label:{en:"Lost per year",es:"Perdido al año"},format:"money",highlight:!0}],compute:e=>{let t=e.count*(e.value+e.fee);return{monthly:t,yearly:12*t,feesYearly:e.count*e.fee*12}},interpret:(e,t,a,r)=>"es"===a?`${c(e.count,a,0)} contracargos al mes con reservas promedio de ${r(e.value)} te cuestan ${r(t.monthly)} mensuales â ${r(t.yearly)} al a\xf1o, sin contar horas del equipo ni el riesgo de tasas de procesamiento m\xe1s altas si el ratio de disputas sube.`:`${c(e.count,a,0)} chargebacks a month on ${r(e.value)} average bookings cost you ${r(t.monthly)} monthly â ${r(t.yearly)} a year, not counting staff hours or the risk of higher processing rates if your dispute ratio climbs.`,recommend:(e,t,a)=>"es"===a?["Activa 3-D Secure en el pago de la reserva: transfiere la responsabilidad por fraude al banco emisor.","Adjunta la polÃtica de cancelación a la confirmación y cobra depósitos como preautorizaciones, no como cargos sorpresa.","Responde toda disputa con evidencia completa (confirmación, polÃtica aceptada, folio): los hoteles que no responden pierden por default."]:["Turn on 3-D Secure for the booking payment: it shifts fraud liability to the issuing bank.","Attach the cancellation policy to the confirmation and take deposits as pre-authorizations, not surprise charges.","Respond to every dispute with complete evidence (confirmation, accepted policy, folio): hotels that don't respond lose by default."]}].map(e=>[e.key,e]));function u(e,t,a,r){switch(e){case"money":return o(t,a,r,0);case"money2":return o(t,a,r,2);case"percent":return l(t,r);case"integer":return isFinite(t)?c(Math.ceil(t),r,0):"â";case"number":return c(t,r,1)}}var m=e.i(71645),p=e.i(17595),h=e.i(13410);let g="gh_tools_usage_pinged";function f(e){try{let t=JSON.parse(window.sessionStorage.getItem(g)??"[]");if(t.includes(e.tool))return;window.sessionStorage.setItem(g,JSON.stringify([...t,e.tool]))}catch{}try{let t=JSON.stringify({...e,pageUrl:window.location.href.split("?")[0]}),a=new Blob([t],{type:"application/json"});navigator.sendBeacon?.("/api/tools/usage-ping",a)||fetch("/api/tools/usage-ping",{method:"POST",headers:{"content-type":"application/json"},body:t,keepalive:!0})}catch{}}e.i(92338);var b=e.i(59570),y=e.i(75254);let x=(0,y.default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);var v=e.i(68214),v=v;let w=(0,y.default)("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);var k=e.i(76144),k=k;let j=/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;function N(e){return"string"==typeof e&&e.length<=254&&j.test(e)}let C={en:{title:"Get this report",self:"Email me the report",share:"Share with someone",assessment:"Free personalized assessment",pdf:"Download PDF",yourEmail:"Your email",theirEmail:"Recipient's email",yourName:"Your name (optional)",hotelUrl:"Your hotel's website (optional)",message:"Anything we should know? (optional)",consent:"I agree to receive this report and related follow-up from GuruHotel.",consentShare:"I confirm the recipient expects this report.",send:"Send",sending:"Sendingâ¦",sentSelf:"Report sent â check your inbox (and spam, just in case).",sentShare:"Shared â the report is on its way.",sentAssessment:"Request received â our team will reply within one business day.",invalidEmail:"Enter a valid email address.",needConsent:"Please accept the checkbox to continue.",error:"Something went wrong. Try again in a minute.",pdfError:"Could not generate the PDF. Try again in a minute."},es:{title:"Llévate este reporte",self:"Enviarme el reporte",share:"Compartir con alguien",assessment:"Evaluación personalizada gratis",pdf:"Descargar PDF",yourEmail:"Tu correo",theirEmail:"Correo del destinatario",y
1ourName:"Tu nombre (opcional)",hotelUrl:"Sitio web de tu hotel (opcional)",message:"¿Algo que debamos saber? (opcional)",consent:"Acepto recibir este reporte y seguimiento relacionado de GuruHotel.",consentShare:"Confirmo que el destinatario espera este reporte.",send:"Enviar",sending:"Enviandoâ¦",sentSelf:"Reporte enviado â revisa tu bandeja (y spam, por si acaso).",sentShare:"Compartido â el reporte va en camino.",sentAssessment:"Solicitud recibida â nuestro equipo responde en un dÃa hábil.",invalidEmail:"Ingresa un correo válido.",needConsent:"Acepta la casilla para continuar.",error:"Algo salió mal. Intenta de nuevo en un minuto.",pdfError:"No se pudo generar el PDF. Intenta de nuevo en un minuto."}},S="w-full rounded-lg border border-slate-700 bg-slate-950 px-4 py-3 text-white placeholder:text-slate-500 focus:border-primary focus:outline-none";function R({report:e,locale:a}){let r=C[a],[s,n]=(0,m.useState)("self"),[i,o]=(0,m.useState)(""),[l,c]=(0,m.useState)(""),[d,u]=(0,m.useState)(""),[p,g]=(0,m.useState)(""),[f,y]=(0,m.useState)(""),[j,A]=(0,m.useState)(!1),[P,$]=(0,m.useState)(""),[E,O]=(0,m.useState)("idle"),[_,T]=(0,m.useState)(""),[M,D]=(0,m.useState)(!1);async function I(){if(!M){D(!0);try{let t=await fetch("/api/tools/report-pdf",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({report:e})});if(!t.ok)throw Error("pdf failed");let a=await t.blob(),r=URL.createObjectURL(a),s=document.createElement("a");s.href=r,s.download=`guruhotel-${e.tool}-${e.date.slice(0,10)}.pdf`,s.click(),URL.revokeObjectURL(r),(0,h.trackToolEvent)("tools_pdf_download",{tool:e.tool,currency:e.currency})}catch{O("error"),T(r.pdfError)}finally{D(!1)}}}async function z(){if("sending"!==E){if(!N(i)||"share"===s&&!N(l)){O("error"),T(r.invalidEmail);return}if(!j){O("error"),T(r.needConsent);return}O("sending"),T("");try{let t,a;if(!(await fetch("/api/tools/send-report",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({report:e,action:s,email:i,recipientEmail:"share"===s?l:void 0,senderName:d||void 0,hotelUrl:p||void 0,message:f||void 0,consent:j,utm:(t=new URLSearchParams(window.location.search),{source:(a=e=>t.get(`utm_${e}`)??void 0)("source"),medium:a("medium"),campaign:a("campaign"),term:a("term"),content:a("content")}),website:P})})).ok)throw Error("send failed");O("sent"),T("self"===s?r.sentSelf:"share"===s?r.sentShare:r.sentAssessment),(0,h.trackToolEvent)("tools_email_send",{tool:e.tool,action:s}),"share"===s&&(0,h.trackToolEvent)("tools_share",{tool:e.tool}),"assessment"===s&&(0,h.trackToolEvent)("tools_conversion",{tool:e.tool,action:s})}catch{O("error"),T(r.error)}}}let L=[{id:"self",label:r.self,icon:v.default},{id:"share",label:r.share,icon:w},{id:"assessment",label:r.assessment,icon:k.default}];return(0,t.jsxs)("div",{className:"mt-8 border-t border-slate-800 pt-6",children:[(0,t.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-white",children:r.title}),(0,t.jsxs)(b.Button,{variant:"outline",size:"sm",disabled:M,onClick:I,className:"w-fit border-slate-700 text-slate-100 hover:bg-transparent hover:text-slate-100",children:[(0,t.jsx)(x,{className:"mr-2 h-4 w-4"}),r.pdf]})]}),(0,t.jsx)("div",{className:"mb-4 flex flex-wrap gap-2",children:L.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>{n(e.id),O("idle"),T("")},className:s===e.id?"inline-flex items-center gap-1.5 rounded-full border border-primary bg-primary/10 px-4 py-1.5 text-sm text-primary":"inline-flex items-center gap-1.5 rounded-full border border-slate-700 px-4 py-1.5 text-sm text-slate-400 hover:text-white",children:[(0,t.jsx)(e.icon,{size:14}),e.label]},e.id))}),(0,t.jsxs)("form",{onSubmit:e=>{e.preventDefault(),z()},className:"grid gap-3 sm:grid-cols-2",children:[(0,t.jsx)("input",{type:"email",value:i,onChange:e=>o(e.target.value),placeholder:r.yourEmail,className:S,required:!0}),"share"===s&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("input",{type:"email",value:l,onChange:e=>c(e.target.value),placeholder:r.theirEmail,className:S,required:!0}),(0,t.jsx)("input",{type:"text",value:d,onChange:e=>u(e.target.value),placeholder:r.yourName,className:S})]}),"assessment"===s&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("input",{type:"url",value:p,onChange:e=>g(e.target.value),placeholder:r.hotelUrl,className:S}),(0,t.jsx)("textarea",{value:f,onChange:e=>y(e.target.value),placeholder:r.message,rows:2,className:`${S} sm:col-span-2`})]}),(0,t.jsx)("input",{type:"text",value:P,onChange:e=>$(e.target.value),name:"website",tabIndex:-1,autoComplete:"off","aria-hidden":"true",className:"absolute -left-[9999px] h-0 w-0 opacity-0"}),(0,t.jsxs)("label",{className:"flex items-start gap-2 text-xs text-slate-400 sm:col-span-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:j,onChange:e=>A(e.target.checked),className:"mt-0.5 accent-orange-500"}),"share"===s?r.consentShare:r.consent]}),(0,t.jsx)("div",{className:"sm:col-span-2",children:(0,t.jsxs)(b.Button,{type:"submit",size:"lg",disabled:"sending"===E,className:"w-full bg-gradient-to-r from-primary to-orange-500 sm:w-fit",children:[(0,t.jsx)(v.default,{className:"mr-2 h-4 w-4"}),"sending"===E?r.sending:r.send]})}),_&&(0,t.jsx)("p",{className:`sm:col-span-2 text-sm ${"error"===E?"text-red-400":"text-emerald-400"}`,role:"status",children:_})]})]})}let A={en:{results:"Your results",currency:"Currency",currencyHint:"Formatting only â amounts are not converted.",disclaimer:"Estimates based on the formulas shown below. Edit the assumptions to match your property."},es:{results:"Tus resultados",currency:"Moneda",currencyHint:"Solo formato â los montos no se convierten.",disclaimer:"Estimaciones basadas en las fórmulas mostradas abajo. Ajusta los supuestos a tu propiedad."}};function P({label:e,value:a,onChange:r,min:s,max:n,step:i=1,suffix:o}){return(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"mb-1.5 block text-sm text-slate-400",children:e}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{type:"number",inputMode:"decimal",value:Number.isNaN(a)?"":a,min:s,max:n,step:i,onChange:e=>r(""===e.target.value?NaN:Number(e.target.value)),className:"w-full rounded-lg border border-slate-700 bg-slate-900 px-4 py-3 text-white placeholder:text-slate-500 focus:border-primary focus:outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"}),o&&(0,t.jsx)("span",{className:"pointer-events-none absolute right-4 top-1/2 -translate-y-1/2 text-sm text-slate-500",children:o})]})]})}function $({label:e,value:a,onChange:r,min:s,max:n,step:i=1,display:o}){return(0,t.jsxs)("label",{className:"block",children:[(0,t.jsxs)("span",{className:"mb-1.5 flex items-center justify-between text-sm text-slate-400",children:[e,(0,t.jsx)("span",{className:"font-semibold text-primary",children:o})]}),(0,t.jsx)("input",{type:"range",value:a,min:s,max:n,step:i,onChange:e=>r(Number(e.target.value)),className:"w-full accent-orange-500"})]})}function E({toolKey:e,locale:n}){let g="es"===n?"es":"en",b=A[g],y=d.get(e),[x,v]=(0,m.useState)(()=>Object.fromEntries((y?.fields??[]).map(e=>[e.key,e.defaultValue]))),[w,k]=(0,m.useState)("USD"),[j,N]=(0,m.useState)(null);(0,m.useEffect)(()=>{let e=p.default.get(a),t=p.default.get(r);t&&N(t),e&&i(e)&&(k(e.toUpperCase()),t)||fetch("/api/tools/geo").then(e=>e.ok?e.json():null).then(t=>{t&&(t.country&&(N(t.country),p.default.set(r,t.country,{expires:30,sameSite:"lax"})),!e&&i(t.currency)&&k(t.currency))}).catch(()=>void 0)},[]),(0,m.useEffect)(()=>{(0,h.trackToolEvent)("tools_view",{tool:e})},[]);let C=(0,m.useRef)(!1);(0,m.useEffect)(()=>
1{if(!C.current)return;let t=setTimeout(()=>(0,h.trackToolEvent)("tools_calculate",{tool:e,currency:w}),1500);return()=>clearTimeout(t)},[x]);let S=(0,m.useMemo)(()=>{if(!y)return null;let e=y.fields.every(e=>isFinite(x[e.key]));return function(e){let{def:t,values:a,locale:r,currency:s,country:n,pageUrl:i}=e,d=t.compute(a),m=t.fields.map(e=>({key:e.key,label:e.label[r],value:e.money?o(a[e.key],s,r,0):e.percent?l(a[e.key],r):c(a[e.key],r,0),raw:a[e.key]})),p=t.results.map(e=>({key:e.key,label:e.label[r],value:u(e.format,d[e.key],s,r),raw:isFinite(d[e.key])?Number(d[e.key].toFixed(2)):null,highlight:e.highlight}));return{tool:t.key,toolName:t.name[r],locale:r,country:n,currency:s,date:new Date().toISOString(),pageUrl:i,inputs:m,results:p,interpretation:t.interpret(a,d,r,(e,t=0)=>o(e,s,r,t)),recommendations:t.recommend(a,d,r)}}({def:y,values:e?x:Object.fromEntries(y.fields.map(e=>[e.key,isFinite(x[e.key])?x[e.key]:e.defaultValue])),locale:g,currency:w,country:j,pageUrl:window.location.href.split("?")[0]})},[y,x,g,w,j]);if(!y||!S)return null;let O=y.compute(x);function _(){C.current||(C.current=!0,f({tool:e,locale:g,currency:w}))}return(0,t.jsxs)("div",{className:"rounded-2xl border border-slate-800 bg-slate-900 p-6 md:p-8",children:[(0,t.jsxs)("div",{className:"mb-6 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between",children:[(0,t.jsxs)("label",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:"text-sm text-slate-400",children:b.currency}),(0,t.jsx)("select",{value:w,onChange:t=>{var r;return r=t.target.value,void((0,h.trackToolEvent)("tools_currency_change",{tool:e,currency:r,previous:w}),k(r),p.default.set(a,r,{expires:180,sameSite:"lax"}))},className:"rounded-lg border border-slate-700 bg-slate-950 px-3 py-2 text-sm text-white focus:border-primary focus:outline-none",children:s.map(e=>(0,t.jsx)("option",{value:e.code,children:e.label[g]},e.code))})]}),(0,t.jsx)("span",{className:"text-xs text-slate-500",children:b.currencyHint})]}),(0,t.jsx)("div",{className:"grid gap-4 sm:grid-cols-2",children:y.fields.map(e=>"slider"===e.widget?(0,t.jsx)($,{label:e.label[g],value:x[e.key],onChange:t=>{_(),v(a=>({...a,[e.key]:t}))},min:e.min??0,max:e.max??100,step:e.step,display:e.percent?l(x[e.key],g):String(x[e.key])},e.key):(0,t.jsx)(P,{label:e.label[g],value:x[e.key],onChange:t=>{_(),v(a=>({...a,[e.key]:t}))},min:e.min,max:e.max,step:e.step,suffix:e.money?w:void 0},e.key))}),(0,t.jsxs)("div",{className:"mt-8",children:[(0,t.jsx)("h2",{className:"mb-4 text-lg font-semibold text-white",children:b.results}),(0,t.jsx)("div",{className:"grid gap-4 sm:grid-cols-3",children:y.results.map(e=>(0,t.jsxs)("div",{className:"rounded-xl border border-slate-800 bg-slate-950 p-5 text-center",children:[(0,t.jsx)("p",{className:"text-sm text-slate-400",children:e.label[g]}),(0,t.jsx)("p",{className:e.highlight?"mt-1 bg-gradient-to-tl from-primary to-orange-500 bg-clip-text text-2xl font-bold text-transparent md:text-3xl":"mt-1 text-2xl font-bold text-white md:text-3xl",children:u(e.format,O[e.key],w,g)})]},e.key))}),(0,t.jsx)("p",{className:"mt-3 text-sm text-slate-400",children:S.interpretation}),(0,t.jsx)("p",{className:"mt-3 text-xs text-slate-500",children:b.disclaimer})]}),(0,t.jsx)(R,{report:S,locale:g})]})}let O=(0,y.default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);var _=e.i(77220),_=_;let T=(0,y.default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);var M=e.i(54943),M=M;let D=(0,y.default)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);var I=e.i(78745),I=I;function z(e,t,a){let r="en"===a,s=e.imgCount>0?e.imgWithAlt/e.imgCount:1,n=[{label:"HTTPS",detail:e.https?r?"Secure connection.":"Conexión segura.":r?"The site is not served over HTTPS.":"El sitio no se sirve por HTTPS.",grade:e.https?"pass":"fail",weight:10},{label:r?"Title tag":"Etiqueta title",detail:e.title?`"${e.title.slice(0,80)}" (${e.titleLength})`:r?"Missing <title>.":"Falta el <title>.",grade:e.title?e.titleLength>=25&&e.titleLength<=65?"pass":"warn":"fail",weight:10}
1,{label:r?"Meta description":"Meta descripción",detail:e.metaDescription?`${e.metaDescriptionLength} ${r?"characters":"caracteres"}`:r?"Missing meta description.":"Falta la meta descripción.",grade:e.metaDescription?e.metaDescriptionLength>=70&&e.metaDescriptionLength<=165?"pass":"warn":"fail",weight:8},{label:r?"Mobile viewport":"Viewport móvil",detail:e.viewport?r?"Responsive viewport declared.":"Viewport responsivo declarado.":r?"No viewport meta â mobile rendering suffers.":"Sin meta viewport â el render móvil sufre.",grade:e.viewport?"pass":"fail",weight:8},{label:"H1",detail:1===e.h1Count?r?"One H1 heading.":"Un encabezado H1.":r?`${e.h1Count} H1 headings found.`:`${e.h1Count} encabezados H1 encontrados.`,grade:1===e.h1Count?"pass":0===e.h1Count?"fail":"warn",weight:5},{label:r?"Canonical URL":"URL canónica",detail:e.canonical?r?"Canonical link present.":"Enlace canónico presente.":r?"No canonical link.":"Sin enlace canónico.",grade:e.canonical?"pass":"warn",weight:5},{label:"Open Graph",detail:e.ogTitle&&e.ogImage?r?"Social sharing tags present.":"Etiquetas para compartir presentes.":r?"Missing og:title or og:image.":"Falta og:title u og:image.",grade:e.ogTitle&&e.ogImage?"pass":"warn",weight:4}
1,{label:r?"Image alt texts":"Textos alt de imágenes",detail:`${e.imgWithAlt}/${e.imgCount}`,grade:s>=.8?"pass":s>=.4?"warn":"fail",weight:4},{label:r?"Languages (hreflang)":"Idiomas (hreflang)",detail:e.hreflangCount>0?`${e.hreflangCount} hreflang`:r?"No hreflang â single-language site.":"Sin hreflang â sitio de un solo idioma.",grade:e.hreflangCount>0?"pass":"warn",weight:4},{label:r?"Booking engine detected":"Motor de reservas detectado",detail:e.bookingEngine??(r?"None detected on the homepage.":"No detectado en la portada."),grade:e.bookingEngine?"pass":"warn",weight:8}],i=[{label:r?"Hotel structured data":"Datos estructurados de hotel",detail:e.hasHotelSchema?r?"Schema.org lodging markup found.":"Marcado Schema.org de hospedaje encontrado.":r?"No Hotel/LodgingBusiness schema â AI agents must guess what you are.":"Sin schema Hotel/LodgingBusiness â los agentes de IA deben adivinar qué eres.",grade:e.hasHotelSchema?"pass":"fail",weight:12},{label:r?"Rooms & offers markup":"Marcado de habitaciones y ofertas",detail:e.hasOfferSchema?r?"Offer/HotelRoom markup found.":"Marcado Offer/HotelRoom encontrado.":r?"No Offer markup â rates aren't machine-readable.":"Sin marcado Offer â las tarifas no son legibles por máquinas.",grade:e.hasOfferSchema?"pass":"warn",weight:8},{label:"FAQ schema",detail:e.hasFaqSchema?r?"FAQPage markup found.":"Marcado FAQPage encontrado.":r?"No FAQPage markup â policies aren't extractable answers.":"Sin FAQPage â tus polÃticas no son respuestas extraÃbles.",grade:e.hasFaqSchema?"pass":"warn",weight:6},{label:"llms.txt",detail:e.llmsTxt?r?"llms.txt published.":"llms.txt publicado.":r?"No llms.txt â no curated map for AI assistants.":"Sin llms.txt â no hay mapa curado para asistentes de IA.",grade:e.llmsTxt?"pass":"warn",weight:8},{label:r?"AI crawlers allowed":"Crawlers de IA permitidos",detail:0===e.blockedAiCrawlers.length?r?"GPTBot, ClaudeBot and PerplexityBot can read the site.":"GPTBot, ClaudeBot y PerplexityBot pueden leer el sitio.":`${r?"Blocked":"Bloqueados"}: ${e.blockedAiCrawlers.join(", ")}`,grade:0===e.blockedAiCrawlers.length?"pass":"fail",weight:10},{label:r?"Structured data found":"Datos estructurados encontrados",detail:e.jsonLdTypes.length>0?e.jsonLdTypes.slice(0,6).join(", "):r?"No JSON-LD at all.":"Sin JSON-LD en absoluto.",grade:e.jsonLdTypes.length>0?"pass":"fail",weight:6}];return"grader"===t?[...n,...i.slice(0,2)]:[...i,n[0],n[8]]}function L(e){let t=e.reduce((e,t)=>e+t.weight,0);return Math.round(e.reduce((e,t)=>e+("pass"===t.grade?t.weight:"warn"===t.grade?t.weight/2:0),0)/t*100)}let q={en:{placeholder:"yourhotel.com",run:"Run the audit",running:"Auditingâ¦",error:"We couldn't reach that site. Check the URL and try again.",score:"Score",auditedLabel:"Audited website",toolNameGrader:"Hotel website grader",toolNameAi:"AI visibility checker",passed:"Checks passed",warnings:"Warnings",failed:"Failed checks",interp:(e,t)=>e>=80?`${t} scores ${e}/100 â a solid foundation. The remaining warnings below are quick wins worth closing.`:e>=55?`${t} scores ${e}/100. The site works, but the failed checks below are costing visibility in search and in AI assistants.`:`${t} scores ${e}/100 â travelers and AI agents are likely struggling to find and read this site. Start with the failed checks below.`,fixPrefix:"Fix",share:"Copy report link",sharing:"Creating linkâ¦",shared:"Link copied",shareHint:"Anyone with the link sees this report â no login needed."},es:{placeholder:"tuhotel.com",run:"Ejecutar auditorÃa",running:"Auditandoâ¦",error:"No pudimos acceder a ese sitio. Revisa la URL e intenta de nuevo.",score:"Puntaje",auditedLabel:"Sitio auditado",toolNameGrader:"Auditor de sitios web hoteleros",toolNameAi:"Verificador de visibilidad en IA",passed:"Checks aprobados",warnings:"Advertencias",failed:"Checks fallidos",interp:(e,t)=>e>=80?`${t} obtiene ${e}/100 â una base s\xf3lida. Las advertencias restantes son mejoras r\xe1pidas que vale la pena cerrar.`:e>=55?`${t} obtiene ${e}/100. El sitio funciona, pero los checks fallidos est\xe1n costando visibilidad en buscadores y asistentes de IA.`:`${t} obtiene ${e}/100 â es probable que viajeros y agentes de IA batallen para encontrar y leer este sitio. Empieza por los checks fallidos.`,fixPrefix:"Corregir",share:"Copiar enlace del reporte",sharing:"Creando enlaceâ¦",shared:"Enlace copiado",shareHint:"Cualquiera con el enlace ve este reporte â sin registro."}}
1,U={pass:O,warn:_.default,fail:T},F={pass:"text-emerald-400",warn:"text-amber-400",fail:"text-red-400"};function V({locale:e,variant:s}){let n="es"===e?"es":"en",o=q[n],l="grader"===s?"website-grader":"ai-visibility-checker",[c,d]=(0,m.useState)(""),[u,g]=(0,m.useState)(!1),[y,x]=(0,m.useState)(!1),[v,w]=(0,m.useState)(null),[k,j]=(0,m.useState)("idle"),N=(0,m.useRef)(!1);async function C(e){let t=(e??c).trim();if(t&&!u){g(!0),x(!1),w(null),j("idle");try{let e=await fetch(`/api/tools/site-audit?url=${encodeURIComponent(t)}`);if(!e.ok)throw Error("bad status");let a=await e.json();w(a);let r=z(a.checks,s,n);(0,h.trackToolEvent)("tools_diagnostic_run",{tool:l,score:L(r)}),f({tool:l,locale:n})}catch{x(!0)}finally{g(!1)}}}async function S(){if(v&&"working"!==k){j("working");try{let e=await fetch("/api/tools/audit-snapshot",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({url:v.url,locale:n})});if(!e.ok)throw Error("bad status");let t=await e.json(),a="es"===n?t.shareUrlEs:t.shareUrl;await navigator.clipboard.writeText(a),j("copied"),(0,h.trackToolEvent)("tools_share_link",{tool:l,snapshot:t.id})}catch{j("idle")}}}(0,m.useEffect)(()=>{if((0,h.trackToolEvent)("tools_view",{tool:l}),!N.current){N.current=!0;let e=new URLSearchParams(window.location.search).get("url")?.trim();e&&(d(e),C(e),(0,h.trackToolEvent)("tools_autorun",{tool:l}))}},[]);let A=v?z(v.checks,s,n):[],P=v?L(A):0,$=P>=80?"text-emerald-400":P>=55?"text-amber-400":"text-red-400",E=(0,m.useMemo)(()=>{if(!v)return null;let e=p.default.get(a);return{tool:l,toolName:"grader"===s?o.toolNameGrader:o.toolNameAi,locale:n,country:p.default.get(r)??null,currency:e&&i(e)?e.toUpperCase():"USD",date:new Date().toISOString(),pageUrl:window.location.href.split("?")[0],inputs:[{key:"url",label:o.auditedLabel,value:v.url,raw:v.url}],results:[{key:"score",label:`${o.score} /100`,value:String(P),raw:P,highlight:!0},...A.map(e=>{let t;return{key:e.label,label:`${"pass"===(t=e.grade)?"â":"warn"===t?"!":"â"} ${e.label}`,value:e.detail,raw:e.grade}})],interpretation:o.interp(P,v.url),recommendations:A.filter(e=>"pass"!==e.grade).slice(0,6).map(e=>`${o.fixPrefix} â ${e.label}: ${e.detail}`)}},[v,n,s,P]);return(0,t.jsxs)("div",{className:"rounded-2xl border border-slate-800 bg-slate-900 p-6 md:p-8",children:[(0,t.jsxs)("form",{onSubmit:e=>{e.preventDefault(),C()},className:"flex flex-col gap-3 sm:flex-row",children:[(0,t.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:o.placeholder,className:"w-full rounded-lg border border-slate-700 bg-slate-950 px-4 py-3 text-white placeholder:text-slate-500 focus:border-primary focus:outline-none"}),(0,t.jsxs)(b.Button,{type:"submit",size:"lg",disabled:u,className:"w-full shrink-0 bg-gradient-to-r from-primary to-orange-500 sm:w-fit",children:[(0,t.jsx)(M.default,{className:"mr-2 h-4 w-4"}),u?o.running:o.run]})]}),y&&(0,t.jsx)("p",{className:"mt-4 text-sm text-red-400",children:o.error}),v&&(0,t.jsxs)("div",{className:"mt-8",children:[(0,t.jsxs)("div",{className:"mb-6 flex flex-col gap-4 roun
1ded-xl border border-slate-800 bg-slate-950 p-6 sm:flex-row sm:items-center sm:justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-5",children:[(0,t.jsx)("p",{className:`text-5xl font-bold tracking-tighter ${$}`,children:P}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"font-semibold text-white",children:[o.score," /100"]}),(0,t.jsx)("p",{className:"break-all text-sm text-slate-400",children:v.url})]})]}),(0,t.jsxs)("div",{className:"shrink-0",children:[(0,t.jsxs)(b.Button,{type:"button",variant:"outline",size:"lg",disabled:"working"===k,onClick:S,className:"w-full border-slate-700 text-slate-100 hover:bg-transparent hover:text-slate-100 sm:w-fit",children:["copied"===k?(0,t.jsx)(I.default,{className:"mr-2 h-4 w-4 text-emerald-400"}):(0,t.jsx)(D,{className:"mr-2 h-4 w-4"}),"working"===k?o.sharing:"copied"===k?o.shared:o.share]}),"copied"===k&&(0,t.jsx)("p",{className:"mt-2 text-xs text-slate-500",children:o.shareHint})]})]}),(0,t.jsx)("ul",{className:"space-y-3",children:A.map((e,a)=>{let r=U[e.grade];return(0,t.jsxs)("li",{className:"flex items-start gap-3 rounded-lg border border-slate-800 bg-slate-950 p-4",children:[(0,t.jsx)(r,{size:18,className:`mt-0.5 shrink-0 ${F[e.grade]}`}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-white",children:e.label}),(0,t.jsx)("p",{className:"text-sm text-slate-400",children:e.detail})]})]},a)})}),E&&(0,t.jsx)(R,{report:E,locale:n})]})]})}e.s(["ToolWidget",0,function({toolKey:e,locale:a}){if(d.get(e))return(0,t.jsx)(E,{toolKey:e,locale:a});switch(e){case"website-grader":return(0,t.jsx)(V,{locale:a,variant:"grader"});case"ai-visibility-checker":return(0,t.jsx)(V,{locale:a,variant:"ai"});default:return null}}],35407)},85437,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"Image",{enumerable:!0,get:function(){return w}});let r=e.r(63141),s=e.r(72589),n=e.r(43476),i=s._(e.r(71645)),o=r._(e.r(74080)),l=r._(e.r(25633)),c=e.r(8927),d=e.r(87690),u=e.r(18556),m=e.r(65856),p=r._(e.r(1948)),h=e.r(18581),g={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function f(e,t,a,r,s,n,i){let o=e?.src;e&&e["data-loaded-src"]!==o&&(e["data-loaded-src"]=o,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&s(!0),a?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let r=!1,s=!1;a.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>r,isPropagationStopped:()=>s,persist:()=>{},preventDefault:()=>{r=!0,t.preventDefault()},stopPropagation:()=>{s=!0,t.stopPropagation()}})}r?.current&&r.current(e)}}))}function b(e){return i.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let y="u"<typeof window?i.useEffect:i.useLayoutEffect,x=(0,i.forwardRef)(({src:e,srcSet:t,sizes:a,height:r,width:s,decoding:o,className:l,style:c,fetchPriority:d,placeholder:u,loading:m,unoptimized:p,fill:g,onLoadRef:x,onLoadingCompleteRef:v,setBlurComplete:w,setShowAltText:k,sizesInput:j,onLoad:N,onError:C,...S},R)=>{let A=(0,i.useRef)(!1),P=(0,i.useRef)(null);y(()=>{let{current:e}=A,{current:t}=P;e||null===t||(C&&(t.src=t.src),t.complete&&f(t,u,x,v,w,p,j),A.current=!0)},[e,u,x,v,C,p,j]);let $=(0,h.useMergedRef)(R,P);return(0,n.jsx)("img",{...S,...b(d),loading:m,width:s,height:r,decoding:o,"data-nimg":g?"fill":"1",className:l,style:c,sizes:a,srcSet:t,src:e,ref:$,onLoad:e=>{f(e.currentTarget,u,x,v,w,p,j)},onError:e=>{k(!0),"empty"!==u&&w(!0),C&&C(e)}})});function v({isAppRouter:e,imgAttributes:t}){let a={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...b(t.fetchPriority)};return e&&o.default.preload?(o.default.preload(t.src,a),null):(0,n.jsx)(l.default,{children:(0,n.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...a},"__nimg-"+t.src+t.srcSet+t.sizes)})}let w=(0,i.forwardRef)((e,t)=>{let a=(0,i.useContext)(m.RouterContext),r=(0,i.useContext)(u.ImageConfigContext),s=(0,i.useMemo)(()=>{let e=g||r||d.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>
1e-t),a=e.deviceSizes.sort((e,t)=>e-t),s=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:a,qualities:s,localPatterns:"u"<typeof window?r?.localPatterns:e.localPatterns}},[r]),{onLoad:o,onLoadingComplete:l}=e,h=(0,i.useRef)(o);(0,i.useEffect)(()=>{h.current=o},[o]);let f=(0,i.useRef)(l);(0,i.useEffect)(()=>{f.current=l},[l]);let[b,y]=(0,i.useState)(!1),[w,k]=(0,i.useState)(!1),{props:j,meta:N}=(0,c.getImgProps)(e,{defaultLoader:p.default,imgConf:s,blurComplete:b,showAltText:w});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(x,{...j,unoptimized:N.unoptimized,placeholder:N.placeholder,fill:N.fill,onLoadRef:h,onLoadingCompleteRef:f,setBlurComplete:y,setShowAltText:k,sizesInput:e.sizes,ref:t}),N.preload?(0,n.jsx)(v,{isAppRouter:!a,imgAttributes:j}):null]})});("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},94909,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0});var r={default:function(){return d},getImageProps:function(){return c}};for(var s in r)Object.defineProperty(a,s,{enumerable:!0,get:r[s]});let n=e.r(63141),i=e.r(8927),o=e.r(85437),l=n._(e.r(1948));function c(e){let{props:t}=(0,i.getImgProps)(e,{defaultLoader:l.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[e,a]of Object.entries(t))void 0===a&&delete t[e];return{props:t}}let d=o.Image},57688,(e,t,a)=>{t.exports=e.r(94909)},52155,e=>{"use strict";var t=e.i(43476),a=e.i(57688),r=e.i(71645);e.s(["default",0,function({src:e,alt:s,className:n}){let[i,o]=(0,r.useState)(!1);return!e||i?null:(0,t.jsx)(a.default,{src:e,alt:s,fill:!0,sizes:"160px",className:`object-contain bg-white ${n??"p-4"}`,onError:()=>o(!0)})}])},25633,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0});var r={default:function(){return g},defaultHead:function(){return u}};for(var s in r)Object.defineProperty(a,s,{enumerable:!0,get:r[s]});let n=e.r(63141),i=e.r(72589),o=e.r(43476),l=i._(e.r(71645)),c=n._(e.r(98879)),d=e.r(42732);function u(){return[(0,o.jsx)("meta",{charSet:"utf-8"},"charset"),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function m(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===l.default.Fragment?e.concat(l.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}let p=["name","httpEquiv","charSet","itemProp"];function h(e){let t,a,r,s;return e.reduce(m,[]).reverse().concat(u().reverse()).filter((t=new Set,a=new Set,r=new Set,s={},e=>{let n=!0,i=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){i=!0;let a=e.key.slice(e.key.indexOf("$")+1);t.has(a)?n=!1:t.add(a)}switch(e.type){case"title":case"base":a.has(e.type)?n=!1:a.add(e.type);break;case"meta":for(let t=0,a=p.length;t<a;t++){let a=p[t];if(e.props.hasOwnProperty(a))if("charSet"===a)r.has(a)?n=!1:r.add(a);else{let t=e.props[a],r=s[a]||new Set;("name"!==a||!i)&&r.has(t)?n=!1:(r.add(t),s[a]=r)}}}return n})).reverse().map((e,t)=>{let a=e.key||t;return l.default.cloneElement(e,{key:a})})}let g=function({children:e}){let t=(0,l.useContext)(d.HeadManagerContext);return(0,o.jsx)(c.default,{reduceComponentsToState:h,headManager:t,children:e})};("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},18556,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"ImageConfigContext",{enumerable:!0,get:function(){return n}});let r=e.r(63141)._(e.r(71645)),s=e.r(87690),n=r.default.createContext(s.imageConfigDefault)},65856,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"RouterContext",{enumerable:!0,get:function(){return r}});let r=e.r(63141)._(e.r(71645)).default.createContext(null)},70965,(e,t,a)=>{"use strict";function r(e,t){let a=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>
1Math.abs(t-a)<Math.abs(e-a)?t:e,t.qualities[0]):a}Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"findClosestQuality",{enumerable:!0,get:function(){return r}})},1948,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"default",{enumerable:!0,get:function(){return i}});let r=e.r(70965),s=e.r(43369);function n({config:e,src:t,width:a,quality:i}){let o=(0,s.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//"))if(t.includes("/_next/static/immutable")&&!(0,s.getAssetToken)())o=void 0;else{let e=t.indexOf("?");if(-1!==e){let a=new URLSearchParams(t.slice(e+1)),r=a.get("dpl");if(r){o=r,a.delete("dpl");let s=a.toString();t=t.slice(0,e)+(s?"?"+s:"")}}}if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns. 2Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let l=(0,r.findClosestQuality)(i,e);return`${e.path}?url=${encodeURIComponent(t)}&w=${a}&q=${l}${t.startsWith("/")&&o?`&dpl=${o}`:""}`}n.__next_img_default=!0;let i=n},88143,(e,t,a)=>{"use strict";function r({widthInt:e,heightInt:t,blurWidth:a,blurHeight:s,blurDataURL:n,objectFit:i}){let o=a?40*a:e,l=s?40*s:t,c=o&&l?`viewBox='0 0 ${o} ${l}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${c}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${c?"none":"contain"===i?"xMidYMid":"cover"===i?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${n}'/%3E%3C/svg%3E`}Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"getImageBlurSvg",{enumerable:!0,get:function(){return r}})},87690,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var r={VALID_LOADERS:function(){return n},imageConfigDefault:function(){return i}};for(var s in r)Object.defineProperty(a,s,{enumerable:!0,get:r[s]});let n=["default","imgix","cloudinary","akamai","custom"],i={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1}},8927,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"getImgProps",{enumerable:!0,get:function(){return c}});let r=e.r(43369),s=e.r(88143),n=e.r(87690),i=["-moz-initial","fill","none","scale-down",void 0];function o(e){return void 0!==e.default}function l(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function c({src:e,sizes:t,unoptimized:a=!1,priority:d=!1,preload:u=!1,loading:m,className:p,quality:h,width:g,height:f,fill:b=!1,style:y,overrideSrc:x,onLoad:v,onLoadingComplete:w,placeholder:k="empty",blurDataURL:j,fetchPriority:N,decoding:C="async",layout:S,objectFit:R,objectPosition:A,lazyBoundary:P,lazyRoot:$,...E},O){var _;let T,M,D,{imgConf:I,showAltText:z,blurComplete:L,defaultLoader:q}=O,U=I||n.imageConfigDefault;if("allSizes"in U)T=U;else{let e=[...U.deviceSizes,...U.imageSizes].sort((e,t)=>e-t),t=U.deviceSizes.sort((e,t)=>e-t),a=U.qualities?.sort((e,t)=>e-t);T={...U,allSizes:e,deviceSizes:t,qualities:a}}if(void 0===q)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,
2configurable:!0});let F=E.loader||q;delete E.loader,delete E.srcSet;let V="__next_img_default"in F;if(V){if("custom"===T.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop. 3Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=F;F=t=>{let{config:a,...r}=t;return e(r)}}if(S){"fill"===S&&(b=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[S];e&&(y={...y,...e});let a={responsive:"100vw",fill:"100vw"}[S];a&&!t&&(t=a)}let H="",B=l(g),G=l(f);if((_=e)&&"object"==typeof _&&(o(_)||void 0!==_.src)){let t=o(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(M=t.blurWidth,D=t.blurHeight,j=j||t.blurDataURL,H=t.src,!b)if(B||G){if(B&&!G){let e=B/t.width;G=Math.round(t.height*e)}else if(!B&&G){let e=G/t.height;B=Math.round(t.width*e)}}else B=t.width,G=t.height}let W=!d&&!u&&("lazy"===m||void 0===m);(!(e="string"==typeof e?e:H)||e.startsWith("data:")||e.startsWith("blob:"))&&(a=!0,W=!1),T.unoptimized&&(a=!0),V&&!T.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(a=!0);let J=l(h),X=Object.assign(b?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:R,objectPosition:A}:{},z?{}:{color:"transparent"},y),Y=L||"empty"===k?null:"blur"===k?`url("data:image/svg+xml;charset=utf-8,${(0,s.getImageBlurSvg)({widthInt:B,heightInt:G,blurWidth:M,blurHeight:D,blurDataURL:j||"",objectFit:X.objectFit})}")`:`url("${k}")`,Q=i.includes(X.objectFit)?"fill"===X.objectFit?"100% 100%":"cover":X.objectFit,K=Y?{backgroundSize:Q,backgroundPosition:X.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:Y}:{},Z=function({config:e,src:t,unoptimized:a,width:s,quality:n,sizes:i,loader:o}){if(a){if(t.startsWith("/")&&!t.startsWith("//")){let e=(0,r.getDeploymentId)();if(t.includes("/_next/static/immutable")&&!(0,r.getAssetToken)())e=void 0;else if(e){let a=t.indexOf("?");if(-1!==a){let r=new URLSearchParams(t.slice(a+1));r.get("dpl")||(r.append("dpl",e),t=t.slice(0,a)+"?"+r.toString())}else t+=`?dpl=${e}`}}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:l,kind:c}=function({deviceSizes:e,allSizes:t},a,r){if(r){let a=/(^|\s)(1?\d?\d)vw/g,s=[];for(let e;e=a.exec(r);)s.push(parseInt(e[2]));if(s.length){let a=.01*Math.min(...s);return{widths:t.filter(t=>t>=e[0]*a),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof a?{widths:e,kind:"w"}:{widths:[...new Set([a,2*a].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,s,i),d=l.length-1;return{sizes:i||"w"!==c?i:"100vw",srcSet:l.map((a,r)=>`${o({config:e,src:t,quality:n,width:a})} ${"w"===c?a:r+1}${c}`).join(", "),src:o({config:e,src:t,quality:n,width:l[d]})}}({config:T,src:e,unoptimized:a,width:B,quality:J,sizes:t,loader:F}),ee=W?"lazy":m;return{props:{...E,loading:ee,fetchPriority:N,width:B,height:G,decoding:C,className:p,style:{...X,...K},sizes:Z.sizes,srcSet:Z.srcSet,src:x||Z.src},meta:{unoptimized:a,preload:u||d,placeholder:k,fill:b}}}},98879,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"default",{enumerable:!0,get:function(){return o}});let r=e.r(71645),s="u"<typeof window,n=s?()=>{}:r.useLayoutEffect,i=s?()=>{}:r.useEffect;function o(e){let{headManager:t,reduceComponentsToState:a}=e;function o(){if(t&&t.mountedInstances){let e=r.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(a(e))}}return s&&(t?.mountedInstances?.add(e.children),o()),n(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),n(()=>
3(t&&(t._pendingUpdate=o),()=>{t&&(t._pendingUpdate=o)})),i(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}}]);
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.