{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/chat-widget.js?cb=1777170106"],
  "sourcesContent": ["/*!\n * Rolacase Chat Widget\n * Loaded by snippets/chat-widget.liquid via {{ 'chat-widget.js' | asset_url | script_tag }}\n * Configuration injected at render time via window.RC_CHAT_CONFIG.\n */\n(function() {\n  'use strict';\n\n  var CFG = window.RC_CHAT_CONFIG || {};\n  var STORE = CFG.store === 'AU' ? 'AU' : 'US';\n  var API_BASE = CFG.apiBase || 'https://api.rolacase.us';\n  var WS_BASE = API_BASE.replace('https://', 'wss://').replace('http://', 'ws://');\n  var API_KEY = CFG.apiKey || 'rola-dp-7f3k9x2m4p';\n  var CALL_TEL = STORE === 'AU' ? '+61243401444' : '+18573340300';\n  var PHONE_FALLBACK = STORE === 'AU' ? '02 4340 1444' : '857-334-0300';\n\n  var STORAGE_KEY = 'rc_chat_session';\n  var SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n  var SILENCE_THRESHOLD_MS = 30 * 1000;\n  var GREETING_KEY = 'rc_greeting_auto';\n  var SVG_NS = 'http://www.w3.org/2000/svg';\n\n  function timeNow() {\n    return new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' });\n  }\n\n  function makeSvg(attrs, childSpecs) {\n    var svg = document.createElementNS(SVG_NS, 'svg');\n    Object.keys(attrs).forEach(function(k) { svg.setAttribute(k, attrs[k]); });\n    childSpecs.forEach(function(spec) {\n      var el = document.createElementNS(SVG_NS, spec.tag);\n      Object.keys(spec.attrs).forEach(function(k) { el.setAttribute(k, spec.attrs[k]); });\n      svg.appendChild(el);\n    });\n    return svg;\n  }\n\n  function buildBubbleIcon() {\n    return makeSvg(\n      { class: 'rc-bubble__icon', width: '20', height: '20', viewBox: '0 0 24 24', fill: 'none', stroke: '#fff', 'stroke-width': '2', 'stroke-linecap': 'round', 'stroke-linejoin': 'round' },\n      [\n        { tag: 'rect', attrs: { x: '5', y: '2', width: '14', height: '20', rx: '2', ry: '2' } },\n        { tag: 'line', attrs: { x1: '12', y1: '18', x2: '12.01', y2: '18' } }\n      ]\n    );\n  }\n\n  function buildCloseIcon() {\n    return makeSvg(\n      { width: '20', height: '20', viewBox: '0 0 24 24', fill: 'none', stroke: '#fff', 'stroke-width': '2.5', 'stroke-linecap': 'round', 'stroke-linejoin': 'round' },\n      [\n        { tag: 'line', attrs: { x1: '18', y1: '6', x2: '6', y2: '18' } },\n        { tag: 'line', attrs: { x1: '6', y1: '6', x2: '18', y2: '18' } }\n      ]\n    );\n  }\n\n  function setCallBtnVisible(show) {\n    var btn = document.getElementById('rc-call-btn');\n    if (btn) btn.style.display = show ? 'flex' : 'none';\n  }\n\n  function onCallBtnClick() {\n    try {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: 'call_button_click',\n        store: STORE,\n        chat_session_id: sessionId || null,\n        phone: CALL_TEL\n      });\n    } catch (err) {}\n\n    if (sessionId) {\n      try {\n        fetch(API_BASE + '/api/v1/admin/chat/sessions/' + sessionId + '/call-click', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },\n          body: JSON.stringify({ store: STORE, phone: CALL_TEL }),\n          keepalive: true\n        }).catch(function() {});\n      } catch (err) {}\n    }\n  }\n\n  var bubble = document.getElementById('rc-chat-bubble');\n  var panel = document.getElementById('rc-chat-panel');\n  var overlay = document.getElementById('rc-chat-overlay');\n  var messagesEl = document.getElementById('rc-messages');\n  var form = document.getElementById('rc-chat-form');\n  var fieldsEl = document.getElementById('rc-fields');\n  var nameInput = document.getElementById('rc-name');\n  var phoneInput = document.getElementById('rc-phone');\n  var msgInput = document.getElementById('rc-message');\n  var fileInput = document.getElementById('rc-file');\n  var filePreview = document.getElementById('rc-file-preview');\n  var fileName = document.getElementById('rc-file-name');\n  var fileRemove = document.getElementById('rc-file-remove');\n  var unreadBadge = document.getElementById('rc-unread-badge');\n  var statusDot = document.getElementById('rc-status-dot');\n  var statusText = document.getElementById('rc-status-text');\n\n  function setStatus(state) {\n    if (!statusDot || !statusText) return;\n    if (state === 'online' || state === 'connected') {\n      statusDot.style.background = '#4ade80';\n      statusText.textContent = state === 'online' ? 'Online' : 'Connected';\n    } else if (state === 'reconnecting') {\n      statusDot.style.background = '#f59e0b';\n      statusText.textContent = 'Reconnecting...';\n    } else {\n      statusDot.style.background = '#94a3b8';\n      statusText.textContent = 'Offline';\n    }\n  }\n\n  var isOpen = false;\n  var socket = null;\n  var sessionId = null;\n  var unreadCount = 0;\n  var pendingFile = null;\n  var typingTimeout = null;\n  var reconnectTimer = null;\n  var reconnectDelay = 1000;\n  var hasSession = false;\n  var optimisticFirstMessageBody = null;\n  var silenceTimer = null;\n  var silenceBubbleShown = false;\n\n  function loadSession() {\n    try {\n      var raw = JSON.parse(localStorage.getItem(STORAGE_KEY));\n      if (!raw || !raw.sessionId) return {};\n      if (raw.savedAt && (Date.now() - raw.savedAt > SESSION_TTL_MS)) {\n        localStorage.removeItem(STORAGE_KEY);\n        return {};\n      }\n      return raw;\n    } catch (e) {\n      return {};\n    }\n  }\n\n  function saveSession(data) {\n    try {\n      var payload = Object.assign({}, data, { savedAt: Date.now() });\n      localStorage.setItem(STORAGE_KEY, JSON.stringify(payload));\n    } catch (e) {}\n  }\n\n  function addMsg(text, dir, meta, delay) {\n    return new Promise(function(resolve) {\n      setTimeout(function() {\n        var wrap = document.createElement('div');\n        wrap.className = 'rc-msg rc-msg--' + dir;\n        var bub = document.createElement('div');\n        bub.className = 'rc-msg__bubble';\n        bub.textContent = text;\n        wrap.appendChild(bub);\n        if (meta) {\n          var m = document.createElement('span');\n          m.className = 'rc-msg__meta';\n          m.textContent = meta;\n          wrap.appendChild(m);\n        }\n        messagesEl.appendChild(wrap);\n        messagesEl.scrollTop = messagesEl.scrollHeight;\n        resolve(wrap);\n      }, delay || 0);\n    });\n  }\n\n  function addMsgWithAttachment(text, attachment, dir, meta) {\n    var wrap = document.createElement('div');\n    wrap.className = 'rc-msg rc-msg--' + dir;\n    if (text) {\n      var bub = document.createElement('div');\n      bub.className = 'rc-msg__bubble';\n      bub.textContent = text;\n      wrap.appendChild(bub);\n    }\n    if (attachment) {\n      if (attachment.content_type && attachment.content_type.indexOf('image/') === 0) {\n        var img = document.createElement('img');\n        img.className = 'rc-msg__img';\n        img.src = attachment.data || attachment.url;\n        img.alt = attachment.filename;\n        img.addEventListener('click', function() { window.open(img.src, '_blank'); });\n        wrap.appendChild(img);\n      } else {\n        var link = document.createElement('a');\n        link.className = 'rc-msg__file';\n        link.href = attachment.data || attachment.url;\n        link.target = '_blank';\n        link.textContent = attachment.filename;\n        wrap.appendChild(link);\n      }\n    }\n    if (meta) {\n      var m = document.createElement('span');\n      m.className = 'rc-msg__meta';\n      m.textContent = meta;\n      wrap.appendChild(m);\n    }\n    messagesEl.appendChild(wrap);\n    messagesEl.scrollTop = messagesEl.scrollHeight;\n  }\n\n  var typingEl = null;\n  function showTyping() {\n    if (typingEl) return;\n    typingEl = document.createElement('div');\n    typingEl.className = 'rc-msg rc-msg--in rc-typing';\n    var bub = document.createElement('div');\n    bub.className = 'rc-msg__bubble';\n    for (var i = 0; i < 3; i++) {\n      var dot = document.createElement('span');\n      dot.className = 'rc-typing__dot';\n      bub.appendChild(dot);\n    }\n    typingEl.appendChild(bub);\n    messagesEl.appendChild(typingEl);\n    messagesEl.scrollTop = messagesEl.scrollHeight;\n  }\n\n  function hideTyping() {\n    if (typingEl && typingEl.parentNode) typingEl.parentNode.removeChild(typingEl);\n    typingEl = null;\n  }\n\n  function incrementUnread() {\n    if (isOpen) return;\n    unreadCount++;\n    unreadBadge.textContent = unreadCount;\n    unreadBadge.style.display = 'flex';\n  }\n\n  function clearUnread() {\n    unreadCount = 0;\n    unreadBadge.style.display = 'none';\n  }\n\n  function startSilenceTimer() {\n    cancelSilenceTimer();\n    if (silenceBubbleShown) return;\n    silenceTimer = setTimeout(function() {\n      if (silenceBubbleShown) return;\n      silenceBubbleShown = true;\n      addMsg(\"Thanks for your patience. Our team will reply as soon as we're online.\", 'in', null, 0);\n    }, SILENCE_THRESHOLD_MS);\n  }\n\n  function cancelSilenceTimer() {\n    if (silenceTimer) {\n      clearTimeout(silenceTimer);\n      silenceTimer = null;\n    }\n  }\n\n  function resetSilenceState() {\n    cancelSilenceTimer();\n    silenceBubbleShown = false;\n  }\n\n  fileInput.addEventListener('change', function() {\n    if (fileInput.files.length > 0) {\n      pendingFile = fileInput.files[0];\n      if (pendingFile.size > 2 * 1024 * 1024) {\n        pendingFile = null;\n        fileInput.value = '';\n        addMsg('File too large. Maximum 2 MB.', 'in', null, 0);\n        return;\n      }\n      fileName.textContent = pendingFile.name;\n      filePreview.style.display = 'flex';\n    }\n  });\n\n  fileRemove.addEventListener('click', function() {\n    pendingFile = null;\n    fileInput.value = '';\n    filePreview.style.display = 'none';\n  });\n\n  function fileToBase64(file) {\n    return new Promise(function(resolve, reject) {\n      var reader = new FileReader();\n      reader.onload = function() { resolve(reader.result); };\n      reader.onerror = reject;\n      reader.readAsDataURL(file);\n    });\n  }\n\n  function connectWS() {\n    if (!sessionId) return;\n    if (socket && socket.readyState <= 1) return;\n\n    socket = new WebSocket(WS_BASE + '/ws/chat/' + sessionId);\n\n    socket.onopen = function() {\n      reconnectDelay = 1000;\n      setStatus('connected');\n    };\n\n    socket.onmessage = function(event) {\n      var env = JSON.parse(event.data);\n\n      if (env.type === 'message' && env.from === 'admin') {\n        hideTyping();\n        resetSilenceState();\n        var msg = env.message || {};\n        if (msg.attachment_url) {\n          addMsgWithAttachment(msg.body, { data: msg.attachment_url, filename: msg.attachment_name, content_type: msg.attachment_type }, 'in', timeNow());\n        } else {\n          addMsg(msg.body || env.body, 'in', timeNow(), 0);\n        }\n        incrementUnread();\n        playSound();\n      }\n\n      if (env.type === 'typing' && env.from === 'admin') {\n        showTyping();\n        clearTimeout(typingTimeout);\n        typingTimeout = setTimeout(hideTyping, 3000);\n      }\n\n      if (env.type === 'session_update' && env.body === 'closed') {\n        addMsg('This conversation has been closed. Thank you for chatting with us.', 'in', null, 0);\n        msgInput.disabled = true;\n        if (sendBtnForm) sendBtnForm.disabled = true;\n        msgInput.placeholder = 'Session ended';\n        setStatus('offline');\n        if (socket) socket.close();\n        localStorage.removeItem(STORAGE_KEY);\n      }\n    };\n\n    socket.onclose = function() {\n      setStatus('reconnecting');\n      clearTimeout(reconnectTimer);\n      reconnectTimer = setTimeout(function() {\n        reconnectDelay = Math.min(reconnectDelay * 2, 15000);\n        connectWS();\n      }, reconnectDelay);\n    };\n\n    socket.onerror = function() { socket.close(); };\n  }\n\n  function sendWS(type, body, attachment) {\n    if (!socket || socket.readyState !== 1) return false;\n    var payload = { type: type, session_id: sessionId, body: body || '' };\n    if (attachment) payload.attachment = attachment;\n    socket.send(JSON.stringify(payload));\n    return true;\n  }\n\n  var audioCtx = null;\n  function playSound() {\n    try {\n      if (!audioCtx) audioCtx = new (window.AudioContext || window.webkitAudioContext)();\n      var osc = audioCtx.createOscillator();\n      var gain = audioCtx.createGain();\n      osc.connect(gain); gain.connect(audioCtx.destination);\n      osc.frequency.value = 880; osc.type = 'sine';\n      gain.gain.setValueAtTime(0.1, audioCtx.currentTime);\n      gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.3);\n      osc.start(); osc.stop(audioCtx.currentTime + 0.3);\n    } catch (e) {}\n  }\n\n  function openPanel() {\n    panel.style.display = 'flex';\n    overlay.style.display = 'block';\n    morphToClose();\n    requestAnimationFrame(function() {\n      panel.classList.add('rc-open');\n      overlay.classList.add('rc-open');\n    });\n    bubble.setAttribute('aria-expanded', 'true');\n    isOpen = true;\n    clearUnread();\n    setStatus(hasSession ? 'connected' : 'online');\n    try {\n      if (window.RolacaseTrack && typeof window.RolacaseTrack.track === 'function') {\n        window.RolacaseTrack.track('chat_open');\n      }\n    } catch (_) {}\n\n    var saved = loadSession();\n    if (saved.sessionId && saved.name) {\n      sessionId = saved.sessionId;\n      hasSession = true;\n\n      var formView = document.getElementById('rc-form-view');\n      var chatView = document.getElementById('rc-chat-view');\n      if (formView) formView.style.display = 'none';\n      if (chatView) chatView.style.display = 'flex';\n      setCallBtnVisible(true);\n\n      if (messagesEl && messagesEl.children.length === 0) {\n        addMsg('Welcome back, ' + saved.name + '.', 'in', null, 200);\n        loadHistory();\n      }\n      connectWS();\n      var chatMsgInput = document.getElementById('rc-message-chat');\n      if (chatMsgInput) setTimeout(function() { chatMsgInput.focus(); }, 300);\n    } else {\n      var formViewElse = document.getElementById('rc-form-view');\n      var chatViewElse = document.getElementById('rc-chat-view');\n      if (formViewElse) formViewElse.style.display = 'block';\n      if (chatViewElse) chatViewElse.style.display = 'none';\n      setCallBtnVisible(false);\n\n      fieldsEl.classList.remove('rc-hidden');\n      if (sendBtnForm) sendBtnForm.disabled = true;\n      msgInput.value = '';\n      msgInput.disabled = false;\n\n      if (saved.name) nameInput.value = saved.name;\n      if (saved.phone) phoneInput.value = saved.phone;\n\n      updateValidation();\n\n      setTimeout(function() {\n        if (saved.name && saved.phone) msgInput.focus();\n        else nameInput.focus();\n      }, 800);\n    }\n  }\n\n  function closePanel() {\n    panel.classList.remove('rc-open');\n    overlay.classList.remove('rc-open');\n    bubble.setAttribute('aria-expanded', 'false');\n    morphToBubble();\n    isOpen = false;\n    setTimeout(function() {\n      panel.style.display = 'none';\n      overlay.style.display = 'none';\n    }, 250);\n  }\n\n  function loadHistory() {\n    fetch(API_BASE + '/api/v1/admin/chat/sessions/' + sessionId, {\n      headers: { 'X-API-Key': API_KEY }\n    })\n    .then(function(r) { return r.json(); })\n    .then(function(data) {\n      var msgs = (data.session && data.session.messages) || data.messages || [];\n      var skippedOptimistic = false;\n      msgs.forEach(function(m) {\n        var dir = m.direction === 'inbound' ? 'out' : 'in';\n        var meta = m.created_at ? new Date(m.created_at).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' }) : '';\n        if (!skippedOptimistic && optimisticFirstMessageBody && dir === 'out' && m.body === optimisticFirstMessageBody) {\n          skippedOptimistic = true;\n          return;\n        }\n        if (m.attachment_url) {\n          addMsgWithAttachment(m.body, { data: m.attachment_url, filename: m.attachment_name, content_type: m.attachment_type }, dir, meta);\n        } else if (m.body) {\n          addMsg(m.body, dir, meta, 0);\n        }\n      });\n    })\n    .catch(function() {});\n  }\n\n  function validate(firstTime) {\n    var ok = true;\n    [nameInput, phoneInput, msgInput].forEach(function(el) { el.classList.remove('rc-error'); });\n    if (firstTime) {\n      if (!nameInput.value.trim()) { nameInput.classList.add('rc-error'); ok = false; }\n      var digits = phoneInput.value.replace(/\\D/g, '');\n      if (digits.length < 8 || digits.length > 15) { phoneInput.classList.add('rc-error'); ok = false; }\n    }\n    if (!msgInput.value.trim() && !pendingFile) { msgInput.classList.add('rc-error'); ok = false; }\n    return ok;\n  }\n\n  form.addEventListener('submit', function(e) {\n    e.preventDefault();\n    if (!hasSession) {\n      handleFirstMessage();\n    } else {\n      handleFollowUpMessage();\n    }\n  });\n\n  function handleFirstMessage() {\n    if (!validate(true)) return;\n\n    var name = nameInput.value.trim();\n    var phone = phoneInput.value.trim();\n    var email = '';\n    var message = msgInput.value.trim();\n\n    fieldsEl.classList.add('rc-hidden');\n    if (sendBtnForm) { sendBtnForm.disabled = true; sendBtnForm.textContent = 'Sending...'; }\n    var welcomeBubble = document.querySelector('.rc-welcome-bubble');\n    if (welcomeBubble) welcomeBubble.textContent = 'Sending your message...';\n\n    var payload = { name: name, phone: phone, message: message, store: STORE };\n    if (email) payload.email = email;\n\n    try {\n      var params = new URLSearchParams(window.location.search);\n      if (params.get('utm_source'))   payload.utm_source   = params.get('utm_source');\n      if (params.get('utm_medium'))   payload.utm_medium   = params.get('utm_medium');\n      if (params.get('utm_campaign')) payload.utm_campaign = params.get('utm_campaign');\n      if (document.referrer)          payload.referrer     = document.referrer;\n      payload.landing_page = window.location.href;\n    } catch (e) {}\n\n    try {\n      var hp = document.querySelector('input[name=\"rc-website\"]');\n      if (hp && hp.value) payload.website = hp.value;\n    } catch (e) {}\n\n    fetch(API_BASE + '/api/v1/chat/messages', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },\n      body: JSON.stringify(payload)\n    })\n    .then(function(res) {\n      if (!res.ok) throw new Error('Failed');\n      return res.json();\n    })\n    .then(function(data) {\n      hideTyping();\n      sessionId = data.session_id;\n      hasSession = true;\n      saveSession({ sessionId: sessionId, name: name, phone: phone, email: email });\n\n      try {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: 'webchat_start',\n          chat_session_id: sessionId,\n          store: STORE,\n          user_data: {\n            email_address: email || undefined,\n            phone_number: phone || undefined,\n            address: name ? { first_name: name } : undefined\n          }\n        });\n      } catch (err) {}\n\n      var formView = document.getElementById('rc-form-view');\n      var chatView = document.getElementById('rc-chat-view');\n      if (formView) formView.style.display = 'none';\n      if (chatView) chatView.style.display = 'flex';\n      setCallBtnVisible(true);\n\n      optimisticFirstMessageBody = message;\n      addMsg(message, 'out', timeNow(), 0);\n\n      addMsg(\"Thanks \" + name + \"! We received your message. Our team will text you shortly.\", 'in', null, 200);\n\n      var chatMsgInput = document.getElementById('rc-message-chat');\n      if (chatMsgInput) {\n        chatMsgInput.disabled = false;\n        setTimeout(function() { chatMsgInput.focus(); }, 300);\n      }\n\n      // Connect for live admin replies. Do NOT fire the silence timer on the\n      // first submit \u2014 the immediate \"Thanks {name}! We received your message\"\n      // bubble already reassures the visitor; a second \"Thanks for your\n      // patience\" bubble 30s later reads as a duplicate. Silence-timer is\n      // reserved for follow-up messages where the visitor has been waiting\n      // after a real exchange.\n      connectWS();\n    })\n    .catch(function() {\n      hideTyping();\n      fieldsEl.classList.remove('rc-hidden');\n      if (sendBtnForm) sendBtnForm.disabled = false;\n      var welcomeBubbleErr = document.querySelector('.rc-welcome-bubble');\n      if (welcomeBubbleErr) welcomeBubbleErr.textContent = 'Something went wrong. Please call us at ' + PHONE_FALLBACK + ' instead.';\n    });\n  }\n\n  function handleFollowUpMessage() {\n    if (!validate(false)) return;\n\n    var message = msgInput.value.trim();\n    msgInput.value = '';\n    msgInput.style.height = 'auto';\n\n    if (pendingFile) {\n      fileToBase64(pendingFile).then(function(b64) {\n        addMsgWithAttachment(message, { data: b64, filename: pendingFile.name, content_type: pendingFile.type }, 'out', 'Sent');\n        sendWS('message', message, { filename: pendingFile.name, content_type: pendingFile.type, data: b64, size: pendingFile.size });\n        pendingFile = null;\n        fileInput.value = '';\n        filePreview.style.display = 'none';\n        startSilenceTimer();\n      });\n    } else {\n      addMsg(message, 'out', 'Sent', 0);\n      sendWS('message', message);\n      startSilenceTimer();\n    }\n\n    try {\n      if (window.RolacaseTrack && typeof window.RolacaseTrack.track === 'function') {\n        window.RolacaseTrack.track('chat_message_sent', { search_query: 'follow_up' });\n      }\n    } catch (_) {}\n\n    msgInput.focus();\n  }\n\n  var myTypingTimeout = null;\n  msgInput.addEventListener('input', function() {\n    this.style.height = 'auto';\n    this.style.height = Math.min(this.scrollHeight, 80) + 'px';\n\n    if (hasSession && socket && socket.readyState === 1) {\n      clearTimeout(myTypingTimeout);\n      sendWS('typing', '');\n      myTypingTimeout = setTimeout(function() {}, 3000);\n    }\n  });\n\n  var greetingEl = document.getElementById('rc-greeting');\n  var greetingCloseBtn = document.getElementById('rc-greeting-close');\n  var greetingVisible = false;\n  var greetingHideTimer = null;\n\n  function showGreeting() {\n    if (greetingVisible || isOpen) return;\n    greetingVisible = true;\n    greetingEl.style.display = 'block';\n    greetingEl.style.animation = 'rcGreetingIn 0.4s cubic-bezier(0.34,1.56,0.64,1) forwards';\n  }\n\n  function hideGreeting() {\n    if (!greetingVisible) return;\n    greetingVisible = false;\n    greetingEl.style.animation = 'rcGreetingOut 0.25s ease forwards';\n    setTimeout(function() { greetingEl.style.display = 'none'; }, 250);\n  }\n\n  if (!sessionStorage.getItem(GREETING_KEY)) {\n    setTimeout(function() {\n      showGreeting();\n      sessionStorage.setItem(GREETING_KEY, '1');\n      greetingHideTimer = setTimeout(hideGreeting, 8000);\n    }, 4000);\n  }\n\n  bubble.addEventListener('mouseenter', function() {\n    if (!isOpen) {\n      clearTimeout(greetingHideTimer);\n      showGreeting();\n    }\n  });\n  bubble.addEventListener('mouseleave', function() {\n    greetingHideTimer = setTimeout(hideGreeting, 2000);\n  });\n  greetingEl.addEventListener('mouseenter', function() { clearTimeout(greetingHideTimer); });\n  greetingEl.addEventListener('mouseleave', function() { greetingHideTimer = setTimeout(hideGreeting, 1500); });\n\n  greetingCloseBtn.addEventListener('click', function(e) { e.stopPropagation(); hideGreeting(); });\n  greetingEl.addEventListener('click', function() { hideGreeting(); openPanel(); });\n\n  var callBtn = document.getElementById('rc-call-btn');\n  if (callBtn) callBtn.addEventListener('click', onCallBtnClick);\n\n  var checkName = document.getElementById('rc-check-name');\n  var checkPhone = document.getElementById('rc-check-phone');\n  var sendBtnForm = document.getElementById('rc-send');\n\n  function updateValidation() {\n    var nameOk = nameInput.value.trim().length > 0;\n    var phoneOk = phoneInput.value.replace(/\\D/g, '').length >= 8;\n    var msgOk = msgInput.value.trim().length > 0;\n    if (checkName) checkName.className = 'rc-check' + (nameOk ? ' rc-valid' : '');\n    if (checkPhone) checkPhone.className = 'rc-check' + (phoneOk ? ' rc-valid' : '');\n    if (sendBtnForm) sendBtnForm.disabled = !(nameOk && phoneOk && msgOk);\n  }\n\n  if (nameInput) nameInput.addEventListener('input', updateValidation);\n  if (phoneInput) phoneInput.addEventListener('input', updateValidation);\n  if (msgInput) msgInput.addEventListener('input', updateValidation);\n\n  function setBubbleContent(iconNode, labelText) {\n    while (bubble.firstChild) bubble.removeChild(bubble.firstChild);\n    bubble.appendChild(iconNode);\n    if (labelText) {\n      var span = document.createElement('span');\n      span.className = 'rc-bubble__label';\n      span.textContent = labelText;\n      bubble.appendChild(span);\n    }\n    var unread = document.getElementById('rc-unread-badge');\n    if (!unread) {\n      unread = document.createElement('span');\n      unread.id = 'rc-unread-badge';\n      unread.className = 'rc-badge';\n      unread.style.display = 'none';\n      unread.textContent = '0';\n    }\n    bubble.appendChild(unread);\n    unreadBadge = unread;\n  }\n\n  function morphToClose() {\n    setBubbleContent(buildCloseIcon(), '');\n    bubble.classList.add('rc-close-mode');\n    bubble.style.display = 'flex';\n  }\n\n  function morphToBubble() {\n    setBubbleContent(buildBubbleIcon(), 'Text us');\n    bubble.classList.remove('rc-close-mode');\n  }\n\n  var closeXBtn = document.getElementById('rc-close-x');\n\n  bubble.addEventListener('click', function() {\n    hideGreeting();\n    if (isOpen) { closePanel(); } else { openPanel(); }\n  });\n  if (closeXBtn) closeXBtn.addEventListener('click', closePanel);\n  overlay.addEventListener('click', closePanel);\n  document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && isOpen) closePanel(); });\n\n  document.addEventListener('visibilitychange', function() {\n    if (!document.hidden && sessionId && (!socket || socket.readyState > 1)) {\n      connectWS();\n    }\n  });\n\n  var sendChatBtn = document.getElementById('rc-send-chat');\n  var chatMsgInputEl = document.getElementById('rc-message-chat');\n\n  function sendChatMessage() {\n    if (!chatMsgInputEl) return;\n    var message = chatMsgInputEl.value.trim();\n    if (!message && !pendingFile) return;\n    chatMsgInputEl.value = '';\n    chatMsgInputEl.style.height = 'auto';\n    if (pendingFile) {\n      fileToBase64(pendingFile).then(function(b64) {\n        addMsgWithAttachment(message, { data: b64, filename: pendingFile.name, content_type: pendingFile.type }, 'out', timeNow());\n        sendWS('message', message, { filename: pendingFile.name, content_type: pendingFile.type, data: b64, size: pendingFile.size });\n        pendingFile = null;\n        fileInput.value = '';\n        filePreview.style.display = 'none';\n        startSilenceTimer();\n      });\n    } else {\n      addMsg(message, 'out', timeNow(), 0);\n      sendWS('message', message);\n      startSilenceTimer();\n    }\n    try {\n      if (window.RolacaseTrack && typeof window.RolacaseTrack.track === 'function') {\n        window.RolacaseTrack.track('chat_message_sent', { search_query: 'in_session' });\n      }\n    } catch (_) {}\n    chatMsgInputEl.focus();\n  }\n\n  if (sendChatBtn) sendChatBtn.addEventListener('click', sendChatMessage);\n  if (chatMsgInputEl) {\n    chatMsgInputEl.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendChatMessage(); }\n    });\n    chatMsgInputEl.addEventListener('input', function() {\n      this.style.height = 'auto';\n      this.style.height = Math.min(this.scrollHeight, 80) + 'px';\n      if (hasSession && socket && socket.readyState === 1) {\n        clearTimeout(myTypingTimeout);\n        sendWS('typing', '');\n        myTypingTimeout = setTimeout(function() {}, 3000);\n      }\n    });\n  }\n\n  var saved = loadSession();\n  if (saved.sessionId) {\n    sessionId = saved.sessionId;\n    hasSession = true;\n  }\n})();\n"],
  "mappings": "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",
  "names": ["saved"]
}
