/* Cyprus Gate: static stand-in for the Voiceflow launcher.
*
* Roughly 600 bytes, and it replaces 1.9 MB for every visitor who never
* opens the chat. Clicking it loads the real widget, which then removes this.
*
* Colours match the site: navy #001438, Geist body font.
*/
#cg-chat-launcher {
position: fixed;
right: 20px;
bottom: 20px;
z-index: 9998;
display: flex;
align-items: center;
gap: .5rem;
padding: 12px 20px;
border-radius: 999px;
background: #001438;
color: #fff;
font: 15px/1 Geist, system-ui, -apple-system, sans-serif;
cursor: pointer;
box-shadow: 0 4px 14px rgba(0, 0, 0, .2);
transition: background .15s ease, transform .15s ease;
user-select: none;
white-space: nowrap; /* the pill must never break onto two lines */
}
#cg-chat-launcher:hover,
#cg-chat-launcher:focus-visible {
background: #0a2050;
transform: translateY(-1px);
outline: none;
}
#cg-chat-launcher:focus-visible {
box-shadow: 0 0 0 3px rgba(184, 129, 15, .55);
}
/* While the bundle downloads on first click. */
#cg-chat-launcher[data-loading] {
opacity: .6;
pointer-events: none;
}
.cg-chat-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #22c55e;
flex: none;
}
/* Keep clear of the cookie banner and of narrow screens. */
@media (max-width: 600px) {
#cg-chat-launcher {
right: 12px;
bottom: 12px;
padding: 10px 16px;
font-size: 14px;
}
}
@media (prefers-reduced-motion: reduce) {
#cg-chat-launcher { transition: none; }
}
jQuery(function ($) {
const FORM_SELECTOR = 'form#wppb-register-user';
function ensureMsgBox($form) {
let $box = $form.find('.pb-ajax-msg');
if (!$box.length) {
$box = $('
');
$form.prepend($box);
}
return $box;
}
// ? Stop popup from closing on button click / submit
$(document).on('click', FORM_SELECTOR + ' button, ' + FORM_SELECTOR + ' input[type="submit"]', function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
});
// ? Stop any "close on submit" handlers (Elementor / modal libs)
$(document).on('submit', FORM_SELECTOR, function (e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
const $form = $(this);
const $msg = ensureMsgBox($form);
if (typeof PB_REG_AJAX === 'undefined' || !PB_REG_AJAX.ajaxurl) {
$msg.text('PB_REG_AJAX is missing. The PHP snippet is not loaded on this page.');
return;
}
$msg.css('border-color', '#ddd').text('Processing...');
let payload = $form.serializeArray();
payload.push({ name: 'action', value: 'pb_register_ajax' });
payload.push({ name: '_ajax_nonce', value: PB_REG_AJAX.nonce });
$.ajax({
url: PB_REG_AJAX.ajaxurl,
method: 'POST',
data: $.param(payload),
dataType: 'json',
timeout: 20000,
success: function (res) {
if (res && res.success) {
$msg.css('border-color', '#cfc').text(res.data?.message || 'Please check your email to confirm registration.');
// ? keep popup open; do NOT reload/redirect here
} else {
$msg.css('border-color', '#fcc').text(res.data?.message || 'Registration failed.');
}
},
error: function (xhr, status) {
let info = 'AJAX error: ' + status;
if (xhr && xhr.responseText) info += ' | ' + xhr.responseText.substring(0, 200);
$msg.css('border-color', '#fcc').text(info);
}
});
return false;
});
});
/**
* Force PB_REG_AJAX to exist everywhere
* Fixes: "PB_REG_AJAX is missing"
*/
window.PB_REG_AJAX = window.PB_REG_AJAX || {
ajaxurl: "/wp-admin/admin-ajax.php",
nonce: "bypass-nonce" // not used server-side
};
ניתוח צרכים וסטטוס לפני החיפוש
במודל העמלות החיפוש מתחיל בנכס. במודל העצמאי החיפוש מתחיל בכם. ניתוח הצרכים והסטטוס ממפה מעמד רגולטורי, מסלול תושבות, מבנה מימון ומטרות אישיות לפני שמראים דירה אחת. לישראלים: זה השלב שבו קובעים אם אתם בכלל צריכים נכס חדש לתושבות קבע, מה התקציב האמיתי כולל עלויות סגירה, ואיזה מחוז בכלל מתאים.
מה ממפים לפני הסיור
מעמד רגולטורי. ישראלים כמדינה שלישית צריכים בדרך כלל אישור מועצת השרים (Cap. 109) לרכישת מקרקעין.
מטרות תושבות ומס. תושבות קבע דרך השקעה דורשת נכס חדש מסף מסוים. תושבות מס (183 או 60 ימים) דורשת התאמת מגורים אחרת.
מימון. מזומן מול משכנתא מקומית (לרוב LTV של כ-50% עד 60% לזרים). אי אפשר להעביר בעלות לפני אישור הרכישה כשנדרש.
עדיפויות אישיות. מחוז, סוג נכס, תשואה מול מגורים, לוח זמנים, נכונות לקנייה על-הנייר.
בלי המיפוי הזה, סיור הופך לסיור מכירות של מי שפגש אתכם בשדה התעופה.
איך Cyprus Gate מריצה את השלב
זה שיחה מובנית, לא טופס. התוצר הוא בריף כתוב: מחוזות רלוונטיים, טווחי מחיר, סוגי נכס שכן ולא, וקווים אדומים (למשל בלי תעודת בעלות, בלי שעבוד יזם לא מטופל). כשצריך משפט, מס או הגירה, מחברים אתכם לאנשי מקצוע בלתי תלויים שאתם שוכרים ישירות.
שאלות נפוצות
כמה זמן לוקח ניתוח הצרכים?
בדרך כלל שיחה ממוקדת ואחר כך סיכום כתוב. האורך תלוי במורכבות (תושבות, מימון, כמה מדינות מעורבות).
האם אפשר לקבל משכנתא כישראלים?
בנקים קפריסאים מציעים לזרים משכנתאות, לרוב ב-LTV נמוך יותר ממה שמקובל בישראל או בבריטניה. נדרשת אסמכתת הכנסה. בדקו תנאים עדכניים מול הבנק.
למה לא להתחיל מסיור?
כי בלי בריף אתם רואים את מה שמוכרים לכם, לא את מה שמתאים לכם. הסיור שווה כשהוא מאמת רשימה קצרה, לא כשהוא מייצר אותה מאפס.
Cyprus Gate מייצג רק את הקונה. אין לנו מלאי יזמים, אין עמלת מוכר, ואין עמלת הפניה מבעלי מקצוע שאנחנו מחברים אליכם. התשלום מגיע מכם, לפי היקף העבודה שסוכם מראש בכתב, לפני שמתחילים.
/* Cyprus Gate: load the Voiceflow widget on demand, not on every page view.
*
* Replaces the body of the existing "Simple Custom CSS and JS" snippet that
* contains the Voiceflow widget-next bundle URL.
*
* Before: 713 KB transferred and 1.9 MB decoded on every page, for every
* visitor, whether or not anyone opens the chat.
* After: nothing is fetched from Voiceflow until someone clicks.
*
* The three existing entry points are preserved:
* - the floating launcher (#cg-chat-launcher, see 2- and 3- in this folder)
* - the #talktoagent button
* - empty buttons and placeholder links, which send the page title
*/
(function () {
var VF_PROJECT = '69cabed422b2cc69776855ae';
var loading = null;
// Fetches and initialises the widget once. Returns a promise that settles
// when chat.open() is actually callable.
function loadVoiceflow() {
if (loading) return loading;
loading = new Promise(function (resolve, reject) {
var v = document.createElement('script');
v.type = 'text/javascript';
v.async = true;
v.onload = function () {
window.voiceflow.chat.load({
verify: { projectID: VF_PROJECT },
url: 'https://general-runtime.voiceflow.com',
voice: { url: 'https://runtime-api.voiceflow.com' },
launch: {
event: {
type: 'launch',
payload: {
user_name: (window.currentUser && window.currentUser.name)
? window.currentUser.name : '',
user_email: (window.currentUser && window.currentUser.email)
? window.currentUser.email : ''
}
}
}
});
// chat.load() settles asynchronously, so poll until open() exists
// rather than assuming it is ready the instant the script runs.
var tries = 0;
(function ready() {
if (window.voiceflow && window.voiceflow.chat &&
typeof window.voiceflow.chat.open === 'function') {
return resolve();
}
if (++tries > 100) {
return reject(new Error('Voiceflow did not initialise'));
}
setTimeout(ready, 100);
})();
};
v.onerror = function () {
loading = null; // allow a retry on the next click
reject(new Error('Voiceflow bundle failed to load'));
};
v.src = 'https://cdn.voiceflow.com/widget-next/bundle.mjs';
document.head.appendChild(v);
});
return loading;
}
// Opens the chat, loading the bundle first if this is the first click.
// `message` is sent into the conversation once it is open.
function openChat(message) {
var launcher = document.getElementById('cg-chat-launcher');
if (launcher) launcher.setAttribute('data-loading', 'true');
loadVoiceflow().then(function () {
if (launcher) launcher.remove();
window.voiceflow.chat.open();
if (message) {
setTimeout(function () {
window.voiceflow.chat.interact({ type: 'text', payload: message });
}, 1500);
}
}).catch(function () {
// Leave the launcher in place so the visitor can try again.
if (launcher) launcher.removeAttribute('data-loading');
});
}
window.cgOpenChat = openChat;
document.addEventListener('click', function (e) {
if (e.target.closest('#cg-chat-launcher') || e.target.closest('#talktoagent')) {
e.preventDefault();
e.stopPropagation();
return openChat();
}
// Same selector as the old third snippet: empty buttons and placeholder
// links open the chat and seed it with the page title.
var el = e.target.closest(
'button:not([type="submit"]):not([id]):not([class*="cky"]), ' +
'a[href="#"], a:not([href]), a[href=""]'
);
if (el && !el.closest('form')) {
e.preventDefault();
openChat(document.title);
}
}, true);
})();