import{r as e}from"./rolldown-runtime-S-ySWqyJ.js";import{h as t,t as n}from"./vendor-react-DyChr2BH.js";import{t as r}from"./db-D2Po16Ap.js";var i=e(t(),1),a=[`ru`,`en`],o={common:{loading:`Загрузка…`,save:`Сохранить`,cancel:`Отмена`,delete:`Удалить`,edit:`Изменить`,add:`Добавить`,close:`Закрыть`,ok:`Понятно`,yes:`Да`,no:`Нет`,saved:`Сохранено`,open:`Открыть`,back:`Назад`,tasks:`задач`,goal:`цель`,rub:`₽`,ml:`мл`,weekDays:{sun:`Вс`,mon:`Пн`,tue:`Вт`,wed:`Ср`,thu:`Чт`,fri:`Пт`,sat:`Сб`},everyDay:`Каждый день`,disabledShort:`выкл.`,percentOfAmount:`% от суммы`,percent:`Процент`,amount:`Сумма`,pleaseWait:`Подождите…`,checking:`Проверка…`,scrollTop:`Наверх`,appErrorTitle:`Не удалось загрузить экран`,appErrorHint:`Часто это временный сбой кэша PWA после обновления. Нажмите «Перезапустить» или закройте приложение и откройте снова с Home Screen.`,appErrorReload:`Перезапустить`,closeModal:`Закрыть`,expandSection:`Развернуть`,collapseSection:`Свернуть`,localeEn:`EN`,localeRu:`RU`},pwa:{updating:`Обновляем приложение…`,refreshNow:`Обновить сейчас`},kpi:{gridAria:`Показатели`,lockAriaLocked:`Перестановка выключена`,lockAriaUnlocked:`Перестановка включена`,lockTitleLocked:`Включить перестановку плиток`,lockTitleUnlocked:`Выключить перестановку плиток`,styleEditorTitle:`Цвет плитки`,styleEditorHint:`Выберите готовый стиль. Порядок плиток сохранится только после отпускания.`,stylePreset:{system:`Как было`,aqua:`Аква`,mint:`Мята`,amber:`Янтарь`,rose:`Роза`,violet:`Фиолет`,mono:`Моно`}},nav:{mainMenu:`Главное меню`,primaryScreens:`Основные экраны`,secondaryScreens:`Дополнительные экраны`,today:`Сегодня`,tasks:`Задачи`,money:`Деньги`,nutrition:`Питание`,analytics:`Аналитика`,habits:`Привычки`,finance:`Финансы`,supplements:`БАДы`,trainings:`Тренировки`,automation:`Автоматизация`,settings:`Настройки`,more:`Ещё`,interface:`Интерфейс`,goals:`Цели`,guardrails:`Контроль нагрузки`,data:`Данные`,about:`О приложении`,telegram:`Telegram`,dev:`Диагностика`,guide:`Руководство`,foodCatalog:`Каталог продуктов`,chat:`Чат`,openMenu:`Открыть меню`,openChat:`Открыть чат`},interface:{intro:`Настройки интерфейса сохраняются на этом устройстве.`,theme:`Тема`,themeDark:`Тёмная`,themeLight:`Светлая`,themeDarkHint:`Комфортно вечером и ночью.`,themeLightHint:`Светлый фон и контрастный текст.`,designPreset:`Стиль приложения`,designPresetDefault:`RMS`,designPresetDefaultHint:`Базовый неоновый стиль RMSAssist.`,designPresetOcean:`Океан`,designPresetOceanHint:`Холодные синие и бирюзовые акценты.`,designPresetForest:`Лес`,designPresetForestHint:`Спокойная зелёная палитра для мягкого фокуса.`,designPresetSunset:`Закат`,designPresetSunsetHint:`Тёплые розовые и оранжевые акценты.`,designPresetMono:`Моно`,designPresetMonoHint:`Сдержанный нейтральный интерфейс без ярких цветов.`,designPresetSpring:`Весна`,designPresetSpringHint:`Мягкая розовая палитра с нежным светлым акцентом.`,designPresetLove:`Любовь`,designPresetLoveHint:`Пастельно-красные оттенки без резкой насыщенности.`,designPresetSummer:`Лето`,designPresetSummerHint:`Пастельно-жёлтые цвета для тёплого спокойного настроения.`,designPresetNeon:`Неон`,designPresetNeonHint:`Мягкое сочетание синего и фиолетового свечения.`,designPresetAutumn:`Осень`,designPresetAutumnHint:`Пастельные красные, жёлтые и оранжевые оттенки.`,designPresetWinter:`Зима`,designPresetWinterHint:`Пастельный синий, голубой и бирюзовый баланс.`,designPresetDawn:`Рассвет`,designPresetDawnHint:`Пастельные розовые, жёлтые и голубые тона.`,fontScale:`Размер шрифта`,fontCompact:`Компактный`,fontComfortable:`Обычный`,fontLarge:`Крупный`,fontPreview:`Пример текста: задачи, привычки и напоминания RMS.`,language:`Язык`,languageRu:`Русский`,languageEn:`English`,languagePreviewRu:`Интерфейс на русском языке.`,languagePreviewEn:`Interface in English.`,localeAriaRu:`Язык: русский. Нажмите для English.`,localeAriaEn:`Language: English. Tap for Russian.`,fontAriaCompact:`Размер шрифта: компактный. Нажмите для обычного.`,fontAriaComfortable:`Размер шрифта: обычный. Нажмите для крупного.`,fontAriaLarge:`Размер шрифта: крупный. Нажмите для компактного.`,themeAriaDark:`Тёмная тема. Нажмите для светлой.`,themeAriaLight:`Светлая тема. Нажмите для тёмной.`},today:{sync:`Синхронизировать`,syncing:`Синхронизация…`,syncDone:`Синхронизация выполнена.`,syncFail:`Не удалось синхронизировать с облаком.`,syncLogin:`Войдите в аккаунт, чтобы синхронизировать данные.`,cloudSyncNow:`Синхронизировать сейчас`,debtTotal:`Всего долгов`,balance:`Общий баланс`,freePool:`Свободные в месяц`,water:`Вода`,habits:`Привычки`,todayTasks:`Сегодня`,overdue:`Просрочено`,calories:`Калории`,subscriptions:`Подписки`,monthlyEssential:`Стабильный расход в месяц`,addTask:`+ Задача`,addExpense:`+ Расход`,addIncome:`+ Доход`,addWater:`+250 мл`,openAllTasks:`Открыть все`,supplementsTrainings:`БАДы и тренировки`,supplementsTrainingsSummary:`БАД {taken}/{total} · трен. {trainings}`,cloudStaleBanner:`Синхронизация с облаком давно не выполнялась. Отправьте облачную копию вручную.`,waterProgress:`{current} / {target} мл`,waterCurrent:`{current} мл`,tasksCount:`{count} задач`,training:{strength:`Силовая`,cardio:`Кардио`,mobility:`Мобилити`,mixed:`Смешанная`,default:`Тренировка`,minutes:`{count} мин`,sectionTitle:`Тренировка`,noneToday:`Тренировок сегодня нет.`,totalToday:`Всего сегодня: {count}`},supplements:{title:`БАДы`,noneToday:`БАДов на сегодня нет.`,taken:`Принято: {done} / {total}`,pending:`Ожидают: {count}`,skipped:`Пропущено: {count}`},actionRequired:`Что требует действия`,integrityWarning:`Проверка данных: {count} предупреждений`,noActions:`Действий сейчас нет.`,moreCount:`Ещё {count}`,timelineTitle:`Сегодня по времени`,timelineSummary:`{count} событий`,timelineEmpty:`пусто`,timelineNoEvents:`Событий в плане нет.`,moreEvents:`Ещё {count} событий`,savingsGoal:`Цель накоплений`,details:`Подробнее`,history:`История`,topTasks:`Топ-3 задачи`,completeTaskAria:`Завершить задачу`,noPinnedTasks:`Закреплённых задач нет.`,confirmCompleteTitle:`Завершить задачу?`,confirmCompleteText:`Задача будет отмечена выполненной и удалена из топ-3 и из списка активных на вкладке «Задачи».`,confirmComplete:`Завершить`,weekTasks:`Задачи недели`,weekStats:`Готово: {done} · Просрочено: {overdue} · На неделе: {due}`,openTasks:`Открыть задачи`,noOverdue:`Просроченных нет.`,noTasksToday:`Задач на сегодня нет.`,next7Days:`Следующие 7 дней`,noTasksNext7:`На 7 дней задач нет.`,habitsToday:`Привычки на сегодня`,noHabitsToday:`Привычек на сегодня нет.`,uncheckHabitAria:`Снять отметку {name}`,checkHabitAria:`Отметить {name}`},pageShell:{loading:`Загрузка…`},tasks:{addTask:`+ Задача`,sectionToday:`Сегодня`,countTotal:`Задач: {count}`,countDone:`Готово: {count}`,countPending:`Осталось: {count}`,countUrgent:`Срочных: {count}`,countImportant:`Важных: {count}`,minutes:`{count} мин`,progressAria:`Прогресс задач {percent}%`,progress:`Прогресс: {percent}%`,noTasksToday:`Сегодня задач нет.`,actionRequired:`Что требует действия`,noActions:`Действий сейчас нет.`,open:`Открыть`,moreCount:`Ещё {count}`,focusTop3:`Фокус / топ‑3`,focusSelected:`Выбрано: {count}/3`,focusSlots:` · Свободно мест: {count}`,topOrder:`Топ-{order}: {title}`,topNotSelected:`Топ‑3 не выбран.`,overdue:`Просрочено`,overdueTotal:`Всего: {count}`,overdueOldest:` · Самая старая: {date}`,moveOverdueTomorrow:`Перенести все просроченные на завтра`,noOverdue:`Просроченных нет.`,workload:`Нагрузка`,workloadLine:`{status} · Сегодня: {dueToday} · Создано: {createdToday}`,workloadNormal:`Нагрузка нормальная.`,deleteTitle:`Удалить задачу?`,deleteText:`Задача будет удалена без возможности восстановления.`,moveOverdueTitle:`Перенести просроченные на завтра?`,moveOverdueWill:`Будет перенесено задач: {count}.`,moveOverdueNone:`Просроченных задач нет.`,moveOverdueConfirm:`Перенести`,replaceTitle:`Заменить задачу`,replaceHint:`Выберите задачу в топ‑3, которую заменить:`,formEdit:`Редактировать задачу`,formNew:`Новая задача`,formTitlePlaceholder:`Название`,formEstimatePlaceholder:`Оценка, мин`,formEnergyUnset:`Энергия не задана`,formImportant:`Важное`,formUrgent:`Срочное`,formNotesPlaceholder:`Заметки`,formRecurrence:`Повтор`,recurrenceOnceOption:`Один раз (дата)`,recurrenceWeeklyOption:`Каждую неделю`,recurrenceOnceShort:`разовая`,recurrenceWeeklyShort:`еженедельно`,recurrenceWeeklyDays:`еженедельно: {days}`,formWeekdays:`Дни недели`,untitled:`Без названия`,categoryOther:`Прочее`,filtersTitle:`Фильтры`,filtersActive:`Активные`,filtersAllCategories:`Все категории`,filtersAllEnergy:`Вся энергия`,filtersAnyEnergy:`Любая энергия`,listEmpty:`Задач нет. Проверьте фильтры.`,daysLeft:`осталось {count} дн.`,edit:`Изменить`,delete:`Удалить`,topBadge:`Топ-{order}`,control:{due:{overdue:`просрочено`,today:`сегодня`,next7:`7 дней`,future:`позже`,no_due:`без срока`,done:`готово`,canceled:`отменено`},workload:{ok:`нормально`,warning:`много`,overloaded:`перегруз`},status:{done:`готово`,active:`активно`,waiting:`ожидает`,blocked_or_canceled:`закрыто`},focus:{top_priority:`фокус`,normal:`обычно`},severity:{info:`инфо`,warning:`важно`,danger:`срочно`},priority:{high:`высокий`,medium:`средний`,low:`низкий`,none:`без приоритета`},flags:{urgent:`срочно`,important:`важно`,top:`топ {order}`,overdue:`просрочено`,minutes:`{count} мин`},loadNotes:{overloadedDay:`День перегружен задачами`,manyToday:`Много задач на сегодня`,estimateVeryHigh:`Очень большая оценка времени`,estimateHigh:`Большая оценка времени`,topFull:`Топ‑3 заполнен`}},actions:{overdue:`Есть просроченные задачи: {count}`,manyToday:`Много задач на сегодня: {count}`,noTop:`Топ‑3 на сегодня не выбран`,urgentToday:`Есть срочные задачи на сегодня: {count}`,importantToday:`Есть важные задачи на сегодня: {count}`,overloadedDay:`День перегружен задачами`},energy:{deep:`Глубокая работа`,routine:`Рутина`,creative:`Творчество`,admin:`Админ / организация`,meeting:`Встречи / звонки`,light:`Лёгкая работа`,physical:`Физическая активность`,learning:`Обучение`}},habits:{manage:`Управление привычками`,sleepAria:`Настроить период сна`,sleep:`Сон`,dateLabel:`Дата:`,sectionToday:`Сегодня`,noHabitsToday:`Привычек сегодня нет.`,habitsLabel:`Привычки`,remaining:`Осталось`,progress:`Прогресс`,actionRequired:`Что требует действия`,noActions:`Действий сейчас нет.`,waterBlock:`К блоку воды`,open:`Открыть`,moreCount:`Ещё {count}.`,water:`Вода`,waterNow:`Сейчас`,waterGoal:`Цель`,waterRemaining:`Осталось`,waterStep:`Шаг`,waterReset:`Сброс`,weekSummary:`Неделя: {done}/{total} · {percent}`,weekNoData:`Данных за неделю нет.`,monthly:`Месячные привычки`,monthlyProgress:`Прогресс: {done}/{target} ({percent}%)`,monthlyProgressAria:`Месячный прогресс {percent}%`,groups:`Группы`,actions:{pendingMany:`Много незавершённых привычек`,pending:`Остались привычки: {count}`,pendingLeft:`Осталось: {count}`,waterRemaining:`Осталось воды: {ml} мл`},dayList:`Привычки на день`,noActive:`Активных привычек нет.`,streak:`серия {count} дн.`,weekShort:`неделя {done}/{target}`,monthShort:`месяц {done}/{target}`,instruction:`Инструкция`,noGroup:`Без группы`,storedNames:{sleepUntil:`Сон до {time}`,wakeUp:`Подъём {time}`,proteinGrams:`Белок {grams} г`,exerciseMinutes:`Зарядка {minutes} мин`,meditationMinutes:`Медитация {minutes} мин`,walkSport:`Прогулка / спорт`,readingLearning:`Чтение / обучение`,breakfast:`Завтрак`,lunch:`Обед`,dinner:`Ужин`},status:{completed:`выполнено`,pending:`ожидает`,numeric:`число`,inactive:`выключено`},severity:{info:`инфо`,warning:`важно`,danger:`срочно`}},analytics:{title:`Аналитика`,weeklyProgress:`Прогресс за неделю`,weeklyHabits:`Привычки`,weeklyTasks:`Задачи`,weeklyTasksDone:`{count} выполнено`,weeklyFreePool:`Свободный пул`,weeklyNutrition:`Питание (ср.)`,weeklyNutritionKcal:`{kcal} ккал`,weeklyNutritionProtein:`{protein}г белка`,tasksOverdue:`{count} просрочено`,habitsCard:`Привычки`,habits7d:`7 дней`,habits7dDone:`Выполнено {done} из {total} ({percent}%)`,habits30d:`30 дней`,habits30dDone:`Выполнено {done} из {total} ({percent}%)`,noData:`Данных пока нет.`,period:`Период`,refresh:`Обновить отчёт`,copyReport:`Скопировать отчёт`,copyOk:`Отчёт скопирован.`,periodCompare:`Сравнение с прошлым месяцем`,incomeDelta:`Доходы Δ`,expenseDelta:`Расходы Δ`,balanceDelta:`Баланс Δ`,caloriesDelta:`Ккал/день Δ`,emptyMonthHint:`За выбранный месяц мало данных: добавьте операции или питание, чтобы отчёт стал полезнее.`,money:`Деньги`,income:`Доходы`,expense:`Расходы`,balance:`Баланс`,transactions:`Операций`,expenseByCategory:`Расходы по категориям`,incomeBySource:`Доходы по источникам`,caloriesByDay:`Калории по дням`,avgCalories:`Среднее ккал/день`,mealDays:`Дней с питанием`,caloriesUnit:`{value} ккал`,freePoolTrend:`Свободный пул по месяцам`,freePoolTrendEmpty:`Нет данных за период.`},settings:{offline:`Офлайн: {value}`,offlineYes:`да`,offlineNo:`нет`,offlineHint:`Голос и пуши требуют интернет.`,hub:{sleepMode:`Режим и сон`,goals:`Цели`,goalsText:`Сон, вода и базовые цели.`,waterNutrition:`Вода и питание`,nutrition:`Питание`,nutritionText:`Цели питания, правила рецептов и предпочтения.`,money:`Деньги`,finance:`Финансы`,overview:`Обзор`,analytics:`Аналитика`,analyticsText:`Деньги, калории и сводки за период.`,guide:`Руководство`,guideText:`Пошаговая настройка приложения и переходы в нужные разделы.`,loadControl:`Контроль нагрузки`,loadControlText:`Ограничения нагрузки и антиспам.`,interface:`Интерфейс`,interfaceText:`Тема, размер шрифта и оформление.`,data:`Данные`,dataText:`Пуши, экспорт, импорт и резервные копии.`,telegram:`Telegram`,telegramText:`Привязка бота, новый код и основные команды.`,about:`О приложении`,aboutText:`Общие настройки, Telegram и диагностика.`,dev:`Dev`,devText:`Инструменты разработки.`},general:{title:`Общие`,weightUnits:`Единицы веса`,kg:`Килограммы`,lb:`Фунты`,currency:`Валюта по умолчанию`,currencyOptions:{RUB:`Рубли (RUB)`,USD:`Доллары (USD)`,EUR:`Евро (EUR)`,GBP:`Фунты (GBP)`,CNY:`Юани (CNY)`,TRY:`Лиры (TRY)`},weekStart:`Первый день недели`,monday:`Понедельник`,sunday:`Воскресенье`,timeFormat:`Формат времени`,time24:`24 часа`,time12:`12 часов`,dateFormat:`Формат даты`,dateDmy:`дд.мм.гггг`,dateYmd:`гггг-мм-дд`,saved:`Сохранено`,save:`Сохранить`},telegram:{title:`Telegram / входящие`,intro:`Адрес сервера для входящих сообщений. Приложение будет подтягивать новые сообщения и сохранять их локально.`,enableSync:`Включить синхронизацию`,baseUrl:`Базовый адрес сервера`,pathsHint:`Из базового адреса приложение само подставляет пути для обновлений, подтверждений, отправки и голоса.`,saved:`Сохранено`,save:`Сохранить входящие`},securityPrivacy:{title:`Данные и безопасность`,intro:`Короткая карта приватности: где находятся данные и какие внешние сервисы используются.`,local:`Основные данные приложения хранятся на этом устройстве.`,cloud:`Облачная копия нужна для восстановления, Telegram и ассистента; перед восстановлением показывается, что будет загружено.`,telegram:`Telegram получает только сообщения и команды, связанные с привязанным аккаунтом.`,ai:`Функции помощника могут отправлять текст, голос или короткий контекст на сервер для обработки.`,backup:`Для ручных файлов резервной копии используйте пароль, если в копии есть финансы, здоровье или личные заметки.`},telegramCenter:{title:`Центр Telegram`,intro:`Здесь можно заново привязать бота, открыть чат и быстро вспомнить основные команды.`,stepCode:`Создайте код привязки в карточке выше.`,stepSend:`Откройте бота и отправьте команду /link с этим кодом.`,stepConfirm:`Дождитесь статуса «Привязано» — приложение само сохранит новый chat_id.`},persona:{title:`Профиль и помощник`,intro:`Имена и пол влияют на стиль сообщений в Telegram после синхронизации с облаком.`,userName:`Как вас зовут`,assistantName:`Имя помощника`,gender:`Пол (стиль общения)`,female:`Женский`,male:`Мужской`,saved:`Сохранено`,save:`Сохранить`},guardrailsCard:{title:`Контроль нагрузки`,cardTitle:`Контроль нагрузки`,intro:`Лимиты для привычек. При превышении показываются подсказки.`,maxChanges7d:`Макс. изменений привычек за 7 дней`,softDailyLimit:`Мягкий лимит активных дневных привычек`,saved:`Сохранено`,save:`Сохранить`},support:{title:`Поддержка`,intro:`RMSAssist — часть RMSUniverse. Доступ к приложению после входа на платформе и активной подписке (или пробного периода).`,telegramNote:`Telegram: привязка в онбординге — бот отвечает от имени вашего помощника после синхронизации в приложении.`,links:{site:`Сайт RMSUniverse`,siteHint:`Вход и подписка на платформе`,mirror:`RMSUniverse (com)`,mirrorHint:`Зеркало домена`,staging:`Staging платформы`,stagingHint:`Превью веб-платформы`,pwa:`PWA RMSAssist`,iosHint:`Установка приложения на iPhone`,email:`Email`,emailHint:`Поддержка по почте`}},devSection:{title:`Разработка и диагностика`,timeOverrideTitle:`Dev: подмена времени`,timeOverrideHint:`Только для тестов guardrails воды/сна`,setTime:`Установить`,resetTime:`Сбросить`,analyticsTitle:`Dev: экспорт аналитики`,analyticsHint:`JSON: деньги и калории за текущий месяц + привычки 7/30 дней. Содержит суммы и даты — не отправляйте посторонним.`,analyticsLoading:`Формирование…`,analyticsDownload:`Скачать analytics JSON`},dataSection:{title:`Данные и безопасность`},aboutApp:{title:`О приложении`,version:`Версия: {version}`,build:`Обновлено: {date}`,status:`Статус: {status}`,online:`Онлайн`,offline:`Офлайн`,reload:`Перезагрузить приложение`,installTitle:`Как установить приложение`,platformIphone:`iPhone`,platformAndroid:`Android`,iphone:`Safari → Поделиться → «На экран Домой»`,android:`Меню браузера → «Установить приложение» или «Добавить на главный экран»`},sectionNotFound:`Раздел не найден`,sectionNotFoundHint:`Откройте настройки из списка.`,backToSettings:`К настройкам`,budget:{title:`План бюджета`,monthlyAvailable:`Доход в месяц, ₽`,essentialSum:`Обязательные: сумма планов = {sum} ₽`,warning:`План обязательных расходов ≥ доступных средств`,addCategory:`+ Добавить обязательную категорию`,removeCategory:`Удалить категорию`,savePlan:`Сохранить бюджетный план`},backup:{title:`Резервная копия`,intro:`Сохраните свои данные в файл. Можно защитить копию паролем. Восстановление начнётся только после подтверждения.`,protectPassword:`Защитить копию паролем`,passwordMin:`Пароль (мин. {min} символов)`,passwordRepeat:`Повторите пароль`,passwordTooShort:`Пароль не короче {min} символов.`,passwordMismatch:`Пароли не совпадают.`,exportWithPassword:`Скачать с паролем`,downloadCopy:`Скачать копию`,restoreFromFile:`Восстановить из файла`,encryptedHint:`Файл защищён паролем. Введите пароль от копии.`,password:`Пароль`,decrypting:`Расшифровка…`,decryptPreview:`Открыть и показать, что внутри`,version:`Версия: {version}`,exportedAt:`Создано: {at}`,counts:`Задач: {tasks}, привычек: {habits}, отметок привычек: {habitLogs}, операций: {transactions}`,savingsCounts:`Целей накоплений: {goals}, взносов: {contributions}`,totalRecords:`Всего записей: {count}`,mergeMode:`Добавить к текущим данным — совпадающие записи обновятся`,replaceMode:`Заменить — удалить текущие данные и загрузить из файла`,replaceConfirm:`Да, я понимаю: текущие данные будут удалены`,import:`Импортировать`,wipeTitle:`Удалить все данные`,wipeIntro:`Безвозвратно очищает все данные на этом устройстве и создаёт пустой профиль из шаблона. Сначала сделайте резервную копию.`,wipeConfirmLabel:`Введите {word} для подтверждения`,wipeConfirmWord:`УДАЛИТЬ`,wiping:`Удаление…`,wipe:`Удалить все данные`,wipeFailed:`Не удалось удалить данные`,fileTooLarge:`Файл резервной копии слишком большой. Восстановление остановлено для защиты приложения.`,readFailed:`Не удалось прочитать файл. Убедитесь, что выбран файл резервной копии.`,importFailed:`Не удалось восстановить данные.`,decryptFirst:`Сначала откройте файл паролем и проверьте, что внутри.`,confirmReplaceCheck:`Подтвердите замену данных, поставив галочку.`,mergeConfirm:`Данные из файла могут обновить текущие настройки. Продолжить?`,validate:{notObject:`Это не похоже на резервную копию RMSAssist.`,meta:`Не удалось проверить файл резервной копии.`,data:`В файле не хватает нужных данных для восстановления.`,limit:`Файл слишком большой или содержит слишком много записей.`,entity:`В файле есть повреждённые записи. Восстановление остановлено.`},importPreview:{settingsOverwrite:`Файл содержит настройки приложения. Текущие настройки могут измениться.`,manyRecords:`В копии много записей. Восстановление может занять время.`,missingIds:`Часть записей неполная. Они будут пропущены.`,impactSummary:`Будет добавлено: {added}, обновлено: {updated}, неполных записей: {missing}.`,tableImpact:`{table}: всего {total}, новых {added}, обновлений {updated}`,moreTables:`Ещё таблиц: {count}`},encryption:{webCryptoUnavailable:`Этот браузер не может открыть защищённую копию.`,decryptNeedsPassword:`Файл зашифрован. Введите пароль.`,decryptWrongPassword:`Неверный пароль или повреждённый файл.`}},guardrailsLoad:{errInvalid:`Введите числа в допустимом диапазоне и сохраните.`},water:{title:`Цели (Вода)`,targetMl:`Цель воды, мл`,quickAddMl:`Быстрое добавление, мл`,hint:`Рекомендация: 250 мл — удобный шаг`},goalsSleep:{title:`Цели (Режим)`,sleepUntil:`Сон до`,wakeUp:`Подъём`},recipePrefs:{title:`Предпочтения рецептов`,emptyHint:`Помечайте рецепты ★ и 🚫 в разделе Питание → Рецепты.`,favorites:`Любимые`,blocked:`Заблокированные (не предлагать)`,remove:`Убрать`,restore:`Вернуть`}},personalCare:{protocolApplied:`Протокол применён`,habitsCreated:`Привычек создано: {count}`,supplementsCreated:`БАДов создано: {count}`,tasksCreated:`Задач создано: {count}`,duplicatesSkipped:`Пропущено дублей: {count}`,allAlreadyCreated:`Всё уже было создано ранее.`,confirmTitle:`30 дней: кожа / волосы / рот / ЖКТ`,confirmWillCreate:`Будет создано: {habits} привычек, {supplements} БАДов, {tasks} задач. Дубли не создаются.`,disclaimer:`Это не медицинская рекомендация. Личный трекер самонаблюдения.`,create:`Создать`,applying:`Создаю протокол…`,readyTitle:`Готовые протоколы`,readyHint:`Шаблоны наборов привычек, БАДов и задач для самонаблюдения.`,add30Day:`Добавить 30-дневный уход`,progressTitle:`Протокол ухода`,cycleDay:`День цикла`,cycleDayValue:`{day} из {total}`,habitsToday:`Привычки сегодня`,tasks:`Задачи`,tasksCompleted:`{done}/{total} завершено`,nextCheckpoint:`Следующая точка`,checkpointInDays:` — через {days} дн.`,checkpointToday:` — сегодня`},auth:{accountTitle:`Аккаунт`,signedInAs:`Вход: {login}`,logout:`Выйти`,login:`Войти`,logoutConfirm:`Выйти из аккаунта? Локальные данные на этом устройстве будут удалены. При следующем входе их можно восстановить из облака.`,cloudTitle:`Облако аккаунта`,cloudHint:`Резервная копия привязана к вашему аккаунту. Используйте её после переустановки приложения.`,saveToCloud:`Сохранить в облако`,restoreFromCloud:`Восстановить из облака`,saveFailed:`Не удалось сохранить копию.`,loadFailed:`Не удалось загрузить копию.`,cloudEncryption:{title:`Шифрование облачной копии`,hintOff:`Копия сейчас хранится в облаке в открытом виде. Задайте пароль — и она будет шифроваться прямо на устройстве, до отправки.`,hintOn:`Шифрование включено: облачная копия сохраняется в зашифрованном виде. Пароль хранится только на этом устройстве.`,passwordWarning:`Важно: пароль нигде не восстановить. Если забудете его — расшифровать облачную копию будет невозможно.`,enableBtn:`Включить шифрование`,changeBtn:`Сменить пароль`,disableBtn:`Отключить`,saveBtn:`Сохранить пароль`,cancelBtn:`Отмена`,passwordPlaceholder:`Пароль (минимум {min} символов)`,passwordRepeatPlaceholder:`Повторите пароль`,enabled:`Шифрование включено. Сохраните копию в облако заново, чтобы она была зашифрована.`,disabled:`Шифрование отключено. Следующая копия будет сохранена в открытом виде.`,restorePasswordLabel:`Пароль расшифровки`,restorePasswordPlaceholder:`Введите пароль шифрования копии`,decryptAndRestore:`Расшифровать и восстановить`},saved:`Облачная копия аккаунта сохранена.`,restored:`Данные восстановлены из облака аккаунта.`,cloudRestorePreviewTitle:`Предпросмотр восстановления`,cloudRestorePreviewHint:`Восстановление из облака выполняется в режиме объединения: совпадающие записи обновятся, остальные останутся.`,applyCloudRestore:`Применить восстановление`,cancelCloudRestore:`Отменить восстановление`,telegramRelink:{title:`Повторная привязка Telegram`,body:`Если вы отвязали бота или удалили связь через Telegram, создайте новый код здесь и отправьте команду боту. Онбординг проходить заново не нужно.`,createCode:`Создать код привязки`,newCode:`Новый код`},errors:{noCloudAccess:`Нет доступа к облаку.`,restoreFailed:`Не удалось загрузить копию.`,saveFailed:`Не удалось сохранить копию.`,noNetwork:`Нет сети. Проверьте подключение.`,authNotConfigured:`Auth API не настроен.`,loginError:`Ошибка входа.`,invalidLogin:`Логин: 3–32 символа, латиница, цифры, _.`,passwordTooShort:`Пароль: минимум 8 символов.`,wrongCredentials:`Неверный логин или пароль.`,invalidEmail:`Введите email аккаунта RMSUniverse.`,passwordRequired:`Введите пароль.`,sessionExpired:`Сессия истекла.`,pairingNeedLogin:`Нужен вход в аккаунт.`,pairingCodeFailed:`Не удалось создать код.`,pairingStatusFailed:`Не удалось проверить привязку. Повторите или запросите новый код.`,pairingCodeExpired:`Код истёк. Запросите новый.`,onboardingIntroRequired:`Сначала завершите шаг «Знакомство».`},welcome:{loading:`Загрузка…`,register:`Регистрация`,login:`Вход`,subtitle:`Трекер жизни, который работает даже без интернета, с Telegram-напоминаниями. Данные хранятся на вашем устройстве.`,tabLogin:`Вход`,tabRegister:`Регистрация`,loginLabel:`Логин`,passwordLabel:`Пароль`,confirmPasswordLabel:`Повтор пароля`,passwordMismatch:`Пароли не совпадают.`,loginFailed:`Не удалось войти.`,submitLogin:`Войти`,submitRegister:`Создать аккаунт`,submitting:`Подождите…`,assistTitle:`Assist`,showPassword:`Показать пароль`,hidePassword:`Скрыть пароль`,usernamePlaceholder:`sergey`,emailLabel:`Email аккаунта RMSUniverse`,emailPlaceholder:`you@example.com`,totpLabel:`Код двухфакторной аутентификации`,totpPlaceholder:`123456`,totpRequired:`Введите код из приложения-аутентификатора.`,subscribeCta:`Оформить подписку`,platformHint:`Вход выполняется по аккаунту платформы RMSUniverse. Регистрация и подписка — на платформе.`}},guide:{intro:`Короткий центр управления приложением: начните настройку, изучите экраны, подключите Telegram и держите в голове правила безопасности.`,stepNumber:`Шаг {n}`,openStep:`Открыть раздел`,tabs:{title:`Разделы руководства`,start:`Начать`,startSummary:`Микрошаги первичной настройки`,features:`Функционал`,featuresSummary:`Что умеют экраны нижней панели`,telegram:`Telegram`,telegramSummary:`Бот, привязка и команды`,tips:`Советы`,tipsSummary:`Безопасность, сон, вода и привычки`},welcome:{title:`Перед началом — короткое руководство`,body:`Рекомендуем пройти инструкцию по настройке приложения. Так бот и напоминания будут опираться на ваши реальные данные. Это займёт немного времени.`,dontShowAgain:`Не показывать больше`,later:`Позже`,openGuide:`Руководство`},steps:{nutritionCalc:{title:`Калькулятор питания`,body:`Заполните калькулятор в разделе «Питание» и примените расчёт целей.`,micro:{1:`Откройте «Питание» и перейдите к калькулятору.`,2:`Укажите пол, возраст, рост, вес, цель, тип тела и активность.`,3:`Проверьте ккал, белки, жиры, углеводы и нажмите применение целей.`}},supplementsRisks:{title:`Анализы в БАДах`,body:`Если есть результаты анализов — добавьте их во вкладке «Риски» в разделе «БАДы».`,micro:{1:`Откройте «БАДы» и проверьте вкладку рисков и анализов.`,2:`Внесите свежие показатели, которые есть на руках.`,3:`Не игнорируйте статусы «нужно внимание» и блокировки по анализам.`}},habits:{title:`Привычки`,body:`Добавьте и настройте привычки, которые хотите отслеживать каждый день.`,micro:{1:`Начните с 1–3 привычек, которые реально выполнить.`,2:`Задайте понятные названия, группы и удобное время.`,3:`Не добавляйте слишком много сразу: стабильность важнее объёма.`}},finance:{title:`Финансы`,body:`Заполните доход, бюджет и основные финансовые показатели.`,micro:{1:`Откройте «Финансы» и внесите доход в месяц.`,2:`Добавьте обязательные расходы, подписки, долги и цели.`,3:`Проверяйте свободный остаток и не смешивайте план с фактом.`}},nutritionProducts:{title:`Продукты`,body:`Добавьте нужные продукты во вкладке «Продукты» в разделе «Питание».`,micro:{1:`Откройте продукты в разделе «Питание».`,2:`Добавьте часто используемые продукты из каталога или вручную.`,3:`Проверяйте ккал и БЖУ на 100 г, чтобы дневник считал корректно.`}},tasks:{title:`Задачи`,body:`Добавьте актуальные задачи и при необходимости закрепите приоритетные.`,micro:{1:`Создайте задачи на ближайшие дни, а не бесконечный список.`,2:`Назначайте дату только там, где действительно есть срок.`,3:`Закрепляйте самое важное, чтобы оно было видно на «Сегодня».`}},trainings:{title:`Тренировки`,body:`Запланируйте тренировки на неделю или добавьте регулярные занятия.`,micro:{1:`Добавьте ближайшие тренировки и тип нагрузки.`,2:`Фиксируйте факт выполнения, длительность и заметки.`,3:`Следите, чтобы нагрузка не конфликтовала со сном и восстановлением.`}},nutritionGoals:{title:`Питание (цели)`,body:`Уточните цели питания и правила автоплана в настройках из меню.`,micro:{1:`Откройте цели питания в меню.`,2:`Проверьте воду, ккал, БЖУ, количество приёмов и правила рецептов.`,3:`После изменений вернитесь в «Питание» и убедитесь, что цели обновились.`}}},features:{selected:`Выбранный экран`,today:{title:`Сегодня`,body:`Главная панель дня, где собирается всё важное на текущую дату: самочувствие, планы, вода, питание, задачи, привычки, БАДы, тренировки и финансовые сигналы.`,details:{1:`Верхние плитки показывают ключевые показатели дня: воду, калории, задачи, привычки, расходы, БАДы, тренировки и другие быстрые статусы.`,2:`Кнопки быстрых действий позволяют добавить задачу, расход, доход или воду без перехода в глубокие разделы.`,3:`Лента по времени собирает ближайшие события и напоминания, чтобы видеть день как последовательность действий.`,4:`Блоки задач и привычек помогают держать фокус на том, что нужно сделать именно сегодня.`,5:`Экран полезен как ежедневная точка входа: утром проверить план, днём отмечать факт, вечером увидеть, что осталось.`}},tasks:{title:`Задачи`,body:`Рабочий список дел: задачи можно создавать, планировать по датам, завершать, переносить и выводить приоритетные задачи на экран «Сегодня».`,details:{1:`Каждая задача хранит название, дату, статус, категорию и заметки, чтобы не держать детали в голове.`,2:`Просроченные и задачи на ближайшие дни помогают видеть реальную нагрузку, а не только общий список.`,3:`Приоритетные задачи можно закреплять, чтобы они появлялись на главном экране и не терялись среди остальных дел.`,4:`Подходит для бытовых дел, рабочих действий, контрольных точек здоровья, финансовых напоминаний и задач по проектам.`,5:`Лучший сценарий: каждый день держать короткий активный список и регулярно закрывать или переносить устаревшие пункты.`}},money:{title:`Деньги`,body:`Экран фактических денежных операций: здесь записываются доходы и расходы, видны месячные показатели, свободный остаток и детализация финансового месяца.`,details:{1:`Расходы и доходы фиксируются как операции с датой, суммой, категорией, заметкой и при необходимости получателем.`,2:`Плитки месяца показывают расход сегодня, стабильный расход, стабильный доход, баланс и свободный финансовый остаток.`,3:`Финансовый монитор группирует операции по расходам, доходам, долгам и накоплениям, чтобы видеть структуру месяца.`,4:`Экран помогает отличать плановые значения из «Финансов» от реального факта денег, который уже произошёл.`,5:`Используйте его для ежедневной записи факта: покупки, зарплата, переводы, платежи по долгам и взносы в цели.`}},nutrition:{title:`Питание`,body:`Полный модуль питания: дневник еды, продукты, рецепты, план недели, калькулятор целей, контроль ккал, БЖУ, белка, воды и распределения углеводов.`,details:{1:`В дневнике фиксируются продукты и рецепты по граммам, а приложение считает ккал, белки, жиры и углеводы.`,2:`Каталог продуктов хранит БЖУ на 100 г, источник белка и флаги быстрых углеводов, чтобы расчёты были стабильными.`,3:`Калькулятор рассчитывает базовый обмен, суточный расход энергии, целевые ккал, белки, жиры, углеводы, воду и распределение по приёмам пищи.`,4:`Рецепты и недельный план помогают заранее собрать питание из доступных продуктов и масштабировать порции.`,5:`Экран «Сегодня» внутри питания показывает факт относительно целей: ккал, БЖУ, белок и углеводы до/после 18:00.`,6:`Важно: точность зависит от корректных продуктов, граммовок и своевременного применения целей из калькулятора.`}},trainings:{title:`Тренировки`,body:`Раздел физической нагрузки: здесь планируются и отмечаются тренировки, тип активности, длительность и заметки по восстановлению.`,details:{1:`Можно фиксировать силовые, кардио, мобилити, смешанные и другие типы тренировок.`,2:`Записи помогают видеть регулярность, объём нагрузки и связь тренировки с состоянием дня.`,3:`Тренировки попадают в общий контекст «Сегодня» и помогают не забывать запланированную активность.`,4:`Используйте заметки для веса, повторений, самочувствия, боли, усталости и выводов по восстановлению.`}},habits:{title:`Привычки`,body:`Система повторяемых действий: ежедневные, недельные, месячные и числовые привычки с отметками, группами и прогрессом.`,details:{1:`Привычка может быть простой отметкой, счётчиком за день или целью по количеству отметок в месяц.`,2:`Группы помогают разделять здоровье, спорт, быт, работу, уход и другие направления.`,3:`Отметки за день формируют историю, по которой видно, что реально выполняется, а что только записано.`,4:`Контроль нагрузки защищает от резкого добавления слишком большого количества привычек.`,5:`Лучший сценарий — начинать с малого, закреплять стабильность и только потом добавлять следующие привычки.`}},finance:{title:`Финансы`,body:`Раздел финансового планирования: доход, обязательные расходы, подписки, праздники, долги, накопления и шаблон распределения зарплаты.`,details:{1:`Бюджет задаёт месячный доход и стабильные обязательные расходы, от которых считается свободный пул.`,2:`Подписки хранят сервис, стоимость, период оплаты, дату списания, способ оплаты и активность.`,3:`Праздники помогают заранее учитывать даты, людей, повторяемость и бюджет подарков или событий.`,4:`Долги показывают сумму, погашено, остаток, минимальный платёж, срок и активный статус.`,5:`Накопления показывают цель, уже накоплено, прогресс, срок, важность и тип цели.`,6:`Шаблон зарплаты помогает распределять доход между фактическим доходом, долгами и накоплениями более дисциплинированно.`}},supplements:{title:`БАДы`,body:`Модуль БАДов: план приёма, напоминания, склад, продукты, анализы, риски, персональные справочные схемы и безопасность.`,details:{1:`План приёма хранит название, дозировку, единицу, частоту, время, связь с едой и активность каждой позиции.`,2:`Экран «Сегодня» по БАДам позволяет отмечать принято, пропущено, переносить и видеть ближайшие слоты.`,3:`Справочник БАДов содержит назначение, риски, противопоказания, лабораторные требования и базовые схемы.`,4:`Анализы влияют на статусы ready/caution/blocked, предупреждения и доступность персональных схем.`,5:`Склад и продукты помогают отслеживать конкретные банки, остатки, закупки и риск, что БАД закончится.`,6:`Система не назначает лечение: дозировки и изменения плана требуют осознанного подтверждения пользователя.`}}},telegram:{openBot:`Telegram-бот RMS`,openBotAction:`Открыть чат-бота`,title:`Как пользоваться ботом`,body:`Бот работает как быстрый внешний интерфейс к приложению: показывает статусы из облачного snapshot, принимает текст и голос, а действия применяются в PWA после синхронизации.`,openTelegramSettings:`Открыть привязку Telegram`,steps:{1:`Откройте бота и нажмите Start или отправьте /start.`,2:`В приложении получите код привязки и отправьте его командой /link RMS-XXXXXXXX.`,3:`Используйте меню бота для записи воды, расходов, задач и быстрых проверок.`,4:`Периодически синхронизируйте приложение, чтобы бот видел актуальные данные.`},commands:{start:`Запускает бота и показывает первые шаги привязки.`,link:`Привязывает Telegram к аккаунту приложения по одноразовому коду.`,menu:`Открывает inline-меню RMS с быстрыми разделами.`,today:`Показывает план и статус дня: задачи, вода, БАДы, напоминания.`,tasks:`Показывает задачи на сегодня.`,habits:`Показывает привычки на сегодня.`,water:`Показывает воду, цель и напоминания.`,nutrition:`Показывает калории и краткий статус питания.`,supplements:`Показывает БАДы: план, анализы, риски и напоминания.`,plan:`Показывает ближайшие события и напоминания.`,id:`Показывает chat_id для диагностики и привязки.`,deleteAccount:`Удаляет аккаунт и отвязывает Telegram. Используйте только осознанно.`,status:`Команда владельца: статус синхронизации и модулей.`,syncStatus:`Команда владельца: время последней облачной синхронизации.`,actions:`Команда владельца: очередь действий, которые требуют применения.`,help:`Команда владельца: расширенная справка по возможностям бота.`}},tips:{disclaimerTitle:`Важный дисклеймер`,disclaimer:`RMSAssist не несёт ответственности за бесконтрольный приём БАДов, игнорирование анализов, противопоказаний и рекомендаций специалистов. Все подсказки справочные, не медицинское назначение.`,supplements:`БАДы не должны приниматься по принципу «чем больше, тем лучше». Особенно осторожно относитесь к железу, йоду, кальцию, калию, витамину D и жирорастворимым витаминам.`,labs:`Требования анализов нужно соблюдать настойчиво: если система просит показатель перед регулярным приёмом, это не формальность, а защита от передозировки и неверной схемы.`,habits:`Внедрение большого количества привычек тяжело даётся мозгу. Резкая перегрузка часто вызывает стресс, сопротивление и срыв, поэтому меняйте привычки постепенно, по одной небольшой группе.`,sleep:`Сон — главный источник восстановления центральной нервной системы. Режим сна имеет колоссальное значение: без него питание, тренировки и БАДы работают намного хуже.`,water:`Водный режим нужно соблюдать строго. Человек больше чем наполовину состоит из воды, и этого факта достаточно, чтобы принять важность воды без лишних объяснений.`}},guardrailsModal:{hardStopWhy:`Почему показано: действие может нарушить жёсткое правило контроля нагрузки. Запись будет создана только после подтверждения.`,warnWhy:`Почему показано: действие пересекает настроенный порог контроля. Это предупреждение, не скрытая запись.`,infoWhy:`Почему показано: контроль нагрузки заметил состояние, на которое стоит обратить внимание.`},guardrailsManage:{habitsTitle:`Управление привычками`,editHabit:`Изменить привычку`,newHabit:`Новая привычка`,namePlaceholder:`Название`,monthlyTarget:`Цель отметок в месяц`,monthlyGoalShort:`цель {count}/мес`,daysHint:`Дни недели (пусто = каждый день)`,preferredTime:`Время выполнения (необязательно)`,notesPlaceholder:`Заметка / инструкция (необязательно)`,deleteHabit:`Удалить привычку`,deleteHabitConfirm:`Удалить эту привычку? История по дням для неё тоже будет удалена.`,addHabit:`+ Добавить привычку`,active:`Активна`,defaultHabitName:`Новая привычка`,defaultGroup:`Прочее`,groups:{other:`Прочее`,health:`Здоровье`,sport:`Спорт`},habitTypes:{daily:`Ежедневная`,weekly:`По дням недели`,monthly:`В месяц (счётчик)`,dailyNumeric:`Число за день`},habitTypeShort:{number:`число`,week:`неделя`,month:`месяц`,daily:`ежедн.`},taskPlanTitle:`Задачи на сегодня`,taskPlanHint:`Отметьте задачи для переноса на завтра.`,taskPlanEmpty:`Нет задач на сегодня.`,moveToTomorrow:`Перенести выбранные на завтра`,waterTitle:`Изменить цель воды`,waterHint:`Цель по воде (мл в день):`},trainingsPage:{title:`Тренировки`,defaultType:`Тренировка`,typeStrength:`Силовая`,typeCardio:`Кардио`,typeMobility:`Мобилити`,typeMixed:`Смешанная`,typeOther:`Другое`,dayMon:`Пн`,dayTue:`Вт`,dayWed:`Ср`,dayThu:`Чт`,dayFri:`Пт`,daySat:`Сб`,daySun:`Вс`,noDate:`без даты`,noDaysSelected:`дни не выбраны`,enterTitle:`Введите название тренировки.`,pickWeekday:`Выберите хотя бы один день недели.`,saved:`Тренировка сохранена.`,deleted:`Тренировка удалена.`,completed:`Тренировка выполнена.`,skipped:`Тренировка пропущена.`,skippedNote:`Пропущено вручную`,markCompleted:`Выполнено`,markSkipped:`Пропустить`,historyTitle:`История дня`,historyEmpty:`За выбранный день отметок пока нет.`,today:`Сегодня`,labelToday:`сегодня`,labelNotes:`заметки`,minutesShort:`мин`,week7:`7 дней`,recurrenceWeekly:`еженедельно`,recurrenceOnce:`разовая`,load:{low:`низкая`,ok:`нормальная`,high:`высокая`},recovery:{backToBack:`соседние дни`,multipleToday:`несколько сегодня`,noRestDays:`без свободных дней`,default:`восстановление`},severity:{danger:`срочно`,warning:`важно`,info:`инфо`},scheduleAt:`в {time}`,todayEmpty:`Сегодня тренировок нет.`,actionRequired:`Что требует действия`,actionsEmpty:`Действий сейчас нет.`,moreActions:`Ещё {count}`,nearest:`Ближайшая`,noWeekPlan:`На 7 дней тренировок нет.`,week:`Неделя`,trainingsShort:`трен.`,loadRecovery:`Нагрузка / восстановление`,loadLine:`Нагрузка: {status} · {count} трен. · {min} мин`,restDays:`Дней без тренировок: {count}`,hasBackToBack:` · есть соседние дни`,multipleTodayFlag:` · несколько сегодня`,noSignals:`Сигналов нет.`,addWorkout:`Добавить тренировку`,scheduleHint:`Расписание для напоминаний и плана дня.`,fieldName:`Название`,fieldType:`Тип`,fieldRecurrence:`Повтор`,recurrenceWeeklyOption:`Каждую неделю`,recurrenceOnceOption:`Один раз`,fieldDate:`Дата`,fieldWeekdays:`Дни недели`,fieldTime:`Время`,fieldMinutes:`Минут`,fieldNote:`Заметка`,saveWorkout:`Сохранить тренировку`,mySchedule:`Мой график`,scheduleEmpty:`График пуст.`,defaultTitle:`Зал`,itemLine:`{time} · {title} · {type} · {min} мин`,countDuration:`{count} трен. · {min} мин`,loadNotes:{noWeek:`Тренировок на неделю нет`,highLoad:`Высокая недельная нагрузка`,highMinutes:`Много минут тренировки на неделю`},recoveryNotes:{multipleToday:`Сегодня несколько тренировок`,backToBack:`Есть тренировки в соседние дни`,noRest:`В ближайшие 7 дней нет дней без тренировок`},actions:{today:`Сегодня тренировка`,todayDesc:`{min} мин · ближайшая {time}`,todayDescMinOnly:`{min} мин`,multipleToday:`Сегодня несколько тренировок`,highLoad:`Высокая недельная нагрузка`,highLoadDesc:`{count} тренировок · {min} мин`,noRest:`Нет свободных дней от тренировок в ближайшие 7 дней`,noPlan:`Тренировки на неделю не запланированы`}},chat:{title:`Чат RMS`,subtitle:`Ассистент в приложении. Ответы учитывают сводку данных; при устаревшей синхронизации — предупреждение выше.`,supplementsHint:`На экране БАДов: в ответы передаётся компактная сводка (только чтение, без изменения плана).`,staleSync:`Облачная копия устарела (>48 ч). Напоминания и Telegram могут не совпадать с данными на устройстве.`,refresh:`Обновить чат`,refreshing:`Обновляем…`,close:`Закрыть`,loading:`Загрузка чата…`,empty:`Локальная история чата пока пуста.`,messageLabel:`Сообщение`,placeholder:`Напишите сообщение...`,send:`Отправить`,mic:`Микрофон`,micRequesting:`…`,micRequestingAria:`Запрос доступа к микрофону`,authorSystem:`Система`,authorYou:`Вы`,authorAssistant:`RMS`,statusPending:`отправляется`,statusSent:`отправлено`,statusFailed:`не отправлено`,statusLocal:`локально`,sendFailed:`Не удалось отправить. Можно повторить.`,retry:`Повторить`,retrying:`Повторяем…`,retryAria:`Повторить отправку сообщения`,voiceUnavailableHint:`Запись недоступна — запишите голос заново через «Микрофон».`,recording:`Идёт запись…`,recordingMax:` Максимум 60 секунд для тестового режима.`,stopRecording:`Стоп`,cancelRecording:`Отменить`,stopRecordingAria:`Остановить запись`,cancelRecordingAria:`Отменить запись`,voiceReady:`Голосовая запись готова`,duration:`Длительность: {value}`,size:`Размер: {value}`,format:`Формат: {value}`,audioUnsupported:`Ваш браузер не поддерживает аудио-предпросмотр.`,previewUnavailable:`Предпросмотр недоступен в этом браузере.`,voiceDraftNote:`Запись пока уходит только на тестовый сервер. После перезагрузки аудио нужно будет записать заново.`,deleteVoice:`Удалить`,rerecordVoice:`Записать заново`,deleteVoiceAria:`Удалить голосовую запись`,rerecordVoiceAria:`Записать голос заново`,sendVoice:`Отправить голос`,resendVoice:`Повторить отправку голоса`,sendingVoice:`Отправляем…`,sendVoiceAria:`Отправить голос`,resendVoiceAria:`Повторить отправку голоса`,startRecordingAria:`Начать запись голоса`,voiceMessage:`Голосовое сообщение · {duration}`,syncUpdated:`Обновлено сообщений: {count}.`,syncNoNew:`Новых сообщений нет.`,syncFailed:`Не удалось обновить входящие сообщения.`,syncNotConfigured:`Синхронизация входящих сообщений пока не настроена.`,syncFetchFailed:`Не удалось получить входящие сообщения.`,loadHistoryFailed:`Не удалось загрузить локальную историю чата.`,sendError:`Не удалось отправить. Можно повторить.`,saveLocalFailed:`Не удалось сохранить сообщение локально.`,backendStub:`Сервер чата ещё не настроен. Сообщение сохранено локально.`,mockReply:`Тестовый ответ помощника. Сообщение сохранено локально.`,errors:{invalidResponse:`Сервер чата вернул некорректный ответ.`,configMissing:`Синхронизация чата не настроена.`,updatesNotConfigured:`Синхронизация обновлений чата не настроена.`,ackNotConfigured:`Подтверждение обновлений чата не настроено.`,voiceNotConfigured:`Отправка голосовых сообщений не настроена.`,sendNetworkError:`Не удалось отправить сообщение на сервер чата.`,updatesNetworkError:`Не удалось получить обновления чата.`,ackNetworkError:`Не удалось подтвердить обновления чата.`,voiceNetworkError:`Не удалось отправить голосовое сообщение.`,httpFailed:`Ошибка сервера чата. Повторите позже.`},assistantUnavailable:`Ассистент временно недоступен. Распознанный текст сохранён.`,voiceErrors:{emptyDraft:`Пустая запись. Попробуйте ещё раз.`,unsupported:`Запись голоса не поддерживается в этом браузере.`,permissionDenied:`Доступ к микрофону не разрешён.`,noMicrophone:`Микрофон не найден.`,emptyRecording:`Запись пустая. Попробуйте ещё раз.`,recordFailed:`Не удалось записать голос.`},voice:{transcription_unavailable:`Распознавание голоса временно недоступно. Попробуйте позже.`,empty_transcript:`Не удалось распознать речь. Запишите голос чуть громче и ближе к микрофону.`,transcription_failed:`Ошибка распознавания на сервере. Попробуйте ещё раз.`,config_missing:`Голосовой чат не настроен. Проверьте адрес синхронизации в настройках.`,voice_upload_failed:`Не удалось отправить запись. Проверьте сеть и повторите.`,network_error:`Нет связи с сервером. Повторите, когда сеть восстановится.`,default:`Не удалось отправить голос. Можно повторить, пока запись открыта.`,retryTranscription:`Повторить распознавание`,retryUpload:`Повторить отправку`}},labs:{display:{status:{normal:`Норма`,below:`Ниже нормы`,above:`Выше нормы`,outdated:`Устарел`,missing:`Нет данных`,cannot_interpret:`Нет референса`,default:`Нет данных`},category:{vitamins:`Витамины`,minerals:`Минералы`,blood:`Кровь`,hormones:`Гормоны`,metabolic:`Метаболизм`,liver:`Печень`,kidney:`Почки`,inflammation:`Воспаление`,lipids:`Липиды`,other:`Другое`},supplementGuidance:{status:{ready:`Данных достаточно`,missing_labs:`Не хватает анализов`,caution:`Нужна осторожность`,blocked:`Нужна консультация`,missing_profile:`Заполните профиль`,not_applicable:`Нет правил анализов`,default:`Нет данных`},summary:{ready:`Анализы не блокируют справочную схему.`,missing_labs:`Не хватает анализов.`,missing_labsNamed:`Не хватает: {names}.`,caution:`Есть показатели, требующие осторожности.`,blocked:`Перед регулярным приёмом нужна консультация.`,missing_profile:`Для персональной оценки заполните профиль.`,not_applicable:`Для этого БАДа пока нет правил анализов.`},labIdsMore:`{shown} и ещё {n}`,overdose:{normal:`{name} в норме — дополнительный приём обычно не нужен. Риск передозировки при регулярном употреблении: тошнота, нарушения обмена веществ, нагрузка на органы.`,above:`{name} выше референса — дополнительный приём недопустим. Риск передозировки: ухудшение самочувствия, токсические эффекты, необходима консультация специалиста.`},warning:{missingLab:`Не хватает анализа: {name}`,outdatedLab:`Анализ устарел: {name}`,cannotInterpret:`Нельзя интерпретировать: {name}`,aboveRange:`Показатель выше референса: {name}`,belowRange:`Показатель ниже референса: {name}`,cautionAbove:`Осторожность — выше референса: {name}`,cautionBelow:`Осторожность — ниже референса: {name}`,recommendedCheck:`Рекомендуется проверить: {name}`,disclaimer:`Это справочная подсказка, не медицинское назначение.`}},evaluation:{missingReason:`Результат анализа отсутствует`,outdatedWarning:`Анализ устарел — рекомендуется пересдать`,noReference:`Нет референсного диапазона для интерпретации`,unitConversion:`Невозможно сконвертировать единицы: {from} → {to}`},retake:{urgency:{due_now:`Пора пересдать`,due_soon:`Скоро пора`,optional:`По желанию`,blocked_context:`Согласовать с врачом`,not_needed:`Актуально`},listMore:`{shown} и ещё {n}`,summary:{emptyPlan:`Активный план пуст — рекомендации пересдачи по БАДам не применяются.`,dueNow:`Пора обновить {count} показателей для текущего плана.`,dueSoon:`Скоро понадобится обновить {count} показателей.`,blocked:`Есть показатели, которые нужно согласовать с врачом перед пересдачей.`,allOk:`По активному плану критичных пересдач сейчас не требуется.`},message:{blocked:`{name}: пересдача только после согласования с врачом (контекст профиля безопасности).`,missing:`{name}: нет актуального результата для БАДов в плане.`,outdated:`{name}: анализ устарел{days} — пересдайте до обновления схемы.`,outdatedDays:` ({days} дн.)`,afterDoseChange:`{name}: после изменения дозы в плане желательно обновить анализ.`,dueSoon:`{name}: скоро истечёт срок актуальности (≈{days} дн.).`,required:`{name}: нужен для регулярного приёма БАДов из плана.`,safety:`{name}: учитывайте профиль безопасности при планировании анализа.`,optional:`{name}: полезен как контекст для текущего плана.`}},trend:{classification:{improving:`Улучшение`,worsening:`Ухудшение`,stable:`Стабильно`,volatile:`Нестабильно`,insufficient_data:`Мало данных`},emDash:`—`}},validation:{biomarkerIdRequired:`Укажите показатель анализа.`,unknownBiomarkerId:`Неизвестный показатель: {biomarkerId}.`,valueRequired:`Значение должно быть числом.`,unitRequired:`Укажите единицу измерения.`,collectedAtRequired:`Укажите дату анализа.`,collectedAtInvalid:`Некорректная дата анализа.`,referenceLowInvalid:`Нижняя граница нормы должна быть числом.`,referenceHighInvalid:`Верхняя граница нормы должна быть числом.`,referenceRangeInvalid:`Нижняя граница не может быть больше верхней.`,notFound:`Запись анализа не найдена.`,unknown:`Не удалось сохранить анализ.`}},diagnostics:{title:`Диагностика`,version:`Версия: {version}`,build:` · сборка {date}`,network:`Сеть: {status}`,online:`онлайн`,offline:`оффлайн`,pwa:`Установленное приложение: {status}`,sw:`Фоновый сервис: {status}`,scope:`Область: {scope}`,cloud:`Облако: {status}`,cloudNotConfigured:`не настроено (адрес облачной синхронизации не задан)`,cloudNoSync:`нет успешной синхронизации`,cloudStale:`{when} · устарело (>48 ч)`,cloudOk:`{when} · актуально`,cloudLastError:`Последняя ошибка синхронизации: {error}`,voiceLastError:`Последняя ошибка голосовой синхронизации: {error}`,chatLastError:`Последняя ошибка синхронизации чата: {error}`,localDb:`Локальная база:`,dbChecking:`проверяется…`,dbSchema:`схема v{version}`,dbError:`ошибка`,pwaUpdateHint:`Обновление: закройте приложение полностью и откройте снова с экрана «Домой» (см. docs/PWA_UPDATE_BEHAVIOR.md).`,copy:`Копировать диагностику`,copied:`Скопировано`,copyPrompt:`Скопируйте диагностику:`,checkData:`Проверить данные`,checking:`Проверка…`,integrityOk:`Целостность: без замечаний`,integrityWarningsSummary:`Целостность: {count} предупреждений`,noWarnings:`Замечаний нет`,checkFailed:`Не удалось проверить данные`,dbOpenError:`Ошибка открытия БД`,supportBundleHint:`Пакет для поддержки содержит финансы и здоровье — не отправляйте посторонним.`,downloadBundle:`Скачать пакет для поддержки`,bundling:`Формирование…`,swChecking:`проверяется…`,swUnsupported:`не поддерживается`,swSupported:`поддерживается`,swUnavailable:`недоступно`,swRegistered:`зарегистрирован`,swNotRegistered:`не зарегистрирован`,integrityWarningCodes:{foods_unknown_catalog:`Продукты с catalogId, которых нет в каталоге`,recipes_missing_ingredient_catalog:`Рецепты с ингредиентами, которых нет в каталоге`,meal_plan_items_unknown_recipe:`Элементы плана с recipeId, которых нет в рецептах (включая каталог)`,meal_entries_unknown_food:`Записи дневника с foodId, которых нет в продуктах`,meal_entries_unknown_recipe:`Записи дневника с recipeId, которых нет в рецептах`,pantry_items_unknown_food:`Запасы Pantry с userProductId, которых нет в продуктах`,habit_logs_unknown_habit:`Логи привычек с habitId, которых нет в привычках`,savings_contributions_unknown_goal:`Взносы накоплений с goalId, которых нет в целях`,savings_contributions_unknown_income:`Взносы накоплений со linkedIncomeId, которого нет в транзакциях`,debt_payments_unknown_debt:`Платежи по долгам с debtId, которого нет в долгах`,debt_payments_unknown_income:`Платежи по долгам со linkedIncomeId, которого нет в транзакциях`,training_completion_unknown_training:`Логи тренировок с trainingId, которого нет в расписании`,supplement_intake_unknown_plan_item:`Отметки БАДов с planItemId, которого нет в плане`,supplement_product_links_unknown_plan_item:`Связи продуктов БАДов с planItemId, которого нет в плане`,supplement_product_links_unknown_product:`Связи продуктов БАДов с productId, которого нет в продуктах`,supplement_reminders_unknown_plan_item:`Напоминания БАДов с plan item, которого нет в плане`,subscription_reminders_unknown_subscription:`Напоминания подписок с subscriptionId, которого нет в подписках`,chat_messages_unknown_thread:`Сообщения чата с threadId, которого нет в тредах`,holidays_invalid_date:`Праздники с некорректной датой`,finance_balance_drift:`Баланс счетов не совпадает с суммой операций`}},cloudSyncApi:{noEndpoint:`Не указан адрес облачной синхронизации.`,rateLimit:`Так часто не нужно, подождите немного :)`,syncFailed:`Синхронизация не удалась (код {status}). Проверьте адрес в настройках сервера.`,syncOk:`Синхронизация с облаком выполнена.`,backupFailed:`Не удалось отправить полную копию в облако (код {status}).`,backupOk:`Полная копия в облаке сохранена.`,restoreFailed:`Не удалось получить копию из облака (код {status}).`,restoreOk:`Данные загружены из облака.`,backupPasswordRequired:`Облачная копия зашифрована. Введите пароль шифрования, чтобы восстановить данные.`,backupPasswordInvalid:`Неверный пароль шифрования. Проверьте пароль и попробуйте снова.`,actionsFailed:`Облачные действия не выполнены (код {status}).`,ackFailed:`Не удалось подтвердить облачное действие (код {status}).`,queueEmpty:`Новых голосовых команд нет.`,applySummaryApplied:`Применено действий: {applied}.`,applySummarySkipped:`Не применено: {skipped}.`,applySummaryNoMatch:`Не найдено: {noMatch}.`,applySummaryAmbiguous:`Неоднозначно: {ambiguous}.`,applySummaryUnsupported:`Не поддерживается: {unsupported}.`,applySummaryErrors:`Ошибки: {errors}.`,autoSyncFailed:`Фоновая синхронизация с облаком не удалась.`,unchanged:`Данные не изменились — синхронизация пропущена.`,backupUploadFailed:`Не удалось загрузить резервную копию в облако после onboarding.`,voiceApplyFailed:`Не удалось применить голосовые команды.`},cloud:{snapshot:{supplementsActionRequired:`БАДы ожидают отметки: {count}`,financeLimitation:`Краткая сводка только для просмотра, не финансовый совет.`,personaUserDefault:`друг`,personaAssistantDefault:`помощник`},voice:{amountNotRecognized:`Сумма не распознана.`,taskTitleNotRecognized:`Название задачи не распознано.`,taskNotFound:`Задача не найдена.`,tasksAmbiguous:`Найдено несколько похожих задач.`,habitNameNotRecognized:`Название привычки не распознано.`,habitNotFound:`Привычка не найдена.`,habitsAmbiguous:`Найдено несколько похожих привычек.`,productNameNotRecognized:`Название продукта не распознано.`,recipeNameNotRecognized:`Название рецепта не распознано.`,recipeIngredientsNotRecognized:`Ингредиенты рецепта не распознаны.`,recipeIngredientNotRecognized:`Ингредиент рецепта не распознан.`,recipeFoodNotFound:`Продукт для рецепта не найден: {foodName}`,recipeFoodAmbiguous:`Найдено несколько продуктов для рецепта: {foodName}`,supplementPlanItemNotFound:`БАД по planItemId не найден.`,supplementPlanItemDisabled:`БАД по planItemId выключен.`,supplementNameNotRecognized:`Название БАДа не распознано.`,supplementNotInPlan:`БАД не найден в активном плане.`,supplementsAmbiguous:`Найдено несколько БАДов с таким названием.`,productIdMissing:`productId не указан.`,productNotFound:`Продукт не найден.`,productBuildFailed:`Не удалось собрать продукт.`,supplementIntakeUndoEmpty:`Нет отметок БАД для отмены за этот день.`,supplementIntakeUndoLabel:`Отменена отметка {planItemId}`,mealDescriptionNotRecognized:`Описание еды не распознано.`,mealFoodNotFound:`Не нашёл продукт в голосовом описании еды.`,mealAppliedLabel:`{count} позиций · {preview}`,trainingNotRecognized:`Тренировка не распознана.`,noteReadOnly:`Заметка только для просмотра, данные не меняются.`,unsupported:`Действие не поддерживается.`,alreadyApplied:`Действие уже применено ранее.`,applyFailed:`Не удалось применить действие.`,transactionApplied:`{type} {amount} · {category}`,transactionIncome:`Доход`,transactionExpense:`Расход`,waterApplied:`+{amountMl} мл`,defaultSupplementName:`БАД`,createdFromTelegram:`Создано из Telegram`,ocrImportNote:`Telegram OCR/import`,recipeFitLabel:`{name} · {kcal} ккал (цель {targetKcal}, совпадение {score}%)`,trainingDaysMissing:`Не указаны дни недели для повторяющейся тренировки.`,defaultHabitGroup:`Прочее`,debtCreatedLabel:`{name} · {amount} ₽`,debtNotFound:`Долг не найден: {name}`,debtsAmbiguous:`Найдено несколько долгов: {name}`,debtPaymentLabel:`Платёж по «{name}» · {amount} ₽`,subscriptionCreatedLabel:`{name} · {amount} ₽`,holidayDateMissing:`Дата праздника не распознана.`,savingsGoalCreatedLabel:`{name} · цель {amount} ₽`,savingsGoalNotFound:`Цель накоплений не найдена: {name}`,savingsGoalsAmbiguous:`Найдено несколько целей накоплений: {name}`,savingsTopupLabel:`Пополнение «{name}» · {amount} ₽`,balanceSetLabel:`Баланс: {amount} ₽`,budgetLimitSetLabel:`Лимит «{category}»: {amount} ₽/мес`,budgetMonthlySetLabel:`Бюджет на месяц: {amount} ₽`,budgetLimitInvalid:`Лимит бюджета не распознан.`,budgetLimitNotFound:`Категория лимита не найдена: {category}`,budgetLimitsAmbiguous:`Найдено несколько категорий лимита: {category}`,budgetLimitDeletedLabel:`Лимит удалён: {category}`,defaultDosageUnit:`капсула`,paramsNotRecognized:`Параметры пользователя не распознаны.`,paramsApplied:`Обновлено: {params}`,paramsAppliedRecalculated:`Обновлено: {params}. Цели питания пересчитаны.`,labBiomarkerNotFound:`Биомаркер не распознан: {name}`,labBiomarkersAmbiguous:`Найдено несколько биомаркеров: {name}`,labUnitMissing:`Единица измерения анализа не распознана.`,labResultLabel:`{name}: {value} {unit}`}},appMenu:{ariaLabel:`Меню приложения`,title:`Меню`,favorites:`Быстрые действия`,sectionSettings:`Настройки`,trainings:`Тренировки`,supplements:`БАДы`,financeSettings:`Бюджет и подписки`,automation:`Автоматизация`,sleepWater:`Сон и вода`,nutritionGoals:`Питание (цели)`,sectionApp:`Приложение`,guide:`Руководство`,brandMotto:`Верни разуму смысл`,restart:`Перезапустить приложение`,devTime:`Dev-время`,footerOnline:`Онлайн`,footerOffline:`Офлайн`,version:`Версия {version} · {status}`},money:{title:`Деньги`,addExpense:`+ Расход`,addIncome:`+ Доход`,monthlyEssential:`Общий расход в месяц`,totalMonthlyExpense:`Общий расход в месяц`,stableMonthlyExpense:`Стабильный расход (мес)`,stableMonthlyIncome:`Стабильный доход (мес)`,dayExpense:`Расход сегодня`,dayExpenseHint:`Сегодня`,savingsTotal:`Накопления`,openFinance:`Открыть финансы`,modalExpense:`Новый расход`,modalIncome:`Новый доход`,modalEdit:`Редактирование операции`,monitor:{title:`Мониторинг финансов`,hint:`Выберите раздел — откроется список операций за месяц.`,back:`← К деньгам`,tabsAria:`Разделы мониторинга`,tabs:{expenses:`Расходы`,income:`Доходы`,debts:`Долги`,savings:`Цели`},screenExpenses:`Расходы`,screenIncome:`Доходы`,screenDebts:`Долги`,screenSavings:`Цели`,monthFilter:`Период: {month}`,emptyExpenses:`Расходов за этот месяц нет.`,emptyIncome:`Доходов за этот месяц нет.`,emptyDebts:`Платежей по долгам за этот месяц нет.`,emptySavings:`Взносов в накопления за этот месяц нет.`,grandTotal:`Итого за месяц`,groupCount:`{count} операций`,uncategorized:`Без категории`,debtFallback:`Долг`,savingsFallback:`Цель накоплений`,detailNote:`Заметка: {text}`,detailMerchant:`Получатель: {text}`,detailSource:`Источник: {text}`,detailDebtSource:`Тип: {source}`,detailSavingsSource:`Тип: {source}`,detailLinkedIncome:`Связано с доходом (авто-распределение)`,debtSource:{salary:`из зарплаты`,manual:`вручную`},savingsSource:{salary:`из зарплаты`,manual:`вручную`,repeat:`повтор взноса`}}},finance:{hubText:`Бюджет, подписки, праздники, долги и накопления.`,balance:`Баланс`,balanceHint:`Сумма на счетах. Новые доходы и расходы меняют баланс автоматически. При смене баланса можно сохранить или очистить историю операций.`,balanceAmount:`Сумма, ₽`,saveBalance:`Сохранить баланс`,saving:`Сохранение…`,clearHistoryTitle:`Очистить историю расходов и доходов?`,clearHistoryText:`Если ответите «Да», все операции будут удалены. Счётчики «Доходы» и «Расходы» на экране «Деньги» обнулятся. Если «Нет», история сохранится и не будет влиять на новый баланс — только новые операции изменят баланс на счетах.`,clearHistoryYes:`Да, очистить историю`,clearHistoryNo:`Нет, сохранить историю`,actionRequiredTitle:`Что требует действия`,actionRequiredEmpty:`Финансовых действий сейчас нет.`,actions:{freePoolNegative:`Свободный остаток ушёл в минус`,freePoolLow:`Свободный остаток почти исчерпан`,safeDailyEmpty:`Безопасный дневной лимит исчерпан`,categoryOver:`Категория "{category}" превысила лимит`,categoryOverage:`Превышение: {amount}`,todayOverSafeDaily:`Сегодня потрачено больше безопасного дневного лимита`,todaySpendLine:`{spent} / {limit}`,debtsNoPayment:`По долгам не было платежей в этом месяце`,savingsNoContribution:`Цели накоплений не пополнялись в этом месяце`},open:`Открыть`,moreCount:`Ещё {count}.`,severity:{info:`инфо`,warning:`важно`,danger:`срочно`},tabs:{budget:`Бюджет`,subscriptions:`Подписки`,holidays:`Праздники`,debts:`Долги`,savings:`Накопления`},salaryTemplate:{title:`Шаблон зарплаты`,autoFill:`Автоподставлять шаблон зарплаты`,debt:`Долг:`,savings:`Накопление:`,off:`выкл`,updated:`Обновлено:`,reset:`Сбросить шаблон`,resetTitle:`Сбросить шаблон зарплаты?`,resetText:`Настройки авто-распределения будут очищены.`,debtLinked:`(долг: {name})`,goalLinked:`(цель: {name})`},debts:{title:`Долги`,empty:`Пока нет долгов. Добавьте первый долг.`,inactive:`(выключен)`,paidLine:`погашено {paid} / {total} · осталось {remaining} ({percent}%)`,remainingLabel:`осталось`,due:`Срок:`,minPayment:` · платёж от {amount}`,active:`Активен`,inactiveLabel:`Неактивен`,add:`+ Добавить долг`,edit:`Изменить`,delete:`Удалить`,deleteTitle:`Удалить долг?`,deleteText:`Долг и все платежи будут удалены.`,modalEdit:`Изменить долг`,modalNew:`Новый долг`,name:`Название`,total:`Сумма долга, ₽`,paid:`Уже погашено, ₽`,kind:`Вид долга`,dueDate:`Срок погашения`,minPaymentLabel:`Мин. платёж, ₽`,schedule:`График`,notes:`Заметки`,kinds:{personal:`Личный`,bank:`Банк`,installment:`Рассрочка`,other:`Другое`},schedules:{monthly:`Ежемесячно`,weekly:`Еженедельно`,custom:`Свой`},errNameRequired:`Введите название долга.`,errTotalPositive:`Сумма долга должна быть больше 0.`,errSaveFailed:`Не удалось сохранить долг.`},savings:{title:`Цели накоплений`,remainingTotal:`Осталось: {amount}`,history:`История`,empty:`Пока нет целей. Добавьте первую цель.`,inactive:`(выключена)`,progress:`{saved} / {target} ({percent}%)`,targetLabel:`цель`,byDate:` · до {date}`,importance:` · важность {value}/10`,active:`Активна`,inactiveLabel:`Неактивна`,add:`+ Добавить цель`,edit:`Изменить`,delete:`Удалить`,deleteTitle:`Удалить цель?`,deleteText:`Цель и все взносы будут удалены.`,modalEdit:`Изменить цель`,modalNew:`Новая цель`,name:`Название`,target:`Цель, ₽`,saved:`Уже накоплено, ₽`,itemKind:`Вид цели`,targetDate:`Срок (дата)`,importanceLabel:`Важность (1–10)`,notes:`Заметки`,kinds:{product:`Товар`,service:`Услуга`,event:`Мероприятие`,other:`Другое`},errNameRequired:`Введите название цели.`,errTargetPositive:`Цель должна быть больше 0.`,errSaveFailed:`Не удалось сохранить цель.`},holidays:{empty:`Добавьте дни рождения и праздники с бюджетом на подарок.`,yearly:` · ежегодно`,budget:` · бюджет {amount}`,active:`Активна`,inactiveLabel:`Неактивна`,edit:`Изменить`,delete:`Удалить`,deleteTitle:`Удалить событие?`,deleteText:`Запись будет удалена без восстановления.`,add:`+ Событие`},subscriptions:{defaultName:`Подписка`,paymentMethodAppStore:`Магазин приложений`,filterActive:`Активные`,filterAll:`Все`,filterArchived:`Архив`,empty:`Подписок пока нет. Добавьте первую.`,chargeSoon:`скоро списание`,monthlyApprox:`≈ {amount}/мес`,charge:`Списание:`,chargeIn:` (через {days} дн.)`,active:`Активна`,inactiveLabel:`Неактивна`,edit:`Изменить`,delete:`Удалить`,deleteTitle:`Удалить подписку?`,deleteText:`Запись и напоминания будут удалены.`,add:`+ Подписка`,period:{day:`день`,week:`нед.`,month:`мес.`,quarter:`3 мес.`,halfYear:`6 мес.`,year:`год`}},monthHeader:{month:`Месяц:`,debt:`Долг`,income:`Доходы`,expense:`Расходы`,balance:`Баланс`,monthBalance:`Итог месяца`,essential:`Обязательные`,freePool:`Свободные в месяц`,addIncomeHint:`Добавьте доход в этом месяце.`,budgetWarning:`План обязательных ≥ доступных средств. Проверь настройки бюджета.`},monthControl:{title:`Контроль месяца`,badge:`месяц`,freeHint:`После обязательных расходов из плана бюджета`,free:`Свободно`,onAccounts:`На счетах`,dailyGuide:`Ориентир на день`,today:`Сегодня`,monthTotals:`Итоги месяца`,income:`Доходы`,expense:`Расходы`,monthBalance:`Итог месяца`,negativeWarning:`Свободный остаток ушёл в минус.`,footer:`Оценка по текущим данным, без будущих доходов.`},categoriesPanel:{title:`Категории и лимиты`,configure:`Настроить лимиты`,empty:`Категорий пока нет.`,spent:`Потрачено: {amount}`,limit:` · лимит: {amount}`,overage:`Перерасход: {amount}`,remaining:`Осталось: {amount}`,more:`Ещё {count} категорий.`},categoryStatus:{over:`перерасход`,warning:`близко к лимиту`,ok:`в норме`,no_plan:`без лимита`,none:`без лимита`},monthTrend:{title:`Тренд по месяцам`,description:`Баланс доходов и расходов (без учёта обязательных категорий).`},operations:{title:`Операции за месяц`,empty:`Операций нет.`},transaction:{goalTopup:`Пополнение цели`,editOperation:`Редактировать операцию`,salary:`Зарплата`,income:`Доход`,expense:`Расход`,fixedGoalTopup:`Режим фиксирован: пополнение цели.`,amountPlaceholder:`Сумма`,notePlaceholder:`Заметка (необяз.)`,goalTopupHint:`Будет создан только взнос в цель «{name}». Обычный расход не создаётся.`,incomeSource:`Источник дохода`,incomeSalary:`Зарплата`,incomeOther:`Другое`,incomeSources:{salary:`Зарплата`,bonus:`Премия / бонус`,freelance:`Фриланс`,side_income:`Подработка`,refund:`Возврат`,gift:`Подарок или перевод`,investment:`Инвестиции / проценты`,other:`Другое`},autoSplit:`Авто-распределение`,withholdDebt:`Удерживать в долг`,selectDebt:`Выберите долг`,debtRemaining:`{name} (осталось {amount})`,topUpSavings:`Пополнить накопление`,selectGoal:`Выберите цель`,previewTitle:`Что будет создано`,previewIncome:`Доход: {amount}.`,previewDebt:`Погашение долга: {amount}{name}.`,previewSavings:`Накопление: {amount}{name}.`,pickDebt:` · выберите долг`,pickGoal:` · выберите цель`,errPickDebt:`Выберите долг.`,errWithhold:`Введите корректное удержание.`,errWithholdMax:`Удержание не должно превышать доход.`,errPickGoal:`Выберите цель накоплений.`,errSavings:`Введите корректное накопление.`,errSavingsMax:`Накопление не должно превышать доход.`,errCombined:`Удержание и накопление вместе не должны превышать доход.`,fallbackCategorySavings:`Накопление`,fallbackCategoryOther:`Прочее`},transactionOps:{updated:`Операция обновлена.`,updateFailed:`Операцию не удалось обновить.`,goalTopupNote:`Взнос в цель «{name}»`,goalToppedUp:`Цель «{name}» пополнена на {amount}. Расход не создан.`,goalNotFound:`Цель накопления не найдена, взнос не создан.`,savingsGoalFallback:`накопления`,incomeSaved:`Доход сохранён: {amount}.`,expenseSaved:`Расход сохранён: {amount} · {category}.`,deleteConfirm:`Удалить операцию?`},db:{debtNotFound:`Долг для авто-распределения не найден.`,savingsGoalNotFound:`Цель накопления для авто-распределения не найдена.`,incomeAllocationsLocked:`Доход с авто-распределением нельзя редактировать. Удалите его и создайте заново.`,categories:{debtRepayment:`Погашение долга`,savings:`Накопление`},autoNotePercent:`Авто: {value}% от дохода`,autoNoteAmount:`Авто: {amount}`,salarySaved:`Зарплата сохранена: {parts}.`,salaryPartIncome:`доход {amount}`,salaryPartDebt:`долг {amount}`,salaryPartGoal:`цель {amount}`},subscriptionEditor:{edit:`Изменить подписку`,new:`Новая подписка`,service:`Сервис / приложение`,billingPeriod:`Период оплаты`,periodDay:`День`,periodWeek:`Неделя`,periodMonth:`Месяц`,periodQuarter:`3 месяца`,periodHalfYear:`6 месяцев`,periodYear:`Год`,price:`Стоимость за период, ₽`,chargeDate:`Дата автосписания`,account:`Телефон или email подписки`,paymentMethod:`Способ оплаты`,payCard:`Карта`,payStore:`Магазин`,payWallet:`Кошелёк`,bankPlaceholder:`Банк`,last4:`Последние 4 цифры`,storePlatform:`Платформа (App Store, Google Play…)`,walletProvider:`Платёжная система`,walletContact:`Email или телефон`,reminders:`Напоминания перед списанием`,reminder1d:`За 1 день`,reminder12h:`За 12 часов`,reminder1h:`За 1 час`,reminder10m:`За 10 минут`,reminder5m:`За 5 минут`,active:`Активная подписка`,errService:`Укажите название сервиса.`,errPrice:`Укажите стоимость подписки.`,errDate:`Укажите дату автосписания.`,errCard:`Укажите последние 4 цифры карты.`},holidayEditor:{edit:`Изменить событие`,new:`Новое событие`,name:`Название`,personName:`Имя (для дней рождения)`,kind:`Тип`,kindBirthday:`День рождения`,kindHoliday:`Праздник`,kindOther:`Другое`,date:`Дата`,yearly:`Повторять каждый год`,budget:`Бюджет на подарок/мероприятие, ₽`,notes:`Заметки`,remind7:`Напомнить за 7 дней`,active:`Активно`,errName:`Укажите название.`,errDate:`Укажите дату.`,errBudget:`Укажите бюджет на подарок.`},modals:{replaceTitle:`Заменить данные?`,replaceText:`Текущие данные будут полностью удалены и заменены данными из файла. Продолжить?`,replaceConfirm:`Продолжить`,importSuccessTitle:`Импорт завершён`,importSuccessText:`Данные загружены. При необходимости перезапустите приложение.`,restartApp:`Перезапустить приложение`,notSpecified:`Не указано`},cloudBackup:{hasCopy:`Копия в облаке{date}`,noCopy:`Облачная копия ещё не создана.`},restore:{foundCopy:`Найдена облачная копия{date}.`,foundCopyDate:` от {date}`}},command:{parse:{empty:`Введите команду`,expenseAmount:`Укажите сумму расхода`,incomeAmount:`Укажите сумму дохода`,topupAmount:`Укажите сумму пополнения`,goalName:`Укажите название цели`,unrecognized:`Команда не распознана. Примеры: вода 250, расход 350 транспорт, доход 70000, переезд +1000`},expenseSaved:`Расход сохранён.`,expenseCategoryFallback:`Категория не найдена, поставил «Прочее». Расход сохранён.`,incomeSaved:`Доход сохранён.`,savingsAmbiguous:`Найдено несколько целей: {name}`,savingsNotFound:`Цель не найдена: {name}`,savingsToppedUp:`Цель «{goal}» пополнена на {amount}`,unsupported:`Пока не поддерживается.`},dashboard:{timeline:{meal:`питание`,water:`вода`,supplement:`БАДы`,training:`тренировка`,sleep:`сон`,task:`задача`,plan:`план`},actionSeverity:{info:`инфо`,warning:`важно`,danger:`срочно`},actionDomain:{tasks:`задачи`,habits:`привычки`,water:`вода`,nutrition:`питание`,training:`тренировка`,supplements:`БАДы`,finance:`деньги`,cloud:`облако`,automation:`план`},actions:{tasksOverdue:`Есть просроченные задачи: {count}`,habitsPending:`Остались привычки: {count}`,waterRemaining:`Осталось выпить {ml} мл воды`,proteinShort:`Белок еще не добран`,proteinProgress:`{current} / {target} г`,supplementsPending:`БАДы ожидают: {count}`,trainingToday:`Сегодня тренировка`,trainingLine:`{time} · {title}`,cloudStale:`Облачная копия устарела — синхронизируйте`,freePoolNegative:`Свободный пул в минусе — проверьте бюджет`,freePoolLow:`Свободный пул на исходе — сдержите траты`}},automation:{supplementDefault:`БАД`,mealTitle:`Еда: {name}`,mealIn30:`Через 30 минут приём пищи: {name}.`,mealMacros:`Ориентир: {macros}.`,mealWater:`Вода сейчас: примерно {ml} мл.`,waterTitle:`Вода`,waterReminderMessage:`К {time} ориентир {target} мл из {total} мл за день. Следующее напоминание — через {hours} ч от пробуждения.`,telegramPrefix:{meal:`[Еда]`,water:`[Вода]`,supplement:`[БАД]`,training:`[Тренировка]`,sleep:`[Сон]`,custom:`[Напоминание]`},telegramTone:{strong:`Фокус включён. Сделай следующий шаг.`,focused:`Проверь план и держи темп.`,soft:`Мягкое напоминание без спешки.`},trainingTodayTitle:`Сегодня тренировка: {title}`,trainingTodayMessage:`Сегодня {title} в {time}. Спокойно держим план: еда, вода, БАДы и без суеты.`,training3hTitle:`До тренировки 3 часа`,training3hMessage:`Через 3 часа {title}. Проверь приём пищи, воду и всё, что нужно взять с собой.`,training2hTitle:`До тренировки 2 часа`,training2hMessage:`Через 2 часа {title}. Собираемся в рабочий режим: вода, питание, форма, фокус.`,supplementTitle:`БАД: {name}`,sleepTitle:`Подготовка ко сну`,sleepMessage:`Через 30 минут целевое время сна ({time}). Пора снижать свет, закрывать еду и готовиться ко сну.`,macrosKcal:`{kcal} ккал · Б {protein} г · Ж {fat} г · У {carbs} г`,customMessages:{title:`Мои напоминания`,intro:`Свои сообщения в Telegram в выбранное время.`,savedCloud:`Сохранено`,savedLocal:`Сохранено на этом устройстве`,saveFailed:`Не удалось сохранить`,deleteConfirm:`Удалить это напоминание?`,deletedCloud:`Удалено`,deletedLocal:`Удалено на этом устройстве`,cloudPending:`Облако синхронизируется позже`,deleteFailed:`Не удалось удалить`,disable:`Выключить`,enable:`Включить`,disabled:`Выключено`,enabled:`Включено`,updateFailed:`Не удалось изменить`,empty:`Своих напоминаний пока нет. Есть только из питания, БАД и тренировок.`,time:`Время`,titleLabel:`Заголовок`,titlePlaceholder:`Проверить задачи`,bodyLabel:`Текст`,bodyPlaceholder:`Текст для Telegram`,enabledLabel:`Включено`,addMessage:`Добавить`,saving:`Сохраняем…`},preview:{title:`План на день`,intro:`Что бот отправит в Telegram в выбранный день.`,ownershipHint:`Это пользовательский центр расписания и своих напоминаний. Облачные backup/restore/voice queue операции доступны только в dev/admin режиме.`,date:`День`,refresh:`Обновить`,loadFailed:`Не удалось загрузить план`,telegramTitle:`Telegram`,telegramHint:`Укажите чат, куда слать напоминания.`,chatIdInstruction:`Чтобы узнать ID, откройте бота RMSAssist в Telegram и отправьте /id. Скопируйте число из ответа.`,enableAutomation:`Отправлять в Telegram`,chatId:`Ваш Telegram ID`,chatIdPlaceholder:`123456789`,telegramLinked:`Telegram привязан автоматически после /link в боте.`,settingsSaved:`Сохранено`,saveSettings:`Сохранить`,cloudTitle:`Облако`,cloudHint:`Копия данных для бота и другого телефона.`,cloudBackupScopeHint:`Синхронизация — это компактный snapshot для Telegram/automation. Полная копия — отдельный backup для восстановления данных.`,syncOk:`Синхронизация выполнена {time}`,syncNow:`сейчас`,syncFailed:`Не удалось синхронизировать`,backupConfirm:`Сохранить полную копию всех данных в облако?`,backupOk:`Копия сохранена {time}`,backupFailed:`Не удалось сохранить копию`,applyRefreshFirst:`Сначала обновите список команд`,applyFailed:`Не удалось применить команды`,queueEmpty:`Новых голосовых команд нет`,queueCount:`В очереди {count}`,queueRefreshFailed:`Не удалось обновить очередь`,restoreConfirm:`Подтянуть данные из облака на этот телефон? Локальные записи обновятся, остальное останется.`,restoreOk:`Данные восстановлены {time}. Приложение перезапустится.`,restoreFailed:`Не удалось загрузить из облака`,syncBtn:`Синхронизировать`,backupBtn:`Полная копия`,restoreBtn:`Восстановить`,refreshQueueBtn:`Обновить список`,applyBtn:`Выполнить`,voiceQueueItem:`Голосовое сообщение`,summaryMeals:`Еда {count}`,summaryTrainings:`Тренировки {count}`,summarySupplements:`БАДы {count}`,summaryCustom:`Свои {count}`,summaryWater:`Вода {ml} мл`,eventsTitle:`Сообщения`,eventsEmpty:`На этот день ничего не запланировано`,eventMeal:`Еда`,eventWater:`Вода`,eventSupplement:`БАД`,eventTraining:`Тренировка`,eventSleep:`Сон`,eventCustom:`Своё`,deleteConfirm:`Удалить это напоминание?`,deleted:`Напоминание удалено`,deletedLocal:`Напоминание удалено на этом устройстве`,deleteFailed:`Не удалось удалить напоминание`,saved:`Сохранено`,savedLocal:`Сохранено на этом устройстве`,saveFailed:`Не удалось сохранить`,editUnavailable:`Это напоминание настраивается в разделе питания, воды, БАД или тренировок.`,editCustomTitle:`Редактировать своё напоминание`,editSleepTitle:`Напоминание о сне`,editSleepHint:`Напоминание приходит за 30 минут до целевого времени сна.`,sleepTimeTarget:`Целевое время сна`}},push:{title:`Уведомления`,unsupported:`Не поддерживается. Добавьте приложение на экран «Домой» (iOS 16.4+).`,denied:`Уведомления заблокированы в настройках устройства. Разрешите их в Настройки → RMS.`,enabled:`Включены`,enable:`Включить уведомления`,unsubscribeError:`Ошибка отписки`,subscribeError:`Ошибка подписки`,errors:{unsupported:`Уведомления не поддерживаются.`,vapidMissing:`Ключ сервера уведомлений не настроен.`,permissionDenied:`Разрешение на уведомления не получено.`,server:`Ошибка сервера (код {status}).`,serverUnreachable:`Сервер недоступен: {detail}`}},savingsHistory:{title:`История взносов — {name}`,all:`Все`,empty:`Пока нет взносов`,fromSalary:`из зарплаты`,repeat:`Повторить`,deleteTitle:`Удалить взнос?`,deleteText:`Сумма будет вычтена из накоплено.`,sourceSalary:`зарплата`,sourceManual:`вручную`,sourceRepeat:`повтор`},onboarding:{loading:`Загрузка…`,redirecting:`Перенаправление…`,back:`Назад`,skip:`Пропустить`,saving:`Сохранение…`,next:`Далее`,newCode:`Новый код`,telegramSaveFailed:`Не удалось сохранить привязку Telegram.`,telegramIdentityRequired:`Сначала завершите шаги с именем и помощником, затем привяжите Telegram.`,stepSaveFailed:`Не удалось сохранить шаг.`,errName:`Укажите, как вас зовут (минимум 2 символа).`,errAssistant:`Укажите имя помощника (минимум 2 символа).`,steps:{identity:`Знакомство`,money:`Деньги`,profile:`Ваши параметры`,nutrition:`Питание`,labs:`Анализы`,telegram:`Telegram`,default:`Настройка`},subtitles:{identity:`Как вас зовут, имя помощника в Telegram и пол для стиля общения.`,money:`Баланс, бюджет и основные траты в месяц.`,profile:`Рост, вес, активность и режим сна.`,nutrition:`Цель питания и расписание приёмов пищи.`,labs:`Введите последние анализы или отметьте «нет данных».`,telegram:`Привязка обязательна для напоминаний. Отправьте команду боту.`},identity:{yourName:`Как вас зовут?`,yourNamePlaceholder:`Например, Дарья`,assistantName:`Как зовут вашего помощника в Telegram?`,assistantPlaceholder:`Например, Влад`,sex:`Ваш пол (для стиля общения бота)`,female:`Женский`,male:`Мужской`},money:{balance:`Баланс, ₽`,balancePlaceholder:`Сумма на счетах`,monthly:`Доход в месяц, ₽`,debtTotal:`Общая сумма долгов, ₽`,food:`Еда / мес`,housing:`Жильё / мес`,transport:`Передвижение / мес`,telecom:`Связь / мес`,subscriptions:`Подписки / мес`,health:`Здоровье / мес`},debt:{defaultName:`Общий долг`},profile:{height:`Рост, см`,weight:`Вес, кг`,age:`Возраст`,activity:`Активность`,bodyType:`Тип телосложения`,wake:`Пробуждение`,sleep:`Сон`,activityLevels:{sedentary:`Минимальная (сидячая работа)`,light:`Лёгкая (1–2 тренировки в неделю)`,moderate:`Умеренная (3–4 тренировки)`,active:`Высокая (5–6 тренировок)`,veryActive:`Очень высокая (ежедневные нагрузки)`},bodyTypes:{ectomorph:{title:`Эктоморф`,text:`Худощавое телосложение, быстрый обмен. Часто сложнее набирать массу — важны калории и белок.`},mesomorph:{title:`Мезоморф`,text:`Атлетичное телосложение, хорошо реагирует на нагрузки. Баланс белков, жиров и углеводов обычно работает лучше всего.`},endomorph:{title:`Эндоморф`,text:`Склонность к накоплению массы. Полезны регулярная активность и контроль углеводов вечером.`},mixed:{title:`Смешанный тип`,text:`Комбинация черт разных типов. Калькулятор подстроит цели под ваши параметры и активность.`}}},nutrition:{goal:`Цель`,intensity:`Интенсивность: {percent}%`,mealsPerDay:`Приёмов пищи в день`,mealInterval:`Интервал между приёмами, ч`,allergies:`Есть аллергии / ограничения по продуктам`,goals:{cut:`Снижение веса`,maintain:`Поддержание`,bulk:`Набор массы`}},labs:{value:`Значение`,none:`Нет`},telegram:{step1:`1. Откройте бота RMSAssist в Telegram.`,step2:`2. Отправьте команду ниже (можно скопировать).`,step3:`3. Дождитесь подтверждения — приложение откроет «Сегодня» автоматически.`,generating:`Генерация кода…`,copyAria:`Скопировать команду привязки`,copied:`Скопировано`,copy:`Копировать`,copyPrompt:`Скопируйте команду:`,chatIdHint:`Узнать chat_id: отправьте боту /id. Код действует 10 минут.`,pending:`Ожидаем подтверждение…`,confirmed:`Привязано!`,newCode:`Запросить новый код`,switchAccount:`Другой аккаунт / выход`,openBot:`Открыть бота в Telegram`,openBotAria:`Открыть @rmstrackerbot в Telegram`},restore:{title:`Восстановить данные?`,hint:`Можно восстановить или начать заново.`,restoring:`Восстановление…`,restore:`Восстановить из облака`,skip:`Начать без восстановления`,loadFailed:`Не удалось загрузить копию.`}},menu:{task_add:`+ Задача`,expense_add:`+ Расход`,income_add:`+ Доход`,salary_add:`+ Зарплата`,water_quick:`Вода +250`,savings_topup:`Пополнить цель`,savings_history:`История взносов`,meal_add:`+ Приём пищи`,food_add:`+ Продукт`,settings_open:`Настройки`,backup_open:`Резервная копия`,debts_open:`Долги`,budget_open:`План бюджета`},subscriptionReminder:{title:`Скоро списание`,open:`Открыть подписки`},nutrition:{title:`Питание`,applyGoalsDone:`Цели питания и воды применены.`,simpleModeHint:`Упрощённый режим: дневник и рецепты на день. План недели и калькулятор скрыты — в Настройках → Питание.`,todayCard:{title:`Сегодня`,kcal:`Ккал: {current} / {target}`,protein:`Белок {current} / {target} г ({mode})`,proteinQuality:`кач.`,proteinTotal:`общ.`,fat:`Жиры {current} / {target} г`,carbs:`Углеводы {current} / {target} г`,addMeal:`+ Приём пищи`,saveToPlan:`Сохранить в план`,carbsBefore18:`Углеводы до 18:00: {grams} г ({percent}%) · цель {target}%`,noRecipes:`Нет рецептов для сохранения`,planTrimmed:`Часть приёмов не перенесена (превышено число приёмов пищи).`},diaryTitle:`Дневник за день`,diaryEmpty:`Пока нет записей питания за сегодня`,display:{recipeFallback:`Рецепт`},diary:{recipe:`Рецепт: {name}`,collapse:`▼ свернуть`,expand:`▶ развернуть`,removeRecipe:`Удалить рецепт`,entryLine:`{food} · {grams} г — {kcal} ккал · Б {protein} · Ж {fat} · У {carbs}`,grams:`{grams} г`,macros:`{kcal} ккал · Б {protein} · Ж {fat} · У {carbs}`,delete:`Удалить`,confirmRemoveMeal:`Удалить весь приём (рецепт) из дневника?`,confirmDelete:`Удалить`,cancel:`Отмена`},tabs:{today:`Сегодня`,addMeal:`+ Приём пищи`,recipes:`Рецепты`,foods:`Продукты`,weekPlan:`План недели`,calc:`Калькулятор`},recipeBuilder:{saved:`Сохранено`,saving:`Сохраняю…`,saveAsRecipe:`Сохранить как рецепт`,addedToPlan:`Добавлено в план`,addingToPlan:`Добавляю…`,addToMealSlot:`Поставить в выбранный приём пищи`,needCalcFirst:`Сначала получите расчёт.`,recipeSaved:`Рецепт сохранён.`,recipeSaveFailed:`Не удалось сохранить рецепт.`,addedToMealPlan:`Рецепт добавлен в план питания.`,addToMealPlanFailed:`Не удалось добавить рецепт в план питания.`,selected:`Выбран`,add:`Добавить`,title:`Подбор граммовок`,intro:`Рассчитайте граммовки продуктов под калории и БЖУ выбранного приёма пищи из калькулятора.`,needCalcAndApply:`Сначала рассчитайте и примените калькулятор в целях — тогда появятся приёмы пищи.`,openCalculator:`Открыть калькулятор`,mealSelectLabel:`Приём пищи (1–{count})`,mealNotFound:`Цель приёма не найдена. Сначала примените цели питания.`,pickProducts:`Выбери продукты`,searchPlaceholder:`Например: курица, рис, творог`,foodsNotFound:`Продукты не найдены.`,selectedFoods:`Выбранные продукты`,pickForCalc:`Выберите продукты для расчёта.`,grams:`Граммы`,lock:`Зафиксировать`,constraints:`Ограничения`,minGrams:`Мин, г`,maxGrams:`Макс, г`,calculate:`Рассчитать граммовки`,notCalculatedYet:`Расчёт ещё не выполнен.`,matchScore:`Совпадение: {percent}%`,matchBelow90:`Совпадение ниже 90%. Можно сохранить как частичный вариант или изменить продукты.`,lockedSuffix:` · фикс.`,totals:`Итог: {target}`,targetLabel:`Цель: {target}`,deviations:`Отклонения: ккал {kcal}% · Б {protein}% · Ж {fat}% · У {carbs}%`,retryHint:`Измените продукты, граммовки или ограничения и рассчитайте ещё раз.`,recipeName:`Название рецепта`,partialSaveHint:`Сохранится как частичный вариант.`,slotReplaceHint:`Слот выбранного приёма будет заменён этим рецептом.`,optimizerStatusSuccess:`Подходит`,optimizerStatusPartial:`Частично`,optimizerStatusFailed:`Не удалось`,macroTarget:`{kcal} ккал · Б {protein} г · Ж {fat} г · У {carbs} г`,defaultRecipeName:`Рецепт под цель · {meal}`},optimizer:{pickProducts:`Выберите продукты для рецепта.`,missingCatalogId:`Есть продукт без идентификатора.`,duplicateProduct:`Один и тот же продукт выбран дважды.`,invalidMacros:`У одного из продуктов некорректные КБЖУ.`,invalidConstraints:`Некорректные ограничения граммовки.`,invalidStep:`Некорректный шаг граммовки.`,startClamped:`Стартовая граммовка ограничена допустимым диапазоном.`,scoreBelow:`Не удалось достичь {percent}% совпадения из выбранных продуктов.`,needProtein:`Похоже, не хватает источника белка.`,needCarbs:`Похоже, не хватает источника углеводов.`,fatOverflow:`Сильный перебор жиров.`,maxGramsReached:`Некоторые продукты достигли максимальной граммовки.`,minGramsReached:`Некоторые продукты достигли минимальной граммовки.`,allLocked:`Все продукты заблокированы, граммовки не менялись.`},calculatorWarnings:{fatRaisedToMinimum:`Начальный расчёт жиров оказался ниже безопасного минимума. Жиры увеличены до минимально рекомендуемого уровня.`,carbsOutOfRange:`По выбранным параметрам углеводы выходят за рекомендуемый диапазон. Увеличьте или уменьшите калории либо измените интенсивность цели.`,mealsDuringSleep:`Некоторые приёмы пищи попадают в период сна. Проверьте время первого приёма и интервал между приёмами.`,lastMealTooLate:`Последний приём пищи запланирован менее чем за час до сна. Рекомендуется сдвинуть первый приём примерно на {minutes} минут(ы) раньше.`},mealTags:{breakfast:`Завтрак`,lunch:`Обед`,dinner:`Ужин`,snack:`Перекус`},mealLabels:{meal:`Приём {num}`,mealWithTime:`Приём {num} · {time}`,mealOption:`Приём {num} · {time} · {kcal} ккал · Б {protein} · Ж {fat} · У {carbs}`,mealShort:`{time} — {kcal} ккал`},calc:{title:`Калькулятор питания`,sex:`Пол`,sexMale:`Мужской`,sexFemale:`Женский`,age:`Возраст`,heightCm:`Рост, см`,weightKg:`Вес, кг`,bodyType:`Тип телосложения`,bodyEctomorph:`Эктоморф`,bodyMesomorph:`Мезоморф`,bodyEndomorph:`Эндоморф`,bodyMixed:`Смешанный`,activity:`Активность`,activitySedentary:`Сидячая`,activityLight:`Лёгкая нагрузка`,activityModerate:`Умеренная`,activityActive:`Высокая`,activityVeryActive:`Очень высокая`,goal:`Цель`,goalBulk:`Набор`,goalMaintain:`Поддержание`,goalCut:`Похудение`,goalIntensity:`Интенсивность цели`,mealsPerDay:`Приёмов пищи в день (3–6, пусто = по рекомендации)`,wakeTime:`Время пробуждения`,firstMealTime:`Время первого приёма пищи`,mealInterval:`Интервал между приёмами (часы)`,interval2h:`2 часа`,interval2_5h:`2,5 часа`,interval3h:`3 часа`,applyToGoals:`Применить в цели`},calcResults:{bmr:`Базовый обмен`,bmrSub:`ккал · основной обмен`,tdee:`Суточный расход`,tdeeSub:`ккал · суточный расход`,target:`Цель`,targetSub:`ккал · цель по калориям`,surplusDeficit:`Профицит / дефицит: {delta}`,deltaNeutral:`0% — без изменения`,deltaFormat:`{sign}{pct}% ({sign}{kcal} ккал)`,macrosDay:`БЖУ на день`,protein:`Белок`,fat:`Жиры`,carbs:`Углеводы`,pctKcal:`{pct}% ккал`,waterDay:`Вода на день`,waterSub:`рекомендуемая норма напитков`,mealsCount:`Приёмов пищи в день:`,carbBefore18:`До 18:00: {grams} г ({pct}%)`,carbAfter18:`После 18:00: {grams} г`,carbBefore18Input:`Углеводы до 18:00, %`,mealDistribution:`Распределение приёмов пищи`,warnings:`Предупреждения`,mealNum:`Приём {num}`,macroP:`Б {grams} г`,macroF:`Ж {grams} г`,macroC:`У {grams} г`,mealKcal:`{kcal} ккал`,waterNote:`Цель воды — это напитки; часть воды приходит из еды.`},recipes:{title:`Рецепты`,dayTitle:`Рецепты на день`,dayHint:`Выберите рецепт и добавьте в сегодняшний приём — без недельного плана.`,dayQuickHint:`Быстро добавить рецепт в сегодняшний дневник.`,dayEmptyHint:`Добавьте продукты и рецепты — здесь появятся быстрые варианты на сегодня.`,openRecipes:`Открыть рецепты`,allRecipes:`Все рецепты`,kcalScore:`{kcal} ккал · {score}%`,empty:`Нет доступных рецептов.`,fitScore:`Подходит на {score}% · {kcal} ккал · Б {protein} · Ж {fat} · У {carbs} г`,ingredientsShort:`{count} ингр.`,pantryFull:`Есть всё`,pantryPartialOne:`Не хватает 1 ингредиента`,pantryPartialMany:`Не хватает {count} ингредиентов`,pantryNone:`Ничего нет`,removeFavorite:`Убрать из избранного`,addFavorite:`В избранное`,open:`Открыть`,addToMeal:`Добавить в приём`,statsSummary:`Всего рецептов: {total}. Есть всё: {full}, почти: {partial}, без запасов: {none}.`,pantryFilter:`Запасы (Pantry)`,filterAll:`Все рецепты`,filterFull:`Есть всё`,filterPartial:`Почти всё`,filterNone:`Нет запасов`,sort:`Сортировка`,sortScore:`По цели`,sortPantry:`Сначала по Pantry`,mealTime:`Время приёма пищи`,searchByName:`Поиск по названию`,searchPlaceholder:`Название рецепта`,createRecipe:`Создать рецепт`,editTitle:`Редактировать рецепт`,newTitle:`Новый рецепт`,mealTagsLegend:`Под какие приёмы подходит`,ingredients:`Ингредиенты`,addIngredient:`+ Добавить ингредиент`,needFoodsFirst:`Сначала добавьте продукты в разделе «Продукты», чтобы собирать рецепты.`,duplicateIngredient:`Один и тот же продукт нельзя добавить дважды.`,scoreForMeal:`Оценка к цели приёма: {score}%`,evaluateByMeal:`Оценивать по приёму`,autofit:`Автоподогнать под цель`,selectMealForScore:`Выберите приём для оценки.`,nothingToAutofit:`Нечего подгонять.`,autofitScore:`Оценка: было {before} → стало {after}`,basePortion:`На базовую порцию: {kcal} ккал · Б {protein} · Ж {fat} · У {carbs} г`,unlockGrams:`Разблокировать граммы`,lockGrams:`Заблокировать граммы`,saveToMy:`Сохранить в мои`},foods:{title:`Продукты`,empty:`Пока нет продуктов. Добавьте первый.`,per100:`На 100 г: {kcal} ккал · Б {protein} · Ж {fat} · У {carbs}`,pantryStock:`Запас (Pantry):`,gramsShort:`г`,piecesShort:`шт`,saveStock:`Сохранить запас`,clearStock:`Очистить`,addFromCatalog:`Добавить из каталога`,addManual:`Добавить вручную`,syncing:`Синхронизация…`,syncCatalog:`Синхронизировать мои продукты с каталогом`,myCatalog:`Мой каталог`,myCatalogHint:`Продукты, добавленные вручную в каталог. Можно редактировать, удалять или заменить везде на другой продукт.`,myCatalogEmpty:`Пока нет. Добавьте продукт через «Добавить из каталога» → «Нет нужного продукта? Добавить вручную».`,searchPlaceholder:`Поиск по названию…`,editProduct:`Изменить продукт`,newProduct:`Новый продукт`,kcalPer100:`Ккал на 100 г`,proteinPer100:`Белок на 100 г`,fatPer100:`Жиры на 100 г`,carbsPer100:`Углеводы на 100 г`,hasFastCarbs:`Содержит быстрые углеводы`,replaceEverywhere:`Заменить везде`},addMeal:{title:`Добавить приём пищи`,needFoodFirst:`Сначала добавьте продукт из каталога.`,pickFromCatalog:`Выбрать из каталога`,pickProduct:`Выберите продукт.`,gramsRequired:`Введите граммы больше 0.`,product:`Продукт`,grams:`Граммы`,time:`Время`,saveMeal:`Сохранить приём пищи`},weeklyCard:{title:`Неделя`,avgKcal:`Среднее ккал`,avgMacros:`Белок / Жир / Углеводы`,avgMacrosValue:`{protein}г / {fat}г / {carbs}г`,daysOnTarget:`Дней в цели`,goal:`Цель`,daysOf7:`{count} из 7`,targetKcal:`{kcal} ккал`},planApply:{noPlanToday:`На сегодня нет плана для применения`,diaryUpdated:`План в дневнике обновлён`,diaryUpdatedPartial:`План в дневнике обновлён. Часть рецептов не добавлена: недоступны продукты или рецепт.`,diaryAdded:`План добавлен в дневник`,diaryAddedPartial:`План добавлен в дневник. Часть рецептов не добавлена: недоступны продукты или рецепт.`,mealSlotsMismatch:`Количество приёмов пищи отличается, часть слотов не перенесена.`},replaceSlot:{hintFat:`арахисовая паста без сахара`,hintGeneric:`продукт для рецепта`,missingRoles:`Не хватает продуктов для роли: {roles}.`,fallbackRoles:`Нет вариантов «без сахара» для роли: {roles}. Добавьте пасту без сахара.`},recipeRoles:{carb_base:`крупы`,fruit:`фрукты/ягоды`,protein:`белок`,fat:`жир (орехи/паста)`,veg:`овощи`,side:`гарнир`,dairy:`молочка`},foodEditor:{syncDone:`Синхронизация продуктов выполнена: обновлено {count}`,nameRequired:`Введите название продукта.`,kcalRequired:`Калории должны быть больше 0.`,saveFailed:`Не удалось сохранить продукт.`,backfillResult:`Обновлено: {updated}, не найдено в каталоге: {missing}`},grams:{kg:`{kg} кг`,g:`{grams} г`},weekPlan:{title:`План недели`,dayColumn:`День`,dailyTarget:`Цель на день: {kcal} ккал · {protein} г белка`,weekPicker:`Неделя (выберите любой день)`,targetsChanged:`Цели питания изменились. Пересчитайте порции под текущие цели.`,recalcPortions:`Пересчитать порции`,bufferCopied:`Буфер: скопирован день {date}, слотов: {count}`,autoplanDay:`День для автоплана:`,planRecipes:`Рецепты для плана:`,sortDefault:`Обычный порядок`,sortPantry:`Сначала по Pantry`,autoplanDayBtn:`Автоплан на день`,autoplanWeekBtn:`Автоплан на неделю`,compareFact:`Сравнить с фактом`,copyDay:`Копировать день`,pasteDay:`Вставить в день`,copyDayToWeek:`Копировать день на неделю`,copyPrevWeek:`Копировать прошлую неделю`,closeShopping:`Закрыть список покупок`,shoppingList:`Список покупок`,applying:`Применяем…`,applyToday:`Применить план на сегодня`,replace:`Заменить`,pantryFull:` · есть всё по Pantry`,pantryPartial:` · не хватает {count}`,pantryNone:` · нет по Pantry`,noRecipesHint:`Добавьте продукты из каталога, чтобы открылись рецепты для плана.`,done:`Готово`,insufficientProducts:`Недостаточно подходящих продуктов для генерации. Добавьте продукты в «Мои продукты».`,overwriteDayTitle:`Перезаписать план на этот день?`,overwriteDayText:`Текущие слоты будут заменены.`,overwriteWeekTitle:`Перезаписать всю неделю?`,overwriteWeekText:`Все 7 дней будут заменены копией выбранного дня.`,replaceWeekTitle:`Заменить текущую неделю прошлой?`,replaceWeekText:`Текущие слоты будут удалены и заменены планом прошлой недели.`,updateDiaryTitle:`Обновить план в дневнике?`,updateDiaryText:`Ранее добавленные из плана записи за сегодня будут заменены. Ручные записи останутся без изменений.`},shopping:{title:`Список покупок — неделя {week}`,rounding:`Округление:`,roundNone:`Без`,copyList:`Скопировать список`,resetMarks:`Сбросить отметки`,show:`Показать:`,showAll:`Все`,showCovered:`Что уже есть`,showMissing:`Что купить`,clipboardFallback:`Буфер недоступен. Выделите и скопируйте вручную:`,selectAll:`Выделить всё`,atHome:`(есть дома)`,checkedCount:`Отмечено {checked} из {total}. Уже есть дома: {covered}`,resetTitle:`Сбросить отметки покупок?`,resetText:`Все галочки в списке покупок для этой недели будут сняты.`,resetConfirm:`Сбросить`},saveToPlan:{title:`Сохранить в план…`,hint:`Переносятся только рецепты. Одиночные продукты пока не переносятся.`,factFor:`Факт за: {date}`,tomorrow:`Завтра`,pickDate:`Выбрать дату`},planVsFact:{title:`План vs Факт — {date}`,noEntries:`За этот день нет записей питания.`,plan:`План`,fact:`Факт`,deviation:`Отклонение`,proteinQuality:`Белок (кач.)`,proteinTotal:`Белок (общ.)`,fatGr:`Ж, г`,carbsGr:`У, г`,kcal:`Ккал`},modals:{cannotDelete:`Нельзя удалить`,gotIt:`Понятно`,deleteRecipeTitle:`Удалить рецепт?`,deleteRecipeText:`Рецепт будет удалён из списка. План и дневник не изменятся.`,productInUseTitle:`Нельзя удалить: продукт используется`,inMyFoods:`В моих продуктах: {count}`,inRecipes:`В рецептах: {count}`,replaceEverywhere:`Заменить везде`,deleteCatalogTitle:`Удалить продукт из каталога?`,deleteCatalogText:`Это действие нельзя отменить.`,syncProductsTitle:`Обновить связанные продукты?`,syncProductsText:`Это обновит название и БЖУ на 100 г у {count} ваших продуктов.`,update:`Обновить`,skipUpdate:`Не обновлять`,replaceTitle:`Заменить «{name}» на…`,replaceSummary:`Будет заменено: в моих продуктах — {foods}, в рецептах — {recipes}.`,replaceSearch:`Поиск продукта`,replaceNotFound:`Ничего не найдено или выберите из списка.`,replaceDoneTitle:`Готово: замена выполнена`,replaceDoneText:`Во всех «Мои продукты» и рецептах указан новый продукт.`,deleting:`Удаление…`,deleteOldCatalog:`Удалить старый продукт из каталога`,replacing:`Замена…`,replace:`Заменить`,replaceFailed:`Не удалось выполнить замену.`,addToMealTitle:`Добавить в приём`,toDiary:`В дневник`,toPlan:`В план`,date:`Дата`,meal:`Приём`,portionPreview:`Порция: {scale}× · оценка {score}%`,addedToDiary:`Рецепт добавлен в дневник.`,addedToPlan:`Рецепт добавлен в план.`,addFailed:`Не удалось добавить.`,missingProducts:` Не хватает продуктов: {names}.`,recipeNotFound:` Рецепт не найден.`,addToPlanFailed:`Не удалось добавить в план.`,retry:`Попробовать снова`,addMissing:`Добавить недостающие`,replaceInPlanTitle:`Заменить рецепт в плане?`,replaceInPlanText:`Текущий рецепт будет заменён.`,adding:`Добавление…`,addToDiary:`Добавить в дневник`,addToPlan:`Добавить в план`,replaceRecipe:`Заменить рецепт`,randomTop3:`Случайная из топ-3`,generatedOptions:`Сгенерированные варианты`,strictNoSugar:`Строго без сахара`,regenerate:`Сгенерировать ещё`,collapse:`Свернуть`,showAll:`Показать все`,addMissingProduct:`Добавить недостающий продукт`,otherOptions:`Другие варианты`,noAlternatives:`Нет доступных альтернатив (добавьте продукты в «Мои продукты» или выберите другой слот).`,fitAlt:`Подходит: {score}% · {kcal} ккал · Б {p} · Ж {f} · У {c}`,noIdealFallback:`Нет идеального варианта (без сахара). Проверь ингредиенты.`,select:`Выбрать`,inFavorites:`★ В избранном`,toFavorites:`☆ В избранное`,product:`продукт`},catalog:{title:`Каталог продуктов`,searchLabel:`Поиск продукта`,searchPlaceholder:`Начните вводить название…`,protein:`Белок`,fat:`Жиры`,carbs:`Углеводы`,top:`Топ`,all:`Все`,addManual:`Нет нужного продукта? Добавить вручную`,back:`Назад`,fastCarbsTitle:`Быстрые углеводы`,fastCarbsWarning:`Частое употребление быстрых углеводов приводит к сахарному диабету, ожирению и другим серьёзным негативным последствиям.`,adding:`Добавление…`,add:`Добавить`,cancel:`Отмена`,manualTitle:`Добавить продукт вручную`,name:`Название`,kcalPer100:`Ккал / 100 г`,proteinLabel:`Белки`,fatLabel:`Жиры`,carbsLabel:`Углеводы`,group:`Группа`,proteinSource:`Источник белка`,proteinSourcePlant:`Растительный`,proteinSourceAnimal:`Животный`,saveAndAdd:`Сохранить и добавить`,foundCount:`Найдено: {count}`,notFound:`Ничего не найдено.`,added:`Добавлено: {name}`,myTag:`Мой`,per100:`На 100 г: {kcal} ккал · Б {protein} · Ж {fat} · У {carbs}`,errors:{nameRequired:`Введите название продукта.`,kcalRequired:`Калории должны быть больше 0.`},groups:{cereals:`Крупы`,vegetables:`Овощи`,fruits:`Фрукты`,dairy:`Молочка`,meat:`Мясо`,meat_poultry:`Мясо / птица`,fish_seafood:`Рыба и морепродукты`,eggs:`Яйца`,legumes:`Бобовые`,nuts:`Орехи`,mushrooms:`Грибы`,seaweed:`Водоросли`,sausage:`Колбасы`,smoked_canned:`Копчёности и консервы`,dried_fruits:`Сухофрукты`,oils:`Масла / жиры`,oils_fats:`Масла / жиры`,bread:`Хлеб`,berries:`Ягоды`,other:`Прочее`},editTitle:`Редактировать продукт в каталоге`,addedToCatalog:`Продукт добавлен в каталог`,addToMyProducts:`Добавить в мои продукты`,proteinSourceNone:`Нет`,tagsOptional:`Теги (опц., через запятую)`,saveFailed:`Не удалось сохранить.`,validationError:`Заполните название и укажите числа ≥ 0 для Ккал/Б/Ж/У.`,saving:`Сохранение…`},settings:{title:`Питание`,simpleModeTitle:`Упрощённый режим`,simpleModeLabel:`Упрощённый режим: дневник и «Рецепты на день» без плана недели и калькулятора.`,goalsTitle:`Цели (Питание — масса)`,caloriesBulk:`Калории (набор массы)`,proteinGr:`Белок, г`,proteinCounter:`Белок в счётчике`,proteinQuality:`Качественный (только животный белок)`,proteinTotal:`Общий (животный + растительный)`,rulesTitle:`Питание — Ограничения и разнообразие`,repeatsPerWeek:`Повторы рецепта в неделю`,defaultRepeats:`3 (по умолчанию)`,avoidSameProtein:`Не ставить один и тот же основной белок подряд`,autoplanVariety:`Разнообразие автоплана`,varietyLow:`Низкое`,varietyMedium:`Среднее`,varietyHigh:`Высокое`,stopList:`Стоп-лист ингредиентов`,catalogSearchPlaceholder:`Поиск по каталогу...`,inList:`В списке`,addedLabel:`Добавлено:`,bannedGroups:`Запрещённые группы`,remove:`Убрать`}},supplements:{defaultName:`БАД`,risk:{low:`низкий`,medium:`средний`,high:`высокий`},labReq:{notRequired:`не обязательно`,recommended:`желательно`,required:`обязательно`},labStatus:{notRequired:`не требуются`,needed:`нужны`,planned:`запланированы`,done:`сданы`,overdue:`повторить / просрочены`,unspecified:`не указано`},title:`БАДы`,subtitle:`Личный справочник и трекер. Не назначает лечение и не заменяет врача.`,disclaimer:`БАДы не должны являться заменой основной пищи. В связи с тем, что качество продуктов питания стало гораздо ниже, а стоимость качественных продуктов — гораздо выше, стоит принять во внимание употребление различных БАДов, чтобы компенсировать их недостаток и при необходимости снизить финансовые затраты.`,tabs:{today:`Сегодня`,plan:`План`,catalog:`Каталог`,stock:`Склад`,risks:`Риски`},cloud:{readOnlyNotice:`Компактная сводка для облака и ассистента. Не меняет план приёма и не содержит полных этикеток или истории.`},chatAssistant:{guardrails:{readOnly:`Только просмотр: не меняй план, дозы, продукты и журнал приёма.`,noDiagnosis:`Не ставь диагнозы, не назначай лечение и не меняй дозировки.`,useSummaryOnly:`Опирайся на краткую сводку по БАДам; не выдумывай анализы и этикетки.`,missingData:`При нехватке данных скажи, что нужно заполнить профиль, анализы или продукт.`,tone:`Тон: справочно, на русском, с отсылкой к врачу при рисках.`}},aiDraft:{readOnlyNotice:`Черновик для ручной проверки. Не сохраняется автоматически и не меняет план приёма.`,confirmCopyHint:`После подтверждения текст будет скопирован в буфер. Сохранение в приложение выполняется только вручную.`,guardrails:{noAutoSave:`Черновик не записывается в план, продукты и журнал без вашего явного действия.`,notPrescription:`Не использовать как диагноз или назначение — только справочный материал.`,verifySources:`При низкой уверенности сверьте источники и этикетку перед использованием.`,catalogCycle:`Изменения в каталоге знаний требуют отдельного редакционного цикла, не этого UI.`},title:{content:`Черновик текста: {name}`,sourceSummary:`Источники: {name}`,interactions:`Взаимодействия: {name}`,productLabel:`Этикетка: {name}`},risk:{highCatalog:`Высокий риск в справочнике — нужна консультация специалиста.`,labsRequired:`Для регулярного приёма желательны анализы.`,safetyStrong:`Профиль безопасности: сильные ограничения.`,interactionStrong:`Есть сильные предупреждения по взаимодействиям.`,personalizedBlocked:`Персональное применение дозы заблокировано правилами.`},body:{content:{intro:`Черновик текста для «{name}» (справочно, не назначение).`,completeness:`Полнота: {score}/100. Следующие шаги: {actions}.`,gapsHeader:`Пробелы в структуре:`,purposeHeader:`Для чего (черновик):`,timingHeader:`Время приёма (черновик):`,mealHeader:`Еда (черновик):`,risksHeader:`Риски (черновик):`,footer:`Проверьте формулировки и источники перед публикацией в каталог.`},sources:{none:`Источники для «{name}» не указаны.`,addRefs:`Добавьте safety/lab/label refs в bundle источников перед опорой на черновик.`,header:`Сводка источников для «{name}»:`,more:`… и ещё {count}.`,evidenceHeader:`Заметка по доказательности:`},label:{intro:`Черновик контекста этикетки для «{name}».`,checkHeader:`Проверьте на упаковке:`,checkDose:`• форму и дозу на порцию ({dose})`,checkActive:`• EPA/DHA или активное вещество — если применимо`,checkExpiry:`• срок годности и остаток`,cautionFallback:`Подсказка: сверить с врачом при хронических заболеваниях.`,cautionFromCatalog:`Подсказка из справочника: {text}`,footer:`Этот текст не подставляется в план автоматически — только в заметки продукта вручную.`,doseFallback:`см. этикетку`},interactions:{notRequired:`Для «{name}» отдельное пояснение взаимодействий не требуется по текущим правилам.`,header:`Пояснение взаимодействий для «{name}» (справочно):`,warningsHeader:`Предупреждения:`,footer:`Не меняет план и не заменяет консультацию врача.`}},gate:{noSources:`Нет привязанных источников — черновик справочный, требует проверки.`,missingSafety:`Для этой позиции нужны safety-источники, но они не заполнены.`,missingLabel:`Нужен контекст этикетки/продукта, источники этикетки не указаны.`,stale:`Источники давно не пересматривались — обновите перед опорой на черновик.`},validation:{missing:`Черновик отсутствует.`,idRequired:`id обязателен.`,invalidType:`Некорректный тип черновика.`,knowledgeIdRequired:`supplementKnowledgeId обязателен.`,titleRequired:`Заголовок обязателен.`,bodyEmpty:`Текст черновика пуст.`,invalidConfidence:`confidence должен быть high или low.`,readOnlyNotice:`readOnlyNotice должен предупреждать об отсутствии auto-save.`}},remindersPanel:{title:`Напоминания`,intro:`Приём, склад, срок годности, анализы и проверки плана. Push — через подписку в «Автоматизация».`,tabsLabel:`Виды напоминаний`,tabs:{intake:`Приём`,stock:`Склад`,expiry:`Срок годности`,labs:`Анализы`,checks:`Проверки`,history:`История приёма`},loading:`Обновляю…`,empty:`На сегодня активных напоминаний нет.`,historyEmpty:`На сегодня записей приёма ещё нет.`,historyStatus:{taken:`Принято`,skipped:`Пропущено`,snoozed:`Отложено`},dueNow:`Сейчас пора: {count}`,refresh:`Обновить`,loadFailed:`Не удалось обновить напоминания.`,snoozeDone:`Напоминание закрыто.`,snoozeDisabled:`Напоминание отключено.`,snoozeWeek:`Отложено на неделю.`,snoozeDay:`Отложено на день.`,snoozedSuffix:` · отложено`,btnDone:`Готово`,btnSnoozeDay:`+1 день`,btnSnoozeWeek:`+1 неделя`,btnDisable:`Отключить`},reminderKind:{intake:`Приём`,low_stock:`Мало на складе`,expiry:`Срок годности`,lab_retake:`Пересдать анализы`,safety_review:`Безопасность`,plan_review:`Проверка плана`},timing:{morning:`Утром`,before_meal:`До еды`,with_meal:`Во время еды`,after_meal:`После еды`,empty_stomach:`Натощак`,before_training:`До тренировки`,after_training:`После тренировки`,bedtime:`Перед сном`,custom:`Другое`,scheduled:`По расписанию`},intakeStatus:{taken:`Принял`,skipped:`Пропущено`,snoozed:`Отложено`,pending:`Ожидает`},intakeSource:{manual:`вручную`,voice:`голос`,auto:`авто`},today:{title:`Сегодня`,emptyPlan:`Активных БАДов в плане пока нет.`,takenProgress:`Принято: {done} / {total}`,status:`Статус:`,markTaken:`Принял`,markSkipped:`Пропустил`,historyTitle:`История приёма`,historySummary:`7 дней · Принято: {taken} · Пропущено: {skipped} · Отложено: {snoozed}`,historyEmpty:`За 7 дней отметок пока нет.`,daySummary:`{date} · Принято: {taken} · Пропущено: {skipped} · Отложено: {snoozed}`,noMarks:`Нет отметок`},plan:{tabsLabel:`Разделы плана БАДов`,tabs:{review:`Проверка текущего плана`,reports:`Отчёты и аналитика`,cost:`Стоимость плана`,optimization:`Оптимизация плана`},costTitle:`Стоимость плана`,costHint:`Ориентир расходов: факт по привязанным продуктам или оценка справочника. Не бухгалтерия.`,emptyActive:`Активных БАДов пока нет.`,sourceLine:`Источник: {source} · уверенность: {confidence}`,byProducts:`По продуктам: {exact} · по справочнику: {estimate} · без данных: {missing}`,catalogV1:`По справочнику: {amount} — средние цены каталога`,itemDetails:`Детали по позициям`,topExpensive:`Самые дорогие (30 дней)`,noPriceData:`Без данных о стоимости`,optimizationTitle:`Оптимизация плана`,optimizationHint:`Автоматическая справочная сортировка по активному плану.`,planSummary:`Сводка по активному плану`,noCriticalNotes:`Критичных замечаний по активному плану нет.`,strongBase:`Сильная база`,reviewCaution:`Проверить осторожность`,expensive:`Дорогие позиции`,lowEvidence:`Слабая/смешанная доказательность`,foodAlternative:`Можно заменить едой`,noData:`Нет данных`,benefitScore:`Польза {score}/10`,alternative:`Альтернатива: {name}`},risks:{title:`Анализы и риски`,hint:`Высокий риск и обязательные анализы показываются сразу.`,labs:`Анализы`,dataNeeds:`Потребности в данных`,reports:`Отчёты`,labsHint:`Вводите показатели анализов и смотрите, каких данных не хватает для справочных схем БАДов.`,labsSaved:`Сохранено показателей: {count}. Используются для справочных подсказок по БАДам.`,labsEmpty:`Показатели анализов пока не сохранены.`,activeCount:`Активных БАДов: {count}`,highRisk:`Высокий риск: {count}`,labsRequired:`Анализы обязательны: {count}`,labsRecommended:`Анализы желательно: {count}`,noCatalogData:`Без справочных данных: {count}`,labsNeeded:`Анализы нужны: {count}`,labsPlanned:`Запланированы: {count}`,labsDone:`Сданы: {count}`,labsOverdue:`Повторить: {count}`,noHighRisk:`Высокого риска и обязательных анализов нет.`,requireLabs:`Требуют анализов / консультации`,highRiskGroup:`Высокий риск`,monitor:`Желательно контролировать`,noCatalog:`Нет данных в справочнике`,noCatalogHint:`Эти позиции добавлены вручную или не связаны со справочником. Проверь дозировку и безопасность самостоятельно.`,dataReadiness:`Готовность данных`,dataReadinessHint:`Показывает, чего не хватает для подсказок по БАДам. Не меняет план и не блокирует базовое добавление сверх существующих правил.`,dataReadinessDisclaimer:`Это не диагноз и не назначение — только готовность данных для справочных подсказок.`,dataReadinessPersonal:`Персонально готово считается по текущим анализам и gates, а не только по наличию модели.`,fillLabs:`Заполнить анализы`,expandReadiness:`Раскройте блок, чтобы посчитать сводку по готовности данных.`,labsListUnknown:`список анализов не указан`,labsLabel:`Анализы:`,statusLabel:`Статус:`,noteLabel:`Заметка:`},tone:{benefitNoData:`Польза: нет данных`,benefit:`Польза: {score}/10`,riskLow:`Риск: низкий`,riskMedium:`Риск: средний`,riskHigh:`Риск: высокий`,riskNoData:`Риск: нет данных`,labNotRequired:`Анализы: не обязательно`,labRecommended:`Анализы: желательно`,labRequired:`Анализы: обязательно`,labNoData:`Анализы: нет данных`,consultation:`Требуются анализы/консультация перед регулярным приёмом`,foodMedium:`Средне`},foodDifficulty:{easy:`Легко`,hard:`Сложно`,scaleHint:`1–3: суточную норму относительно легко закрыть обычной едой. 4–6: частично, но не всегда удобно или стабильно. 7–10: через еду закрыть суточную норму обычно сложно.`,alternativeMissing:`Не указано в справочнике`},guidance:{noScheme:`Нет справочной схемы в каталоге.`,profileRequired:`Укажите вес, пол и возраст для справочной схемы по профилю.`,labsOrDoctor:`Требуются анализы/консультация перед регулярным приёмом.`},manualAdd:{title:`Ручное добавление`,intro:`Добавьте БАД в план вручную: название и дозировку задаёте вы.`,name:`Название`,dosage:`Дозировка`,defaultUnit:`г`,unit:`Единица`,perDay:`Раз в день`,when:`Когда`,times:`Время приёма через запятую`,withMeal:`С едой`,note:`Заметка`,submit:`Добавить в мой план`},catalogSection:{title:`Расширенный справочник`,intro:`Справочная информация для выбора. Это не назначение лечения и не замена консультации врача.`,search:`Поиск в расширенном справочнике`,filtersSort:`Фильтры и сортировка`,section:`Раздел`,all:`Все`,risk:`Риск`,labs:`Анализы`,type:`Тип`,benefitFrom:`Польза от`,sort:`Сортировка`,reset:`Сбросить`,found:`Найдено: {found} из {total}. Показано: {shown}`,collapseHint:`Раскройте блок, чтобы открыть фильтры и карточки справочника.`,myPlan:`Мой план БАДов`,planEmpty:`План БАДов пока пуст.`},coverage:{status:{ready:`Готово`,missing_profile:`Не хватает профиля`,missing_labs:`Не хватает анализов`,outdated_labs:`Анализы устарели`,blocked:`Заблокировано`,no_structured_rules:`Требуют доработки правил`,no_serving_content:`Нет справочной схемы`,no_personalized_model:`Нет персональной модели`,not_supported:`Не поддерживается`,doctor_only:`Только врач / анализы`,unknown:`Нет данных`},filter:{all:`Все`,ready:`Готовы`,missing_profile:`Не хватает профиля`,missing_labs:`Не хватает анализов`,outdated_labs:`Устарели`,no_structured_rules:`Требуют доработки правил`,rule_not_applicable:`Анализы не нужны`,rule_action_required:`Правила анализов в доработке`,needs_biomarker_expansion:`Нужны показатели анализов`,needs_safety_profile:`Нужен профиль безопасности`,no_serving_content:`Нет схемы`,no_personalized_model:`Нет персональной модели`,apply_ready:`Готово к применению`,blocked_or_doctor:`Заблокировано / врач`,unmapped_lab_tests:`Несопоставленные анализы`,safety_warnings:`Предупреждения безопасности`,safety_blocks_personalized_apply:`Безопасность блокирует персональную схему`},yes:`есть`,no:`нет`,available:`доступно`,unavailable:`недоступно`,sufficientData:`Данных достаточно`},catalog:{inPlan:`В плане`,checking:`Проверка…`,add:`Добавить`,searchPlaceholder:`Например: мой комплекс, магний, омега-3…`,filterPlaceholder:`Железо, йод, B12, сон…`,filterDataReadiness:`Фильтр готовности данных`,dosePerDay:`{value} {unit}, {freq} р/день`,details:`Подробнее`,alreadyInPlan:`Уже в плане`,inactiveInPlan:`Есть в плане, но выключен`,showMore:`Показать ещё`},catalogUi:{foodDifficultyAria:`Сложность через еду: {score} из 10. Нажмите для описания`,foodLabel:`Еда`,labsBeforeRegular:`Требуются анализы/консультация перед регулярным приёмом.`,referenceScheme:`Справочная схема: {dose}`,safetyProfile:`Профиль безопасности · {status}`,interactions:`Возможные взаимодействия · {status}`,matchedFlags:`Совпадения:`,addToPlanTitle:`Добавить БАД в план?`,notMedical:`Справочная схема не является медицинским назначением. Для регулярного приёма нужна консультация специалиста.`,referenceSchemeLabel:`Справочная схема:`,baseScheme:`Будет добавлена базовая справочная схема.`,missingLabs:`Не хватает:`,blockingLabs:`Блокирующие показатели:`,cautionLabs:`Осторожность:`,addReferenceScheme:`Добавить эту справочную схему`,toProfile:`К профилю`,fillLabs:`Заполнить анализы`,referenceHint:`Это справочная подсказка, не медицинское назначение.`},knowledgeType:{vitamin:`витамин`,mineral:`минерал`,sportpit:`спортпит`,herbal:`растительная`,amino_acid:`аминокислота`,fatty_acid:`жирная кислота`,probiotic:`пробиотик`,other:`другое`},sortMode:{name_asc:`по названию`,benefit_desc:`польза выше`,risk_desc:`риск выше`,price_asc:`дешевле`},catalogSectionExtra:{noFiltersResults:`По таким фильтрам ничего не найдено.`,noCoverageResults:`По этому фильтру ничего не найдено.`,alternative:`Альтернатива: {name}`,addAriaInPlan:`{name} уже в плане`,addAriaAdd:`Добавить {name} в план`,schemeHint:`Дозировка, единица, частота, еда и время для позиции из справочника показываются как справочная схема. Старые сохранённые поля остаются в записи для расписания и совместимости.`,labsRecommendMark:`Для этой добавки рекомендуется отметить статус анализов.`,labsStatus:`Статус анализов`,labsDate:`Дата анализов`,labsNote:`Заметка по анализам`,active:`Активен`,edit:`Редактировать`,delete:`Удалить`,save:`Сохранить`,cancel:`Отмена`},stockTab:{productsTitle:`Мои продукты / Инвентарь`,productsIntro1:`Конкретные банки и упаковки: бренд, этикетка, остаток, срок годности и стоимость. Это не меняет план автоматически.`,productsIntro2:`Привяжите продукт к схеме приёма вручную — дозировка плана не меняется. Расчёты по продуктам основаны на введённой этикетке и точном совпадении единиц.`,planLinkTitle:`Связь с текущим планом`,barcodeSearch:`Поиск по штрих-коду`,searching:`Поиск…`,find:`Найти`,scan:`Сканировать`,scanBarcode:`Штрих-код`,scanQr:`QR-код`,scanner:{lightHint:`При слабом свете поднесите камеру ближе и избегайте бликов.`,cameraStarting:`Включаем камеру…`,cameraUnavailable:`Камера недоступна — используйте поле ниже.`,cameraWaiting:`Ожидание камеры…`,stopCamera:`Остановить камеру`,retryCamera:`Повторить`,findTemplate:`Найти шаблон`,close:`Закрыть`,videoError:`Не удалось показать видео с камеры.`,cameraDenied:`Нет доступа к камере. Разрешите камеру в настройках браузера или введите код вручную.`,cameraError:`Не удалось включить камеру. Введите код вручную.`,modes:{barcode:{title:`Сканер штрих-кода`,intro:`Поместите полоску EAN/UPC в горизонтальную рамку. План приёма не изменится.`,viewfinderHint:`Держите штрих-код горизонтально внутри рамки`,scanning:`Ищем штрих-код в рамке…`,manualLabel:`Или введите штрих-код вручную`,manualPlaceholder:`4601234567890`,invalidCode:`Штрих-код должен содержать минимум 8 цифр.`},qr_code:{title:`Сканер QR-кода`,intro:`Поместите QR с этикетки в квадратную рамку. Если в QR есть штрих-код (GTIN), найдём шаблон.`,viewfinderHint:`Держите QR целиком внутри квадратной рамки`,scanning:`Ищем QR-код в рамке…`,manualLabel:`Или вставьте текст QR вручную`,manualPlaceholder:`https://… или 4601234567890`,invalidCode:`Введите текст QR (ссылку или цифры), не короче 3 символов.`}},hints:{no_media:`Камера недоступна в этом браузере. Введите код вручную.`,desktop_webcam:`На компьютере используется веб-камера. Поднесите код на 10–15 см и держите его в рамке.`,ios_safari:`На iPhone камера включается автоматически. Держите код в рамке при хорошем свете.`,use_frame:`Держите код в рамке на экране — так распознавание работает надёжнее.`}},addProduct:`Добавить продукт`,fromTemplate:`Из шаблона`,importLabel:`Импорт с этикетки`,showArchive:`Показать архив`,loading:`Загрузка продуктов…`,empty:`Продуктов пока нет. Добавьте банку или упаковку, чтобы видеть остаток, срок годности и стоимость, а затем привяжите её к схеме приёма.`,linkedKnowledge:`Связано со справочником: {name}`,edit:`Редактировать`,changeLink:`Изменить связь`,linkToPlan:`Связать с планом`,archive:`В архив`,restore:`Восстановить`,deleteForever:`Удалить навсегда`,shoppingTitle:`Закупки / что купить`,shoppingIntro:`Ориентир по остаткам, сроку годности и прогнозу runout. План приёма не меняется.`,copyList:`Скопировать список`,nothingToBuy:`Сейчас нет позиций, требующих закупки.`,groupBuy:`Что купить`,groupRunningLow:`Заканчивается`,groupExpiry:`Срок годности`,groupNoProduct:`Нет продукта`},risksTab:{labs:`Анализы:`,status:`Статус:`,note:`Заметка:`},planReview:{title:`Проверка текущего плана`,intro1:`Проверка уже добавленных БАДов — только просмотр. Приложение не меняет схему автоматически.`,intro2:`Проверка показывает возможные несоответствия, но не является назначением и не меняет план. Любое изменение схемы — только отдельным явным действием.`,intro3:`Расчёты по продуктам основаны на введённой этикетке и точном совпадении единиц. Приложение не меняет дозировки автоматически.`,filterLabel:`Фильтр проверки`,filterAria:`Фильтр проверки плана`,duplicatesTitle:`Дубликаты в плане`,duplicatesHint:`Групп дубликатов: {count}. Деактивация — только после подтверждения; журнал приёма не удаляется.`,resolveKeep:`Разрешить: оставить «{name}»`,entryFallback:`запись`,noActive:`В активном плане пока нет БАДов.`,noFilterResults:`По этому фильтру замечаний нет.`,recommendation:`Рекомендация: {action}`,duplicatesKeep:`эту запись рекомендуем оставить`,duplicatesReview:`эту запись проверить вручную`,duplicatesPrefix:`Дубликаты:`,currentScheme:`Текущая схема: {dose} {unit}`,perDay:` · {n} р/день`,autoUpdateOff:`Автоматическое обновление отключено.`,viewSuggestion:`Посмотреть предложение`,suggestionBlocked:`Предложение недоступно: {reason}`,moreIssues:`и ещё {count}`,productLabel:`Продукт: {title}`,safetyFlags:`Флаги безопасности: {count}`,status:{ok:`В порядке`,info:`Информация`,needs_attention:`Требует внимания`,caution:`Осторожность`,blocked:`Блокирующее предупреждение`,cannot_review:`Нужна ручная проверка`},issue:{inactive_item:`Неактивен`,missing_knowledge_link:`Нет связи со справочником`,duplicate_active_item:`Дубликат в активном плане`,manual_review_required:`Нужна ручная проверка`,missing_labs:`Не хватает анализов`,outdated_labs:`Анализы устарели`,lab_guidance_caution:`Предупреждение по анализам`,lab_guidance_blocked:`Блокирующее предупреждение по анализам`,lab_retake_before_scheme_update:`Пересдать анализ до обновления схемы`,retake_lab_due:`Пора пересдать анализ`,product_low_stock:`Мало на складе`,expired:`Срок годности истёк`,unit_mismatch:`Несовпадение единиц`,source_missing:`Нет источника в справочнике`,content_incomplete:`Справочник заполнен не полностью`,safety_warning:`Предупреждение профиля безопасности`,safety_strong_warning:`Важное предупреждение безопасности`,safety_blocks_personalized_apply:`Профиль безопасности блокирует персональную схему`,interaction_warning:`Взаимодействия — осторожность`,interaction_strong_warning:`Важное предупреждение о взаимодействиях`,interaction_blocks_personalized_apply:`Взаимодействия блокируют персональную схему`,personalized_scheme_available:`Доступна персональная подсказка`,personalized_scheme_not_applicable:`Персональная схема не применяется`,personalized_scheme_blocked:`Персональная схема недоступна`,personalized_scheme_blocked_by_safety:`Персональная схема заблокирована правилами безопасности`,personalized_scheme_changed:`Персональная подсказка изменилась`,current_dose_differs_from_personalized:`Текущая схема отличается`,unknown_unit_or_schedule:`Нельзя сравнить схему автоматически`},action:{none:`Действий не требуется`,manual_review:`Проверить вручную`,remove_duplicate:`Проверить дубликаты`,review_labs:`Проверить анализы`,review_safety_profile:`Проверить профиль безопасности`,consult_specialist:`Обсудить со специалистом`,consider_personalized_scheme:`Рассмотреть персональную подсказку`,retake_lab:`Пересдать анализ`,review_interaction:`Проверить взаимодействия`,review_product:`Проверить продукт`,buy_product:`Пополнить запас`,review_source:`Проверить источники справочника`},filter:{all:`Все`,needs_attention:`Требуют внимания`,labs:`Анализы`,retake_labs:`Пересдача`,products:`Продукты`,content:`Контент`,interactions:`Взаимодействия`,safety:`Безопасность`,personalized:`Персональная схема`,duplicates:`Дубликаты`,manual_review:`Ручная проверка`,inactive:`Неактивные`},summary:{active:{label:`Активных БАДов`,total:`Всего в плане: {count}`},needsAttention:{label:`Требуют внимания`,desc:`Без автоматических изменений`},labs:{label:`Анализы`,none:`Замечаний по анализам нет`,missing:`не хватает: {n}`,outdated:`устарело: {n}`,block:`блок: {n}`},retake:{label:`Пересдача анализов`,before:`До обновления персональной схемы`,notNeeded:`Пересдача не требуется`},products:{label:`Продукты`,none:`Замечаний по продуктам нет`,low:`мало: {n}`,expired:`просрочено: {n}`,units:`единицы: {n}`},interactions:{label:`Взаимодействия`,strong:`важных: {n}`,warnings:`Есть предупреждения`,none:`Замечаний нет`},content:{label:`Контент и источники`,none:`Пробелов в справочнике нет`,sources:`источники: {n}`,gaps:`контент: {n}`},safety:{label:`Профиль безопасности`,none:`Замечаний по безопасности нет`,warnings:`предупреждений: {n}`,blockPersonal:`блок персональной: {n}`},personalized:{label:`Персональные подсказки`,none:`Подсказок к рассмотрению нет`,diff:`отличия: {n}`,blocked:`недоступно: {n}`,hints:`подсказок: {n}`},duplicates:{label:`Дубликаты`,groups:`Групп: {n}`,none:`Дубликатов не найдено`}},snap:{labs:`Анализы: {parts}`,labsMissing:`не хватает: {n}`,labsOutdated:`устарело: {n}`,labsBlock:`блок: {n}`,interactions:`Взаимодействия: {parts}`,interactionWarnings:`предупреждений: {n}`,interactionPlan:`с планом: {n}`,interactionBlockPersonal:`блок персональной`,personalized:`Персональная подсказка: {dose} {unit}`,product:`продукт: {title}`,lowStock:`мало на складе`,expired:`срок истёк`,unitMismatch:`единицы не совпадают`,daysRemaining:`~{n} дн. запаса`,content:`Справочник: {parts}`,noSource:`нет источника`,gaps:`пробелы: {n}`},deactivatedSuccess:`Деактивировано записей: {count}. Журнал приёма не изменён.`,updatedSuccess:`БАД обновлён. Автоматических изменений других БАДов не выполнялось.`,itemSummary:{missingKnowledgeLink:`Не удалось связать БАД с записью справочника. Нужна ручная проверка.`,labBlocked:`Есть блокирующее предупреждение по анализам. Нужна ручная проверка.`,doseDiffers:`Текущая схема отличается от актуальной персональной справочной подсказки.`,personalBlockedSafety:`Персональная схема сейчас недоступна из-за профиля безопасности.`,safetyBlocksPersonal:`Есть важное совпадение с профилем безопасности. Персональная схема может быть недоступна.`,interactionBlocksPersonal:`Есть предупреждения о взаимодействиях. Персональная схема может быть недоступна.`,interactionWarnings:`Есть предупреждения о возможных взаимодействиях — проверьте план и профиль.`,missingLabs:`Для текущего БАДа не хватает анализов для полной проверки.`,outdatedLabs:`Часть анализов устарела.`,retakeLab:`Анализ устарел — пересдайте до обновления персональной схемы.`,expired:`Срок годности привязанного продукта истёк — проверьте запас.`,lowStock:`Запас привязанного продукта заканчивается.`,unitMismatch:`Единицы дозировки плана и этикетки продукта не совпадают.`,sourceMissing:`В справочнике не хватает источников для части данных.`,contentIncomplete:`Справочная карточка заполнена не полностью.`,personalBlocked:`Персональная схема пока недоступна: нужны данные профиля или анализы.`,unknownCompare:`Есть персональная подсказка, но текущую дозировку нельзя безопасно сравнить автоматически.`,duplicates:`Найдено {count} активных записей с одинаковой связью. Проверьте дубликаты вручную.`,personalAvailable:`Для этого БАДа доступна персональная справочная подсказка. План не обновляется автоматически — только после вашего подтверждения.`,warningsToCheck:`Есть предупреждения, которые стоит проверить.`,inactive:`БАД не активен в текущем плане.`,noCriticalIssues:`Критичных замечаний в базовой проверке не найдено.`}},labs:{title:`Анализы`,subtitle:`Сохраняйте показатели анализов. RMS показывает статус относительно референса и использует данные для справочных подсказок по БАДам.`,backToSupplements:`← К БАДам`,reportsLink:`Отчёты по БАДам →`,disclaimer:`RMS не ставит диагноз и не назначает лечение. Референсы могут отличаться между лабораториями. При отклонениях, симптомах или сомнениях обратитесь к врачу.`,addTitle:`Добавить показатель`,biomarker:`Показатель`,value:`Значение`,unit:`Единица`,date:`Дата анализа`,refLow:`Нижн. граница`,refHigh:`Верхн. граница`,refHint:`Границы лучше взять из бланка лаборатории. Если не заполнены — RMS использует справочные значения.`,laboratory:`Лаборатория`,laboratoryPlaceholder:`Напр. Инвитро`,comment:`Комментарий`,optional:`Опционально`,optionalShort:`Опц.`,saved:`Показатель сохранён`,saveBiomarker:`Сохранить показатель`,saving:`Сохранение…`,recentTitle:`Последние показатели`,searchPlaceholder:`Поиск показателя…`,noSearchResults:`Нет показателей по запросу.`,empty:`Показатели анализов пока не сохранены. Добавьте первый показатель — RMS покажет статус и будет использовать данные для подсказок по БАДам.`,trendsTitle:`Динамика`,trendsHint:`Показатели с двумя и более записями в одной единице. Бейдж — справочная оценка тренда, не диагноз.`,historyTitle:`История анализов`,historyEmpty:`Пока нет записей. Сохранённые показатели будут отображаться здесь.`,retakeTitle:`Какие анализы пора обновить`,retakeHint:`Добавьте БАДы в активный план — RMS подскажет, какие показатели стоит пересдать для персональных схем.`,retakeNone:`По текущему плану критичных пересдач не требуется.`,retakeDueNow:`Пора пересдать`,retakeDueSoon:`Скоро пора`,retakeDoctor:`Согласовать с врачом`,retakeOptional:`По желанию`,loading:`Загрузка анализов…`,retry:`Повторить`,refRange:`(реф. {low}–{high})`,lastValues:`Последние: {values}`,deleteConfirm:`Удалить?`,edit:`Изменить`,delete:`Удалить`,editTitle:`Изменить: {name}`,valueMustBeNumber:`Значение должно быть числом.`,loadError:`Не удалось загрузить показатели анализов.`,saveError:`Ошибка сохранения`,deleteError:`Не удалось удалить показатель.`},dataNeeds:{title:`Потребности в данных`,subtitle:`Что мешает персональным подсказкам по БАДам: профиль, анализы, правила и классификация пробелов.`,backToSupplements:`← К БАДам`,reportsLink:`Отчёты по БАДам →`,retakeTitle:`Пересдача анализов`,noActivePlan:`Нет активного плана — рекомендации пересдачи не применяются.`,openLabs:`Открыть анализы →`,readinessTitle:`Готовность данных`,readinessHint:`Профиль, анализы, правила и классификация пробелов для персональных подсказок.`,filterReadiness:`Фильтр готовности данных`,filterEmpty:`По этому фильтру позиций нет.`,contentTitle:`Полнота описаний БАДов`,contentHint:`Показывает, где в справочнике не хватает описаний: safety, усвоение, дефицит, взаимодействия, этикетка. Это режим только просмотра — контент не заполняется автоматически.`,filterContent:`Фильтр полноты описаний`,shownCount:`Показано: {shown} из {total}`,risk:`риск:`,evidence:`evidence:`,labs:`анализы:`,detail:`detail:`,detailYes:`да`,detailNo:`нет`,missing:`Не хватает:`,partial:`Частично:`,andMore:`и ещё {count}`,sources:`Источники:`,loading:`Загрузка покрытия данных…`,loadError:`Не удалось загрузить данные покрытия.`},reports:{title:`Отчёты БАДов`,subtitle:`Сводка за 30 дней. План и каталог не изменяются.`,planLink:`План приёма`,labs:`Анализы`,dataNeeds:`Потребности в данных`,reports:`Отчёты`,loading:`Загрузка отчёта…`,retry:`Повторить`,loadError:`Не удалось загрузить данные для отчёта.`},guidanceProfile:{title:`Профиль для справочных схем`,intro:`Используется только для справочных схем из каталога. Не является медицинским назначением.`,weight:`Вес, кг`,sex:`Пол`,sexUnknown:`не указан`,sexMale:`мужской`,sexFemale:`женский`,age:`Возраст`,saved:`Профиль для справочных схем сохранён.`},products:{loadFailed:`Не удалось загрузить продукты.`,planLinksLoadFailed:`Не удалось загрузить связи продуктов с планом.`},safetyProfileSection:{title:`Профиль безопасности`,intro:`Отметьте факторы, которые могут влиять на предупреждения по БАДам. Это не диагноз и не назначение.`,disclaimer:`RMS не ставит диагноз и не заменяет врача. Флаги нужны только для более осторожных подсказок.`,loading:`Загрузка профиля…`,updatedAt:`Обновлено: {date}`,notesLabel:`Заметки к профилю безопасности`,notesPlaceholder:`Например: чувствительность к кофеину, препараты, которые важно учитывать, или ограничения от специалиста.`,saveNotes:`Сохранить заметки`,clearProfile:`Очистить профиль безопасности`,loadFailed:`Не удалось загрузить профиль безопасности.`,saved:`Профиль безопасности обновлён.`,saveFailed:`Не удалось сохранить профиль безопасности.`,notesSaved:`Заметки профиля безопасности сохранены.`,notesSaveFailed:`Не удалось сохранить заметки.`,clearConfirm:`Очистить все флаги профиля безопасности? Заметки также будут удалены.`,cleared:`Профиль безопасности очищен.`,clearFailed:`Не удалось очистить профиль безопасности.`},filterChip:{defaultAriaLabel:`Фильтр`},personalizedDose:{titleFull:`Справочная дозировка`,titleCompact:`Предпросмотр справочной дозировки`,unavailable:`Предпросмотр дозировки пока недоступен.`,preview:`Предпросмотр: {dose}`,source:`Источник: {source}`,missingProfile:`Не хватает в профиле: {fields}`,missingLabs:`Не хватает анализов: {labs}`,outdated:`Устарели: {labs}`,blocking:`Блокирующие: {labs}`,caution:`Осторожность: {labs}`,trustTitle:`Прозрачность расчёта`,andMore:`и ещё {count}`},reportsPanel:{title:`Отчёты и аналитика`,summary:`Сводка за {month}. Только чтение — план не меняется.`,copyText:`Текст`,copyTable:`Таблица`,copyJsonDev:`JSON (dev)`,adherence:`Приверженность · {value}`,adherenceDetail:`Принято: {taken} · Пропущено: {skipped} · Пропуски без отметки: {missed} · Отложено: {snoozed}`,costStock:`Стоимость и запасы`,stockDetail:`Низкий остаток: {low} · Нет в наличии: {out} · Позиций в списке закупок: {shopping}`,daysRemaining:` — ~{days} дн.`,forecastNotNeeded:`Прогноз <14 дн. не требуется по текущим остаткам.`,labsSafety:`Анализы и безопасность · предупреждений: {count}`,markerChanges:`Изменения маркеров`,noLabTrends:`Значимых трендов анализов за период не найдено.`,expiredProducts:`Просроченные продукты: {count}`,exportDeferredNote:`Экспорт в PDF — в следующей версии. Текст и таблицу можно скопировать кнопками выше.`},modals:{close:`Закрыть`,cancel:`Отмена`,saving:`Сохранение…`,foodDifficultyTitle:`Сложность через еду`,score:`Балл`,foodDifficultyExplain:`Показатель отражает, насколько сложно получить суточную норму только из обычной пищи, без БАДов. Чем выше балл, тем труднее стабильно закрыть потребность едой.`,foodSources:`Пищевые источники`,catalogComment:`Комментарий справочника`,referenceDisclaimer:`Справочная оценка RMS, не медицинское назначение.`,linkTitle:`Связать продукт с планом`,linkHint:`Связь помогает считать остаток, срок годности и стоимость. Дозировка плана не меняется.`,currentLinks:`Текущие связи:`,noProductLink:`Продукт пока не привязан к схеме приёма.`,noPlanForLink:`В активном плане нет БАДов для привязки.`,planScheme:`Схема в плане`,saveLink:`Сохранить связь`,unlink:`Отвязать от плана`,matchesCatalog:` · совпадает со справочником`,replacesLink:` · заменит текущую привязку`,planUpdateTitle:`Обновить схему БАДа?`,planUpdateConfirm:`{title} · Подтвердите изменение только для этого БАДа.`,updating:`Обновление…`,updateThis:`Обновить этот БАД`,hint:`Подсказка`,kind:`Тип:`,status:`Статус:`,source:`Источник:`,risk:`Риск:`,summary:`Сводка:`,reason:`Причина:`,changes:`Изменения`,noSafeChanges:`Нет безопасных изменений для применения.`,was:`Было:`,willBe:`Станет:`,warnings:`Предупреждения`,futurePatch:`Будущий patch`,patchNotBuilt:`Patch не построен: {message}`,notMedical:`Это не медицинское назначение.`,singleUpdateOnly:`Обновляется только выбранный БАД. Массовое обновление отключено.`,confirmCheckbox:`Я понимаю, что это справочная подсказка, не медицинское назначение, и хочу обновить только этот БАД.`,knowledgeNoData:`Нет данных в справочнике`,alreadyInPlan:`Уже в плане`,addToPlan:`Добавить в план`,aiDraft:`Черновик AI`,catalogReference:`Справочная информация из каталога. Не является медицинским назначением.`,important:`Важно`,referenceSchemeTitle:`Справочная схема приёма`,dose:`Доза:`,unit:`Единица:`,frequency:`Частота:`,timing:`Время:`,meal:`Еда:`,schedule:`Период/режим:`,forWhat:`Для чего`,forWhom:`Для кого`,benefits:`Польза`,risks:`Риски`,labsNeeded:`Нужные анализы`,contraindications:`Противопоказания`,sideEffects:`Побочные эффекты`,organs:`Органы/системы`,priceRange:`Интервал стоимости`,pricePerMonthApprox:`~{amount} ₽/мес`,naturalAlternatives:`Природные альтернативы`,fakeRisk:`Вероятность подделки`,manufacturers:`Производители/поставщики`,whereToBuy:`Где искать`,brandExamples:`Проверенные бренды-примеры`,selectionCriteria:`Как выбрать`,verificationNotes:`Как проверить покупку`,defaultMarketplacePharmacy:`Российские аптеки и аптечные маркетплейсы: Apteka.ru, Еаптека, Здравсити.`,defaultMarketplaceMarketplaces:`Маркетплейсы: Ozon, Wildberries, Яндекс Маркет — только официальный магазин бренда или продавец с прозрачными документами.`,defaultMarketplaceIherb:`iHerb можно использовать как ориентир по международным брендам и составу, если доставка доступна.`,defaultSupplierVerification:`Проверяйте срок годности, пломбу, серийный номер, состав на этикетке и совпадение дозы с планом.`,defaultSupplierNoMedicalAdvice:`Выбор бренда не является медицинской рекомендацией; при рисках ориентируйтесь на врача и анализы.`,longTerm:`Долгосрочный эффект`,dataReadiness:`Готовность данных`,yes:`есть`,no:`нет`,available:`доступно`,unavailable:`недоступно`,duplicateResolution:{title:`Дубликаты в плане`,priorityHint:`Приоритет: персональная схема → дата обновления → дата создания → id. Журнал приёма не удаляется.`,recommendedKeep:`Рекомендуем оставить`,willDeactivate:`Будет деактивировано записей: {count}`,confirmCheckbox:`Я понимаю: деактивируются только лишние записи плана. Журнал приёма и отметки не удаляются.`,noOtherDuplicates:`Других активных дубликатов нет — можно оставить выбранную запись без изменений.`,applying:`Применяю…`},aiDraftReview:{confirmCopy:`Подтвердить (копировать)`,copying:`Копируем…`,reject:`Отклонить`,success:`Черновик подтверждён. Автосохранение не выполнялось.`,applyFailed:`Не удалось применить черновик.`,sources:`Источники`,link:`ссылка`,noSources:`Источники не указаны — черновик с низкой уверенностью.`,risks:`Риски`,safetyRules:`Правила безопасности`,confirmCheckbox:`Я понимаю: это справочный черновик, не назначение. {hint}`},ocrImport:{title:`Импорт с этикетки`,openInEditor:`Открыть в редакторе продукта`,labelText:`Текст этикетки`,labelPlaceholder:`Вставьте текст с упаковки или состава…`,parseText:`Разобрать текст`,photoLabel:`Фото этикетки`,recognizing:`Распознавание…`,reviewTitle:`Проверка распознанного`,rawText:`Исходный текст`,pasteRequired:`Вставьте текст с этикетки.`,recognizeFailed:`Не удалось распознать фото.`,imageUploadError:`Ошибка загрузки изображения.`,notesHeader:`Импорт с этикетки ({source}).`},productEditor:{editTitle:`Редактировать продукт`,newDraftTitle:`Новый продукт (черновик)`,addTitle:`Добавить продукт`,intro:`Конкретная банка или упаковка. План не меняется автоматически.`,hint:`Импорт с этикетки — в разделе «Мои продукты». Штрих-код — для шаблона и поиска.`,sectionBasic:`Основное`,sectionComposition:`Состав`,sectionStock:`Склад и покупка`,barcodeForTemplate:`Штрих-код (для шаблона)`,productName:`Название продукта *`,brand:`Бренд`,form:`Форма *`,knowledgeLink:`Связь со справочником`,notLinked:`Не связано со справочником`,servingSize:`Размер порции`,servingUnit:`Единица порции`,primaryIngredient:`Основное активное вещество`,ingredientName:`Название`,amount:`Количество`,per:`На`,unitsInPackage:`Единиц в упаковке`,unitType:`Тип единиц`,servingsInPackage:`Порций в упаковке`,servingsRemaining:`Осталось порций`,lowStockThreshold:`Порог низкого остатка (порций)`,purchasePrice:`Цена покупки`,currency:`Валюта`,purchaseDate:`Дата покупки`,openedDate:`Дата открытия`,expiresDate:`Годен до`,notes:`Заметки`,saveAsTemplate:`Сохранить как шаблон`,savingTemplate:`Шаблон…`,placeholderBarcode:`4601234567890`,placeholderProductName:`Витамин D3 2000 МЕ`,placeholderBrand:`Now Foods`,placeholderIngredient:`Витамин D3`,placeholderUnit:`мкг`,placeholderCurrency:`RUB`},templatePicker:{title:`Выбрать шаблон`,intro:`Заполнит форму продукта. Остаток и цены нужно указать вручную.`,search:`Поиск`,searchPlaceholder:`Название или штрих-код`,empty:`Шаблонов пока нет. Сохраните продукт как шаблон или импортируйте backup.`,notFound:`Ничего не найдено.`,barcode:`Штрих-код: {barcode}`,createProduct:`Создать продукт`},archiveConfirm:{archiveTitle:`Архивировать продукт`,restoreTitle:`Восстановить продукт`,hardDeleteTitle:`Удалить безвозвратно`,defaultTitle:`Подтверждение`,busy:`Выполняется…`,archive:`Архивировать`,restore:`Восстановить`,deleteForever:`Удалить навсегда`,confirm:`Подтвердить`,archiveLinksHint:`Схемы приёма в плане останутся без изменений. Связи с этим продуктом будут отключены.`},knowledgeDetails:{dataReadinessTitle:`Готовность данных`,dataReadinessIntro:`Здесь видно, какие данные у вас уже есть и чего не хватает для подсказок. Это просто справка — она не ставит диагноз и не меняет план приёма.`,labRules:`Правила анализов:`,catalogScheme:`Справочная схема в каталоге:`,pdeModel:`Персональный расчёт дозы:`,personalApply:`Персональное применение сейчас:`,doctorOnlyTitle:`Только с врачом / по анализам`,doctorOnlyIntro:`С этим БАДом стоит быть особенно осторожным. RMSAssist покажет справку и риски, но подбирать схему здесь должен специалист.`,doctorOnlyLabs:`Перед регулярным приёмом нужны данные/контекст: {labs}.`,doctorOnlyNoAuto:`Не добавляйте «для профилактики» — без понятной причины, состава продукта и проверки лекарств лучше не начинать.`,humanComplete:`Все нужные данные заполнены.`,humanDoctorOnly:`Данные заполнены, но применять стоит только с врачом или по анализам.`,humanNoPersonalDose:`Персональная дозировка для этого БАДа не рассчитывается — ориентируйтесь на справочную схему.`,humanPersonalDoseReady:`Персональная справочная дозировка доступна после подтверждения.`,humanLabsNotApplicable:`Для этого БАДа анализы не обязательны.`,humanLabsNeeded:`Чтобы получить персональную подсказку, обновите анализы.`,ruleClassification:`Классификация правил анализов`,nextCycle:`Следующий цикл: {label}`,ruleNoPlanChange:`Это не меняет план и не включает персональное применение.`,missingProfile:`Не хватает профиля`,requiredLabs:`Обязательные анализы`,usefulLabs:`Полезные анализы`,missing:`Не хватает`,outdated:`Устарели`,blocking:`Блокируют`,caution:`Осторожность`,catalogLabTests:`Анализы из текста каталога`,mappedLabs:`Сопоставлено с анализами:`,unmappedLabs:`Пока не связано с анализами:`,unmappedHint:`Эти анализы упомянуты в описании, но пока не связаны с разделом «Анализы». Это не ошибка — просто подсказка, что можно сопоставить вручную.`,noCatalogLabList:`В каталоге нет текстового списка анализов для этого БАДа.`,issues:`Замечания`,matrixDisclaimer:`Этот блок не ставит диагноз и не назначает лечение — он только показывает, какие данные использует приложение.`,mechanism:`Механизм / роль`,absorption:`Усвоение`,absorptionEnhancers:`Что улучшает усвоение`,absorptionInhibitors:`Что ухудшает усвоение`,interactions:`Взаимодействия`,interactionsMedications:`С лекарствами (категории)`,interactionsNutrients:`С другими нутриентами`,interactionsFoods:`С едой / напитками`,deficiency:`Дефицит`,deficiencyConsequences:`Последствия дефицита`,excess:`Избыток`,excessSigns:`Признаки избытка`,excessRisks:`Риски избытка`,labelContext:`Контекст этикетки`,sources:`Источники`,evidenceNotes:`Заметки:`,updatedAt:`Обновлено:`,safetySources:`Источники по безопасности`,labSources:`Источники по анализам`,labelContextSources:`Контекст этикетки (источники)`,whereToBuy:`Где искать`,brandExamples:`Проверенные бренды-примеры`,selectionCriteria:`Как выбрать`,verificationNotes:`Как проверить покупку`,defaultMarketplacePharmacy:`Российские аптеки и аптечные маркетплейсы: Apteka.ru, Еаптека, Здравсити.`,defaultMarketplaceMarketplaces:`Маркетплейсы: Ozon, Wildberries, Яндекс Маркет — только официальный магазин бренда или продавец с прозрачными документами.`,defaultMarketplaceIherb:`iHerb можно использовать как ориентир по международным брендам и составу, если доставка доступна.`,defaultSupplierVerification:`Проверяйте срок годности, пломбу, серийный номер, состав на этикетке и совпадение дозы с планом.`,defaultSupplierNoMedicalAdvice:`Выбор бренда не является медицинской рекомендацией; при рисках ориентируйтесь на врача и анализы.`,sourceType:{guideline:`рекомендации`,review:`обзор`,database:`база данных`,manufacturer:`производитель`,other:`справочная политика`},labTrendsTitle:`Динамика анализов`,labTrendsIntro:`Справочный тренд по показателям, связанным с этим БАДом (≥2 записи). Не заменяет интерпретацию врача.`,allLabs:`Все анализы →`,labsAndReadiness:`Анализы и готовность данных`,labsNotLoaded:`Данные анализов пока не загружены.`,noLabRules:`Для этого БАДа пока нет правил анализов.`,required:`Обязательные:`,affectsDose:`Влияют на дозу:`,usefulToTake:`Полезно сдать:`,blockingLabs:`Блокирующие:`,labsStageDisclaimer:`Пока RMS показывает только готовность данных и риски. Это справочная подсказка, не медицинское назначение.`,fillLabs:`Заполнить анализы →`,interactionsTitle:`Возможные взаимодействия`,safetyProfileTitle:`Профиль безопасности`,matchedFlags:`Совпадения:`,groupBenefitsRisks:`Польза и риски`,groupLabs:`Анализы и показатели`,groupSafety:`Безопасность и взаимодействия`,groupPersonalDose:`Персональная дозировка`,groupDeepDetails:`Подробнее: усвоение, взаимодействия, источники`,groupPurchase:`Цена и покупка`,groupAppData:`Какие данные использует приложение`}},display:{coverage:{readinessHelper:`Отсутствие структурированного правила не всегда ошибка: для части БАДов анализы не нужны в текущей версии, для части нужны дополнительные показатели анализов или профиль безопасности.`,ruleClassification:{has_structured_rule:`Есть структурированное правило`,intentionally_not_applicable:`Анализы не требуются в текущей версии`,weak_lab_link:`Слабая связь с анализами`,needs_biomarker_expansion:`Нужны дополнительные показатели анализов`,needs_safety_profile:`Нужен профиль безопасности`,needs_product_label:`Нужен состав продукта`,doctor_only_no_rule:`Только с врачом / высокий риск`,deferred_research:`Отложено до научной проверки`,true_gap:`Нужно добавить правило`},ruleClassificationNextCycle:{rule_expansion:`Расширение правил анализов`,biomarker_expansion:`Новые показатели в справочнике анализов`,safety_profile_flags:`Флаги безопасности / лекарств`,product_label_inventory:`Данные с этикетки продукта`,research_review:`Научная проверка`},compactBadge:{intentionally_not_applicable:`Анализы не требуются в текущей версии.`,weak_lab_link:`Слабая связь с анализами.`,needs_biomarker_expansion:`Для точного правила не хватает показателей анализов.`,needs_safety_profile:`Нужен профиль безопасности/лекарств.`,needs_product_label:`Нужны данные с этикетки продукта.`,doctor_only_no_rule:`Только осторожность/специалист.`,deferred_research:`Отложено до научной проверки.`,true_gap:`Нужно добавить правило анализов.`,missing_structured_lab_rule:`Нужно добавить правило анализов.`},summary:{profile:{label:`Профиль`,filled:`Заполнен`,empty:`Не заполнен`},safetyProfile:{label:`Профиль безопасности`,empty:`Пуст`,flags:`{n} флагов`,flagsNotFilled:`Флаги не заполнены.`,warnings:`Предупреждений: {warnings}; блокировок персональной схемы: {blocks}.`},labs:{label:`Анализы`,markers:`{n} показателей`},rules:{label:`Правила анализов`,description:`{n} требуют доработки; остальные без правил классифицированы.`},ruleClassification:{label:`Классификация правил`,description:`{n} не требуют правил в текущей версии / слабая связь.`},serving:{label:`Нет схемы в каталоге`},apply:{label:`Персонально готово`},blocked:{label:`Врач / блокировка`},unmapped:{label:`Текст без связи с анализами`}},itemStatus:{doctor_only:`Требуется осторожность или консультация: персональная схема не рассчитывается.`,blocked:`Перед регулярным приёмом нужна проверка анализов или консультация.`,not_supported:`Персональная справочная доза для этого БАДа не поддерживается.`,missing_profile:`Не хватает данных профиля для справочной схемы.`,missing_labs:`Не хватает актуальных анализов для умной подсказки.`,outdated_labs:`Есть устаревшие анализы — обновите показатели.`,no_structured_rules:`Для этого БАДа пока нет правил анализов в приложении.`,no_serving_content:`В каталоге нет текстовой справочной схемы.`,no_personalized_model:`Персональная модель дозировки пока не поддерживается.`,ready:`Данные готовы для доступных подсказок.`},noReadinessDescription:`Нет описания готовности.`,issuesSuffix:`({n} замеч.)`,issue:{missing_weight:`Не указан вес`,missing_sex:`Не указан пол`,missing_age:`Не указан возраст`,missing_required_labs:`Не хватает обязательных анализов`,outdated_required_labs:`Анализы устарели`,blocking_labs:`Есть блокирующие показатели`,caution_labs:`Есть показатели для осторожности`,missing_kidney_labs:`Нужна свежая проверка функции почек`,missing_serving_dose_text:`Нет текстовой схемы в каталоге`,missing_structured_lab_rule:`Нужно добавить правило анализов`,rule_intentionally_not_applicable:`Анализы не требуются в текущей версии`,weak_lab_link:`Слабая связь с анализами`,needs_biomarker_expansion:`Нужны новые показатели анализов`,needs_safety_profile:`Нужен профиль безопасности`,needs_product_label:`Нужен состав продукта`,doctor_only_no_structured_rule:`Только с врачом: правило не разрешает применение`,deferred_rule_research:`Отложено до научной проверки`,missing_pde_model:`Нет персональной модели`,pde_not_enabled_for_apply:`Персональное применение не включено`,catalog_lab_tests_unmapped:`Текст анализов из каталога пока без связи с показателями`,catalog_requires_labs_or_doctor:`Каталог требует анализы / консультацию`,tier4_blocked:`Только врач / анализы`,denylist:`Персональная схема не поддерживается`,unknown_tier0:`Нет явной политики персонализации`,safety_profile_warning:`Профиль безопасности: нужна осторожность`,safety_profile_strong_warning:`Профиль безопасности: высокая осторожность`,safety_profile_blocks_personalized_apply:`Профиль безопасности блокирует персональную схему`},profileField:{weightKg:`вес`,sex:`пол`,ageYears:`возраст`},modalSummary:{noData:`Нет данных о готовности для этого БАДа.`,ready:`Данные готовы для доступных подсказок по этому БАДу.`,missing_profile:`Заполните профиль, чтобы персональные подсказки могли учитывать ваши данные.`,missing_labs:`Не хватает актуальных анализов для умных подсказок по этому БАДу.`,outdated_labs:`Часть анализов устарела — обновите показатели для актуальных подсказок.`,blocked:`Есть блокирующие показатели — сначала разберитесь с анализами или консультацией.`,doctor_only:`Для этого БАДа нужны анализы и решение врача; приложение не подбирает схему само.`,no_structured_rules:`Для этого БАДа нужна доработка правил или других данных (показатели анализов, профиль безопасности).`,no_serving_content:`В каталоге нет текстовой справочной схемы приёма.`,no_personalized_model:`Персональная модель дозы для этого БАДа пока не подключена.`,not_supported:`Персональная схема для этого БАДа не поддерживается.`,default:`Проверьте профиль, анализы и справочные данные.`}},planCost:{source:{product_exact:`по продукту`,knowledge_estimate:`оценка справочника`,default:`нет данных`},aggregateSource:{product_exact:`по вашим продуктам`,knowledge_estimate:`по справочнику`,mixed:`смешанный расчёт`,default:`недостаточно данных`},confidence:{high:`высокая`,medium:`средняя`,low:`низкая`},noData:`нет данных`,perDay:`/день`,perMonth:`/мес`,linkedProduct:`Привязанный продукт: ≈ {amount} {currency}/день`,valueScore:`{score} / 1000 {currency}`},reports:{noAdherence:`Нет завершённых слотов за месяц`,adherence:`{percent}% принято (без отложенных)`,costNotCalculated:`Стоимость плана не рассчитана — добавьте цены продуктов.`,costLine:`~{rub} ₽ / 30 дн. · {source} · уверенность: {confidence}`},product:{form:{capsule:`капсулы`,tablet:`таблетки`,softgel:`мягкие капсулы`,powder:`порошок`,liquid:`жидкость`,gummy:`пастилки`,sachet:`саше`,other:`другое`},unit:{capsule:`капсулу`,tablet:`таблетку`,softgel:`мягкую капсулу`,scoop:`ложку`,g:`г`,mg:`mg`,mcg:`mcg`,iu:`IU`,ml:`мл`,serving:`порцию`,drop:`каплю`,bottle:`бутылку`,other:`единицу`},inventory:{total:{label:`Продуктов`,empty:`Добавьте первую банку или упаковку.`,filled:`Всего в инвентаре.`},lowStock:{label:`Заканчиваются`,description:`Низкий остаток или нет в наличии.`},expiry:{label:`Срок годности`,description:`Истёк или скоро истекает.`},planLink:{unlinked:`Без связи с планом`,linked:`Связь с планом`,unlinkedDesc:`Продукты, которые ещё не привязаны к схеме приёма.`,linkedDesc:`Привязка к схеме будет подключена отдельно.`,dash:`—`},missingIngredients:{label:`Без этикетки`,description:`Нет активных веществ на этикетке.`},incompleteProducts:{label:`Неполные банки`,description:`Нет бренда, порции, состава, срока, остатка или связи с планом.`}},archived:`В архиве`,noActiveIngredients:`Активные вещества не заполнены`,perUnit:`{amount} {unit} на {per}`,stock:{outOfStock:`Нет в наличии`,lowStock:`Заканчивается · осталось {n} порций`,remaining:`Осталось: {n} порций`,unknown:`Остаток не указан`},expiry:{notSet:`Срок годности не указан`,expired:`Истёк срок годности ({date})`,expiringSoon:`Скоро истекает · до {date}`,valid:`Годен до: {date}`},price:`Цена: {price} {currency}`,completeness:{missing_brand:`Нет бренда`,missing_serving:`Нет порции`,missing_active_ingredients:`Нет активных веществ`,single_active_ingredient_only:`Указан только основной ингредиент`,missing_expiry:`Нет срока годности`,missing_stock:`Нет остатка`,missing_plan_link:`Нет связи с планом`}},productPlan:{mismatch:{missing_product_label:`Этикетка не заполнена`,missing_primary_ingredient:`Не указано основное активное вещество`,knowledge_link_mismatch:`Продукт связан с другим БАДом`,unit_mismatch:`Единицы дозировки не совпадают`,dose_not_whole_units:`Доза не равна целому числу единиц продукта`,missing_plan_dose:`В плане нет числовой дозировки`},warning:{lowStock:`Остаток приблизительный, если вы обновляете его вручную.`,unitMismatch:`Единицы не совпадают — нужна ручная проверка. Конвертация не выполняется автоматически.`},stock:{daysRemaining:`Осталось примерно: {n} дн.`,outOfStock:`нет в наличии`,lowStock:`заканчивается`,outOfStockOnly:`Нет в наличии`,lowStockServings:`Заканчивается · осталось {n} порций`,lowStockOnly:`Заканчивается`,remaining:`Осталось: {n} порций`,unknown:`Остаток не указан`},expiry:{expired:`Срок годности истёк`,expiringSoon:`Скоро истекает срок годности`,valid:`Срок годности в порядке`,notSet:`Срок годности не указан`},cost:{notCalculated:`Стоимость не рассчитана`,perDay:`≈ {perDay}/день · {per30}/30 дней`,perServing:`≈ {perServing} за порцию`},mismatchOk:`Этикетка сопоставима с текущей дозировкой`,notLinked:`Продукт не привязан`,cards:{linked:{label:`С привязкой`,description:`Активные схемы с привязанным продуктом.`},lowStock:{label:`Заканчиваются в плане`,description:`Привязанные продукты с низким остатком.`},expiry:{label:`Срок годности в плане`,description:`Истёк или скоро истекает у привязанных продуктов.`},mismatch:{label:`Несоответствие`,description:`Несоответствие этикетки и дозировки плана.`},cost:{label:`Стоимость плана`,description:`Сумма по привязанным продуктам с полными данными.`,dash:`—`},perDay:`≈ {amount}/день`,linkedValue:`{linked}/{total}`}},knowledgeContent:{dimension:{purpose:`Назначение`,target_effects:`На что влияет`,mechanism_or_role:`Механизм / роль`,timing:`Время приёма`,meal_timing:`Связь с едой`,absorption_enhancers:`Что улучшает усвоение`,absorption_inhibitors:`Что ухудшает усвоение`,contraindications:`Противопоказания`,safety_cautions:`Осторожность`,overdose_risks:`Риски избытка`,deficiency_consequences:`Последствия дефицита`,excess_signs:`Признаки избытка`,interactions:`Взаимодействия`,lab_context:`Анализы`,product_label_context:`Этикетка продукта`,evidence_or_confidence:`Уровень уверенности`,user_facing_summary:`Понятное описание`},status:{structured:`Структурировано`,text_present:`Есть в тексте`,partial:`Частично`,missing:`Не хватает`,not_applicable:`Не применимо`,unsafe_to_infer:`Нельзя выводить автоматически`},nextAction:{complete_enough:`Достаточно полно`,needs_short_description:`Нужно короткое описание`,needs_mechanism_copy:`Нужен механизм / роль`,needs_timing_copy:`Нужно описание времени приёма`,needs_meal_absorption_copy:`Нужны еда / усвоение`,needs_safety_copy:`Нужна информация о безопасности`,needs_overdose_copy:`Нужны риски избытка`,needs_deficiency_copy:`Нужны последствия дефицита`,needs_interaction_copy:`Нужны взаимодействия`,needs_label_context:`Нужен контекст этикетки`,needs_research_review:`Нужна научная проверка`,doctor_only_copy_review:`Нужна проверка «только с врачом»`,unsupported_or_high_risk_copy_review:`Высокий риск / не поддерживается`},filter:{all:`Все`,missing_safety:`Пробелы по безопасности`,missing_absorption:`Усвоение`,missing_deficiency:`Дефицит`,missing_product_label_context:`Этикетка`,doctor_only_review:`Только с врачом`,needs_research_review:`На проверке`,complete_enough:`Достаточно полно`,needs_source:`Нет источников`,needs_safety_source:`Нет источника по безопасности`,needs_label_source:`Нет источника по этикетке`,stale_sources:`Источники устарели`,needs_mechanism:`Механизм`,needs_interaction:`Взаимодействия`,schema_gap:`Пробелы схемы`,research_gap:`Пробел для исследования`,already_sufficient:`Уже достаточно`},cardSummary:{completeEnough:`Описание заполнено достаточно полно.`,doctorOnly:`Нужна осторожная формулировка «только с врачом».`,safety:`Не хватает противопоказаний, осторожности или взаимодействий.`,mealAbsorption:`Не хватает блока про еду/усвоение.`,deficiency:`Нужен блок про дефицит/избыток.`,labelContext:`Нужен контекст этикетки продукта.`,researchReview:`Нужна научная проверка перед расширением контента.`,gaps:`Есть пробелы в содержании.`},summaryCards:{total:{label:`Всего БАДов`,description:`Позиций в справочнике.`},completeEnough:{label:`Достаточно полно`,description:`Базовый уровень без критичных пробелов в содержании.`},needsSafetyCopy:{label:`Текст о безопасности`,description:`Нужны противопоказания, осторожность или взаимодействия.`},needsMealAbsorption:{label:`Еда / усвоение`,description:`Время приёма относительно еды или текст об усвоении.`},needsDeficiency:{label:`Дефицит`,description:`Текст о дефиците или избытке, если применимо.`},doctorOnly:{label:`Только с врачом`,description:`Высокий риск или требуется проверка специалистом.`},missingLabel:{label:`Этикетка`,description:`Не хватает контекста с этикетки продукта.`},detailBlock:{label:`Блок деталей`,description:`Структурированные списки деталей в карточке.`},withSources:{label:`С источниками`,description:`Есть ссылки на источники, безопасность, анализы или этикетку.`},missingSafetySource:{label:`Нет источника по безопасности`,description:`Высокий риск без ссылок на безопасность.`},missingLabelSource:{label:`Нет источника по этикетке`,description:`Нужна ссылка/примечание для проверки состава продукта.`}},readinessHelper:`Не является медицинской рекомендацией. Пробел означает отсутствие структурированной информации в базе, а не то, что БАД опасен или бесполезен.`,sourceFlags:{serving:`порция`,detail:`детали`,labRule:`правило анализов`,safetyRules:`правила безопасности`,pdeModel:`персональная модель`,sources:`источники`,missingSafetySource:`нет источника безопасности`,missingLabelSource:`нет источника по этикетке`,staleSources:`устаревшие источники`,topLevelOnly:`только верхний уровень`}},personalizedDose:{status:{not_supported:`Не поддерживается`,base_default:`Базовая справочная схема`,profile_required:`Нужен профиль`,labs_required:`Нужны анализы`,ready:`Предпросмотр готов`,caution:`Нужна осторожность`,blocked:`Не рассчитывается`,default:`Нет данных`},notCalculated:`Расчёт не выполнен`,timesPerDay:`{n} раз/день`,withMeal:`с едой`,source:{not_calculated:`Расчёт не выполнялся`,knowledge_base_default:`Базовая справочная схема`,profile_adjusted:`По профилю`,lab_aware_default:`По анализам`},profileField:{weightKg:`вес`,sex:`пол`,ageYears:`возраст`},previewNotApplied:`Это только просмотр — схема не применяется в план автоматически.`,addConfirmation:`Предпросмотр только для просмотра. При добавлении по базовой кнопке будет использована схема из каталога.`,noSilentChanges:`Существующие схемы не изменяются автоматически.`,d3ApplyAvailable:`Будет применена поддерживающая справочная схема D3. Это не лечебная дозировка. Только после вашего клика.`,d3GatesBlocked:`Персональное применение D3 недоступно: нужны свежие 25(OH)D и кальций, без повышенных значений и без предупреждений по безопасности.`,d3GatesBlockedCompact:`{summary} По базовой кнопке — схема из каталога.`,magnesiumApplyAvailable:`Будет применена поддерживающая справочная схема магния. Проверены вес и свежий eGFR или креатинин. Только после вашего клика.`,magnesiumGatesBlocked:`Персональное применение магния недоступно: нужен свежий eGFR или креатинин без предупреждений по функции почек.`,magnesiumGatesBlockedCompact:`{summary} По базовой кнопке — схема из каталога.`,applyAvailable:`Будет применена показанная справочная схема. Только после вашего клика.`,summary:{blocked:`Справочная дозировка не рассчитывается из-за ограничений безопасности.`,labsRequired:`Для расчёта не хватает свежих анализов.`,profileRequired:`Для расчёта нужно заполнить профиль.`,readyApply:`Справочная схема готова к ручному применению — только после вашего клика.`,previewOnly:`Показан справочный предпросмотр. Он пока не применяется в план.`,baseApply:`Базовая справочная схема готова к ручному применению — только после вашего клика.`,baseOnly:`Показана базовая справочная схема.`,notSupported:`Для этого БАДа пока нет безопасной числовой модели. Используйте справочную схему каталога или анализы/врача, если это указано выше.`},fullDisclaimerApply:`Предпросмотр справочной схемы. Применение возможно только через подтверждение при добавлении в план. {noSilentChanges}`},planUpdate:{kind:{apply_personalized_dose:`Персональная дозировка`,manual_review_only:`Ручная проверка`,align_with_catalog_serving:`Схема из каталога`,update_schedule:`Расписание`,mark_lab_review_needed:`Отметка анализов`,resolve_duplicate:`Дубликат`},status:{requires_confirmation:`Требует подтверждения`,available:`Доступно`,blocked:`Недоступно`,stale:`Устарело`,not_applicable:`Не применяется`},risk:{low:`Низкий`,medium:`Средний`,high:`Высокий`,doctor_only:`Только специалист`},source:{personalized_guidance:`Персональная подсказка`,catalog_serving:`Каталог`,lab_guidance:`Анализы`,safety_profile:`Профиль безопасности`,duplicate_review:`Дубликаты`,manual:`Ручная проверка`},diff:`{label}: {before} → {after}`,emDash:`—`,applyBlocked:{suggestion_not_applyable:`Предложение больше недоступно.`,plan_item_not_found:`БАД не найден в плане.`,plan_item_mismatch:`Предложение относится к другому БАДу.`,stale_plan_item:`План изменился. Обновите страницу или откройте предложение заново.`,patch_build_failed:`Не удалось собрать безопасное изменение.`,upsert_failed:`Не удалось сохранить изменение.`},stalePlanItemError:`План изменился после формирования предложения. Закройте окно и откройте предложение заново.`,blocked:{inactive:`БАД не активен. Обновление неактивных позиций пока не выполняется.`,missingKnowledge:`Не удалось связать БАД со справочником.`,duplicates:`Сначала нужно вручную проверить дубликаты.`,labBlocked:`Есть блокирующее предупреждение по анализам.`,safetyBlocksPersonal:`Профиль безопасности блокирует персональную схему.`,personalUnavailable:`Персональная схема сейчас недоступна.`,cannotCompare:`Текущую схему нельзя безопасно сравнить автоматически.`,manualReview:`Требуется ручная проверка.`,doseUnavailable:`Персональная дозировка недоступна.`,doseUnitMissing:`Единица персональной дозировки не указана.`,doseMatches:`Текущая схема совпадает с персональной подсказкой.`,doseNoDiff:`Отличие дозировки не обнаружено.`,updateUnavailable:`Персональное обновление недоступно.`},auditSource:{apply_personalized_dose:`персональная справочная подсказка`,align_with_catalog_serving:`справочная доза каталога`,update_schedule:`справочное расписание`,mark_lab_review_needed:`отметка проверки анализов`,resolve_duplicate:`разрешение дубликата`,default:`подсказка проверки плана`},field:{dosageValue:`Дозировка (значение)`,dosageUnit:`Единица измерения`,frequencyPerDay:`Приёмов в день`,preferredTimesHHMM:`Время приёма`,timing:`Время суток`,withMeal:`С едой`,notes:`Заметки`,labCheckStatus:`Статус анализов`,labCheckNote:`Заметка по анализам`,active:`Активность`},warnings:{disclaimer:`Это справочная подсказка, не медицинское назначение.`,manualConfirm:`Обновление должно быть подтверждено вручную.`,missingLabs:`Не все рекомендованные анализы добавлены.`,outdatedLabs:`Часть анализов устарела.`,labCaution:`Есть предупреждение по анализам.`,safetyWarning:`Есть предупреждение профиля безопасности.`,catalogExactOnly:`Только точное число и единица из справочника — без конвертации.`},suggestion:{personalBlockedTitle:`Персональное обновление недоступно`,personalApplyTitle:`Обновить по персональной справочной схеме`,personalApplySummary:`Текущая схема отличается от актуальной персональной подсказки.`,personalApplyReason:`Проверка плана обнаружила отличие текущей дозировки от персональной справочной схемы.`,manualReviewTitle:`Нужна ручная проверка`,scheduleTitle:`Обновить расписание по справочнику`,scheduleSummary:`Время приёма в плане отличается от справочной карточки.`,scheduleReason:`Справочник задаёт другое расписание приёма.`,catalogDoseTitle:`Выровнять дозу по справочнику`,catalogDoseSummary:`Справочная доза: {value} {unit}.`,catalogDoseReason:`В каталоге указана одна точная доза без диапазона.`,labMarkTitle:`Отметить необходимость проверки анализов`,labMarkSummary:`Обновит статус и заметку по анализам в записи плана.`,labMarkReason:`Проверка плана показала замечания по анализам.`,labMarkNote:`Отметка RMS ({iso}): требуется проверка анализов по итогам проверки плана.`,duplicateTitle:`Деактивировать дубликат`,duplicateSummary:`Рекомендуется оставить другую запись в группе дубликатов.`,duplicateReasonNotPrimary:`Эта запись не рекомендуется как основная.`,duplicateReasonInPlan:`Дубликат в активном плане.`,duplicateWarnInactive:`Запись останется в плане, но станет неактивной.`,duplicateWarnHistory:`Приём и история не удаляются.`},auditNote:{updated:`Обновлено вручную по подсказке RMS: {iso}`,source:`Источник: {source}`,personalDose:`Персональная справочная схема: {dose}`,userConfirmed:`Изменено пользователем после явного подтверждения.`,notMedical:`Это не медицинское назначение.`},patch:{suggestion_requires_confirmation:`Подсказка требует подтверждения перед применением.`,suggestion_requires_explicit:`Подсказка требует явного подтверждения.`,missing_diff_fields:`Нет полей для обновления.`,unsupported_field:`Поле «{field}» нельзя обновить автоматически.`,unsafe_diff:`Поле «{label}» не безопасно для автоматического обновления.`,suggestion_not_applicable:`Тип подсказки не поддерживает обновление.`,no_supported_fields:`Нет поддерживаемых полей для обновления.`}},safetyProfile:{activeFlags:`Активных флагов: {count}`,empty:`Профиль пуст`,partial:`Заполнен частично`,domain:{kidney:`Почки`,liver:`Печень`,thyroid:`Щитовидная железа`,cardiovascular:`Сердце`,blood_pressure:`Давление`,bleeding_risk:`Кровотечения`,anticoagulants:`Антикоагулянты`,serotonergic:`Серотонинергические препараты`,sedatives:`Седативные / сон`,stimulants:`Стимуляторы`,sleep_anxiety:`Сон и тревога`,pregnancy_planning:`Беременность / лактация`,hormone_sensitive:`Гормональная чувствительность`,diabetes_glucose:`Сахар / диабет`,gi_sensitivity:`ЖКТ`,allergy_intolerance:`Аллергии / непереносимость`,surgery:`Операции`,immune_autoimmune:`Иммунитет / аутоиммунные`},flag:{kidney_disease:{label:`Заболевание почек`,description:`Отметьте при заболевании почек или снижении функции почек.`},reduced_kidney_function:{label:`Сниженная функция почек`,description:`Например низкий eGFR или рекомендация ограничить часть добавок.`},liver_disease:{label:`Заболевание печени`,description:`Отметьте при заболевании печени или значимых отклонениях анализов.`},thyroid_disease:{label:`Заболевание щитовидной железы`,description:`Важно для йода, адаптогенов и добавок, требующих осторожности.`},thyroid_medication:{label:`Препараты для щитовидной железы`,description:`Отметьте, если принимаете препараты для щитовидной железы.`},high_blood_pressure:{label:`Повышенное давление`,description:`Важно для стимуляторов, кофеина и добавок, влияющих на сосуды.`},low_blood_pressure:{label:`Пониженное давление`,description:`Важно для добавок, которые могут влиять на тонус сосудов.`},heart_condition:{label:`Сердечно-сосудистые заболевания`,description:`Отметьте при заболеваниях сердца/сосудов или наблюдении у кардиолога.`},arrhythmia:{label:`Аритмия`,description:`Важно для стимуляторов, кофеина и некоторых предтренировочных комплексов.`},anxiety_or_panic:{label:`Тревога / паника`,description:`Важно для стимуляторов и добавок, влияющих на сон и нервную систему.`},insomnia:{label:`Бессонница / проблемы со сном`,description:`Важно для кофеина, стимуляторов и вечерних доз.`},stimulant_sensitivity:{label:`Чувствительность к стимуляторам`,description:`Если стимуляторы вызывают дискомфорт, тревогу, сердцебиение или бессонницу.`},caffeine_sensitivity:{label:`Чувствительность к кофеину`,description:`Если кофеин сильно влияет на сон, тревогу, давление или пульс.`},anticoagulants_or_bleeding_risk:{label:`Антикоагулянты / риск кровотечений`,description:`Отметьте при приёме препаратов для свёртываемости или склонности к кровотечениям.`},planned_surgery:{label:`Планируемая операция / процедура`,description:`Некоторые добавки требуют осторожности перед операциями и процедурами.`},antidepressants_or_serotonergic_meds:{label:`Антидепрессанты / серотонинергические препараты`,description:`Важно для 5-HTP, триптофана и похожих добавок.`},sedatives_or_sleep_meds:{label:`Седативные / снотворные`,description:`Важно для добавок, влияющих на сон, расслабление и нервную систему.`},diabetes_or_glucose_meds:{label:`Диабет / препараты для сахара`,description:`Важно для добавок, связанных с глюкозой, аппетитом или углеводами.`},pregnancy_or_planning:{label:`Беременность / планирование`,description:`Важно для ретинола, трав, йода и добавок с высокой осторожностью.`},breastfeeding:{label:`Грудное вскармливание`,description:`Некоторые добавки требуют осторожности при кормлении грудью.`},hormone_sensitive_condition:{label:`Гормонально-чувствительные состояния`,description:`Важно для добавок, требующих осторожности в гормональном контексте.`},autoimmune_condition:{label:`Аутоиммунные заболевания`,description:`Важно для некоторых трав, грибов, водорослей и иммунно-активных добавок.`},immunocompromised:{label:`Ослабленный иммунитет / иммуносупрессия`,description:`Важно для пробиотиков, молозива и иммунно-активных добавок.`},gi_ulcer_or_severe_gi_symptoms:{label:`Язва / выраженные симптомы ЖКТ`,description:`Важно для добавок, которые могут раздражать желудок и кишечник.`},fish_allergy:{label:`Аллергия на рыбу`,description:`Важно для омега-3 из рыбы и продуктов на её основе.`},shellfish_allergy:{label:`Аллергия на моллюсков`,description:`Важно для некоторых источников глюкозамина и хондроитина.`},dairy_intolerance:{label:`Непереносимость молочных продуктов`,description:`Важно для сыворотки, казеина и молочных ингредиентов.`},mushroom_allergy:{label:`Аллергия на грибы`,description:`Важно для грибных добавок, например ежовика.`},algae_sensitivity:{label:`Чувствительность к водорослям`,description:`Важно для спирулины, хлореллы и похожих продуктов.`}}},safetyRules:{items:{sr0:{title:`Чувствительность к стимуляторам`,message:`Кофеин может усиливать чувствительность к стимуляторам, тревожность или влиять на сон.`},sr1:{title:`Сердце и давление`,message:`При сердечно-сосудистом контексте или давлении кофеин требует дополнительной осторожности.`},sr2:{title:`Стимуляторы`,message:`Предтренировочные комплексы часто содержат стимуляторы; состав нужно проверять по этикетке.`},sr3:{title:`Сердце и давление`,message:`При давлении, аритмии или сердечном контексте предтренировочные комплексы требуют особой осторожности.`},sr4:{title:`Серотонинергические препараты`,message:`5-HTP может быть нежелателен на фоне антидепрессантов или других серотонинергических препаратов.`},sr5:{title:`Снотворные / седативные`,message:`5-HTP требует осторожности на фоне снотворных или седативных средств.`},sr6:{title:`Беременность / лактация`,message:`5-HTP требует особой осторожности при беременности, планировании или грудном вскармливании.`},sr7:{title:`Серотонинергические препараты`,message:`Триптофан может быть нежелателен на фоне антидепрессантов или других серотонинергических препаратов.`},sr8:{title:`Снотворные / седативные`,message:`Триптофан требует осторожности на фоне снотворных или седативных средств.`},sr9:{title:`Беременность / лактация`,message:`Триптофан требует особой осторожности при беременности, планировании или грудном вскармливании.`},sr10:{title:`Сон и седативные`,message:`Мелатонин может усиливать сонливость на фоне снотворных или при выраженных проблемах со сном.`},sr11:{title:`Беременность / лактация`,message:`Мелатонин требует осторожности при беременности, планировании или грудном вскармливании.`},sr12:{title:`Седативные и печень`,message:`Валериана может усиливать седацию и требует осторожности при заболеваниях печени.`},sr13:{title:`Беременность / лактация`,message:`Валериана требует осторожности при беременности или грудном вскармливании.`},sr14:{title:`Давление и сон`,message:`Пустырник может влиять на давление, сердце и усиливать седацию на фоне снотворных.`},sr15:{title:`Беременность / лактация`,message:`Пустырник требует осторожности при беременности или грудном вскармливании.`},sr16:{title:`Седация и беременность`,message:`GABA может усиливать расслабление на фоне снотворных и требует осторожности при беременности или лактации.`},sr17:{title:`Сон и беременность`,message:`Глицин может влиять на сон и требует осторожности при снотворных, беременности или лактации.`},sr18:{title:`Сон и давление`,message:`L-теанин может усиливать расслабление и влиять на давление на фоне снотворных или гипотонии.`},sr19:{title:`Беременность / лактация`,message:`L-теанин требует осторожности при беременности или грудном вскармливании.`},sr20:{title:`Свёртываемость и операции`,message:`Омега-3 может влиять на свёртываемость; перед операцией часто нужна пауза по рекомендации специалиста.`},sr21:{title:`Аллергия на рыбу`,message:`Рыбий жир и омега-3 из рыбы не подходят при аллергии на рыбу или рыбные продукты.`},sr22:{title:`Свёртываемость и операции`,message:`Чеснок может влиять на свёртываемость; перед операцией часто нужна осторожность.`},sr23:{title:`ЖКТ`,message:`Чеснок может раздражать ЖКТ при язве или выраженных симптомах.`},sr24:{title:`Глюкоза`,message:`Чеснок может быть связан с контекстом глюкозы и требует осторожности при диабете или гипогликемических препаратах.`},sr25:{title:`Свёртываемость и операции`,message:`Гinkgo biloba может повышать риск кровоточивости, особенно на фоне антикоагулянтов или перед операцией.`},sr26:{title:`Свёртываемость и операции`,message:`Куркумин может влиять на свёртываемость; перед операцией часто нужна осторожность.`},sr27:{title:`ЖКТ и печень`,message:`Куркумин может раздражать ЖКТ и требует осторожности при заболеваниях печени.`},sr28:{title:`Свёртываемость и операции`,message:`Ресвератрол может влиять на свёртываемость; перед операцией часто нужна осторожность.`},sr29:{title:`Беременность и глюкоза`,message:`Ресвератрол требует осторожности при беременности, лактации или препаратах для глюкозы.`},sr30:{title:`Свёртываемость и операции`,message:`Витамин E может повышать риск кровоточивости на фоне антикоагулянтов или перед операцией.`},sr31:{title:`Антикоагулянты`,message:`Витамин K2 может быть связан с контекстом свёртываемости и антикоагулянтов — нужна осторожность.`},sr32:{title:`Щитовидная железа`,message:`Йод может влиять на щитовидную железу и не подходит при заболеваниях или терапии щитовидной железы без наблюдения.`},sr33:{title:`Беременность / лактация`,message:`Йод требует особой осторожности при беременности, планировании или грудном вскармливании.`},sr34:{title:`Щитовидная железа`,message:`Ашваганда может влиять на щитовидную железу — нужна осторожность при заболеваниях или терапии.`},sr35:{title:`Сон, печень и беременность`,message:`Ашваганда может усиливать седацию и требует осторожности при заболеваниях печени, беременности или лактации.`},sr36:{title:`Щитовидная железа`,message:`Родиола может влиять на щитовидную железу — нужна осторожность при заболеваниях или терапии.`},sr37:{title:`Стресс и беременность`,message:`Родиола может влиять на сон, тревожность и требует осторожности при беременности или лактации.`},sr38:{title:`Щитовидная и беременность`,message:`Селен связан с контекстом щитовидной железы и требует осторожности при беременности или лактации.`},sr39:{title:`Почки`,message:`Магний может накапливаться при сниженной функции почек — нужна осторожность и контроль специалиста.`},sr40:{title:`Почки и сердце`,message:`Калий требует особой осторожности при заболеваниях почек, сниженной функции почек или сердечном контексте.`},sr41:{title:`Почки`,message:`Креатин требует осторожности при заболеваниях почек или сниженной функции почек.`},sr42:{title:`Почки`,message:`Высокий белковый контекст требует осторожности при заболеваниях почек или сниженной функции почек.`},sr43:{title:`Молочные продукты`,message:`Сывороточный белок не подходит при непереносимости молочных продуктов.`},sr44:{title:`Почки и молочные`,message:`Казеин требует осторожности при заболеваниях почек и не подходит при непереносимости молочных продуктов.`},sr45:{title:`Почки, глюкоза и молочные`,message:`Гейнер требует осторожности при почках, диабете/препаратах для глюкозы и непереносимости молочного.`},sr46:{title:`Почки, сердце и давление`,message:`Электролиты требуют осторожности при заболеваниях почек, сердечном контексте или повышенном давлении.`},sr47:{title:`Почки и сердце`,message:`Кальций требует осторожности при заболеваниях почек, сниженной функции почек или сердечном контексте.`},sr48:{title:`Беременность / лактация`,message:`Ретинол противопоказан или требует особой осторожности при беременности и грудном вскармливании.`},sr49:{title:`Печень`,message:`Ретинол требует особой осторожности при заболеваниях печени.`},sr50:{title:`Печень и ЖКТ`,message:`NAC требует осторожности при заболеваниях печени или выраженных симптомах ЖКТ.`},sr51:{title:`Печень, почки и водоросли`,message:`Спирулина требует осторожности при заболеваниях печени/почек и при чувствительности к водорослям.`},sr52:{title:`Иммунитет`,message:`Спирулина может требовать осторожности при аутоиммунных состояниях или сниженном иммунитете.`},sr53:{title:`Печень, почки и водоросли`,message:`Хлорелла требует осторожности при заболеваниях печени/почек и при чувствительности к водорослям.`},sr54:{title:`Иммунитет`,message:`Хлорелла может требовать осторожности при аутоиммунных состояниях или сниженном иммунитете.`},sr55:{title:`Глюкоза`,message:`Хром может быть связан с контекстом глюкозы — нужна осторожность при диабете или гипогликемических препаратах.`},sr56:{title:`Глюкоза и ЖКТ`,message:`Псиллиум может влиять на всасывание и требует осторожности при диабете или выраженных симптомах ЖКТ.`},sr57:{title:`Глюкоза`,message:`Глюкозамин может быть связан с контекстом глюкозы — нужна осторожность при диабете или гипогликемических препаратах.`},sr58:{title:`Аллергия на моллюсков`,message:`Некоторые источники глюкозамина могут быть связаны с морепродуктами — проверьте состав.`},sr59:{title:`Аллергия на моллюсков`,message:`Некоторые источники хондроитина могут быть связаны с морепродуктами — проверьте состав.`},sr60:{title:`Аллергия на грибы`,message:`Ежовик гребенчатый не подходит при аллергии на грибы.`},sr61:{title:`Аутоиммунный контекст`,message:`Грибные добавки могут требовать осторожности при аутоиммунных состояниях.`},sr62:{title:`Давление и сердце`,message:`Аргинин может влиять на сосудистый тонус — нужна осторожность при давлении или сердечном контексте.`}}},interactionRules:{items:{ginkgo_anticoag:{title:`Гинкго и свёртываемость`,message:`Гинкго может повышать риск кровоточивости на фоне антикоагулянтов или антиагрегантов. Обсудите приём со специалистом.`},omega3_anticoag:{title:`Омега-3 и свёртываемость`,message:`Высокие дозы омега-3 могут влиять на свёртываемость. При антикоагулянтах нужна осторожность.`},vitamin_e_anticoag:{title:`Витамин E и свёртываемость`,message:`Витамин E в высоких дозах может влиять на свёртываемость крови.`},"5htp_serotonergic":{title:`5-HTP и серотонин`,message:`5-HTP не сочетают с антидепрессантами и другими серотонинергическими препаратами без контроля врача.`},tryptophan_serotonergic:{title:`Триптофан и серотонин`,message:`Триптофан требует осторожности на фоне серотонинергических препаратов — риск серотонинового синдрома.`},melatonin_sedatives:{title:`Мелатонин и седативные`,message:`Мелатонин может усиливать сонливость на фоне снотворных или седативных средств.`},caffeine_stimulants:{title:`Кофеин и стимуляторы`,message:`При чувствительности к стимуляторам кофеин может усиливать тревожность, давление или бессонницу.`},preworkout_stimulants:{title:`Предтрен и стимуляторы`,message:`Предтренировочные комплексы часто содержат стимуляторы. При чувствительности или давлении нужна особая осторожность.`},iodine_thyroid:{title:`Йод и щитовидная железа`,message:`Йод может влиять на функцию щитовидной железы на фоне тиреоидных препаратов или заболеваний ЩЖ. Нужна оценка ТТГ у врача.`},potassium_kidney:{title:`Калий и почки`,message:`Калий может быть опасен при заболеваниях почек или сниженной функции почек.`},potassium_bp:{title:`Калий и давление`,message:`Калий может влиять на электролитный баланс при контексте давления или сердца.`},retinol_pregnancy:{title:`Ретинол и беременность`,message:`Ретинол противопоказан при беременности и планировании. Не используйте без назначения врача.`},spacing_iron_zinc_calcium:{title:`Разнести железо`,message:`Железо лучше не принимать одновременно с цинком или кальцием — разнесите приём на 2–4 часа.`},spacing_zinc_iron:{title:`Разнести цинк и железо`,message:`Цинк и железо конкурируют за всасывание — разнесите приём на 2–4 часа.`},spacing_calcium_iron:{title:`Разнести кальций`,message:`Кальций лучше разнести с железом и крупными дозами магния — на 2–4 часа, если оба в плане.`},spacing_magnesium_calcium:{title:`Магний и минералы`,message:`При одновременном приёме магния с кальцием или железом разнесите на разное время суток.`},spacing_copper_zinc:{title:`Медь и цинк`,message:`Высокие дозы цинка могут снижать усвоение меди — следите за балансом и дозами.`},spacing_zinc_copper:{title:`Цинк и медь`,message:`Длительный высокий цинк может влиять на медь — при совместном приёме нужна осторожность.`}}},safetyGuidance:{status:{not_applicable:`Профиль безопасности не применяется`,clear:`Конфликтов не найдено`,info:`Есть информационные заметки`,caution:`Нужна осторожность`,strong_caution:`Высокая осторожность`},engineSummary:{not_applicable:`Для этого БАДа нет специальных правил профиля безопасности.`,clear:`По отмеченным флагам профиля безопасности совпадений не найдено.`,info:`Есть информационные совпадения с профилем безопасности: {count}.`,caution:`Есть совпадения с профилем безопасности: {count}.`,strong_caution:`Есть важные совпадения с профилем безопасности: {count}.`},disclaimer:`Это предупреждение не меняет план автоматически и не является диагнозом.`,addConfirmation:`Базовое добавление остаётся доступным. При сомнениях обсудите приём со специалистом.`,personalizedApplyBlocked:`Персональная схема недоступна из-за профиля безопасности. Базовое добавление остаётся доступным, но проверьте предупреждения. RMS не предлагает применять персональную справочную схему в этом случае. Можно добавить базовую схему вручную, если вы осознанно продолжаете — это не медицинская рекомендация.`},interactionGuidance:{status:{not_applicable:`Взаимодействия не применяются`,clear:`Взаимодействий не найдено`,info:`Информация о взаимодействиях`,caution:`Нужна осторожность`,strong_caution:`Высокая осторожность`,blocked_for_personalized:`Блок персональной схемы`},engineSummary:{not_applicable:`Для этого БАДа нет специальных правил взаимодействий.`,clear:`По текущему плану и профилю взаимодействий не найдено.`,info:`Есть информационные заметки о взаимодействиях: {count}.`,caution:`Есть предупреждения о взаимодействиях: {count}.`,strong_caution:`Есть важные предупреждения о взаимодействиях: {count}.`,blocked_for_personalized:`Взаимодействия блокируют персональную схему: {count}.`},medicationCategory:{anticoagulants:`Антикоагулянты`,antiplatelets:`Антиагреганты`,sedatives:`Седативные / снотворные`,serotonergic:`Серотонинергические препараты`,stimulants:`Стимуляторы / чувствительность`,thyroid_meds:`Препараты / болезни щитовидной железы`,BP_meds:`Давление / сердце`,diabetes_meds:`Диабет / глюкоза`,kidney_meds:`Почки`,retinoids:`Беременность / лактация (ретиноиды)`},disclaimer:`Справочные предупреждения не меняют план автоматически и не заменяют консультацию врача.`,personalizedApplyBlocked:`Персональная схема недоступна из-за возможных взаимодействий. Базовое добавление остаётся доступным — проверьте предупреждения.`},ocr:{field:{brand:`Бренд`,name:`Название`,form:`Форма`,servingAmount:`Размер порции`,servingUnit:`Единица порции`,servingsPerPackage:`Порций в упаковке`,packageTotalUnits:`Единиц в упаковке`,primaryIngredientName:`Активное вещество`,primaryIngredientAmount:`Количество`,primaryIngredientUnit:`Единица`},confidence:{high:`высокая`,medium:`средняя`,low:`низкая`,default:`не распознано`},error:{not_configured:`Распознавание этикетки не настроено. Вставьте текст этикетки вручную.`,failed:`Не удалось распознать этикетку. Попробуйте другое фото или вставьте текст.`,too_large:`Фото слишком большое. Сделайте снимок ближе или уменьшите качество.`,bad_format:`Формат фото не поддерживается. Используйте JPEG или PNG.`,network:`Нет связи с сервером распознавания. Проверьте интернет или вставьте текст вручную.`,rate_limit:`Слишком много запросов распознавания. Подождите и повторите.`}},schedule:{before_meal:`до еды`,with_meal:`с едой`,after_meal:`после еды`},scheduleLabel:{scheduled:`по расписанию`,before_training:`до тренировки`,after_training:`после тренировки`,with_meal:`с едой`,before_meal:`до еды`,after_meal:`после еды`,default:`по умолчанию`},dosage:{before_meal:`Примите за 5–10 минут до еды.`,with_meal:`Примите через 1–5 минут после начала приёма пищи.`,after_meal:`Примите через 10–15 минут после начала еды.`,before_training:`Примите за 1 час до тренировки.`,after_training:`Примите через 30 минут после тренировки.`,scheduled:`Примите по заданному времени.`,withMealDefault:`Примите с едой, если так удобнее.`,checkPlan:`Проверь условия приёма в плане.`,withMealShort:`Примите с едой.`,doseUnspecified:`доза не указана`},shopping:{linkProduct:`Добавьте продукт и привяжите к схеме приёма.`,forecast:`Ориентир: {p30} уп. на 30 дн., {p90} уп. на 90 дн.`,checkExpiry:`Проверьте срок годности перед приёмом.`,useBeforeExpiry:`Используйте или замените до истечения срока.`,restock:`Пополните запас по текущей схеме.`},cloud:{dosagePerDay:`{value} {unit} × {freq}/день`},duplicateResolution:{keep_selected:`Оставить выбранную`,deactivate_others:`Деактивировать остальные`,review_manually:`Проверить вручную`},archive:{restoreConfirm:`Восстановить «{title}» из архива? Продукт снова появится в списке. Связи с планом нужно будет настроить заново.`,archiveWithLinks:`Архивировать «{title}»? Связь с {count} схемами приёма будет отключена. Сами схемы приёма и журнал не изменятся. Продукт можно восстановить из архива.`,archiveSimple:`Архивировать «{title}»? Продукт скроется из основного списка. Схемы приёма и журнал не изменятся.`,hardDelete:`Удалить «{title}» безвозвратно?{links} Схемы приёма не изменятся.{note}`,hardDeleteLinks:` Будут удалены {count} связей с планом.`,hardDeleteArchiveNote:` Рекомендуем сначала архивировать, если продукт может понадобиться снова.`},contentCoverage:{mvpReady:`{name}: базовое описание заполнено, критичных пробелов нет.`},reminders:{intakeTitle:`Приём: {name}`,lowStockTitle:`Заканчивается: {name}`,lowStockBody:`Осталось {remaining} порций. Проверь закупку.`,lowStockBodyGeneric:`Проверь остаток и закупку.`,expiredTitle:`Срок истёк: {name}`,expiringTitle:`Скоро истекает: {name}`,expiryBody:`Срок годности: {date}.`,expiryBodyGeneric:`Проверь срок годности на упаковке.`,labRetakeTitle:`Пересдать анализы`,labRetakeBody:`Не хватает: {missing} · устарели: {outdated}.`,safetyTitle:`Проверь безопасность БАДов`,safetyBody:`Нужно внимание: {attention} · сильные предупреждения: {strong}.`,planReviewTitle:`Проверка плана БАДов`,planReviewBody:`Позиций для проверки: {count}. Открой раздел проверки плана.`},productLink:{planItemFallback:`БАД в плане`,statusUnlinked:`Не привязан`,statusLinked:`Привязан`,statusMultiple:`Несколько связей`,summaryUnlinked:`Не привязан к плану`,summaryLinkedScheme:`Привязан к схеме плана`,summaryLinkedName:`Привязан: {name}`,summaryLinkedCount:`Привязан к {count} схемам`,linkBlockedArchived:`Продукт в архиве. Сначала восстановите его.`,linkBlockedInactive:`Схема в плане неактивна.`,linkBlockedKnowledge:`Продукт связан с другим БАДом в справочнике.`},aiDraft:{type:{content:`Текст карточки`,product_label:`Контекст этикетки`,source_summary:`Сводка источников`,interaction_explanation:`Пояснение взаимодействий`,default:`Черновик`},confidenceHigh:`Уверенность: достаточно источников`,confidenceLow:`Уверенность: низкая`},purchase:{reason:{low_stock:`Заканчивается`,out_of_stock:`Нет в наличии`,expiring_soon:`Скоро истекает`,expired:`Срок истёк`,no_linked_product:`Нет продукта`,missing_inventory:`Нет данных об остатке`},daysRemaining:`· ~{n} дн.`,until:`· до {date}`,packages:`· {n} уп./30 дн.`}},messages:{shoppingListCopied:`Список закупок скопирован.`,enterName:`Введите название БАДа.`,enterDosage:`Введите дозировку больше 0.`,addedToPlan:`БАД добавлен в план.`,thisSupplement:`этот БАД`,removedFromPlan:`БАД удалён из плана.`,templateNotFound:`Шаблон не найден. Заполните продукт и нажмите «Сохранить как шаблон», чтобы привязать штрих-код.`,barcodeNotFound:`Не удалось найти шаблон по штрих-коду.`,qrNoBarcode:`В QR нет распознанного штрих-кода (GTIN/EAN). Отсканируйте полоску штрих-кода или введите цифры вручную.`,templateSaved:`Шаблон сохранён.`,templateSaveFailed:`Не удалось сохранить шаблон.`,linkSaveFailed:`Не удалось сохранить связь продукта с планом.`,unlinkFailed:`Не удалось отвязать продукт от плана.`,productSaveFailed:`Не удалось сохранить продукт.`,archiveFailed:`Не удалось архивировать продукт.`,dbValidation:{ingredientNameRequired:`Название ингредиента обязательно`,ingredientAmountPositive:`Количество ингредиента должно быть конечным числом > 0`,ingredientUnitRequired:`Единица ингредиента обязательна`,productNameRequired:`Название продукта обязательно`,archivedProductLinkBlocked:`Нельзя привязать архивный продукт к схеме приёма`,productNotFound:`SupplementProduct не найден: {id}`,barcodeMinDigits:`Штрих-код должен содержать минимум 8 цифр.`,invalidProductForm:`Недопустимая форма продукта: {form}`,fieldRequired:`{fieldName} обязателен`,invalidUnit:`Недопустимая единица ({fieldName}): {unit}`,invalidIsoDate:`{fieldName} должен быть валидной ISO-датой`,labelServingSizeAmountPositive:`labelServingSize.amount должен быть конечным числом > 0`,packageQuantityTotalUnitsPositive:`packageQuantity.totalUnits должен быть конечным числом > 0`,inventoryServingsTotalNonNegative:`inventory.servingsTotal должен быть >= 0`,inventoryServingsRemainingNonNegative:`inventory.servingsRemaining должен быть >= 0`,inventoryUnitsRemainingNonNegative:`inventory.unitsRemaining должен быть >= 0`,inventoryLowStockThresholdNonNegative:`inventory.lowStockThresholdServings должен быть >= 0`,invalidProductSource:`Недопустимый source: {value}`,purchasePriceNonNegative:`purchasePrice должен быть >= 0`,planItemIdRequired:`planItemId обязателен`,productIdRequired:`productId обязателен`,servingsPerPlanDosePositive:`servingsPerPlanDose должен быть > 0`,unitsPerPlanDosePositive:`unitsPerPlanDose должен быть > 0`,invalidTemplateSource:`Недопустимый source шаблона: {value}`,templateNotFound:`Шаблон продукта не найден: {id}`},restoreFailed:`Не удалось восстановить продукт.`,deleteFailed:`Не удалось удалить продукт.`,alreadyInPlan:`Этот БАД уже есть в активном плане.`,personalizedBlockedInteractions:`Персональная схема недоступна из-за возможных взаимодействий.`,personalizedBlockedSafety:`Персональная схема недоступна из-за профиля безопасности.`,draftNotNeeded:`Для этой позиции черновик не требуется.`,draftCopied:`Черновик скопирован. План и каталог не изменены — сохраните вручную при необходимости.`,draftCopyFailed:`Не удалось скопировать черновик.`,enterDosageUnit:`Введите единицу дозировки.`,planUpdated:`План БАДов обновлён.`,editSaveFailed:`Не удалось сохранить изменения.`,markedTaken:`Отмечено: принято.`,markTakenFailed:`Не удалось отметить приём.`,markedSkipped:`Отмечено: пропущено.`,markSkippedFailed:`Не удалось отметить пропуск.`,labsLoadFailed:`Не удалось загрузить показатели анализов.`,deleteFromPlanConfirm:`Удалить «{name}» из плана? Схема приёма будет удалена. Отметки в журнале приёма сохранятся.`,addedNamed:`{name} добавлен в план.`,addedFromPreview:`{name} добавлен в план со справочной схемой из предпросмотра.`}}},s=`modulepreload`,c=function(e){return`/`+e},l={},u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=c(t,n),t in l)return;l[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:s,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},d=`ru`,f=null,p=null;function m(){return d}function h(e){d=e}async function g(){f||(p||=u(()=>import(`./en-CP3aw3rb.js`).then(e=>{f=e.default}),[]),await p)}function ee(e){return e===`en`&&f?f:o}function _(e,t){let n=e;for(let e of t){if(n==null||typeof n==`string`)return;n=n[e]}return n}function te(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?`{${n}}`:String(r)}):e}function v(e,t,n=d){let r=e.split(`.`),i=_(ee(n),r);return typeof i!=`string`&&n===`en`&&(i=_(o,r)),typeof i==`string`?te(i,t):e}var y=v;async function b(e){e===`en`&&await g()}function x(e){let[t,n]=e.split(`:`).map(Number);return!Number.isFinite(t)||!Number.isFinite(n)?0:Math.max(0,Math.min(23,t))*60+Math.max(0,Math.min(59,n))}function ne(e){let t=1440,n=(Math.round(e)%t+t)%t,r=Math.floor(n/60),i=n%60;return`${String(r).padStart(2,`0`)}:${String(i).padStart(2,`0`)}`}function S(e){let t=e.intervalMinutes??180,n=x(e.wakeTimeHHMM||`08:00`),r=e.sleepTimeHHMM!=null&&e.sleepTimeHHMM.trim()!==``?x(e.sleepTimeHHMM)-60:1320,i=r>n?r:1320,a=[],o=n;for(;o<=i;)a.push(o),o+=t;return a.length===0&&a.push(n),a.map((e,t)=>({time:ne(e),minPercent:Math.min(1,(t+1)/a.length)}))}function re(e,t,n=180,r=m()){let i=Math.round(t*e.minPercent),a=n/60;return v(`automation.waterReminderMessage`,{time:e.time,target:i,total:t,hours:a%1==0?String(a):a.toFixed(1)},r)}function C(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function w(e){if(!Array.isArray(e))return;let t=e.filter(e=>e&&typeof e==`object`&&typeof e.time==`string`&&typeof e.minPercent==`number`&&Number.isFinite(e.minPercent)).map(e=>({time:e.time,minPercent:e.minPercent}));return t.length>0?t:void 0}function T(e){let t={};if(!e||typeof e!=`object`)return t;let n=e,r={},i=C(n.maxHabitChanges7d);i!==void 0&&(r.maxHabitChanges7d=i);let a=C(n.maxActiveDailyHabitsSoft);a!==void 0&&(r.maxActiveDailyHabitsSoft=a);let o=C(n.waterMinPercentBeforeSleep);o!==void 0&&(r.waterMinPercentBeforeSleep=o);let s=C(n.waterSoftMaxPercent);s!==void 0&&(r.waterSoftMaxPercent=s);let c=C(n.waterHardMaxPercent);c!==void 0&&(r.waterHardMaxPercent=c);let l=C(n.waterUnderTargetCheckMinutesBeforeSleep);l!==void 0&&(r.waterUnderTargetCheckMinutesBeforeSleep=l);let u=w(n.waterCheckpoints);u&&(r.waterCheckpoints=u);let d=C(n.maxTasksCreatedPerDaySoft);d!==void 0&&(r.maxTasksCreatedPerDaySoft=d);let f=C(n.maxTasksCreatedPerDayHard);f!==void 0&&(r.maxTasksCreatedPerDayHard=f);let p=C(n.maxTasksDueTodaySoft);p!==void 0&&(r.maxTasksDueTodaySoft=p);let m=C(n.maxTasksDueTodayHard);m!==void 0&&(r.maxTasksDueTodayHard=m);let h=C(n.maxTopPriorities);if(h!==void 0&&(r.maxTopPriorities=h),Array.isArray(n.freePoolThresholds)){let e=n.freePoolThresholds.filter(e=>typeof e==`number`&&Number.isFinite(e));e.length>0&&(r.freePoolThresholds=e)}return r}function ie(e){return{...e,nutritionSimpleMode:e.nutritionSimpleMode===!0,uiTheme:e.uiTheme===`light`?`light`:e.uiTheme===`dark`?`dark`:void 0,uiFontScale:e.uiFontScale===`compact`||e.uiFontScale===`large`||e.uiFontScale===`comfortable`?e.uiFontScale:void 0,uiLocale:e.uiLocale===`en`?`en`:e.uiLocale===`ru`?`ru`:void 0,uiDesignPreset:e.uiDesignPreset===`default`||e.uiDesignPreset===`ocean`||e.uiDesignPreset===`forest`||e.uiDesignPreset===`sunset`||e.uiDesignPreset===`mono`||e.uiDesignPreset===`spring`||e.uiDesignPreset===`love`||e.uiDesignPreset===`summer`||e.uiDesignPreset===`neon`||e.uiDesignPreset===`autumn`||e.uiDesignPreset===`winter`||e.uiDesignPreset===`dawn`?e.uiDesignPreset:void 0}}function ae(e){return{...e,app:ie(e.app),guardrails:T(e.guardrails)}}async function E(){let e=await r.settings.get(`singleton`);if(e)return ae(e)}async function D(e){let t=await r.settings.get(`singleton`);if(!t)return;let n={...t};e.app!=null&&(n.app={...t.app,...e.app}),e.debt!=null&&(n.debt={...t.debt,...e.debt}),e.move!=null&&(n.move={...t.move,...e.move}),e.guardrails!=null&&(n.guardrails=T({...t.guardrails,...e.guardrails})),e.guardrailsState!=null&&(n.guardrailsState={...t.guardrailsState,...e.guardrailsState}),e.budgetPlan!=null&&(e.budgetPlan===null?n.budgetPlan={}:n.budgetPlan={...t.budgetPlan,...e.budgetPlan}),await r.settings.put(n)}async function oe(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=Math.max(0,Math.round(e)),i=S({wakeTimeHHMM:t.app.wakeTimeTarget??`08:00`,sleepTimeHHMM:t.app.sleepTimeTarget});await r.settings.put({...t,app:{...t.app,waterTargetMl:n},guardrails:{...t.guardrails,waterCheckpoints:i}})}async function se(e){let t=await r.settings.get(`singleton`);if(!t)return;let n={...t.budgetPlan??{}};e.monthlyAvailableRub!==void 0&&(n.monthlyAvailableRub=Math.max(0,Math.round(e.monthlyAvailableRub))),e.essentialBudgetsRub!==void 0&&(n.essentialBudgetsRub=Array.isArray(e.essentialBudgetsRub)?e.essentialBudgetsRub.map(e=>({category:String(e.category),amount:Math.max(0,Math.round(e.amount))})):[]),await r.settings.put({...t,budgetPlan:n})}async function ce(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n={...t.app};if(e.bulkCaloriesTarget!==void 0&&(n.bulkCaloriesTarget=e.bulkCaloriesTarget==null?void 0:Math.max(0,Math.round(e.bulkCaloriesTarget))),e.proteinTargetGr!==void 0&&(n.proteinTargetGr=e.proteinTargetGr==null?void 0:Math.max(0,Math.round(e.proteinTargetGr))),e.nutritionCaloriesTarget!==void 0){let t=e.nutritionCaloriesTarget==null?void 0:Math.max(0,Math.round(e.nutritionCaloriesTarget));n.nutritionCaloriesTarget=t,t!=null&&(n.bulkCaloriesTarget=t)}if(e.nutritionProteinTargetGr!==void 0){let t=e.nutritionProteinTargetGr==null?void 0:Math.max(0,Math.round(e.nutritionProteinTargetGr));n.nutritionProteinTargetGr=t,t!=null&&(n.proteinTargetGr=t)}if(e.nutritionFatTargetGr!==void 0&&(n.nutritionFatTargetGr=e.nutritionFatTargetGr==null?void 0:Math.max(0,Math.round(e.nutritionFatTargetGr))),e.nutritionCarbTargetGr!==void 0&&(n.nutritionCarbTargetGr=e.nutritionCarbTargetGr==null?void 0:Math.max(0,Math.round(e.nutritionCarbTargetGr))),e.nutritionMealsPerDayTarget!==void 0&&(n.nutritionMealsPerDayTarget=e.nutritionMealsPerDayTarget==null?void 0:Math.max(1,Math.round(e.nutritionMealsPerDayTarget))),e.nutritionCarbBefore18Percent!==void 0)if(e.nutritionCarbBefore18Percent==null)n.nutritionCarbBefore18Percent=void 0;else{let t=Math.max(0,Math.min(1,e.nutritionCarbBefore18Percent));n.nutritionCarbBefore18Percent=Number.isNaN(t)?void 0:t}await r.settings.put({...t,app:n})}function O(e){let t=new Set;return e.filter(e=>t.has(e)?!1:(t.add(e),!0))}async function le(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=t.app.recipePrefs??{},i=n.favoriteRecipeIds??[],a=i.includes(e)?i.filter(t=>t!==e):O([...i,e]);await D({app:{recipePrefs:{...n,favoriteRecipeIds:a.length?a:void 0}}})}async function ue(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=t.app.recipePrefs??{},i=(n.favoriteRecipeIds??[]).filter(t=>t!==e),a=(n.blockedRecipeIds??[]).filter(t=>t!==e);await D({app:{recipePrefs:{...n,favoriteRecipeIds:i.length?i:void 0,blockedRecipeIds:a.length?a:void 0}}})}function k(e){return e?{maxSameRecipePerWeek:typeof e.maxSameRecipePerWeek==`number`&&e.maxSameRecipePerWeek>=1?Math.min(7,Math.round(e.maxSameRecipePerWeek)):3,avoidSameMainProteinInRow:e.avoidSameMainProteinInRow!==!1,bannedCatalogFoodIds:Array.isArray(e.bannedCatalogFoodIds)?O(e.bannedCatalogFoodIds.filter(e=>typeof e==`string`)):[],bannedFoodGroups:Array.isArray(e.bannedFoodGroups)?O(e.bannedFoodGroups.filter(e=>typeof e==`string`)):[]}:{maxSameRecipePerWeek:3,avoidSameMainProteinInRow:!0,bannedCatalogFoodIds:[],bannedFoodGroups:[]}}async function de(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=k(t.app.recipeRules),i=Math.max(1,Math.min(7,Math.round(e)));await D({app:{recipeRules:{...n,maxSameRecipePerWeek:i}}})}async function fe(){let e=await r.settings.get(`singleton`);if(!e?.app)return;let t=k(e.app.recipeRules);await D({app:{recipeRules:{...t,avoidSameMainProteinInRow:!t.avoidSameMainProteinInRow}}})}async function A(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=k(t.app.recipeRules);n.bannedCatalogFoodIds.includes(e)||await D({app:{recipeRules:{...n,bannedCatalogFoodIds:O([...n.bannedCatalogFoodIds,e])}}})}async function j(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=k(t.app.recipeRules),i=n.bannedCatalogFoodIds.filter(t=>t!==e);await D({app:{recipeRules:{...n,bannedCatalogFoodIds:i}}})}async function M(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=k(t.app.recipeRules),i=n.bannedFoodGroups.includes(e)?n.bannedFoodGroups.filter(t=>t!==e):O([...n.bannedFoodGroups,e]);await D({app:{recipeRules:{...n,bannedFoodGroups:i}}})}async function N(e){let t=await r.settings.get(`singleton`);if(!t?.app)return;let n=new Date().toISOString(),i={...t.app.salaryTemplate??{enabled:!0,debtEnabled:!1,debtMode:`percent`,debtValue:0,debtId:null,savingsEnabled:!1,savingsMode:`percent`,savingsValue:0,savingsGoalId:null},...e,updatedAtISO:n};await r.settings.put({...t,app:{...t.app,salaryTemplate:i}})}var P=[`default`,`ocean`,`forest`,`sunset`,`mono`,`spring`,`love`,`summer`,`neon`,`autumn`,`winter`,`dawn`],F=`dark`,I=`comfortable`,L=`default`,R=`rms.interface.v2`,z=`rms.interface.v1`,B={compact:.88,comfortable:1,large:1.14},V=[`compact`,`comfortable`,`large`];function H(e){return e===`light`?`light`:`dark`}function U(e){return e===`compact`||e===`large`?e:`comfortable`}function W(e){return e===`en`?`en`:`ru`}function G(e){return P.includes(e)?e:L}function pe(e){let t=V.indexOf(e);return V[t<0?0:(t+1)%V.length]}function me(e){return e===`light`?`dark`:`light`}function he(e){let t=a.indexOf(e);return a[t<0?0:(t+1)%a.length]}function K(){return typeof document>`u`?{theme:F,fontScale:I,locale:`ru`,designPreset:L}:{theme:H(document.documentElement.dataset.theme),fontScale:U(document.documentElement.dataset.fontScale),locale:W(document.documentElement.dataset.locale),designPreset:G(document.documentElement.dataset.designPreset)}}function q(e){return{theme:H(e?.uiTheme),fontScale:U(e?.uiFontScale),locale:W(e?.uiLocale),designPreset:G(e?.uiDesignPreset)}}function ge(){if(typeof localStorage>`u`)return null;try{let e=localStorage.getItem(R),t=e?null:localStorage.getItem(z),n=JSON.parse(e??t??`null`);return n?{theme:H(n.theme),fontScale:U(n.fontScale),locale:W(n.locale),designPreset:G(n.designPreset)}:null}catch{return null}}function _e(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(R,JSON.stringify({theme:e.theme,fontScale:e.fontScale,locale:e.locale,designPreset:e.designPreset}))}catch{}}function ve(e){if(typeof document>`u`)return;let t=document.querySelector(`meta[name="theme-color"]`);if(!t)return;let n=e===`light`?getComputedStyle(document.documentElement).getPropertyValue(`--theme-color-meta`).trim()||`#f4f2f8`:getComputedStyle(document.documentElement).getPropertyValue(`--theme-color-meta`).trim()||`#1a1a1a`;t.setAttribute(`content`,n)}function ye(){let e=ge()??{theme:`dark`,fontScale:`comfortable`,locale:`ru`,designPreset:`default`};return J(e),e.locale===`en`&&b(`en`),e}function J(e){if(typeof document>`u`)return;let t=document.documentElement;t.dataset.theme=e.theme,t.dataset.fontScale=e.fontScale,t.dataset.locale=e.locale,t.dataset.designPreset=e.designPreset,t.lang=e.locale===`en`?`en`:`ru`,t.style.setProperty(`--font-scale`,String(B[e.fontScale])),_e(e),ve(e.theme)}var Y=`rms:interface-settings-changed`;function X(){typeof window>`u`||window.dispatchEvent(new Event(Y))}function be({children:e}){return(0,i.useEffect)(()=>{let e=!1;async function t(){let t=await E();e||J(q(t?.app))}t();let n=()=>{t()};return window.addEventListener(Y,n),()=>{e=!0,window.removeEventListener(Y,n)}},[]),e}var Z=n(),Q=(0,i.createContext)({locale:`ru`,t:e=>e,ready:!0});function xe({children:e}){let[t,n]=(0,i.useState)(()=>m()),[r,a]=(0,i.useState)(t===`ru`),o=(0,i.useCallback)(async()=>{let e=K();h(e.locale),n(e.locale),await b(e.locale),a(!0)},[]);(0,i.useEffect)(()=>{o();let e=()=>void o();return window.addEventListener(Y,e),()=>window.removeEventListener(Y,e)},[o]);let s=(0,i.useMemo)(()=>({locale:t,ready:r,t:(e,n)=>v(e,n,t)}),[t,r]);return(0,Z.jsx)(Q.Provider,{value:s,children:e})}function $(){return(0,i.useContext)(Q)}function Se(){return $().t}function Ce(){return $().locale}function we({children:e,className:t=``,style:n,id:r,tone:i=`default`,interactive:a=!1}){return(0,Z.jsx)(`div`,{id:r,className:`card rms-card ${i===`default`?``:`card--tone-${i}`} ${a?`card--interactive motion-lift`:``} ${t}`.trim(),style:n,children:e})}export{se as A,y as B,k as C,fe as D,de as E,S as F,re as I,m as L,N as M,D as N,M as O,oe as P,b as R,T as S,ue as T,u as V,K as _,Se as a,A as b,X as c,pe as d,he as f,H as g,W as h,Ce as i,ce as j,le as k,J as l,U as m,xe as n,Y as o,G as p,$ as r,be as s,we as t,ye as u,q as v,j as w,E as x,me as y,v as z};