(function () { var s = document.currentScript; var cfg = { btnBg: s.getAttribute("data-btn-color") || "#1a2a3a", btnText: s.getAttribute("data-btn-text-color") || "#ffffff", btnLabel: s.getAttribute("data-btn-label") || "Get Instant Estimate", iframeSrc: s.getAttribute("data-iframe-src") || "https://google.com", }; // ── Styles ── var css = document.createElement("style"); css.textContent = "#rw-dock-btn{" + "position:fixed;right:0;top:50%;transform:translateY(-50%);z-index:99999;" + "writing-mode:vertical-rl;text-orientation:mixed;" + "background:" + cfg.btnBg + ";color:" + cfg.btnText + ";" + "padding:18px 13px;font-size:14px;font-weight:600;" + "font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;" + "letter-spacing:1px;cursor:pointer;border-radius:8px 0 0 8px;" + "box-shadow:-2px 0 12px rgba(0,0,0,.25);transition:filter .2s;" + "border:none;outline:none" + "}" + "#rw-dock-btn:hover{filter:brightness(1.15)}" + "#rw-overlay{" + "position:fixed;inset:0;z-index:100000;display:none" + "}" + "#rw-overlay.rw-open{display:flex}" + "#rw-backdrop{" + "position:absolute;inset:0;background:rgba(0,0,0,.5);" + "backdrop-filter:blur(3px);opacity:0;transition:opacity .4s ease" + "}" + "#rw-overlay.rw-open #rw-backdrop{opacity:1}" + "#rw-panel{" + "position:absolute;top:0;right:0;width:100%;height:100%;" + "background:#fff;display:flex;flex-direction:column;" + "transform:translateX(100%);" + "transition:transform .4s cubic-bezier(.22,1,.36,1)" + "}" + "#rw-overlay.rw-open #rw-panel{transform:translateX(0)}" + "#rw-header{" + "display:flex;justify-content:flex-end;padding:14px 20px;" + "border-bottom:1px solid #eee;flex-shrink:0" + "}" + "#rw-close{" + "width:36px;height:36px;border-radius:50%;border:1px solid #ddd;" + "background:#fff;color:#666;font-size:22px;cursor:pointer;" + "display:flex;align-items:center;justify-content:center;" + "transition:all .2s;line-height:1;font-family:inherit" + "}" + "#rw-close:hover{background:#f5f5f5;color:#333}" + "#rw-iframe{flex:1;width:100%;border:none}"; document.head.appendChild(css); // ── DOM ── var btn = document.createElement("button"); btn.id = "rw-dock-btn"; btn.textContent = cfg.btnLabel; document.body.appendChild(btn); var overlay = document.createElement("div"); overlay.id = "rw-overlay"; overlay.innerHTML = '
' + '
' + '
' + '' + "
" + '' + "
"; document.body.appendChild(overlay); // ── Refs ── var backdrop = document.getElementById("rw-backdrop"); var panel = document.getElementById("rw-panel"); var closeBtn = document.getElementById("rw-close"); var iframe = document.getElementById("rw-iframe"); // ── Open ── function open() { overlay.style.display = "flex"; // Force reflow so transition fires from translateX(100%) void panel.offsetWidth; overlay.classList.add("rw-open"); iframe.src = cfg.iframeSrc; document.body.style.overflow = "hidden"; btn.style.display = "none"; } // ── Close ── function close() { overlay.classList.remove("rw-open"); // Wait for the slide-out transition to finish panel.addEventListener( "transitionend", function handler() { panel.removeEventListener("transitionend", handler); overlay.style.display = "none"; iframe.src = "about:blank"; document.body.style.overflow = ""; btn.style.display = ""; } ); } // ── Events ── btn.addEventListener("click", open); closeBtn.addEventListener("click", close); backdrop.addEventListener("click", close); document.addEventListener("keydown", function (e) { if (e.key === "Escape" && overlay.classList.contains("rw-open")) close(); }); })();