/* ============================================================
   data.jsx — realistic RU sample data
   Kant Studio (Калининград) ведёт сайты клиентов
   Exposes: DATA { sites, alerts, todayTasks, tasks, keywords,
            issues, aiTests, migration, positionsHistory, content }
   ============================================================ */

const sparkUp = [38,40,39,42,44,43,46,48,47,50,52,55];
const sparkDown = [62,60,61,58,55,57,53,50,52,48,45,43];
const sparkFlat = [44,45,44,46,45,47,46,45,46,47,46,48];

const SITES = [
  {
    id: "mebel", domain: "mebel-baltika.ru", title: "Мебель Балтика", letter: "М",
    color: "#0F4C8A", client: "ИП Соколов А.В.", business: "Мебель на заказ",
    region: "Калининград", cms: "WordPress", status: "active",
    health: 82, keysTop10: 47, keysDelta: 5, openTasks: 3, critical: 0,
    spark: sparkUp, gsc: true, wordstat: true, webmaster: true, wp: true,
  },
  {
    id: "vivamed", domain: "klinika-vivamed.ru", title: "Клиника ВиваМед", letter: "В",
    color: "#1E9E5A", client: "ООО «ВиваМед»", business: "Частная клиника",
    region: "Калининград", cms: "Битрикс", status: "active",
    health: 64, keysTop10: 31, keysDelta: -2, openTasks: 6, critical: 1,
    spark: sparkFlat, gsc: true, wordstat: true, webmaster: false, wp: false,
  },
  {
    id: "okna", domain: "okna-koenig.ru", title: "Окна Кёниг", letter: "О",
    color: "#E0691C", client: "ООО «Кёниг Пласт»", business: "Пластиковые окна",
    region: "Калининград обл.", cms: "WordPress", status: "active",
    health: 71, keysTop10: 38, keysDelta: 8, openTasks: 4, critical: 0,
    spark: sparkUp, gsc: true, wordstat: true, webmaster: true, wp: true,
  },
  {
    id: "avtoservice", domain: "avto-amber.ru", title: "АвтоАмбер", letter: "А",
    color: "#6B47C9", client: "ИП Дёмин К.С.", business: "Автосервис",
    region: "Калининград", cms: "Tilda", status: "active",
    health: 58, keysTop10: 22, keysDelta: 3, openTasks: 5, critical: 1,
    spark: sparkUp, gsc: true, wordstat: true, webmaster: true, wp: false,
  },
  {
    id: "stroydom", domain: "stroydom39.ru", title: "СтройДом 39", letter: "С",
    color: "#2563D8", client: "ООО «СтройДом»", business: "Строительство домов",
    region: "Калининград обл.", cms: "WordPress", status: "redesign",
    health: 44, keysTop10: 12, keysDelta: -6, openTasks: 9, critical: 3,
    spark: sparkDown, gsc: true, wordstat: true, webmaster: true, wp: true,
  },
  {
    id: "turamber", domain: "tur-yantar.ru", title: "Тур Янтарь", letter: "Т",
    color: "#C99211", client: "ООО «Янтарный берег»", business: "Турагентство",
    region: "Калининград", cms: "WordPress", status: "active",
    health: 76, keysTop10: 29, keysDelta: 4, openTasks: 2, critical: 0,
    spark: sparkUp, gsc: true, wordstat: true, webmaster: true, wp: true,
  },
];

const ALERTS = [
  { id: 1, sev: "critical", site: "stroydom", icon: "alert_octagon",
    text: "Появился noindex на 3 страницах раздела «Проекты домов»",
    detail: "Поисковики перестанут показывать эти страницы. Скорее всего тег добавили случайно при правках перед запуском.",
    action: "Создать задачу", time: "2 часа назад" },
  { id: 2, sev: "critical", site: "vivamed", icon: "trending",
    text: "«частная клиника калининград» упала с 4 на 11 позицию в Google",
    detail: "Падение на 7 позиций за неделю — выпали из топ-10. Совпадает с обновлением Google от 8 июня.",
    action: "Разобраться", time: "Сегодня, 09:14" },
  { id: 3, sev: "important", site: "mebel", icon: "edit",
    text: "Клиент изменил title на странице /kuhni — пропал ключ «на заказ»",
    detail: "Было: «Кухни на заказ в Калининграде». Стало: «Кухни — Мебель Балтика». Ключевая фраза удалена.",
    action: "Создать задачу", time: "Вчера, 18:40" },
  { id: 4, sev: "important", site: "avtoservice", icon: "link_off",
    text: "Потеряно 2 входящих ссылки с auto-portal39.ru",
    detail: "Донор удалил страницу с обзором автосервисов. Это влияет на авторитет сайта.",
    action: "Посмотреть", time: "Вчера" },
  { id: 5, sev: "minor", site: "okna", icon: "image",
    text: "На 14 новых изображениях нет alt-текста",
    detail: "ИИ может сгенерировать описания автоматически — это улучшит позиции в картинках.",
    action: "Сгенерировать alt", time: "2 дня назад" },
];

const TODAY = [
  { id: "t1", sev: "critical", site: "stroydom", title: "Убрать noindex с раздела «Проекты домов»", est: "~10 мин", impact: "high" },
  { id: "t2", sev: "critical", site: "vivamed", title: "Вернуть позицию по «частная клиника калининград»", est: "~40 мин", impact: "high" },
  { id: "t3", sev: "important", site: "mebel", title: "Восстановить ключ в title страницы /kuhni", est: "~5 мин", impact: "med" },
  { id: "t4", sev: "content", site: "okna", title: "Опубликовать статью «Как выбрать пластиковые окна»", est: "~20 мин", impact: "med" },
  { id: "t5", sev: "minor", site: "avtoservice", title: "Добавить телефон и адрес в подвал сайта", est: "~15 мин", impact: "low" },
];

const TASKS = [
  { id: "k1", sev: "critical", site: "stroydom", type: "Техническое", status: "new",
    title: "Убрать noindex с раздела «Проекты домов»", est: "~10 мин", impact: "+ сильно", impactPos: 8,
    desc: "На 3 страницах раздела стоит метатег noindex — поисковики исключат их из выдачи. Нужно удалить тег и отправить страницы на переиндексацию.",
    checklist: [
      { t: "Открыть редактор страниц раздела /proekty", done: true },
      { t: "Найти и удалить <meta name=\"robots\" content=\"noindex\">", done: false },
      { t: "Проверить через «Просмотреть как Googlebot»", done: false },
      { t: "Отправить URL на переиндексацию в GSC", done: false },
    ],
    code: '<!-- Удалить эту строку из <head> -->\n<meta name="robots" content="noindex, nofollow">' },
  { id: "k2", sev: "critical", site: "vivamed", type: "Техническое", status: "progress",
    title: "Исправить битые ссылки в меню (4 ошибки 404)", est: "~25 мин", impact: "+ заметно", impactPos: 4,
    desc: "В главном меню 4 ссылки ведут на несуществующие страницы (404). Это ухудшает индексацию и поведение пользователей.",
    checklist: [
      { t: "Выгрузить список 404 из аудита", done: true },
      { t: "Сопоставить со старыми URL", done: true },
      { t: "Поставить 301-редиректы или поправить ссылки", done: false },
    ], code: "" },
  { id: "k3", sev: "important", site: "mebel", type: "Техническое", status: "new",
    title: "Восстановить ключ «на заказ» в title /kuhni", est: "~5 мин", impact: "+ заметно", impactPos: 3,
    desc: "Клиент удалил ключевую фразу из title. Нужно вернуть оптимизированный вариант.",
    checklist: [
      { t: "Открыть страницу /kuhni в админке", done: false },
      { t: "Вернуть title «Кухни на заказ в Калининграде — Мебель Балтика»", done: false },
    ],
    code: "<title>Кухни на заказ в Калининграде — Мебель Балтика</title>" },
  { id: "k4", sev: "content", site: "okna", type: "Контент", status: "new",
    title: "Написать статью «Как выбрать пластиковые окна»", est: "~30 мин", impact: "+ умеренно", impactPos: 2,
    desc: "Под кластер информационных ключей нет страницы. Сгенерировать статью на 2000 слов и опубликовать в блог.",
    checklist: [
      { t: "Сгенерировать статью в модуле «Контент»", done: false },
      { t: "Проверить SEO-оценку (ключ, длина, читаемость)", done: false },
      { t: "Опубликовать в WordPress черновиком", done: false },
    ], code: "" },
  { id: "k5", sev: "important", site: "avtoservice", type: "AI SEO", status: "new",
    title: "Добавить разметку LocalBusiness (Schema.org)", est: "~20 мин", impact: "+ умеренно", impactPos: 2,
    desc: "Нейросети и Яндекс лучше понимают бизнес при наличии структурированных данных. Добавить JSON-LD с адресом, телефоном, часами работы.",
    checklist: [
      { t: "Сгенерировать JSON-LD в модуле AI SEO", done: false },
      { t: "Вставить в <head> главной страницы", done: false },
      { t: "Проверить в валидаторе Schema.org", done: false },
    ],
    code: '<script type="application/ld+json">\n{\n  "@context": "https://schema.org",\n  "@type": "AutoRepair",\n  "name": "АвтоАмбер",\n  "telephone": "+7 4012 55-33-11",\n  "address": "Калининград, ул. Транспортная, 14"\n}\n</script>' },
  { id: "k6", sev: "minor", site: "okna", type: "Техническое", status: "done",
    title: "Сгенерировать alt-тексты для 14 изображений", est: "~15 мин", impact: "+ слабо", impactPos: 1,
    desc: "ИИ сгенерировал описания для изображений без alt. Улучшит видимость в поиске по картинкам.",
    checklist: [{ t: "Сгенерировать alt через ИИ", done: true }, { t: "Применить ко всем 14 изображениям", done: true }], code: "" },
  { id: "k7", sev: "important", site: "stroydom", type: "Техническое", status: "new",
    title: "Настроить карту 301-редиректов для редизайна", est: "~1 час", impact: "+ критично", impactPos: 9,
    desc: "Сайт на редизайне. Без редиректов потеряются все накопленные позиции. Открыть модуль «Миграция».",
    checklist: [{ t: "Снять снимок старого сайта", done: true }, { t: "Построить карту редиректов", done: false }, { t: "Экспортировать .htaccess", done: false }], code: "" },
  { id: "k8", sev: "content", site: "turamber", type: "Контент", status: "progress",
    title: "Статья «Куда сходить в Калининграде за 3 дня»", est: "~30 мин", impact: "+ умеренно", impactPos: 3,
    desc: "Информационный запрос с хорошей частотностью. Привлечёт трафик в блог турагентства.",
    checklist: [{ t: "Сгенерировать черновик", done: true }, { t: "Добавить фото и внутренние ссылки", done: false }], code: "" },
];

const KEYWORDS = [
  { kw: "кухни на заказ калининград", vol: 2400, diff: "HIGH", g: 3, y: 2, dg: 2, dy: 0, url: "/kuhni", intent: "Коммерческий", spark: [8,7,6,5,4,4,3,3] },
  { kw: "мебель на заказ калининград", vol: 1900, diff: "HIGH", g: 5, y: 4, dg: 1, dy: 1, url: "/", intent: "Коммерческий", spark: [9,8,7,7,6,6,5,5] },
  { kw: "шкаф купе на заказ", vol: 1600, diff: "MEDIUM", g: 7, y: 6, dg: 3, dy: 2, url: "/shkafy", intent: "Коммерческий", spark: [12,11,10,9,8,8,7,7] },
  { kw: "кухонный гарнитур цена", vol: 880, diff: "MEDIUM", g: 11, y: 9, dg: -2, dy: 0, url: "/kuhni", intent: "Транзакционный", spark: [9,9,10,10,11,11,11,11] },
  { kw: "мебель для гостиной", vol: 720, diff: "LOW", g: 8, y: 7, dg: 4, dy: 3, url: "/gostinaya", intent: "Коммерческий", spark: [14,13,12,11,10,9,8,8] },
  { kw: "как выбрать кухню на заказ", vol: 590, diff: "LOW", g: 14, y: 12, dg: 6, dy: 4, url: "/blog/vybor-kuhni", intent: "Информационный", spark: [22,20,18,17,16,15,14,14] },
  { kw: "встроенная мебель калининград", vol: 480, diff: "MEDIUM", g: 6, y: 5, dg: 0, dy: -1, url: "/vstroennaya", intent: "Коммерческий", spark: [6,6,6,6,6,6,6,6] },
  { kw: "детская мебель на заказ", vol: 410, diff: "LOW", g: 9, y: 8, dg: 2, dy: 1, url: "/detskaya", intent: "Коммерческий", spark: [12,11,11,10,10,9,9,9] },
  { kw: "мебель из массива дерева", vol: 320, diff: "MEDIUM", g: 18, y: 15, dg: -3, dy: -2, url: "/massiv", intent: "Коммерческий", spark: [14,15,15,16,17,17,18,18] },
  { kw: "гардеробная на заказ", vol: 290, diff: "LOW", g: 4, y: 3, dg: 1, dy: 0, url: "/garderobnaya", intent: "Коммерческий", spark: [6,5,5,4,4,4,4,4] },
];

const AI_TESTS = [
  { query: "посоветуй мебель на заказ в Калининграде", model: "ChatGPT", logo: "GPT", mentioned: true, pos: 2,
    quote: "Среди калининградских мастерских хорошо отзываются о «Мебель Балтика» — делают кухни и шкафы на заказ." },
  { query: "где заказать кухню в Калининграде", model: "ChatGPT", logo: "GPT", mentioned: true, pos: 3,
    quote: "Можно рассмотреть «Мебель Балтика», у них собственное производство." },
  { query: "лучшая мебельная компания Калининград", model: "Claude", logo: "CL", mentioned: false, pos: null,
    quote: "Упомянуты конкуренты: «КалининградМебель», «Дубрава», «Балтийский Уют»." },
  { query: "посоветуй мебель на заказ в Калининграде", model: "Gemini", logo: "GM", mentioned: true, pos: 4,
    quote: "В их числе «Мебель Балтика» — изготовление корпусной мебели по индивидуальным размерам." },
  { query: "недорогие кухни на заказ Калининград", model: "Claude", logo: "CL", mentioned: false, pos: null,
    quote: "Рекомендованы «КалининградМебель» и студия «Дубрава»." },
  { query: "шкаф-купе на заказ отзывы Калининград", model: "Gemini", logo: "GM", mentioned: true, pos: 5,
    quote: "Положительные отзывы встречаются о «Мебель Балтика»." },
];

const AI_COMPETITORS = [
  { name: "КалининградМебель", mentions: 14, trend: 2 },
  { name: "Студия «Дубрава»", mentions: 9, trend: 1 },
  { name: "Балтийский Уют", mentions: 6, trend: -1 },
  { name: "МебельГрад39", mentions: 4, trend: 0 },
];

const AI_CHECKLIST = [
  { t: "Schema.org Organization + LocalBusiness", done: true },
  { t: "Чёткое описание «кто мы и что делаем» на главной", done: true },
  { t: "Кейсы с конкретными цифрами и результатами", done: false },
  { t: "Файл llms.txt в корне сайта", done: false },
  { t: "Текст доступен в HTML (не скрыт за JS)", done: true },
  { t: "Упоминания на внешних авторитетных площадках", done: false },
];

const AI_MODELS = [
  { name: "ChatGPT", logo: "GPT", color: "#10A37F", rate: 67 },
  { name: "Claude", logo: "CL", color: "#D97757", rate: 33 },
  { name: "Gemini", logo: "GM", color: "#4285F4", rate: 58 },
];

// — Audit issues (для активного сайта) —
const ISSUES = [
  { id: "i1", sev: "critical", title: "На 3 страницах стоит запрет индексации (noindex)", count: 3,
    what: "Метатег noindex говорит поисковикам «не показывайте эту страницу в результатах поиска». Сейчас он стоит на 3 важных страницах раздела «Проекты».",
    why: "Страницы с этим тегом полностью исчезают из Google и Яндекса — даже если они хорошо оптимизированы. Это прямая потеря трафика и позиций.",
    fix: ["Откройте каждую страницу из списка ниже в редакторе.", "Найдите в коде строку с meta robots noindex и удалите её.", "Отправьте страницы на переиндексацию через Search Console."],
    code: '<meta name="robots" content="noindex">  <!-- ← удалить -->',
    pages: ["/proekty/dom-iz-brusa", "/proekty/karkasnyy-dom", "/proekty/dom-iz-gazobetona"] },
  { id: "i2", sev: "critical", title: "4 страницы возвращают ошибку 404 (не найдено)", count: 4,
    what: "Четыре ссылки на сайте ведут на страницы, которых больше не существует. Пользователь и поисковый робот видят сообщение об ошибке.",
    why: "Битые ссылки ухудшают индексацию, расходуют «краулинговый бюджет» и портят впечатление пользователей.",
    fix: ["Проверьте, куда раньше вели эти страницы.", "Настройте 301-редирект на актуальную страницу либо исправьте ссылку.", "Удалите ссылки на несуществующие страницы из меню."],
    code: "Redirect 301 /staraya-stranica /novaya-stranica", pages: ["/uslugi/remont", "/galereya/2022", "/akcii/leto", "/o-nas/komanda"] },
  { id: "i3", sev: "important", title: "На 12 страницах нет заголовка H1", count: 12,
    what: "H1 — это главный заголовок страницы. Он подсказывает поисковику, о чём страница. На 12 страницах его нет.",
    why: "Без H1 поисковику сложнее понять тему страницы — это снижает релевантность по целевым запросам.",
    fix: ["Добавьте один (и только один) заголовок H1 на каждую страницу.", "Включите в него главный ключ страницы.", "Не дублируйте H1 с тегом title дословно."],
    code: "<h1>Каркасные дома под ключ в Калининграде</h1>", pages: ["+ ещё 12 страниц"] },
  { id: "i4", sev: "important", title: "Медленная загрузка на мобильных (LCP 4.1 с)", count: 1,
    what: "Главный контент страницы появляется через 4,1 секунды на телефоне. Хорошо — меньше 2,5 секунд.",
    why: "Скорость — фактор ранжирования. Медленные сайты теряют позиции и посетителей, которые не дожидаются загрузки.",
    fix: ["Сожмите изображения и переведите в формат WebP.", "Включите кэширование и сжатие на сервере.", "Уберите тяжёлые скрипты, блокирующие отрисовку."],
    code: "", pages: [] },
  { id: "i5", sev: "minor", title: "У 14 изображений отсутствует alt-текст", count: 14,
    what: "Alt — это текстовое описание картинки. Оно нужно поисковым системам и людям, использующим программы чтения экрана.",
    why: "Без alt изображения не участвуют в поиске по картинкам, и сайт теряет дополнительный трафик.",
    fix: ["Добавьте короткое описание к каждому изображению.", "ИИ может сгенерировать описания автоматически — кнопка ниже."],
    code: '<img src="kuhnya-1.jpg" alt="Угловая кухня на заказ в современном стиле">', pages: [] },
  { id: "i6", sev: "good", title: "HTTPS настроен корректно на всех страницах", count: 0,
    what: "Весь сайт работает по защищённому протоколу HTTPS, смешанного контента нет.", why: "", fix: [], code: "", pages: [] },
];

// — Migration —
const MIGRATION = {
  oldUrls: [
    { url: "/proekty-domov", traffic: 1240, pos: 3, valuable: true, newUrl: "/projects", conf: 96 },
    { url: "/uslugi/stroitelstvo", traffic: 980, pos: 5, valuable: true, newUrl: "/services/building", conf: 92 },
    { url: "/karkasnye-doma", traffic: 870, pos: 2, valuable: true, newUrl: "/projects/frame-houses", conf: 88 },
    { url: "/dom-iz-brusa", traffic: 640, pos: 4, valuable: true, newUrl: "/projects/timber", conf: 84 },
    { url: "/ceny", traffic: 520, pos: 7, valuable: true, newUrl: "/pricing", conf: 95 },
    { url: "/o-kompanii", traffic: 310, pos: 6, valuable: false, newUrl: "/about", conf: 98 },
    { url: "/kontakty", traffic: 280, pos: 1, valuable: false, newUrl: "/contacts", conf: 99 },
    { url: "/galereya/2021", traffic: 90, pos: 14, valuable: false, newUrl: "", conf: 41 },
    { url: "/akcii/zima-2022", traffic: 40, pos: 22, valuable: false, newUrl: "", conf: 22 },
  ],
  checklist: [
    { t: "Тестовый домен закрыт от индексации до запуска", status: "ok", auto: true },
    { t: "На боевом домене НЕТ метатега noindex", status: "ok", auto: true },
    { t: "Все 301-редиректы работают (проверка каждой пары)", status: "warn", auto: true, note: "2 из 9 редиректов возвращают 404" },
    { t: "sitemap.xml обновлён и отправлен в GSC", status: "pending", auto: true },
    { t: "robots.txt корректен и не блокирует важное", status: "ok", auto: true },
    { t: "Запрошена переиндексация в Search Console", status: "ok", auto: false },
    { t: "Разметка Schema.org перенесена на новые страницы", status: "warn", auto: true, note: "Не найдена на 3 страницах" },
    { t: "Внутренние ссылки не ведут на старые URL", status: "ok", auto: true },
    { t: "Счётчики аналитики установлены на новом сайте", status: "ok", auto: true },
    { t: "Страница 404 настроена корректно", status: "ok", auto: true },
  ],
};

// — Content generator demo article (streamed) —
const ARTICLE_MD = `# Как выбрать пластиковые окна: полное руководство 2025

Замена окон — серьёзное вложение на 15–20 лет. Разберём по шагам, на что смотреть, чтобы не переплатить и не ошибиться.

## Сколько камер должно быть в профиле

Камеры — это полые секции внутри профиля. Чем их больше, тем теплее окно. Для климата Калининградской области оптимален **трёхкамерный или пятикамерный профиль**.

- **3 камеры** — для квартир и тёплого остекления балконов
- **5 камер** — для частных домов и северной стороны

## Стеклопакет: однокамерный или двухкамерный

Двухкамерный стеклопакет (три стекла) удерживает тепло заметно лучше. Для жилых комнат берите его, для холодного балкона достаточно однокамерного.

## Фурнитура решает половину дела

Именно фурнитура отвечает за плавность хода, проветривание и срок службы. Хорошая фурнитура служит 15+ лет без регулировки.

## Чек-лист перед покупкой

1. Уточните количество камер профиля и стеклопакета
2. Спросите про марку фурнитуры и гарантию на неё
3. Проверьте наличие микропроветривания
4. Узнайте срок и условия монтажа`;

const CONTENT_LIBRARY = [
  { title: "Как выбрать кухню на заказ: 7 критериев", site: "mebel", kw: "как выбрать кухню на заказ", words: 1840, status: "published", date: "2 июня", views: 420 },
  { title: "Шкаф-купе или гардеробная: что выбрать", site: "mebel", kw: "шкаф купе или гардеробная", words: 1520, status: "published", date: "28 мая", views: 310 },
  { title: "Как выбрать пластиковые окна", site: "okna", kw: "как выбрать пластиковые окна", words: 2010, status: "draft", date: "Сегодня", views: 0 },
  { title: "Куда сходить в Калининграде за 3 дня", site: "turamber", kw: "что посмотреть в калининграде", words: 2240, status: "review", date: "Вчера", views: 0 },
  { title: "Каркасный дом: плюсы и минусы", site: "stroydom", kw: "каркасный дом плюсы и минусы", words: 1680, status: "published", date: "20 мая", views: 530 },
];

const META_VARIANTS = [
  { title: "Как выбрать пластиковые окна в 2025 — гид покупателя", desc: "Разбираем камеры профиля, стеклопакеты и фурнитуру. Чек-лист, чтобы не переплатить при заказе окон в Калининграде.", tLen: 49, dLen: 132 },
  { title: "Пластиковые окна: как выбрать и не ошибиться", desc: "Полное руководство по выбору окон ПВХ: профиль, стеклопакет, фурнитура, монтаж. Советы эксперта и чек-лист покупателя.", tLen: 44, dLen: 138 },
  { title: "Выбор пластиковых окон — полное руководство", desc: "Сколько камер нужно, какой стеклопакет теплее и на какую фурнитуру смотреть. Практичные советы для жителей Калининграда.", tLen: 43, dLen: 145 },
];

// — 30-day positions history for the line chart —
function genHistory(start, drift, volatility, updates) {
  const arr = []; let v = start;
  for (let i = 0; i < 30; i++) {
    v += drift + (Math.sin(i * 1.7) * volatility);
    arr.push(Math.max(1, Math.round(v)));
  }
  return arr;
}

const DATA = {
  sites: SITES,
  alerts: ALERTS,
  todayTasks: TODAY,
  tasks: TASKS,
  keywords: KEYWORDS,
  issues: ISSUES,
  aiTests: AI_TESTS,
  aiCompetitors: AI_COMPETITORS,
  aiChecklist: AI_CHECKLIST,
  aiModels: AI_MODELS,
  migration: MIGRATION,
  article: ARTICLE_MD,
  contentLibrary: CONTENT_LIBRARY,
  metaVariants: META_VARIANTS,
  googleHistory: genHistory(9, -0.14, 1.2),
  yandexHistory: genHistory(7, -0.10, 0.9),
  googleUpdates: [{ day: 8, label: "Google Core Update" }, { day: 21, label: "Spam Update" }],
};

window.DATA = DATA;
