const CHECKLIST = [ "Кавер поста: единый стиль, читаемый за 3 секунды", "Подпись: крючок в первой строке, короткий абзацы", "Хештеги: 5–15, три уровня, не дублирую прошлый список", "Время поста: 12–14 или 19–21 по моей аудитории", "Сторис к посту: закулисье или реакция", "Ответ на комментарии в первый час", "Проверка: нет опечаток, битых ссылок", "Напоминание: завтра выкладываю сторис «до/после»", "Финальный просмотр ленты: новый пост вписывается в стиль" ]; const IDEAS = { clients: [ "История: как клиент пришёл с проблемой и что получилось", "До/после: 3 самых сильных примера", "Ошибки клиентов, которые я решаю чаще всего", "Что входит в работу и что нет", "Один инструмент/метод, который экономит время", "Ответ на главный вопрос: «а сколько стоит?»", "Закулисье: как устроен мой рабочий день", "FAQ: 3 вопроса, которые задают каждый день", "Кейс с цифрами: сроки, результат, цена", "Мой подход vs общий подход", "Что я не делаю и почему", "Отзыв (со скриншотом, с разрешения)" ], followers: [ "Мини-гид в 5 кадрах", "Миф vs правда о моей теме", "Список: 7 вещей, о которых вы не думали", "Мой самый странный факт о теме", "Опрос: что посмотреть/почитать дальше", "Релизы: что нового у меня", "Баттл: два способа, какой ваш", "Скрин-шаринг: как я это делаю", "Подборка: 5 ресурсов, которые использую", "История «почему я этим занимаюсь»", "Челлендж на неделю (приглашаю участвовать)", "Пересказ чужого поста со своим комментарием" ], sales: [ "Оффер дня/недели с дедлайном", "Что входит в пакет, по полочкам", "Вопрос-ответ по оплате и срокам", "Кейс: «было/стало» в цифрах", "Один аргумент «почему именно сейчас»", "Список: кому подойдёт, а кому нет", "Закулисье подготовки (создаёт доверие)", "Отзыв с результатом", "Мини-консультация: отвечаю на вопросы в директ", "Бонус при заказе в эту неделю", "Что делать после покупки", "Мифы о моей услуге" ], brand: [ "История: почему появился этот проект", "Ценности: 3 принципа, на которых стоит", "Команда: кто стоит за брендом", "Как мы работаем: 3 шага", "Закулисье производства/процесса", "Что отличает нас от других", "Будущее: что появится в следующем quarter", "Мой любимый продукт/услуга и почему", "Подборка: как использовать", "Одна ошибка, которую мы совершили (и чему научились)", "Место, где нас можно найти офлайн", "Секрет: что мы делаем «невидимого» для клиента" ], fun: [ "Мой топ-5 (песни/места/фильмы по теме)", "Закулисье процесса: как сделано", "Провал недели (честно)", "Мини-совет для таких же, как я", "Место недели: куда и когда", "Челлендж на неделю", "Перед/после: результат", "Вопрос к аудитории: что хотите узнать", "Мой ритуал (утро, вечер, подготовка)", "Случай, который меня изменил", "3 книги/фильма/плейлиста по теме", "Задушевный пост: почему я это веду" ], default: [ "История: почему я этой занимаюсь", "Закулисье: как выглядит мой процесс", "3 вещи, которые я делаю иначе", "Один совет на неделю", "До/после", "Мой топ-5", "Частый вопрос и полный ответ", "Провал недели (честно)", "Что нового впереди", "Мое место / мой день", "Подборка ресурсов", "Вопрос к аудитории в сторис" ] }; const ADVICES = { clients: "Фокус на результатах. 1 пост в неделю = кейс с цифрами. Добавьте 3 сторис: процесс, вопрос к аудитории, результат.", followers: "Регулярность важнее идеальности. 2–3 поста в неделю + сторис каждый день. Одна рубрика, чтобы ждать.", sales: "Продажи через пользу: кейس → аргумент → оффер. В директ отвечайте в первые 15 минут.", brand: "Голос и ценности в первом же посте. Показывайте людей, процесс и цифры — бренд живёт деталями.", fun: "Личное > полезное. Ваша история заходит лучше, чем «советы». 1 пост в неделю + сторис из жизни." }; function load(key, fallback) { try { const v = localStorage.getItem(key); return v ? JSON.parse(v) : fallback; } catch { return fallback; } } function save(key, val) { try { localStorage.setItem(key, JSON.stringify(val)); } catch {} } function buildChecklist() { const list = document.getElementById("checklist-list"); const done = load("ig-checklist-done", {}); const itemsEl = document.createElement("div"); CHECKLIST.forEach((text, i) => { const li = document.createElement("li"); li.tabIndex = 0; const input = document.createElement("input"); input.type = "checkbox"; input.checked = !!done[i]; const span = document.createElement("span"); span.textContent = text; li.append(input, span); const toggle = () => { done[i] = input.checked; li.classList.toggle("done", input.checked); save("ig-checklist-done", done); updateProgress(); }; input.addEventListener("change", toggle); li.addEventListener("click", (e) => { if (e.target !== input) { input.checked = !input.checked; toggle(); } }); li.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); input.checked = !input.checked; toggle(); } }); list.appendChild(li); }); updateProgress(); } function updateProgress() { const boxes = document.querySelectorAll("#checklist-list input[type=checkbox]"); const total = boxes.length; const checked = Array.from(boxes).filter((b) => b.checked).length; const pct = total ? Math.round((checked / total) * 100) : 0; const bar = document.getElementById("start-prog-bar"); if (bar) bar.style.width = pct + "%"; const label = document.getElementById("checklist-progress"); label.textContent = total ? `Прогресс: ${checked} из ${total} (закреплено в этом браузере)` : "Отмечайте пункты — прогресс сохраняется в этом браузере."; } function buildIdeas() { const grid = document.getElementById("ideas-grid"); const niche = document.getElementById("niche").value || "default"; const taken = load("ig-ideas-" + niche, []); const ideas = IDEAS[niche] || IDEAS.default; grid.innerHTML = ""; ideas.forEach((idea) => { const card = document.createElement("article"); card.className = "kt-ai-card" + (taken.includes(idea) ? " taken" : ""); card.tabIndex = 0; const title = document.createElement("h3"); title.textContent = idea; const hint = document.createElement("p"); hint.className = "kt-ai-hero-sub"; hint.style.margin = "6px 0 0"; hint.textContent = taken.includes(idea) ? "Уже взята — нажмите, чтобы вернуть" : "Нажмите, чтобы взять в работу"; card.append(title, hint); const flip = () => { const idx = taken.indexOf(idea); if (idx >= 0) taken.splice(idx, 1); else taken.push(idea); save("ig-ideas-" + niche, taken); buildIdeas(); }; card.addEventListener("click", flip); card.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); flip(); } }); grid.appendChild(card); }); } function computeStart() { const goal = document.getElementById("goal").value; const niche = document.getElementById("niche").value; const freq = document.getElementById("frequency").value; const card = document.getElementById("start-result"); if (!goal && !niche && !freq) { card.hidden = true; return; } card.hidden = false; const advice = ADVICES[goal] || ADVICES["clients"]; let extra = ""; if (freq === "daily") extra = " Каждый день — держите запас минимум на 3 поста."; if (freq === "weekly") extra = " 1 раз в неделю — делайте контент-план на месяц вперёд."; if (freq === "rare") extra = " Вспышками — соберите 5 идей в «банк» и публикуйте по мере готовности."; document.getElementById("start-advice").textContent = advice + extra; const row = document.getElementById("start-cta-row"); row.innerHTML = ""; const a1 = document.createElement("a"); a1.className = "kt-ai-btn"; a1.dataset.variant = "primary"; a1.href = "#checklist"; a1.textContent = "Открыть чек-лист"; const a2 = document.createElement("a"); a2.className = "kt-ai-btn"; a2.dataset.variant = "ghost"; a2.href = "#ideas"; a2.textContent = "Взять идеи"; row.append(a1, a2); } document.addEventListener("DOMContentLoaded", () => { buildChecklist(); buildIdeas(); computeStart(); ["goal", "niche", "frequency"].forEach((id) => { document.getElementById(id).addEventListener("change", () => { computeStart(); if (id === "niche") buildIdeas(); }); }); });