(() => { const toggle = document.querySelector(".menu-toggle"); const nav = document.querySelector(".nav-links"); if (toggle && nav) { toggle.addEventListener("click", () => { const isOpen = nav.classList.toggle("is-open"); toggle.setAttribute("aria-expanded", String(isOpen)); }); } document.querySelectorAll(".faq-question").forEach((button) => { button.addEventListener("click", () => { const item = button.closest(".faq-item"); const isOpen = item.classList.toggle("is-open"); button.setAttribute("aria-expanded", String(isOpen)); }); }); const meanings = { az: { 1: "Başlanğıc, iradə və şəxsi istiqamət.", 2: "Sezgi, daxili səs və səbirli müşahidə.", 3: "Yaradıcılıq, ifadə və məhsuldarlıq.", 4: "Nizam, sərhəd və etibarlı quruluş.", 5: "Öyrənmə, bələdçilik və təcrübə.", 6: "Seçim, münasibət və ürəkdən qərar.", 7: "Hərəkət, hədəf və intizam.", 8: "Tarazlıq, ədalət və məsuliyyət.", 9: "Müdriklik, içə dönüş və araşdırma.", 10: "Dövr, dəyişiklik və fürsət.", 11: "Güc, cəsarət və daxili dayaq.", 12: "Baxış bucağı, gözləmə və qəbul.", 13: "Çevrilmə, bitiş və yenilənmə.", 14: "Uyğunluq, ölçü və bərpa.", 15: "Bağlılıq, ehtiras və asılılıq sınağı.", 16: "Köhnə quruluşun çözülməsi və gerçəklik.", 17: "Ümid, ilham və görünən istedad.", 18: "Şüuraltı, sezgi və qeyri-müəyyənlik.", 19: "Canlılıq, açıqlıq və uğur işığı.", 20: "Oyanış, çağırış və hesablaşma.", 21: "Tamamlanma, dünya və geniş baxış.", 22: "Azadlıq, yeni yol və güvən." }, ru: { 1: "Начало, воля и личное направление.", 2: "Интуиция, внутренний голос и наблюдение.", 3: "Творчество, выражение и плодотворность.", 4: "Порядок, границы и устойчивая структура.", 5: "Обучение, наставничество и опыт.", 6: "Выбор, отношения и решение сердцем.", 7: "Движение, цель и дисциплина.", 8: "Баланс, справедливость и ответственность.", 9: "Мудрость, уединение и исследование.", 10: "Цикл, перемены и возможность.", 11: "Сила, смелость и внутренняя опора.", 12: "Новый взгляд, ожидание и принятие.", 13: "Трансформация, завершение и обновление.", 14: "Умеренность, настройка и восстановление.", 15: "Привязанность, страсть и проверка зависимости.", 16: "Разбор старой структуры и встреча с реальностью.", 17: "Надежда, вдохновение и видимый талант.", 18: "Подсознание, интуиция и неясность.", 19: "Жизненность, открытость и свет успеха.", 20: "Пробуждение, зов и переоценка.", 21: "Завершение, мир и широкий взгляд.", 22: "Свобода, новый путь и доверие." } }; const labels = { az: { invalid: "Zəhmət olmasa düzgün doğum tarixi daxil edin.", future: "Gələcək tarix istifadə edilə bilməz.", center: "Mərkəz enerjisi", repeat: "Təkrarlanan rəqəmlər", noRepeat: "Aydın təkrar yoxdur", note: "Bu nəticə demo hesablamadır; fərqli kader matrisi məktəblərində formul dəyişə bilər." }, ru: { invalid: "Введите корректную дату рождения.", future: "Будущую дату использовать нельзя.", center: "Центральная энергия", repeat: "Повторяющиеся числа", noRepeat: "Явных повторов нет", note: "Это демонстрационный расчет; в разных школах матрицы судьбы формула может отличаться." } }; function reduce22(value) { let n = Math.abs(Number(value) || 0); while (n > 22) n -= 22; return n === 0 ? 22 : n; } function sumDigits(value) { return String(value).split("").reduce((sum, char) => sum + (Number(char) || 0), 0); } function parseDate(value) { const parts = value.split("-").map(Number); if (parts.length !== 3 || parts.some(Number.isNaN)) return null; const [year, month, day] = parts; const date = new Date(year, month - 1, day); if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) return null; return { year, month, day, date }; } function calculateMatrix(dateParts) { const a = reduce22(dateParts.day); const b = reduce22(dateParts.month); const c = reduce22(sumDigits(dateParts.year)); const d = reduce22(a + b + c); const e = reduce22(a + b + c + d); const f = reduce22(a + b); const g = reduce22(b + c); const h = reduce22(d + c); const i = reduce22(a + d); const points = { A: a, B: b, C: c, D: d, E: e, F: f, G: g, H: h, I: i }; const counts = Object.values(points).reduce((acc, number) => { acc[number] = (acc[number] || 0) + 1; return acc; }, {}); const repeats = Object.entries(counts).filter(([, count]) => count > 1).map(([number, count]) => ({ number, count })); return { points, center: e, repeats }; } function renderResult(form, result, lang) { const output = form.closest(".calculator-layout").querySelector(".result-wrap"); const visual = form.closest(".calculator-layout").querySelector(".matrix-visual"); const t = labels[lang]; const m = meanings[lang]; Object.entries(result.points).forEach(([key, value]) => { const dot = visual && visual.querySelector(`[data-point="${key}"]`); if (dot) dot.textContent = value; }); const pointHtml = Object.entries(result.points).map(([key, value]) => `
${t.center}
${t.note}
${lang === "az" ? "Nəticə burada görünəcək." : "Результат появится здесь."}