/* 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
};
ליווי ניהול נכס
אחרי שתעודת הבעלות עוברת - מתחיל הפער של ניהול מרחוק. אנחנו מתאימים לכם מנהל נכס מקומי שנבדק, עוברים על ההסכם, ונשארים נקודת פיקוח עצמאית.
מה זה השירות
Cyprus Gate אינו חברת ניהול נכסים. אנחנו שכבת תיאום: מגדירים איתכם את הבריף (השכרה קצרה/ארוכה, תחזוקה, רישוי), מציגים מועמדים שנבדקו, סוקרים את תנאי ההסכם, ומלווים אם יש בעיית שירות. בלי עמלת הפניה מחברות ניהול.
למי זה מתאים
בעלים בישראל עם דירה או וילה בקפריסין להשקעה
מי שסיים רכישה ורוצה להקים ניהול נכון מהיום הראשון
בעלים לא מרוצים מהמנהל הנוכחי ורוצים מעבר מסודר
תושבים עונתיים שמשכירים כשהם בישראל
איך זה עובד
סקירת הנכס, הייעוד והתחייבויות קיימות
זיהוי וסינון מנהלים במחוז הרלוונטי
השוואת מועמדים וסקירת הסכם לפני חתימה
ליווי אונבורדינג וזמינות לפיקוח בהמשך
מה אתם מקבלים
מנהל שמתאים לבריף
לא בחירה לפי מודעה בגוגל - לפי רישוי, המלצות והיקף שירות.
שקיפות בעמלות
עוברים על מבנה התעריפים לפני שחותמים, כדי שהתשואה לא תישחק בהפתעות.
עצמאות לאורך כל הדרך
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);
})();