PageSourceSearch

https://www.thebrightidea.ai/assets/AmbrosDemo-rje3pb1x.js

js thebrightidea.ai collected 2026-10-05 14:53:52 UTC 19,846 bytes, 251 lines download raw bytes

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.