{"id":627,"date":"2026-06-15T04:11:36","date_gmt":"2026-06-15T04:11:36","guid":{"rendered":"https:\/\/illusoryisle.com\/?page_id=627"},"modified":"2026-06-15T04:39:41","modified_gmt":"2026-06-15T04:39:41","slug":"chatbox-test","status":"publish","type":"page","link":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/","title":{"rendered":"chatbox test"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"627\" class=\"elementor elementor-627\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7f92e8c e-flex e-con-boxed e-con e-parent\" data-id=\"7f92e8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9eec5e7 elementor-widget elementor-widget-html\" data-id=\"9eec5e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ============================================================\n     GEMINI CHATBOT WIDGET  \u2014  paste this whole block into an\n     Elementor \"HTML\" widget (or a Custom HTML block).\n     ============================================================\n     STEP 1: paste your Gemini API key below (GEMINI_API_KEY)\n     STEP 2: edit the BOT_PERSONALITY text to match your boss\n     STEP 3: edit KNOWLEDGE with facts\/FAQs the bot should know\n     STEP 4 (optional): swap the PNG sequence \u2014 see PNG_FRAMES\n     ------------------------------------------------------------\n     SECURITY NOTE: a key placed here is visible in page source.\n     Fine for testing. For a live public site, move the key\n     behind a serverless proxy (ask me and I'll build it).\n     ============================================================ -->\n\n<div id=\"gbot-root\"><\/div>\n\n<script>\n(function () {\n  \/* ====== 1. YOUR SETTINGS ====================================== *\/\n\n  const GEMINI_API_KEY = \"AQ.Ab8RN6JzdvN1ePvDz12kXbowpN_U4nOsYIe2qCsBAoVXnerzhQ\";\n\n  const MODEL = \"gemini-2.5-flash\"; \/\/ or \"gemini-2.5-flash-lite\" for higher free limits\n\n  \/\/ Lindsay's voice \u2014 direct, warm, action-oriented. Not a chatbot, not a salesperson.\n  const BOT_PERSONALITY = `\nYou are Lindsay Schwartz, CEO & Creative-in-Chief of LSCC, a full-service marketing and branding agency in Atlanta. You're talking to someone visiting the website \u2014 a potential client, a curious person, or someone who already knows us.\n\nYour personality:\n- Direct. You get to the point fast. No warm-up, no preamble.\n- Warm and genuinely caring \u2014 but you don't perform it. It just shows.\n- Action-oriented. Your instinct is \"we can make this happen\" and you mean it.\n- Real. You say what you think. You don't sugarcoat but you're never harsh.\n- No corporate speak. Zero. Words like \"synergy,\" \"leverage,\" \"circle back\" are banned.\n- You're confident without being arrogant. You know the work is good.\n\nHow you write:\n- Short. A few sentences max unless the question genuinely needs more.\n- No bullet walls. Conversational, not a brochure.\n- You don't sign off with \"Lindsay\" every message \u2014 that's weird in a chat.\n- You don't end EVERY reply with \"email us.\" Only say it when it actually makes sense.\n- You might use \"we\" when talking about the team, but this is still you, personally.\n\nRules:\n- Never make up pricing, timelines, or specifics you're not sure about \u2014 say you'd want to talk it through instead.\n- If something's outside your knowledge, be honest and point them to hello@lscc-atl.com.\n- If someone's ready to move, invite them to reach out \u2014 but don't push if they're just browsing.\n- Keep it human. If it sounds like a template, rewrite it.\n- Never use dashes or em-dashes in responses. Use commas, periods, or line breaks instead.\n`.trim();\n\n  \/\/ What Lindsay \/ LSCC knows. This is the factual brain of the bot.\n  const KNOWLEDGE = `\nCOMPANY\nName: LSCC (LS Consulting Creative)\nWebsite: https:\/\/lsconsultingcreative.com\nLocation: Atlanta, GA\nEmail: hello@lscc-atl.com\nInstagram: @lsconsultingcreative\nLinkedIn: linkedin.com\/company\/lsconsultingcreative\n\nWHAT WE DO\nLSCC is a full-service marketing and branding agency. We embed with your team. High-touch, fully invested, and committed to bringing humanity back into the agency experience. No ego, no fluff. Strategy and creativity, together.\n\nWe work across industries but have deep roots in live events and production. We also serve healthcare, tech, consumer brands, legal, and more.\n\nWHO WE ARE\nLindsay Schwartz: CEO & Creative-in-Chief\nRebekah Millsaps: Brand Strategy & Implementation Lead\nDest Dowden: Brand Experience & Operations Lead\nBay Routh: Creative Design Lead\nWinston Young: Digital Experience Architect\nPeyton Scot: Content & Media Producer\nMolly Mastley: Brand Strategy & Implementation Coordinator\nZoey Vousden: Brand Creative & Implementation Coordinator\n\nOUR VALUES\nInnovation: We don't follow templates. We build what's next.\nIntegrity: We do what we say we'll do, every time.\nExcellence: We obsess over the details and deliver work we're proud of.\nCollaboration: We show up as part of your team. The best ideas are born together.\n\nSERVICES\n1. Full-Service Marketing Team\n2. Marketing & Brand Strategy\n3. Logo & Visual Identity\n4. Brand Messaging & Communications\n5. Creative Ideation & Development\n6. Graphic & Motion Design\n7. Integrated Campaign Creation\n8. Advertising, PR & Community Engagement\n9. Photography & Videography\n10. Internal Communications & Culture Development\n11. Website Design & Development\n12. SEO Services\n13. Social Media\n\nCLIENTS (sample)\nCitrus Magic & Veggie Wash, Sound Ideas, Music Matters Productions, Roswell Music Festival, Flex Rental Solutions, Star Gift Alliance, Protostream, COPE at Emory University, ResPro Health, Stratum, Stephanie Young Law, High Road x Truck'N Roll, MPG Productions, Bluewood Productions.\n\nFAQs\n\nQ: What makes LSCC different?\nA: We become part of your team. High-touch, transparent, and genuinely invested in your success.\n\nQ: What industries do you work with?\nA: All industries, but deepest roots in live events and production. We work with good people who are passionate about their craft.\n\nQ: Why hire an agency instead of in-house?\nA: Full marketing department without the overhead. Strategy, design, copy, social, SEO. We scale with you.\n\nQ: What does the process look like?\nA: Discovery first, then we craft your story and build a roadmap. We work side by side with you the whole way. Transparent, honest, on time and on budget.\n\nQ: Can you do a full brand refresh?\nA: Absolutely. Strategy to visual identity to website, end to end.\n\nQ: Project work or retainers only?\nA: Both. We flex to fit what works for you.\n\nQ: How long do projects take?\nA: Depends on scope. We set a clear roadmap with milestones during onboarding.\n\nQ: How do revisions work?\nA: Most projects include a set number of revision rounds. We go over that during project scoping.\n\nQ: How is pricing structured?\nA: Flexible. Every proposal is tailored to your goals, timeline, and budget.\n\nQ: Do you require a deposit?\nA: Yes, 50% upfront for most projects. Balance due on completion. Retainer agreements billed monthly.\n\nQ: What payment methods do you accept?\nA: Cash, check, ACH, or credit card. Credit card payments include a 3.5% processing fee.\n\nCONTACT\nEmail: hello@lscc-atl.com\nWebsite: https:\/\/lsconsultingcreative.com\/contact\/\n`.trim();\n\n  \/\/ Optional PNG sequence for the bubble.\n  \/\/ Leave the array EMPTY to use the default chat icon.\n  const PNG_FRAMES = [\n    \/\/ \"https:\/\/yoursite.com\/wp-content\/uploads\/frame-01.png\",\n  ];\n  const PNG_FPS = 12;\n\n  \/\/ BUTTON COLORS \u2014 change these HEX values\n  const CHAT_COLOR   = \"#F0BCC8\";   \/\/ floating chat bubble button\n  const FOOTER_COLOR = \"#F0BCC8\";   \/\/ Send + Mail buttons inside panel\n\n  \/\/ OTHER SETTINGS\n  const ACCENT    = \"#000000\";       \/\/ user message bubble color\n  const BOT_NAME  = \"Chat with LSCC\";\n  const MAIL_HREF = \"mailto:hello@lscc-atl.com\";\n\n  \/\/ Elementor form connection\n  const WP_AJAX_URL  = \"\/wp-admin\/admin-ajax.php\";\n  const FORM_POST_ID = \"601\";\n  const FORM_ID      = \"0d7dd8e\";\n\n  \/* ====== 2. WIDGET ============================================= *\/\n\n  const css = `\n    #gbot-root *{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif}\n\n    .gbot-bubble{position:fixed;bottom:24px;right:24px;width:72px;height:72px;border-radius:0;\n      background:${CHAT_COLOR};cursor:pointer;z-index:999999;display:flex;align-items:center;\n      justify-content:center;box-shadow:0 6px 20px rgba(0,0,0,.3);overflow:hidden;transition:opacity .15s}\n    .gbot-bubble:hover{opacity:.85}\n    .gbot-bubble img{width:100%;height:100%;object-fit:cover}\n    .gbot-bubble svg{width:32px;height:32px;fill:#fff}\n\n    .gbot-panel{position:fixed;bottom:112px;right:24px;width:380px;max-width:calc(100vw - 32px);\n      height:560px;max-height:calc(100vh - 140px);background:#fff;border-radius:0;z-index:999999;\n      display:none;flex-direction:column;overflow:hidden;box-shadow:0 12px 40px rgba(0,0,0,.28)}\n    .gbot-panel.open{display:flex}\n\n    .gbot-head{background:#000;color:#fff;padding:14px 16px;font-weight:600;font-size:15px;\n      display:flex;justify-content:space-between;align-items:center;flex-shrink:0}\n    .gbot-head button{background:none;border:none;color:#fff;font-size:20px;cursor:pointer;line-height:1}\n\n    #gbot-chat-view{display:flex;flex-direction:column;flex:1;overflow:hidden;min-height:0}\n    .gbot-msgs{flex:1;overflow-y:auto;padding:16px;background:#f7f7f9}\n    .gbot-msg{margin-bottom:12px;display:flex}\n    .gbot-msg.user{justify-content:flex-end}\n    .gbot-msg .b{max-width:80%;padding:10px 13px;border-radius:0;font-size:14px;line-height:1.5;white-space:pre-wrap}\n    .gbot-msg.bot .b{background:#fff;border:1px solid #eee;color:#222}\n    .gbot-msg.user .b{background:${ACCENT};color:#fff}\n    .gbot-typing .b{color:#999;font-style:italic}\n\n    .gbot-foot{display:flex;padding:10px;border-top:1px solid #eee;gap:8px;background:#fff;flex-shrink:0;align-items:stretch}\n    .gbot-foot input{flex:1;border:1px solid #ddd;border-radius:0;padding:10px 14px;font-size:14px;outline:none}\n    .gbot-foot input:focus{border-color:#999}\n    .gbot-foot-send{background:${FOOTER_COLOR};color:#fff;border:none;border-radius:0;padding:0 18px;cursor:pointer;font-size:14px}\n    .gbot-foot-send:disabled{opacity:.5;cursor:default}\n    .gbot-mail-btn{background:${FOOTER_COLOR} !important;border:none;cursor:pointer;display:flex !important;\n      align-items:center;justify-content:center;padding:0 13px;flex-shrink:0;position:static !important;\n      width:auto !important;height:auto !important;box-shadow:none !important;border-radius:0 !important}\n    .gbot-mail-btn:hover{opacity:.85}\n    .gbot-mail-btn svg{display:block;flex-shrink:0}\n\n    .gbot-hint{font-size:11px;color:#bbb;text-align:center;padding:6px 14px 7px;background:#fff;\n      border-top:1px solid #f0f0f0;line-height:1.4;flex-shrink:0}\n\n    #gbot-contact-view{display:none;flex-direction:column;flex:1;overflow-y:auto;background:#fff;min-height:0}\n    #gbot-contact-view.active{display:flex}\n    .gbot-cv-loading{flex:1;display:flex;align-items:center;justify-content:center;\n      font-size:13px;color:#aaa;font-style:italic;padding:40px}\n    .gbot-cv-inner{padding:18px;display:flex;flex-direction:column;gap:12px}\n    .gbot-cv-intro{font-size:13px;color:#555;line-height:1.5;margin:0}\n    .gbot-cv-label{font-size:11px;font-weight:700;color:#222;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px}\n    .gbot-cv-input,.gbot-cv-textarea{width:100%;border:1px solid #ddd;padding:9px 11px;font-size:13px;\n      outline:none;border-radius:0;font-family:inherit;color:#222}\n    .gbot-cv-input:focus,.gbot-cv-textarea:focus{border-color:#999}\n    .gbot-cv-textarea{resize:vertical;min-height:90px;line-height:1.5}\n    .gbot-cv-agree{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:#666;cursor:pointer;line-height:1.5}\n    .gbot-cv-agree input{margin-top:3px;flex-shrink:0;cursor:pointer}\n    .gbot-cv-status{font-size:12px;padding:8px 10px;display:none;text-align:center;border-radius:0}\n    .gbot-cv-status.ok{color:#2a7a2a;background:#f0faf0;display:block}\n    .gbot-cv-status.err{color:#c0392b;background:#fdf0f0;display:block}\n    .gbot-cv-actions{display:flex;gap:8px;margin-top:2px}\n    .gbot-cv-back{background:none;border:1px solid #ddd;padding:10px 14px;font-size:13px;\n      cursor:pointer;color:#666;font-family:inherit;border-radius:0}\n    .gbot-cv-back:hover{background:#f5f5f5}\n    .gbot-cv-submit{flex:1;background:${FOOTER_COLOR};color:#fff;border:none;padding:10px;\n      font-size:14px;cursor:pointer;font-weight:600;font-family:inherit;border-radius:0}\n    .gbot-cv-submit:disabled{opacity:.5;cursor:default}\n  `;\n\n  const style = document.createElement(\"style\");\n  style.textContent = css;\n  document.head.appendChild(style);\n\n  const root = document.getElementById(\"gbot-root\");\n\n  \/\/ Bubble\n  const bubble = document.createElement(\"div\");\n  bubble.className = \"gbot-bubble\";\n  bubble.innerHTML = PNG_FRAMES.length\n    ? '<img decoding=\"async\" id=\"gbot-frame\" src=\"' + PNG_FRAMES[0] + '\" alt=\"chat\">'\n    : '<svg viewBox=\"0 0 24 24\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z\"\/><\/svg>';\n  root.appendChild(bubble);\n\n  if (PNG_FRAMES.length > 1) {\n    let fi = 0;\n    setInterval(function() {\n      fi = (fi + 1) % PNG_FRAMES.length;\n      var f = document.getElementById(\"gbot-frame\");\n      if (f) f.src = PNG_FRAMES[fi];\n    }, 1000 \/ PNG_FPS);\n  }\n\n  \/\/ Panel\n  const panel = document.createElement(\"div\");\n  panel.className = \"gbot-panel\";\n  panel.innerHTML =\n    '<div class=\"gbot-head\">' +\n      '<span id=\"gbot-head-title\">' + BOT_NAME + '<\/span>' +\n      '<button id=\"gbot-x\">X<\/button>' +\n    '<\/div>' +\n\n    '<div id=\"gbot-chat-view\">' +\n      '<div class=\"gbot-msgs\" id=\"gbot-msgs\"><\/div>' +\n      '<div class=\"gbot-foot\">' +\n        '<input id=\"gbot-input\" placeholder=\"Type your question...\" autocomplete=\"off\">' +\n        '<button class=\"gbot-foot-send\" id=\"gbot-send\">Send<\/button>' +\n        '<button class=\"gbot-mail-btn\" id=\"gbot-mail-trigger\" title=\"Send conversation summary\">' +\n          '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"fill:#fff;width:14px;height:14px;display:block\">' +\n            '<path d=\"M20 4H4C2.9 4 2 4.9 2 6v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 2-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z\"\/>' +\n          '<\/svg>' +\n        '<\/button>' +\n      '<\/div>' +\n      '<div class=\"gbot-hint\">Once you\\'re ready to connect, click the envelope to confirm and quick send a summary of your request!<\/div>' +\n    '<\/div>' +\n\n    '<div id=\"gbot-contact-view\">' +\n      '<div class=\"gbot-cv-loading\" id=\"gbot-cv-loading\">Pulling together your conversation...<\/div>' +\n      '<div class=\"gbot-cv-inner\" id=\"gbot-cv-form\" style=\"display:none\">' +\n        '<p class=\"gbot-cv-intro\">Here\\'s a summary of what we discussed. Edit it if you like, then drop your info and we\\'ll be in touch.<\/p>' +\n        '<div><label class=\"gbot-cv-label\">Summary<\/label><textarea class=\"gbot-cv-textarea\" id=\"gbot-cv-msg\" rows=\"5\"><\/textarea><\/div>' +\n        '<div><label class=\"gbot-cv-label\">Name<\/label><input class=\"gbot-cv-input\" id=\"gbot-cv-name\" type=\"text\" placeholder=\"Your name\"><\/div>' +\n        '<div><label class=\"gbot-cv-label\">Email<\/label><input class=\"gbot-cv-input\" id=\"gbot-cv-email\" type=\"email\" placeholder=\"Your email\"><\/div>' +\n        '<label class=\"gbot-cv-agree\"><input type=\"checkbox\" id=\"gbot-cv-check\"> I agree to be contacted by LSCC<\/label>' +\n        '<div class=\"gbot-cv-status\" id=\"gbot-cv-status\"><\/div>' +\n        '<div class=\"gbot-cv-actions\">' +\n          '<button class=\"gbot-cv-back\" id=\"gbot-cv-back\">Back to chat<\/button>' +\n          '<button class=\"gbot-cv-submit\" id=\"gbot-cv-submit\">Send<\/button>' +\n        '<\/div>' +\n      '<\/div>' +\n    '<\/div>';\n\n  root.appendChild(panel);\n\n  const msgsEl  = panel.querySelector(\"#gbot-msgs\");\n  const inputEl = panel.querySelector(\"#gbot-input\");\n  const sendEl  = panel.querySelector(\"#gbot-send\");\n  const history = [];\n\n  function addMsg(text, who, typing) {\n    const d = document.createElement(\"div\");\n    d.className = \"gbot-msg \" + who + (typing ? \" gbot-typing\" : \"\");\n    const b = document.createElement(\"div\");\n    b.className = \"b\";\n    b.textContent = text;\n    d.appendChild(b);\n    msgsEl.appendChild(d);\n    msgsEl.scrollTop = msgsEl.scrollHeight;\n    return d;\n  }\n\n  addMsg(\"Hey! What can I help you with?\", \"bot\");\n\n  async function send() {\n    const q = inputEl.value.trim();\n    if (!q) return;\n    inputEl.value = \"\";\n    addMsg(q, \"user\");\n    history.push({ role: \"user\", text: q });\n    sendEl.disabled = true;\n    const typing = addMsg(\"typing...\", \"bot\", true);\n\n    const systemText = BOT_PERSONALITY + \"\\n\\nKNOWLEDGE BASE:\\n\" + KNOWLEDGE;\n    const contents   = history.map(function(m) { return { role: m.role, parts: [{ text: m.text }] }; });\n\n    try {\n      const res  = await fetch(\n        \"https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/\" + MODEL + \":generateContent?key=\" + GEMINI_API_KEY,\n        { method: \"POST\", headers: { \"Content-Type\": \"application\/json\" },\n          body: JSON.stringify({ system_instruction: { parts: [{ text: systemText }] }, contents: contents }) }\n      );\n      const data   = await res.json();\n      const answer = (data && data.candidates && data.candidates[0] && data.candidates[0].content && data.candidates[0].content.parts && data.candidates[0].content.parts[0] && data.candidates[0].content.parts[0].text) || \"Sorry! We couldn't process that message. Our system may have reached its limit for the minute. Check back in a moment, or visit lsconsultingcreative.com\/contact to connect with us directly!\";\n      typing.remove();\n      addMsg(answer, \"bot\");\n      history.push({ role: \"model\", text: answer });\n    } catch (e) {\n      typing.remove();\n      addMsg(\"Sorry! We couldn't process that message. Our system may have reached its limit for the minute. Check back in a moment, or visit lsconsultingcreative.com\/contact to connect with us directly!\", \"bot\");\n    }\n    sendEl.disabled = false;\n    inputEl.focus();\n  }\n\n  \/\/ View switching\n  const chatView    = panel.querySelector(\"#gbot-chat-view\");\n  const contactView = panel.querySelector(\"#gbot-contact-view\");\n  const cvLoading   = panel.querySelector(\"#gbot-cv-loading\");\n  const cvForm      = panel.querySelector(\"#gbot-cv-form\");\n  const headTitle   = panel.querySelector(\"#gbot-head-title\");\n\n  function showChatView() {\n    chatView.style.display = \"flex\";\n    contactView.classList.remove(\"active\");\n    headTitle.textContent  = BOT_NAME;\n  }\n\n  async function showContactView() {\n    chatView.style.display = \"none\";\n    contactView.classList.add(\"active\");\n    cvLoading.style.display = \"flex\";\n    cvForm.style.display    = \"none\";\n    headTitle.textContent   = \"Send us a message\";\n\n    \/\/ Reset form state\n    const statusEl  = panel.querySelector(\"#gbot-cv-status\");\n    const submitBtn = panel.querySelector(\"#gbot-cv-submit\");\n    statusEl.className   = \"gbot-cv-status\";\n    statusEl.textContent = \"\";\n    panel.querySelector(\"#gbot-cv-name\").value    = \"\";\n    panel.querySelector(\"#gbot-cv-email\").value   = \"\";\n    panel.querySelector(\"#gbot-cv-check\").checked = false;\n    submitBtn.disabled    = false;\n    submitBtn.textContent = \"Send\";\n\n    \/\/ Ask Gemini to summarize\n    let summary = \"\";\n    if (history.length > 0) {\n      const transcript = history.map(function(m) {\n        return (m.role === \"user\" ? \"Visitor: \" : \"LSCC: \") + m.text;\n      }).join(\"\\n\");\n\n      try {\n        const res  = await fetch(\n          \"https:\/\/generativelanguage.googleapis.com\/v1beta\/models\/\" + MODEL + \":generateContent?key=\" + GEMINI_API_KEY,\n          { method: \"POST\", headers: { \"Content-Type\": \"application\/json\" },\n            body: JSON.stringify({\n              contents: [{ role: \"user\", parts: [{ text:\n                \"Summarize this conversation in 2 to 3 plain sentences from the visitor's perspective, written in first person, explaining what they are looking for. No bullet points. No dashes. No lists. Just sentences.\\n\\n\" + transcript\n              }] }]\n            }) }\n        );\n        const data = await res.json();\n        const raw  = (data && data.candidates && data.candidates[0] && data.candidates[0].content && data.candidates[0].content.parts && data.candidates[0].content.parts[0] && data.candidates[0].content.parts[0].text) || \"\";\n        summary = raw.trim();\n      } catch (e) {\n        summary = \"\";\n      }\n    }\n\n    panel.querySelector(\"#gbot-cv-msg\").value = summary || \"I visited the LSCC website and would like to connect about your services.\";\n    cvLoading.style.display = \"none\";\n    cvForm.style.display    = \"flex\";\n    panel.querySelector(\"#gbot-cv-name\").focus();\n  }\n\n  \/\/ Elementor form submission\n  async function submitToElementor(name, email, message) {\n    const nonce = (window.elementorFrontendConfig && window.elementorFrontendConfig.nonces && window.elementorFrontendConfig.nonces.frontend) || \"\";\n    const body  = new URLSearchParams({\n      action:                 \"elementor_pro_forms_send_form\",\n      post_id:                FORM_POST_ID,\n      form_id:                FORM_ID,\n      queried_id:             FORM_POST_ID,\n      referrer:               window.location.href,\n      \"form_fields[name]\":    name,\n      \"form_fields[email]\":   email,\n      \"form_fields[message]\": message,\n      _nonce:                 nonce\n    });\n    const res  = await fetch(WP_AJAX_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application\/x-www-form-urlencoded\" },\n      body: body.toString()\n    });\n    const data = await res.json();\n    if (!data.success) throw new Error((data.data && data.data.message) || \"Submission failed\");\n  }\n\n  \/\/ Handlers\n  bubble.onclick = function() {\n    panel.classList.toggle(\"open\");\n    if (panel.classList.contains(\"open\")) inputEl.focus();\n  };\n\n  panel.querySelector(\"#gbot-x\").onclick = function() {\n    panel.classList.remove(\"open\");\n    showChatView();\n  };\n\n  panel.querySelector(\"#gbot-mail-trigger\").onclick = function() { showContactView(); };\n  panel.querySelector(\"#gbot-cv-back\").onclick       = function() { showChatView(); };\n\n  sendEl.onclick = send;\n  inputEl.addEventListener(\"keydown\", function(e) { if (e.key === \"Enter\") send(); });\n\n  panel.querySelector(\"#gbot-cv-submit\").onclick = async function() {\n    const name      = panel.querySelector(\"#gbot-cv-name\").value.trim();\n    const email     = panel.querySelector(\"#gbot-cv-email\").value.trim();\n    const message   = panel.querySelector(\"#gbot-cv-msg\").value.trim();\n    const agreed    = panel.querySelector(\"#gbot-cv-check\").checked;\n    const statusEl  = panel.querySelector(\"#gbot-cv-status\");\n    const submitBtn = panel.querySelector(\"#gbot-cv-submit\");\n\n    if (!name || !email || !message) {\n      statusEl.className   = \"gbot-cv-status err\";\n      statusEl.textContent = \"Please fill in all fields.\";\n      return;\n    }\n    if (!agreed) {\n      statusEl.className   = \"gbot-cv-status err\";\n      statusEl.textContent = \"Please check the agreement box.\";\n      return;\n    }\n\n    submitBtn.disabled    = true;\n    submitBtn.textContent = \"Sending...\";\n    statusEl.className    = \"gbot-cv-status\";\n    statusEl.textContent  = \"\";\n\n    try {\n      await submitToElementor(name, email, message);\n      statusEl.className    = \"gbot-cv-status ok\";\n      statusEl.textContent  = \"Sent! We'll be in touch soon.\";\n      submitBtn.textContent = \"Sent\";\n      setTimeout(function() {\n        showChatView();\n        addMsg(\"Got it! We'll be in touch. Anything else I can help with?\", \"bot\");\n      }, 3000);\n    } catch (e) {\n      statusEl.className    = \"gbot-cv-status err\";\n      statusEl.textContent  = \"Something went wrong. Email us at hello@lscc-atl.com\";\n      submitBtn.disabled    = false;\n      submitBtn.textContent = \"Send\";\n    }\n  };\n\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-627","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>chatbox test - IllusoryIsle<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"chatbox test - IllusoryIsle\" \/>\n<meta property=\"og:url\" content=\"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/\" \/>\n<meta property=\"og:site_name\" content=\"IllusoryIsle\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T04:39:41+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/index.php\\\/chatbox-test\\\/\",\"url\":\"https:\\\/\\\/illusoryisle.com\\\/index.php\\\/chatbox-test\\\/\",\"name\":\"chatbox test - IllusoryIsle\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#website\"},\"datePublished\":\"2026-06-15T04:11:36+00:00\",\"dateModified\":\"2026-06-15T04:39:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/index.php\\\/chatbox-test\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/illusoryisle.com\\\/index.php\\\/chatbox-test\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/index.php\\\/chatbox-test\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/illusoryisle.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"chatbox test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#website\",\"url\":\"https:\\\/\\\/illusoryisle.com\\\/\",\"name\":\"IllusoryIsle\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/illusoryisle.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#organization\",\"name\":\"IllusoryIsle\",\"url\":\"https:\\\/\\\/illusoryisle.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/illusoryisle.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/IllusoryIsle-White-Logo.svg\",\"contentUrl\":\"https:\\\/\\\/illusoryisle.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/IllusoryIsle-White-Logo.svg\",\"width\":799,\"height\":385,\"caption\":\"IllusoryIsle\"},\"image\":{\"@id\":\"https:\\\/\\\/illusoryisle.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"chatbox test - IllusoryIsle","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/","og_locale":"en_US","og_type":"article","og_title":"chatbox test - IllusoryIsle","og_url":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/","og_site_name":"IllusoryIsle","article_modified_time":"2026-06-15T04:39:41+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/","url":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/","name":"chatbox test - IllusoryIsle","isPartOf":{"@id":"https:\/\/illusoryisle.com\/#website"},"datePublished":"2026-06-15T04:11:36+00:00","dateModified":"2026-06-15T04:39:41+00:00","breadcrumb":{"@id":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/illusoryisle.com\/index.php\/chatbox-test\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/illusoryisle.com\/index.php\/chatbox-test\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/illusoryisle.com\/"},{"@type":"ListItem","position":2,"name":"chatbox test"}]},{"@type":"WebSite","@id":"https:\/\/illusoryisle.com\/#website","url":"https:\/\/illusoryisle.com\/","name":"IllusoryIsle","description":"","publisher":{"@id":"https:\/\/illusoryisle.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/illusoryisle.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/illusoryisle.com\/#organization","name":"IllusoryIsle","url":"https:\/\/illusoryisle.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/illusoryisle.com\/#\/schema\/logo\/image\/","url":"https:\/\/illusoryisle.com\/wp-content\/uploads\/2023\/08\/IllusoryIsle-White-Logo.svg","contentUrl":"https:\/\/illusoryisle.com\/wp-content\/uploads\/2023\/08\/IllusoryIsle-White-Logo.svg","width":799,"height":385,"caption":"IllusoryIsle"},"image":{"@id":"https:\/\/illusoryisle.com\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/pages\/627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/comments?post=627"}],"version-history":[{"count":19,"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/pages\/627\/revisions"}],"predecessor-version":[{"id":650,"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/pages\/627\/revisions\/650"}],"wp:attachment":[{"href":"https:\/\/illusoryisle.com\/index.php\/wp-json\/wp\/v2\/media?parent=627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}