Нумеролог-эксперт LunaMatrix

Демо бесплатно. PDF — через печать с шаблоном.

✨ Персональный демо-ответ
💞 Совместимость
🤑 Деньги / Реализация / Профессии
🔮 Прогностика
🔥 Полный пакет
Гость
Сброс

Важно

Демо берём из /demo, консультацию — из /service. PDF делаем красиво через Печать → Сохранить как PDF с фоном-шаблоном template-page1.png (кириллица идеальная).

Если открыть /demo или /service в браузере — это GET и будет “Not found”. Они работают POST-запросом из сайта.
в строках, чтобы не ломать страницу const safeText = escapeHtml(text).replace(/\n/g, "
"); const html = ` ${escapeHtml(title)}

${escapeHtml(title)}

${escapeHtml(subtitle)}

${safeText}
`; w.document.open(); w.document.write(html); w.document.close(); addRow("bot", "Открыла окно печати ✅ В печати выбери: «Сохранить как PDF»."); } function escapeHtml(s){ return String(s || "") .replaceAll("&","&") .replaceAll("<","<") .replaceAll(">",">") .replaceAll('"',""") .replaceAll("'","'"); } // ========= INPUT HANDLER ========= async function handleUserText(text){ const msg = String(text || "").trim(); if(!msg) return; addRow("user", msg); if(state.stage === "ASK_NAME"){ state.name = msg.split(/\s+/)[0].slice(0, 24); saveState(); setStatus(); addRow("bot", `Приятно познакомиться, ${state.name}! 👋\nНапиши дату рождения ДД.ММ.ГГГГ (например 20.08.1989)`); state.stage = "ASK_BIRTHDATE"; saveState(); return; } if(state.stage === "ASK_BIRTHDATE"){ const bd = normalizeBirthdate(msg); if(!bd){ addRow("bot", "Дата строго ДД.ММ.ГГГГ, например 20.08.1989"); return; } state.birthdate = bd; saveState(); setStatus(); await runDemo(); return; } if(state.stage === "ASK_YEAR"){ const y = normalizeYear(msg); if(!y){ addRow("bot", "Год — 4 цифры, например 2026"); return; } state.year = y; saveState(); await runServiceNow(); return; } if(state.stage === "ASK_PARTNER_BIRTHDATE"){ const pbd = normalizeBirthdate(msg); if(!pbd){ addRow("bot", "Дату партнёра — строго ДД.ММ.ГГГГ, например 30.05.1990"); return; } state.partner_birthdate = pbd; saveState(); await runServiceNow(); return; } addRow("bot", "Давай по кнопкам 🙂 Выбери консультацию ниже."); showServiceButtons(); state.stage = "CHOOSE_SERVICE"; saveState(); } // ========= EVENTS ========= elSend.addEventListener("click", ()=>{ const v = elInput.value; elInput.value = ""; handleUserText(v); }); elInput.addEventListener("keydown", (e)=>{ if(e.key === "Enter"){ e.preventDefault(); elSend.click(); } }); elReset.addEventListener("click", ()=>{ localStorage.removeItem(STORAGE_KEY); location.reload(); }); // старт setStatus(); startIfEmpty();