1var M=(f,v,p)=>new Promise((u,i)=>{var d=a=>{try{r(p.next(a))}catch(c){i(c)}},n=a=>{try{r(p.throw(a))}catch(c){i(c)}},r=a=>a.done?u(a.value):Promise.resolve(a.value).then(d,n);r((p=p.apply(f,v)).next())});import{c as k,j as e,r as H}from"./index-OvnVkuSh.js";import{M as L}from"./message-square-DnWvDi4C.js";import{u as z}from"./useMetaTags-ClEPtOsG.js";import{A as $}from"./arrow-left-ClRt_nhb.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const q=k("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** 7 * @license lucide-react v0.462.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const D=k("CreditCard",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);/** 12 * @license lucide-react v0.462.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const _=k("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]),Y=()=>e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-20 h-20 rounded-full bg-white/60 backdrop-blur-sm border border-[#d6d2ce]/40 shadow-lg",children:e.jsx(q,{className:"w-10 h-10 text-[#8b7355]"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h1",{className:"text-6xl font-light text-[#6d5a42] leading-tight tracking-wide",children:"ambros"}),e.jsx("h2",{className:"text-2xl font-light text-[#8b7355] tracking-wider",children:"Virtual Assistant"})]})]}),e.jsx("p",{className:"text-lg text-[#8b7355] font-light max-w-2xl mx-auto leading-relaxed tracking-wide",children:"Experience seamless hotel bookings with our AI-powered concierge"})]}),O=()=>e.jsxs("div",{className:"space-y-12",children:[e.jsxs("div",{className:"grid md:grid-cols-3 gap-8",children:[e.jsxs("div",{className:"text-center space-y-4 group",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-white/70 backdrop-blur-sm border border-[#d6d2ce]/40 shadow-lg group-hover:shadow-xl transition-all duration-300",children:e.jsx(L,{className:"w-8 h-8 text-[#8b7355]"})}),e.jsx("h3",{className:"text-lg font-light text-[#6d5a42] tracking-wide",children:"Instant Reservations"}),e.jsx("p",{className:"text-[#8b7355] text-sm leading-relaxed font-light",children:"Book rooms through natural conversation, available 24/7"})]}),e.jsxs("div",{className:"text-center space-y-4 group",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-white/70 backdrop-blur-sm border border-[#d6d2ce]/40 shadow-lg group-hover:shadow-xl transition-all duration-300",children:e.jsx(_,{className:"w-8 h-8 text-[#8b7355]"})}),e.jsx("h3",{className:"text-lg font-light text-[#6d5a42] tracking-wide",children:"Personalized Service"}),e.jsx("p",{className:"text-[#8b7355] text-sm leading-relaxed font-light",children:"Curated recommendations for dining, wellness, and local experiences"})]}),e.jsxs("div",{className:"text-center space-y-4 group",children:[e.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-white/70 backdrop-blur-sm border border-[#d6d2ce]/40 shadow-lg group-hover:shadow-xl transition-all duration-300",children:e.jsx("span",{className:"text-xl font-light text-[#8b7355]",children:"10%"})}),e.jsx("h3",{className:"text-lg font-light text-[#6d5a42] tracking-wide",children:"Direct Booking Savings"}),e.jsx("p",{className:"text-[#8b7355] text-sm leading-relaxed font-light",children:"Exclusive discounts for guests who book directly through our assistant"})]})]}),e.jsxs("div",{className:"inline-flex items-center gap-3 px-6 py-3 bg-white/60 backdrop-blur-sm border border-[#d6d2ce]/40 rounded-full shadow-lg",children:[e.jsx("div",{className:"w-2 h-2 bg-green-400 rounded-full animate-pulse"}),e.jsx("span",{className:"text-sm text-[#8b7355] font-light tracking-wide",children:"Live Assistant Available"})]})]}),P=()=>e.jsx("div",{className:"space-y-8",children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("a",{href:"https://buy.stripe.com/00w6oG0sBcJNbhc0ga2Ry00",target:"_blank",rel:"noopener noreferrer",className:"group inline-flex items-center justify-center gap-4 px-12 py-4 bg-[#8b7355] hover:bg-[#6d5a42] text-white font-light tracking-wider up
16percase text-sm rounded-sm transition-all duration-300 hover:shadow-2xl hover:scale-105 active:scale-95",children:[e.jsx(D,{className:"w-5 h-5"}),e.jsx("span",{children:"GET ACCESS"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-[#8b7355] font-light leading-relaxed max-w-lg mx-auto",children:"Transform your hotel's booking experience with our AI concierge assistant"}),e.jsx("p",{className:"text-xs text-[#8b7355]/80 font-light tracking-wide",children:"Complete setup included ⢠24/7 support ⢠Monthly maintenance $40/month"})]})]})}),V=()=>{H.useEffect(()=>{const f=()=>{const i=document.createElement("style");return i.textContent=` 17 :root { 18 --accent: #b8b2a7; 19 --accent-light: #e9e7e5; 20 --bg-panel: #e9e7e5; 21 --bg-input: #f5f3f2; 22 --text: #333333; 23 --text-inverse: #ffffff; 24 --muted: #777777; 25 --radius: 12px; 26 --font: system-ui, -apple-system, BlinkMacSystemFont, sans-serif; 27 --transition-fast: 0.2s ease; 28 } 29 *, *::before, *::after { box-sizing: border-box; } 30 31 /* launcher bubble */ 32 #chat-launch { 33 position: fixed; bottom:20px; right:20px; 34 width:60px; height:60px; border-radius:50%; 35 background: var(--accent); 36 display:flex; align-items:center; justify-content:center; 37 box-shadow:0 4px 12px rgba(0,0,0,0.15); 38 cursor:pointer; transition:transform var(--transition-fast); 39 z-index:1001; 40 } 41 #chat-launch:hover { transform: scale(1.1); } 42 @keyframes bounce { 43 0% { transform: translateY(0) rotate(0deg); } 44 30% { transform: translateY(-8px) rotate(-2deg); } 45 50% { transform: translateY(0) rotate(2deg); } 46 70% { transform: translateY(-4px) rotate(-1deg); } 47 100% { transform: translateY(0) rotate(0deg); } 48 } 49 #chat-launch.bounce { 50 animation: bounce .8s ease-in-out; 51 } 52 53 /* panel */ 54 #chat-box { 55 position: fixed; bottom:90px; right:20px; 56 width:100%; max-width:360px; max-height:600px; 57 background: var(--bg-panel); 58 border-radius: var(--radius); 59 box-shadow:0 10px 30px rgba(0,0,0,0.2); 60 display:flex; flex-direction:column; 61 overflow:hidden; opacity:0; 62 transform: translateY(20px); 63 transition: opacity .3s, transform .3s; 64 z-index:1000; 65 } 66 #chat-box.open { opacity:1; transform: translateY(0); } 67 68 /* header */ 69 #chat-head { 70 background: var(--accent); 71 color: var(--text-inverse); 72 padding:12px 16px; display:flex; align-items:center; 73 border-top-left-radius: var(--radius); 74 border-top-right-radius: var(--radius); 75 } 76 #chat-head span { flex:1; font-weight:500; } 77 #chat-close { 78 background:none; border:none; color: var(--text-inverse); 79 font-size:18px; cursor:pointer; 80 } 81 82 /* messages */ 83 #chat-body { 84 flex:1; padding:12px 16px 0; 85 overflow-y:auto; background: var(--bg-panel); 86 } 87 .msg { 88 margin-bottom:14px; padding:10px 14px; 89 border-radius: var(--radius); font-size:14px; line-height:1.4; 90 max-width:80%; background:#fff; color:var(--text); 91 } 92 .msg.user { background:#f5f3f2; margin-left:auto; } 93 .msg-time { 94 display:block; font-size:10px; color:var(--muted); 95 margin-top:4px; text-align:right; 96 } 97 98 /* preserve line breaks */ 99 .msg > div { white-space: pre-wrap; } 100 101 /* render images */ 102 .msg img { 103 display:block; 104 max-width:100%; 105 margin:8px 0; 106 border-radius:var(--radius); 107 cursor:pointer; 108 transition:transform var(--transition-fast), box-shadow var(--transition-fast); 109 } 110 .msg img:hover { 111 transform:scale(1.02); 112 box-shadow:0 4px 12px rgba(0,0,0,0.15); 113 } 114 115 /* Image modal */ 116 .image-modal { 117 position:fixed; top:0; left:0; right:0; bottom:0; 118 background:rgba(0,0,0,0.9); z-index:2000; 119 display:flex; align-items:center; justify-content:center; 120 padding:20px; opacity:0; visibility:hidden; 121 transition:opacity 0.3s, visibility 0.3s; 122 } 123 .image-modal.show { 124 opacity:1; visibility:visible; 125 } 126 .image-modal img { 127 max-width:100%; max-height:100%; 128 border-radius:var(--radius); 129 box-shadow:0 20px 60px rgba(0,0,0,0.5); 130 } 131 .image-modal-close { 132 position:absolute; top:20px; right:20px; 133 background:none; border:none;
133 color:#fff; 134 font-size:24px; cursor:pointer; padding:10px; 135 border-radius:50%; background:rgba(255,255,255,0.1); 136 transition:background var(--transition-fast); 137 } 138 .image-modal-close:hover { 139 background:rgba(255,255,255,0.2); 140 } 141 142 /* link styling */ 143 .msg a { 144 color: var(--accent); 145 text-decoration: underline; 146 } 147 .msg a:hover { 148 text-decoration: none; 149 } 150 151 /* typing indicator */ 152 .typing-indicator { 153 display:flex; align-items:center; gap:6px; 154 padding:10px 14px; background:#fff; border-radius:var(--radius); 155 max-width:60%; margin-bottom:14px; 156 } 157 .typing-dots { display:flex; gap:4px; } 158 .typing-dot { 159 width:6px; height:6px; background:var(--accent); 160 border-radius:50%; animation:typing 1s infinite ease-in-out; 161 } 162 .typing-dot:nth-child(2) { animation-delay:0.2s; } 163 .typing-dot:nth-child(3) { animation-delay:0.4s; } 164 @keyframes typing { 165 0%,80%,100% { transform:translateY(0); opacity:0.4; } 166 40% { transform:translateY(-6px); opacity:1; } 167 } 168 169 /* quick buttons */ 170 #quick-buttons { 171 display:flex; gap:8px; flex-wrap:wrap; 172 padding:8px 16px; background:var(--bg-input); 173 border-top:1px solid #ddd; 174 } 175 #quick-buttons.hidden { display:none !important; } 176 .quick-btn { 177 padding:6px 14px; border:none; border-radius:var(--radius); 178 background:#fff; color:var(--text); font-size:13px; 179 cursor:pointer; transition:transform var(--transition-fast), box-shadow var(--transition-fast); 180 } 181 .quick-btn:hover { 182 transform:scale(1.05); box-shadow:0 2px 8px rgba(0,0,0,0.1); 183 } 184 185 /* footer */ 186 #chat-foot { 187 display:flex; gap:8px; padding:10px 12px; 188 background:var(--bg-input); border-top:1px solid #ddd; 189 } 190 #chat-input { 191 flex:1; padding:8px 12px; border:1px solid #ddd; 192 border-radius:var(--radius); font-size:14px; outline:none; 193 color:var(--text); 194 } 195 #chat-send { 196 background:var(--accent); color:#fff; border:none; 197 padding:0 14px; border-radius:var(--radius); 198 cursor:pointer; font-size:14px; 199 } 200 201 /* branding */ 202 #chat-footer { 203 text-align:center; font-size:10px; color:var(--muted); 204 padding:6px 0 8px; background: var(--bg-panel); 205 } 206 #chat-footer a { color:var(--muted); text-decoration:none; } 207 208 @media(max-width:400px){ 209 #chat-box { 210 bottom:0!important; right:0!important; 211 width:100%!important; height:100%!important; 212 border-radius:0!important; 213 } 214 #chat-launch{ display:none; } 215 } 216 `,document.head.appendChild(i),i},v=()=>{const i=` 217 <div id="chat-launch"> 218 <svg width="24" height="24" viewBox="0 0 24 24" fill="none"> 219 <path d="M4 4H20V18H6L2 22V4Z" 220 stroke="#fff" stroke-width="2" 221 stroke-linecap="round" stroke-linejoin="round"/> 222 </svg> 223 </div> 224 `,d=` 225 <div id="chat-box"> 226 <div id="chat-head"> 227 <span>Ambros Hotels</span> 228 <button id="chat-close">â</button> 229 </div> 230 <div id="chat-body"></div> 231 <div id="quick-buttons"> 232 <button class="quick-btn" data-msg="I would like to book a room">Book a room</button> 233 <button class="quick-btn" data-msg="What are your check-in and check-out times?">Check In/out hours</button> 234 </div> 235 <div id="chat-foot"> 236 <input id="chat-input" placeholder="Type your messageâ¦" /> 237 <button id="chat-send">Send</button> 238 </div> 239 <div id="chat-footer"> 240 <a href="https://thebrightidea.ai/" target="_blank" rel="noopener">Powered by Bright Idea</a> 241 </div> 242 </div> 243 `;document.body.insertAdjacentHTML("beforeend",i),document.body.insertAdjacentHTML("beforeend",d)},p=()=>{const i="https://n8n-n8n.x0fum2.easypanel.host/webhook/293e7609-f20b-4875-81f7-8323b5a41110/chat",d="general",n=document.getElementById("chat-launch"),r=
243document.getElementById("chat-box"),a=document.getElementById("chat-body"),c=document.getElementById("quick-buttons");if(!n||!r||!a||!c)return;const B=(()=>{let t=sessionStorage.getItem("chatId");return t||(t="chat_"+Math.random().toString(36).substr(2,9),sessionStorage.setItem("chatId",t)),t})();function w(){n&&(n.style.display="none"),r&&r.classList.add("open")}function C(){if(r&&r.classList.remove("open"),n){n.style.display="flex";const t=Date.now()+5e3;(function s(){n.classList.add("bounce"),n.addEventListener("animationend",()=>{n.classList.remove("bounce"),Date.now()<t&&setTimeout(s,Math.random()*800+200)},{once:!0})})()}}function j(){a&&(a.scrollTop=a.scrollHeight)}function x(t,s){if(!a)return;t=t.replace(/!\[([^\]]*?)\]\(\s*(https?:\/\/[^\s)]+)\s*\)/gi,(g,m,l)=>`<br/><img src="${l}" alt="${m}" onclick="openImageModal('${l}')" />`),t=t.replace(/(^|\s)(https?:\/\/[^\s"')]+\.(?:png|jpe?g|gif))(?=\s|$)/gi,(g,m,l)=>`${m}<br/><img src="${l}" alt="image" onclick="openImageModal('${l}')" />`),t=t.replace(/\[Image\s+\d+\]\s*\(/gi,""),t=t.replace(/\)\s*<br\/>/g,"<br/>"),t=t.replace(/\*\*/g,"").replace(/\[\(\s*/g,"[").replace(/\s*\)\]/g,"]"),t=t.replace(/\[([^\]]+?)\]\(\s*(https?:\/\/[^\s)]+)\s*\)/gi,(g,m,l)=>`<a href="${l}" target="_blank">${m}</a>`),t=t.replace(/(\(?\d{3}\)?\s?\d{3}[\s.-]?\d{4})/g,g=>`<a href="tel:${g.replace(/\D/g,"")}">${g}</a>`),t=t.replace(/(?:\s*<br\/?>)*\s*Amenities:/i,"<br/><br/>Amenities:");const o=document.createElement("div");o.className="msg "+s;const h=new Date,b=String(h.getHours()%12||12).padStart(2,"0"),T=String(h.getMinutes()).padStart(2,"0");o.innerHTML=` 244 <div>${t}</div> 245 <span class="msg-time">${b}:${T}${h.getHours()<12?" AM":" PM"}</span> 246 `,a.appendChild(o),j()}function S(){if(!a)return;const t=document.createElement("div");t.id="typing",t.className="typing-indicator",t.innerHTML=` 247 <div class="typing-dots"> 248 <div class="typing-dot"></div> 249 <div class="typing-dot"></div> 250 <div class="typing-dot"></div> 251 </div>`,a.appendChild(t),j()}function N(){const t=document.getElementById("typing");t&&t.remove()}function y(t){return M(this,null,function*(){var s,o;c&&c.classList.add("hidden"),x(t,"user"),S();try{const b=yield(yield fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chatId:B,message:t,route:d})})).json();N(),x((o=(s=b.output)!=null?s:b.response)!=null?o:"Sorry, I didn't get that. ð¤","bot")}catch(h){N(),x("Connection error. Please try again later.","bot")}})}n&&(n.onclick=w);const I=document.getElementById("chat-close");I&&(I.onclick=C);const A=document.getElementById("chat-send");A&&(A.onclick=()=>{const t=document.getElementById("chat-input");if(!t)return;const s=t.value.trim();s&&(t.value="",y(s))});const E=document.getElementById("chat-input");E&&E.addEventListener("keypress",t=>{if(t.key==="Enter"){const s=t.target,o=s.value.trim();if(!o)return;s.value="",y(o)}}),document.querySelectorAll(".quick-btn").forEach(t=>{const s=t;s.onclick=()=>{const o=s.dataset.msg;o&&y(o)}}),setTimeout(()=>{w(),setTimeout(()=>{x("Hey! ð Welcome to Ambros Hotels. I'm your virtual assistant. Book direct and save 10%.","bot")},500)},1e3)},u=f();return v(),p(),()=>{const i=document.getElementById("chat-launch"),d=document.getElementById("chat-box");i&&i.remove(),d&&d.remove(),u&&u.remove()}},[])},K=()=>(z({title:"Ambros Hotels Virtual Assistant Demo | AI-Powered Hotel Booking Assistant",description:"Experience the future of hotel bookings with our AI-powered virtual assistant. Seamless booking experience powered by advanced AI technology. Book direct & save 10%. See AI automation in action.",ogImage:"/assets/c3d6d10d-72f5-4fb1-8f11-cafdb96951ad.png",url:"https://thebrightidea.ai/demo",keywords:"AI hotel booking, virtual assistant demo, AI-powered hospitality, automated booking system, hotel AI assistant, conversational AI demo",schemaData:{"@context":"https://schema.org","@type":"WebApplication",name:"Ambros Hotels AI Virtual Assistant",description:"AI-powered virtual assistant for seamless hotel booking experience",url:"https://thebrightidea.ai/demo",applicationCategory:"BusinessApplication",offers:{"@type":"Offer",description:"Experience AI-powered hotel booking with 10% direct booking savings"},provider:{"@type":"Organization",name:"Bright Idea AI"}},noindex:!0}),V(),e.jsxs("div",{className:"min-h-screen bg-gradient-to-b from-[#f8f6f3] to-[#e9e7e4] relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-[#f5f3f0]/80 via-[#e8e5e1]/40 to-[#d6d2ce]/20"}),e.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(ellipse_at_center,_rgba(255,255,255,0.1)_0%,_transparent_70%)]"}),e.jsx("div",{className:"relative z-10 border-b border-[#d6d2ce]/30 bg-white/70 backdrop-blur-sm",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-8 py-6 flex items-center justify-between",children:[e.jsxs("a",{href:"/",className:"inline-flex items-center gap-3 text-[#8b7355] hover:text-[#6d5a42] transition-colors text-sm font-light tracking-wide",children:[e.jsx($,{className:"w-4 h-4"}),"BACK TO BRIGHT IDEA"]}),e.jsx("div",{className:"text-xs text-[#8b7355] uppercase tracking-[0.2em] font-light",children:"Demo Experience"})]})}),e.jsx("div",{className:"relative z-10 flex items-center justify-center min-h-[calc(100vh-100px)] px-8 py-16",children:e.jsxs("div",{className:"w-full max-w-4xl text-center space-y-16",children:[e.jsx(Y,{}),e.jsx(O,{}),e.jsx(P,{})]})})]}));export{K 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.