(function () {
'use strict';
var PRIVACY_URL = 'https://sprut61.ru/политика-конфиденциальности/';
var CONSENT_URL = 'https://sprut61.ru/согласие-на-обработку-персональных-д/';
var OFFER_URL = 'https://sprut61.ru/оферта/';
var BOOKING_URL = 'https://sprut61.ru/besplatnaya-diagnostika/';
var ENDPOINT = '/wp-json/sprut/v1/ceiling-lead';
var METRIKA_ID = 108703490;
var questions = [
{
text: 'Насколько вы уверены в своих силах, когда речь заходит о повышении цен на ваши услуги?',
options: [
{ score: 1, text: 'Совсем не уверен(а), боюсь потерять всех клиентов' },
{ score: 2, text: 'Колеблюсь, думаю об этом, но не решаюсь' },
{ score: 3, text: 'Уверенно повышаю цены по мере роста своей экспертизы' },
],
},
{
text: 'Сколько времени в неделю у вас уходит на создание контента для соцсетей (посты, сторис, видео)?',
options: [
{ score: 1, text: 'Более 5 часов. Это съедает почти весь свободный день' },
{ score: 2, text: 'Примерно 2–4 часа. Успеваю, но это ощутимая нагрузка' },
{ score: 3, text: 'До 2 часов. У меня есть система/помощник, и это не проблема' },
],
},
{
text: 'Как вы себя чувствуете в конце типичной рабочей недели?',
options: [
{ score: 1, text: 'Полностью выжатый(ая) лимон, нет сил даже на личную жизнь' },
{ score: 2, text: 'Усталый(ая), но manageable. Понимаю, что так работать нельзя' },
{ score: 3, text: 'Энергичный(ая), в ресурсе. Работа меня питает' },
],
},
{
text: 'Насколько стабилен ваш поток клиентов?',
options: [
{ score: 1, text: 'Полный хаос. Месяц завален работой, следующий — пустой' },
{
score: 2,
text: 'Есть постоянные клиенты, но постоянно нужно искать новых, чтобы закрывать дыры',
},
{ score: 3, text: 'Стабильный поток, есть очередь. Я практически не ищу клиентов' },
],
},
{
text: "Что для вас значит «продвижение своих услуг»?",
options: [
{ score: 1, text: "Это что-то неэтичное, «прямые продажи», мне это неприятно" },
{ score: 2, text: 'Нужно делать, но я не знаю как. Делаю что-то от случая к случаю' },
{ score: 3, text: 'Это системная работа по донесению ценности, у меня есть чёткий план' },
],
},
];
var results = {
burned: {
min: 5,
max: 8,
title: 'Ловушка выжатого эксперта',
body:
'Вы находитесь в самой опасной зоне. Ваша высокая экспертность и желание помочь всем приводят к тотальному выгоранию и финансовому тупику. Вы работаете больше всех, но зарабатываете меньше, чем могли бы. Система «Спрут» была создана специально для психологов в вашей ситуации — чтобы взять на себя 80% рутинной работы по контенту и освободить ваше время и силы для клиентов и достойной оплаты вашего труда.',
next:
'Запишитесь на экспресс-сессию «Антивыгорание». За 20 минут мы определим 3 задачи, которые нужно автоматизировать в первую очередь, чтобы вы вздохнули свободнее уже на этой неделе.',
},
freelancer: {
min: 9,
max: 12,
title: 'Ловушка фрилансера',
body:
'Вы хороший специалист, но застряли в ситуации, когда обмениваете своё время на деньги. Ваш доход напрямую зависит от количества отработанных часов, и есть чёткий потолок, который вы не можете преодолеть. Вы чувствуете, что можете больше, но не знаете, как «масштабироваться», не работая 24/7. Проблема не в вас, а в отсутствии системы, которая будет работать на вас, пока вы спите.',
next:
'Запишитесь на стратегическую сессию «Точка роста». Мы проанализируем, куда «утекают» деньги в вашей практике и как с помощью автоматизации контента создать дополнительный пассивный или активный доход.',
},
breakthrough: {
min: 13,
max: 15,
title: 'На пороге прорыва',
body:
'Поздравляю! У вас уже есть много системных элементов, и вы чувствуете себя уверенно. Но вы чувствуете и «стеклянный потолок», который не можете пробить. Вы понимаете, что для следующего рывка в доходах нужна не просто работа, а умные технологии. Вам нужно не выживать, а расти. И здесь автоматизация — не спасение, а ускоритель.',
next:
'Запишитесь на сессию «Ускоритель роста». Мы не будем решать старые проблемы — мы спроектируем вашу будущую систему доходов на 6–12 месяцев вперёд и посмотрим, как «Спрут» может стать её основой.',
},
};
var CTA_HINT =
'Это не продажа. Это 20 минут моего времени, чтобы помочь вам увидеть свою ситуацию со стороны и наметить конкретный план действий. Если мы поймём, что вам нужна моя система — отлично. Если нет — вы всё равно уйдёте с чётким пониманием того, куда двигаться дальше.';
var state = {
index: 0,
scores: [],
total: 0,
resultKey: '',
advancing: false,
};
function esc(s) {
var d = document.createElement('div');
d.textContent = s == null ? '' : String(s);
return d.innerHTML;
}
function goal(name) {
try {
if (typeof ym === 'function') ym(METRIKA_ID, 'reachGoal', name);
} catch (e) {}
}
function $(sel, root) {
return (root || document).querySelector(sel);
}
function showScreen(name) {
var root = $('#scq-root');
if (!root) return;
root.querySelectorAll('.scq-screen').forEach(function (el) {
el.classList.toggle('is-active', el.getAttribute('data-screen') === name);
});
}
function getResult(total) {
if (total <= 8) return { key: 'burned', data: results.burned };
if (total <= 12) return { key: 'freelancer', data: results.freelancer };
return { key: 'breakthrough', data: results.breakthrough };
}
function renderQuestion() {
var q = questions[state.index];
var wrap = $('#scq-question');
var fill = $('#scq-progress-fill');
var label = $('#scq-progress-label');
var pctLabel = $('#scq-progress-pct');
if (!wrap || !q) return;
var pct = (state.index / questions.length) * 100;
if (fill) fill.style.width = pct + '%';
if (label) label.textContent = 'Вопрос ' + (state.index + 1) + ' из ' + questions.length;
if (pctLabel) pctLabel.textContent = Math.round(pct) + '%';
var opts = q.options
.map(function (opt, i) {
return (
''
);
})
.join('');
wrap.innerHTML =
'
' +
'
' +
esc(q.text) +
'
' +
'
' +
opts +
'
';
}
function selectOption(optionIndex) {
if (state.advancing) return;
var q = questions[state.index];
if (!q || !q.options[optionIndex]) return;
var buttons = document.querySelectorAll('#scq-question .scq-option');
buttons.forEach(function (btn, i) {
btn.classList.toggle('is-selected', i === optionIndex);
});
state.advancing = true;
state.scores[state.index] = q.options[optionIndex].score;
setTimeout(function () {
state.index += 1;
if (state.index < questions.length) {
state.advancing = false;
renderQuestion();
} else {
runLoading();
}
}, 320);
}
function runLoading() {
showScreen('loading');
var fill = $('#scq-analysis-fill');
var label = $('#scq-analysis-label');
var steps = [
{ p: 25, t: 'Считаю ваши ответы…', d: 280 },
{ p: 52, t: 'Ищу скрытую ловушку…', d: 560 },
{ p: 78, t: 'Формирую рекомендацию…', d: 900 },
{ p: 100, t: 'Готово', d: 1200 },
];
if (fill) fill.style.width = '0%';
var t = 0;
steps.forEach(function (s) {
t += s.d;
setTimeout(function () {
if (fill) fill.style.width = s.p + '%';
if (label) label.textContent = s.t;
}, t);
});
setTimeout(showResult, t + 380);
}
function showResult() {
state.total = state.scores.reduce(function (a, b) {
return a + (b || 0);
}, 0);
var packed = getResult(state.total);
state.resultKey = packed.key;
var data = packed.data;
var fill = $('#scq-progress-fill');
if (fill) fill.style.width = '100%';
var box = $('#scq-result-content');
if (!box) return;
box.innerHTML =
'
' +
'
' +
'
Ваш результат
' +
'
' +
esc(data.title) +
'
' +
'
Сумма баллов: ' +
state.total +
' из 15
' +
'
' +
'
' +
'
' +
esc(data.body) +
'
' +
'
Ваш следующий шаг
' +
esc(data.next) +
'
' +
'
' +
'' +
'
' +
esc(CTA_HINT) +
'
' +
'
';
showScreen('result');
goal('ceiling_quiz_result');
state.advancing = false;
var openBtn = $('#scq-open-lead');
if (openBtn) {
openBtn.addEventListener('click', function () {
openLeadModal();
});
}
}
function openLeadModal() {
var modal = $('#scq-lead-modal');
if (!modal) return;
modal.classList.add('is-open');
modal.setAttribute('aria-hidden', 'false');
document.body.classList.add('scq-modal-open');
goal('ceiling_quiz_cta_click');
var nameInput = $('#scq-name');
if (nameInput) setTimeout(function () { nameInput.focus(); }, 80);
}
function closeLeadModal() {
var modal = $('#scq-lead-modal');
if (!modal) return;
modal.classList.remove('is-open');
modal.setAttribute('aria-hidden', 'true');
document.body.classList.remove('scq-modal-open');
}
function normalizePhone(v) {
var d = String(v || '').replace(/\D+/g, '');
if (d.length === 11 && d[0] === '8') d = '7' + d.slice(1);
if (d.length === 10) d = '7' + d;
return d;
}
function showFormMsg(text, ok) {
var msg = $('#scq-form-msg');
if (!msg) return;
msg.textContent = text;
msg.className = 'scq-form-msg ' + (ok ? 'is-ok' : 'is-err');
}
function submitLead(e) {
e.preventDefault();
var form = e.target;
var name = (form.querySelector('[name=name]') || {}).value || '';
var phone = normalizePhone((form.querySelector('[name=phone]') || {}).value || '');
var time = (form.querySelector('[name=time]') || {}).value || '';
var personal = !!(form.querySelector('[name=consent_personal]') || {}).checked;
var privacy = !!(form.querySelector('[name=consent_privacy]') || {}).checked;
var btn = form.querySelector('[type=submit]');
name = String(name).trim();
time = String(time).trim();
if (name.length < 2) {
showFormMsg('Укажите имя.', false);
return;
}
if (!/^7\d{10}$/.test(phone)) {
showFormMsg('Введите телефон в формате +7 XXX XXX-XX-XX.', false);
return;
}
if (!time) {
showFormMsg('Укажите удобное время для звонка.', false);
return;
}
if (!personal || !privacy) {
showFormMsg('Отметьте обязательные согласия.', false);
return;
}
var resultData = getResult(state.total).data;
if (btn) btn.disabled = true;
showFormMsg('Отправляем заявку…', true);
fetch(ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: name,
phone: phone,
time: time,
result: resultData.title,
score: state.total,
source: location.href,
consents: { personal: personal, privacy: privacy },
}),
})
.then(function (r) {
return r.json().then(function (j) {
return { ok: r.ok, j: j };
});
})
.then(function (res) {
if (res.ok && res.j && res.j.ok) {
showFormMsg(res.j.message || 'Заявка отправлена. Мы свяжемся с вами.', true);
goal('ceiling_quiz_lead_sent');
form.reset();
setTimeout(function () {
closeLeadModal();
window.location.href = BOOKING_URL + '?from=ceiling-quiz&score=' + state.total;
}, 1400);
} else {
showFormMsg(
(res.j && res.j.message) || 'Не удалось отправить. Попробуйте ещё раз.',
false
);
}
})
.catch(function () {
showFormMsg('Сеть недоступна. Попробуйте позже или напишите в мессенджер.', false);
})
.finally(function () {
if (btn) btn.disabled = false;
});
}
function startQuiz() {
state.index = 0;
state.scores = [];
state.total = 0;
state.resultKey = '';
state.advancing = false;
showScreen('quiz');
renderQuestion();
goal('ceiling_quiz_start');
}
function bind() {
var root = $('#scq-root');
if (!root || root.dataset.scqBound === '1') return;
root.dataset.scqBound = '1';
var startBtn = $('#scq-start');
if (startBtn) startBtn.addEventListener('click', startQuiz);
root.addEventListener('click', function (e) {
var opt = e.target.closest('.scq-option');
if (opt && root.contains(opt)) {
e.preventDefault();
var idx = parseInt(opt.getAttribute('data-option'), 10);
if (!isNaN(idx)) selectOption(idx);
}
});
var modal = $('#scq-lead-modal');
if (modal) {
var backdrop = modal.querySelector('.scq-modal-backdrop');
var closeBtn = modal.querySelector('.scq-modal-close');
if (backdrop) backdrop.addEventListener('click', closeLeadModal);
if (closeBtn) closeBtn.addEventListener('click', closeLeadModal);
}
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') closeLeadModal();
});
var form = $('#scq-lead-form');
if (form) form.addEventListener('submit', submitLead);
showScreen('cover');
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', bind);
} else {
bind();
}
})();