{
    "app.title": "LED Grab",
    "app.version": "Версия:",
    "app.api_docs": "Документация API",
    "app.connection_lost": "Сервер недоступен",
    "app.connection_retrying": "Попытка переподключения…",
    "demo.badge": "ДЕМО",
    "demo.banner": "Вы в демо-режиме — все устройства и данные виртуальные. Реальное оборудование не используется.",
    "theme.toggle": "Переключить тему",
    "bg.anim.toggle": "Анимированный фон",
    "accent.title": "Цвет акцента",
    "accent.custom": "Свой",
    "accent.reset": "Сброс",
    "locale.change": "Изменить язык",
    "auth.login": "Войти",
    "auth.logout": "Выйти",
    "auth.authenticated": "● Авторизован",
    "auth.title": "Вход в LED Grab",
    "auth.message": "Пожалуйста, введите ваш API ключ для аутентификации и доступа к LED Grab.",
    "auth.label": "API Ключ:",
    "auth.placeholder": "Введите ваш API ключ...",
    "auth.hint": "Ваш API ключ будет безопасно сохранен в локальном хранилище браузера.",
    "auth.button.cancel": "Отмена",
    "auth.button.login": "Войти",
    "auth.error.required": "Пожалуйста, введите API ключ",
    "auth.success": "Вход выполнен успешно!",
    "auth.logout.confirm": "Вы уверены, что хотите выйти?",
    "auth.logout.success": "Выход выполнен успешно",
    "auth.please_login": "Пожалуйста, войдите для просмотра",
    "auth.session_expired": "Ваша сессия истекла или API ключ недействителен. Пожалуйста, войдите снова.",
    "auth.toggle_password": "Показать/скрыть пароль",
    "auth.prompt_enter": "Enter your API key:",
    "auth.prompt_update": "Current API key is set. Enter new key to update or leave blank to remove:",
    "api_key.login": "Войти",
    "displays.title": "Доступные Дисплеи",
    "displays.layout": "Дисплеи",
    "displays.information": "Информация о Дисплеях",
    "displays.legend.primary": "Основной Дисплей",
    "displays.legend.secondary": "Вторичный Дисплей",
    "displays.badge.primary": "Основной",
    "displays.badge.secondary": "Вторичный",
    "displays.resolution": "Разрешение:",
    "displays.refresh_rate": "Частота Обновления:",
    "displays.position": "Позиция:",
    "displays.index": "Индекс Дисплея:",
    "displays.loading": "Загрузка дисплеев...",
    "displays.none": "Нет доступных дисплеев",
    "displays.failed": "Не удалось загрузить дисплеи",
    "displays.picker.title": "Выберите Дисплей",
    "displays.picker.title.device": "Выберите Устройство",
    "displays.picker.select": "Выберите дисплей...",
    "displays.picker.click_to_select": "Нажмите, чтобы выбрать этот дисплей",
    "displays.picker.adb_connect": "Подключить ADB устройство",
    "displays.picker.adb_connect.placeholder": "IP адрес (напр. 192.168.2.201)",
    "displays.picker.adb_connect.button": "Подключить",
    "displays.picker.adb_connect.success": "Устройство подключено",
    "displays.picker.adb_connect.error": "Не удалось подключить устройство",
    "displays.picker.adb_disconnect": "Отключить",
    "displays.picker.no_android": "Android устройства не найдены. Подключите по USB или введите IP выше.",
    "templates.title": "Шаблоны Движков",
    "templates.description": "Шаблоны захвата определяют, как захватывается экран. Каждый шаблон использует определённый движок захвата (MSS, DXcam, WGC) с настраиваемыми параметрами. Назначайте шаблоны устройствам для оптимальной производительности.",
    "templates.loading": "Загрузка шаблонов...",
    "templates.empty": "Шаблоны захвата не настроены",
    "templates.add": "Добавить Шаблон Движка",
    "templates.edit": "Редактировать Шаблон Движка",
    "templates.name": "Имя Шаблона:",
    "templates.name.placeholder": "Мой Пользовательский Шаблон",
    "templates.description.label": "Описание (необязательно):",
    "templates.description.placeholder": "Опишите этот шаблон...",
    "templates.engine": "Движок Захвата:",
    "templates.engine.hint": "Выберите технологию захвата экрана",
    "templates.engine.select": "Выберите движок...",
    "templates.engine.unavailable": "Недоступен",
    "templates.engine.unavailable.hint": "Этот движок недоступен в вашей системе",
    "templates.engine.mss.desc": "Кроссплатформенный, чистый Python",
    "templates.engine.dxcam.desc": "DirectX, низкая задержка",
    "templates.engine.bettercam.desc": "DirectX, высокая производительность",
    "templates.engine.camera.desc": "Захват USB/IP камеры",
    "templates.engine.scrcpy.desc": "Зеркалирование экрана Android",
    "templates.engine.wgc.desc": "Windows Graphics Capture",
    "templates.config": "Конфигурация",
    "templates.config.show": "Показать конфигурацию",
    "templates.config.none": "Нет дополнительных настроек",
    "templates.config.default": "По умолчанию",
    "templates.config.camera_backend.auto": "Автовыбор лучшего бэкенда",
    "templates.config.camera_backend.dshow": "Windows DirectShow",
    "templates.config.camera_backend.msmf": "Windows Media Foundation",
    "templates.config.camera_backend.v4l2": "Linux Video4Linux2",
    "templates.created": "Шаблон успешно создан",
    "templates.updated": "Шаблон успешно обновлён",
    "templates.deleted": "Шаблон успешно удалён",
    "templates.delete.confirm": "Вы уверены, что хотите удалить этот шаблон?",
    "templates.error.load": "Не удалось загрузить шаблоны",
    "templates.error.engines": "Не удалось загрузить движки",
    "templates.error.required": "Пожалуйста, заполните все обязательные поля",
    "templates.error.delete": "Не удалось удалить шаблон",
    "templates.test.title": "Тест Захвата",
    "templates.test.description": "Протестируйте этот шаблон перед сохранением, чтобы увидеть предпросмотр захвата и метрики производительности.",
    "templates.test.display": "Дисплей:",
    "templates.test.display.select": "Выберите дисплей...",
    "templates.test.duration": "Длительность Захвата (с):",
    "templates.test.border_width": "Ширина Границы (px):",
    "templates.test.run": "Запустить",
    "templates.test.running": "Выполняется тест...",
    "templates.test.results.preview": "Полный Предпросмотр Захвата",
    "templates.test.results.borders": "Извлечение Границ",
    "templates.test.results.top": "Сверху",
    "templates.test.results.right": "Справа",
    "templates.test.results.bottom": "Снизу",
    "templates.test.results.left": "Слева",
    "templates.test.results.performance": "Производительность",
    "templates.test.results.capture_time": "Захват",
    "templates.test.results.extraction_time": "Извлечение",
    "templates.test.results.total_time": "Всего",
    "templates.test.results.max_fps": "Макс. FPS",
    "templates.test.results.duration": "Длительность",
    "templates.test.results.frame_count": "Кадры",
    "templates.test.results.actual_fps": "Факт. FPS",
    "templates.test.results.avg_capture_time": "Средн. Захват",
    "templates.test.results.resolution": "Разрешение:",
    "templates.test.error.no_engine": "Пожалуйста, выберите движок захвата",
    "templates.test.error.no_display": "Пожалуйста, выберите дисплей",
    "templates.test.error.failed": "Тест не удался",
    "devices.title": "Устройства",
    "device.select_type": "Выберите тип устройства",
    "devices.add": "Добавить Новое Устройство",
    "devices.loading": "Загрузка устройств...",
    "devices.none": "Устройства не настроены",
    "devices.failed": "Не удалось загрузить устройства",
    "devices.wled_config": "Конфигурация WLED:",
    "devices.wled_note": "Настройте ваше WLED устройство (эффекты, сегменты, порядок цветов, ограничения питания и т.д.) используя",
    "devices.wled_link": "официальное приложение WLED",
    "devices.wled_note_or": "или встроенный",
    "devices.wled_webui_link": "веб-интерфейс WLED",
    "devices.wled_note_webui": "(откройте IP устройства в браузере).",
    "devices.wled_note2": "Этот контроллер отправляет данные о цвете пикселей и управляет яркостью для каждого устройства.",
    "device.scan": "Автопоиск",
    "device.scan.empty": "Устройства не найдены",
    "device.scan.error": "Ошибка сканирования сети",
    "device.scan.already_added": "Уже добавлено",
    "device.scan.selected": "Устройство выбрано",
    "device.type": "Тип устройства:",
    "device.type.hint": "Выберите тип LED контроллера",
    "device.type.wled": "WLED",
    "device.type.wled.desc": "WiFi LED контроллер по HTTP/UDP",
    "device.type.adalight": "Adalight",
    "device.type.adalight.desc": "Серийный протокол для Arduino",
    "device.type.ambiled": "AmbiLED",
    "device.type.ambiled.desc": "Серийный протокол AmbiLED",
    "device.type.mqtt": "MQTT",
    "device.type.mqtt.desc": "Отправка LED данных через MQTT брокер",
    "device.type.ws": "WebSocket",
    "device.type.ws.desc": "Стриминг LED данных через WebSocket",
    "device.type.openrgb": "OpenRGB",
    "device.type.openrgb.desc": "Управление RGB через OpenRGB",
    "device.type.dmx": "DMX",
    "device.type.dmx.desc": "Art-Net / sACN (E1.31) сценическое освещение",
    "device.type.mock": "Mock",
    "device.type.mock.desc": "Виртуальное устройство для тестов",
    "device.type.espnow": "ESP-NOW",
    "device.type.espnow.desc": "Ultra-low-latency via ESP32 gateway",
    "device.type.hue": "Philips Hue",
    "device.type.hue.desc": "Hue Entertainment API streaming",
    "device.type.usbhid": "USB HID",
    "device.type.usbhid.desc": "USB RGB peripherals (keyboards, mice)",
    "device.type.spi": "SPI Direct",
    "device.type.spi.desc": "Raspberry Pi GPIO/SPI LED strips",
    "device.type.chroma": "Razer Chroma",
    "device.type.chroma.desc": "Razer peripherals via Chroma SDK",
    "device.type.gamesense": "SteelSeries",
    "device.type.gamesense.desc": "SteelSeries peripherals via GameSense",
    "device.chroma.device_type": "Peripheral Type:",
    "device.chroma.device_type.hint": "Which Razer peripheral to control via Chroma SDK",
    "device.gamesense.device_type": "Peripheral Type:",
    "device.gamesense.device_type.hint": "Which SteelSeries peripheral to control via GameSense",
    "device.espnow.peer_mac": "Peer MAC:",
    "device.espnow.peer_mac.hint": "MAC address of the remote ESP32 receiver (e.g. AA:BB:CC:DD:EE:FF)",
    "device.espnow.channel": "WiFi Channel:",
    "device.espnow.channel.hint": "WiFi channel (1-14). Must match the receiver's channel.",
    "device.hue.url": "Bridge IP:",
    "device.hue.url.hint": "IP address of your Hue bridge",
    "device.hue.username": "Bridge Username:",
    "device.hue.username.hint": "Hue bridge application key from pairing",
    "device.hue.client_key": "Client Key:",
    "device.hue.client_key.hint": "Entertainment API client key (hex string from pairing)",
    "device.hue.group_id": "Entertainment Group:",
    "device.hue.group_id.hint": "Entertainment configuration ID from your Hue bridge",
    "device.usbhid.url": "VID:PID:",
    "device.usbhid.url.hint": "USB Vendor:Product ID in hex (e.g. 1532:0084)",
    "device.spi.url": "GPIO/SPI Path:",
    "device.spi.url.hint": "GPIO pin or SPI device path (e.g. spi://gpio:18)",
    "device.spi.speed": "SPI Speed (Hz):",
    "device.spi.speed.hint": "SPI clock speed. 800000 Hz for WS2812, 2400000 Hz for APA102.",
    "device.spi.led_type": "LED Chipset:",
    "device.spi.led_type.hint": "Type of addressable LED strip connected to the GPIO/SPI pin",
    "device.spi.led_type.ws2812b.desc": "Most common, 800 KHz data, 3-wire RGB",
    "device.spi.led_type.ws2812.desc": "Original WS2812, 800 KHz, 3-wire RGB",
    "device.spi.led_type.ws2811.desc": "External driver IC, 400 KHz, 12V strips",
    "device.spi.led_type.sk6812.desc": "Samsung LED, 800 KHz, 3-wire RGB",
    "device.spi.led_type.sk6812_rgbw.desc": "SK6812 with dedicated white channel",
    "device.gamesense.peripheral.keyboard": "Keyboard",
    "device.gamesense.peripheral.keyboard.desc": "Per-key RGB illumination",
    "device.gamesense.peripheral.mouse": "Mouse",
    "device.gamesense.peripheral.mouse.desc": "Mouse RGB zones",
    "device.gamesense.peripheral.headset": "Headset",
    "device.gamesense.peripheral.headset.desc": "Headset earcup lighting",
    "device.gamesense.peripheral.mousepad": "Mousepad",
    "device.gamesense.peripheral.mousepad.desc": "Mousepad edge lighting zones",
    "device.gamesense.peripheral.indicator": "Indicator",
    "device.gamesense.peripheral.indicator.desc": "OLED/LED status indicator",
    "device.dmx_protocol": "Протокол DMX:",
    "device.dmx_protocol.hint": "Art-Net использует UDP порт 6454, sACN (E1.31) — UDP порт 5568",
    "device.dmx_protocol.artnet.desc": "UDP unicast, порт 6454",
    "device.dmx_protocol.sacn.desc": "Multicast/unicast, порт 5568",
    "device.dmx_start_universe": "Начальный Universe:",
    "device.dmx_start_universe.hint": "Первый DMX-юниверс (0-32767). Дополнительные юниверсы используются автоматически при >170 светодиодах.",
    "device.dmx_start_channel": "Начальный канал:",
    "device.dmx_start_channel.hint": "Первый DMX-канал в юниверсе (1-512)",
    "device.dmx.url": "IP адрес:",
    "device.dmx.url.hint": "IP адрес DMX-узла (напр. 192.168.1.50)",
    "device.dmx.url.placeholder": "192.168.1.50",
    "device.serial_port": "Серийный порт:",
    "device.serial_port.hint": "Выберите COM порт устройства Adalight",
    "device.serial_port.none": "Серийные порты не найдены",
    "device.serial_port.select": "Выберите порт...",
    "device.led_count_manual.hint": "Количество светодиодов на ленте (должно совпадать с вашим скетчем Arduino)",
    "device.baud_rate": "Скорость порта:",
    "device.baud_rate.hint": "Скорость серийного соединения. Выше = больше FPS, но требует соответствия скетчу Arduino.",
    "device.led_type": "Тип LED:",
    "device.led_type.hint": "RGB (3 канала) или RGBW (4 канала с выделенным белым)",
    "device.send_latency": "Задержка отправки (мс):",
    "device.send_latency.hint": "Имитация сетевой/серийной задержки на кадр в миллисекундах",
    "device.css_processing_template": "Шаблон Обработки Полос:",
    "device.css_processing_template.hint": "Шаблон обработки по умолчанию, применяемый ко всем цветовым полосам на этом устройстве",
    "device.mqtt_topic": "MQTT Топик:",
    "device.mqtt_topic.hint": "MQTT топик для публикации пиксельных данных (напр. mqtt://ledgrab/device/name)",
    "device.mqtt_topic.placeholder": "mqtt://ledgrab/device/гостиная",
    "device.ws_url": "URL подключения:",
    "device.ws_url.hint": "WebSocket URL для подключения клиентов и получения LED данных",
    "device.openrgb.url": "OpenRGB URL:",
    "device.openrgb.url.hint": "Адрес сервера OpenRGB (напр. openrgb://localhost:6742/0)",
    "device.openrgb.zone": "Зоны:",
    "device.openrgb.zone.hint": "Выберите зоны LED для управления (оставьте все неотмеченными для всех зон)",
    "device.openrgb.zone.loading": "Загрузка зон…",
    "device.openrgb.zone.error": "Не удалось загрузить зоны",
    "device.openrgb.mode": "Режим зон:",
    "device.openrgb.mode.hint": "Объединённый — все зоны как одна непрерывная LED-лента. Раздельный — каждая зона независимо отображает полный эффект.",
    "device.openrgb.mode.combined": "Объединённая лента",
    "device.openrgb.mode.separate": "Независимые зоны",
    "device.openrgb.added_multiple": "Добавлено {count} устройств",
    "device.url.hint": "IP адрес или имя хоста устройства (напр. http://192.168.1.100)",
    "device.name": "Имя Устройства:",
    "device.name.placeholder": "ТВ в Гостиной",
    "device.url": "URL:",
    "device.url.placeholder": "http://192.168.1.100",
    "device.led_count": "Количество Светодиодов:",
    "device.led_count.hint": "Количество светодиодов, настроенных в устройстве",
    "device.led_count.hint.auto": "Автоматически определяется из устройства",
    "device.button.add": "Добавить Устройство",
    "device.button.start": "Запустить",
    "device.button.stop": "Остановить",
    "device.button.settings": "Основные настройки",
    "device.button.capture_settings": "Настройки захвата",
    "device.button.calibrate": "Калибровка",
    "device.button.remove": "Удалить",
    "device.button.webui": "Открыть веб-интерфейс устройства",
    "device.button.power_off": "Выключить",
    "device.button.ping": "Пинг устройства",
    "device.ping.online": "Онлайн ({ms}мс)",
    "device.ping.offline": "Устройство недоступно",
    "device.ping.error": "Ошибка пинга",
    "device.power.off_success": "Устройство выключено",
    "device.status.connected": "Подключено",
    "device.status.disconnected": "Отключено",
    "device.status.error": "Ошибка",
    "device.status.processing": "Обработка",
    "device.status.idle": "Ожидание",
    "device.fps": "FPS:",
    "device.display": "Дисплей:",
    "device.remove.confirm": "Вы уверены, что хотите удалить это устройство?",
    "device.added": "Устройство успешно добавлено",
    "device.removed": "Устройство удалено",
    "device.started": "Обработка запущена",
    "device.stopped": "Обработка остановлена",
    "device.metrics.actual_fps": "Факт. FPS",
    "device.metrics.current_fps": "Текущ. FPS",
    "device.metrics.target_fps": "Целев. FPS",
    "device.metrics.potential_fps": "Потенц. FPS",
    "device.metrics.frames": "Кадры",
    "device.metrics.frames_skipped": "Пропущено",
    "device.metrics.keepalive": "Keepalive",
    "device.metrics.errors": "Ошибки",
    "device.metrics.uptime": "Время работы",
    "device.metrics.timing": "Тайминг пайплайна:",
    "device.metrics.device_fps": "Частота обновления устройства",
    "device.health.online": "Онлайн",
    "device.health.offline": "Недоступен",
    "device.health.streaming_unreachable": "Недоступен во время стриминга",
    "device.health.checking": "Проверка...",
    "device.last_seen.label": "Последний раз",
    "device.last_seen.just_now": "только что",
    "device.last_seen.seconds": "%d с назад",
    "device.last_seen.minutes": "%d мин назад",
    "device.last_seen.hours": "%d ч назад",
    "device.last_seen.days": "%d д назад",
    "device.tutorial.start": "Начать обучение",
    "device.tip.metadata": "Информация об устройстве (кол-во LED, тип, цветовые каналы) определяется автоматически",
    "device.tip.brightness": "Перетащите для регулировки яркости",
    "device.tip.start": "Запуск или остановка захвата экрана",
    "device.tip.settings": "Основные настройки устройства (имя, URL, интервал проверки)",
    "device.tip.capture_settings": "Настройки захвата (дисплей, шаблон захвата)",
    "device.tip.calibrate": "Калибровка позиций LED, направления и зоны покрытия",
    "device.tip.webui": "Открыть встроенный веб-интерфейс устройства для расширенной настройки",
    "device.tip.add": "Нажмите, чтобы добавить новое LED устройство",
    "settings.title": "Настройки",
    "settings.tab.general": "Основные",
    "settings.tab.backup": "Бэкап",
    "settings.tab.mqtt": "MQTT",
    "settings.logs.open_viewer": "Открыть логи",
    "settings.external_url.label": "Внешний URL",
    "settings.external_url.hint": "Если указан, этот базовый URL используется в URL-ах вебхуков и других пользовательских ссылках вместо автоопределённого локального IP. Пример: https://myserver.example.com:8080",
    "settings.external_url.placeholder": "https://myserver.example.com:8080",
    "settings.external_url.save": "Сохранить",
    "settings.external_url.saved": "Внешний URL сохранён",
    "settings.external_url.save_error": "Не удалось сохранить внешний URL",
    "settings.general.title": "Основные Настройки",
    "settings.capture.title": "Настройки Захвата",
    "settings.capture.saved": "Настройки захвата обновлены",
    "settings.capture.failed": "Не удалось сохранить настройки захвата",
    "settings.brightness": "Яркость:",
    "settings.brightness.hint": "Общая яркость для этого устройства (0-100%)",
    "settings.url.hint": "IP адрес или имя хоста устройства",
    "settings.display_index": "Дисплей:",
    "settings.display_index.hint": "Какой экран захватывать для этого устройства",
    "settings.fps": "Целевой FPS:",
    "settings.fps.hint": "Целевая частота кадров (10-90)",
    "settings.capture_template": "Шаблон Движка:",
    "settings.capture_template.hint": "Движок захвата экрана и конфигурация для этого устройства",
    "settings.button.cancel": "Отмена",
    "settings.health_interval": "Интервал Проверки (с):",
    "settings.health_interval.hint": "Как часто проверять статус устройства (5-600 секунд)",
    "settings.auto_shutdown": "Авто-восстановление:",
    "settings.auto_shutdown.hint": "Восстанавливать устройство в режим ожидания при остановке целей или сервера",
    "settings.button.save": "Сохранить Изменения",
    "settings.saved": "Настройки успешно сохранены",
    "settings.failed": "Не удалось сохранить настройки",
    "calibration.title": "Калибровка Светодиодов",
    "calibration.tip.led_count": "Укажите количество LED на каждой стороне",
    "calibration.tip.start_corner": "Нажмите на угол для выбора стартовой позиции",
    "calibration.tip.direction": "Переключение направления ленты (по часовой / против часовой)",
    "calibration.tip.offset": "Смещение LED — расстояние от LED 0 до стартового угла",
    "calibration.tip.span": "Перетащите зелёные полосы для настройки зоны покрытия",
    "calibration.tip.test": "Нажмите на край для теста LED",
    "calibration.tip.overlay": "Включите оверлей для отображения позиций и нумерации LED на мониторе",
    "calibration.tip.toggle_inputs": "Нажмите на общее количество LED для скрытия боковых полей",
    "calibration.tip.border_width": "Сколько пикселей от края экрана использовать для цветов LED",
    "calibration.tip.skip_leds_start": "Пропуск LED в начале ленты — пропущенные LED остаются выключенными",
    "calibration.tip.skip_leds_end": "Пропуск LED в конце ленты — пропущенные LED остаются выключенными",
    "tour.welcome": "Добро пожаловать в LED Grab! Этот краткий тур познакомит вас с интерфейсом. Используйте стрелки или кнопки для навигации.",
    "tour.dashboard": "Дашборд — обзор запущенных целей, автоматизаций и состояния устройств.",
    "tour.targets": "Цели — добавляйте WLED-устройства, настраивайте LED-цели с захватом и калибровкой.",
    "tour.sources": "Источники — управление шаблонами захвата, источниками изображений, звука и цветовых полос.",
    "tour.graph": "Граф — визуальный обзор всех сущностей и их связей. Перетаскивайте порты для соединения, правый клик по связям для отключения.",
    "tour.automations": "Автоматизации — автоматизируйте переключение сцен по расписанию, звуку или значениям.",
    "tour.settings": "Настройки — резервное копирование и восстановление конфигурации.",
    "tour.api": "API Документация — интерактивная документация REST API на базе Swagger.",
    "tour.search": "Поиск — быстрый поиск и переход к любому объекту по Ctrl+K.",
    "tour.theme": "Тема — переключение между тёмной и светлой темой.",
    "tour.accent": "Цвет акцента — настройте цвет интерфейса по своему вкусу.",
    "tour.language": "Язык — выберите предпочитаемый язык интерфейса.",
    "tour.restart": "Запустить тур заново",
    "tour.dash.perf": "Производительность — графики FPS в реальном времени, метрики задержки и интервал опроса.",
    "tour.dash.running": "Запущенные цели — метрики стриминга и быстрая остановка.",
    "tour.dash.stopped": "Остановленные цели — готовы к запуску одним нажатием.",
    "tour.dash.automations": "Автоматизации — статус активных автоматизаций и быстрое включение/выключение.",
    "tour.tgt.led_tab": "LED — стандартные LED-цели с настройкой устройств и цветовых полос.",
    "tour.tgt.devices": "Устройства — ваши LED-контроллеры, найденные в сети.",
    "tour.tgt.css": "Цветовые полосы — определите, как области экрана соответствуют сегментам LED.",
    "tour.tgt.targets": "LED-цели — объедините устройство, цветовую полосу и источник захвата для стриминга.",
    "tour.tgt.kc_tab": "Key Colors — альтернативный тип цели с подбором цветов вместо пиксельного маппинга.",
    "tour.src.raw": "Raw — источники захвата экрана с ваших дисплеев.",
    "tour.src.templates": "Шаблоны захвата — переиспользуемые конфигурации (разрешение, FPS, обрезка).",
    "tour.src.static": "Статичные изображения — тестируйте настройку с файлами изображений.",
    "tour.src.processed": "Обработка — применяйте эффекты: размытие, яркость, цветокоррекция.",
    "tour.src.color_strip": "Цветовые полосы — определяют, как области экрана сопоставляются с LED-сегментами.",
    "tour.src.audio": "Аудио — анализ микрофона или системного звука для реактивных LED-эффектов.",
    "tour.src.value": "Значения — числовые источники данных для условий автоматизаций.",
    "tour.src.sync": "Синхро-часы — общие таймеры для синхронизации анимаций между несколькими источниками.",
    "tour.auto.list": "Автоматизации — автоматизируйте активацию сцен по времени, звуку или значениям.",
    "tour.auto.add": "Нажмите + для создания новой автоматизации с условиями и сценой для активации.",
    "tour.auto.card": "Каждая карточка показывает статус автоматизации, условия и кнопки управления.",
    "tour.auto.scenes_list": "Сцены — сохранённые состояния системы, которые автоматизации могут активировать или вы можете применить вручную.",
    "tour.auto.scenes_add": "Нажмите + для захвата текущего состояния системы как нового пресета сцены.",
    "tour.auto.scenes_card": "Каждая карточка сцены показывает количество целей/устройств. Нажмите для редактирования, перезахвата или активации.",
    "calibration.tutorial.start": "Начать обучение",
    "calibration.overlay_toggle": "Оверлей",
    "calibration.start_position": "Начальная Позиция:",
    "calibration.position.bottom_left": "Нижний Левый",
    "calibration.position.bottom_right": "Нижний Правый",
    "calibration.position.top_left": "Верхний Левый",
    "calibration.position.top_right": "Верхний Правый",
    "calibration.direction": "Направление:",
    "calibration.direction.clockwise": "По Часовой Стрелке",
    "calibration.direction.counterclockwise": "Против Часовой Стрелки",
    "calibration.leds.top": "Светодиодов Сверху:",
    "calibration.leds.right": "Светодиодов Справа:",
    "calibration.leds.bottom": "Светодиодов Снизу:",
    "calibration.leds.left": "Светодиодов Слева:",
    "calibration.offset": "Смещение LED:",
    "calibration.offset.hint": "Расстояние от физического LED 0 до стартового угла (по направлению ленты)",
    "calibration.skip_start": "Пропуск LED (начало):",
    "calibration.skip_start.hint": "Количество LED, которые будут выключены в начале ленты (0 = нет)",
    "calibration.skip_end": "Пропуск LED (конец):",
    "calibration.skip_end.hint": "Количество LED, которые будут выключены в конце ленты (0 = нет)",
    "calibration.border_width": "Граница (px):",
    "calibration.border_width.hint": "Сколько пикселей от края экрана выбирать для цвета LED (1-100)",
    "calibration.button.cancel": "Отмена",
    "calibration.button.save": "Сохранить",
    "calibration.saved": "Калибровка сохранена",
    "calibration.failed": "Не удалось сохранить калибровку",
    "server.healthy": "Сервер онлайн",
    "server.offline": "Сервер офлайн",
    "error.unauthorized": "Не авторизован - пожалуйста, войдите",
    "error.network": "Сетевая ошибка",
    "error.unknown": "Произошла ошибка",
    "modal.discard_changes": "У вас есть несохранённые изменения. Отменить их?",
    "confirm.title": "Подтверждение",
    "confirm.yes": "Да",
    "confirm.no": "Нет",
    "confirm.stop_all": "Остановить все запущенные цели?",
    "confirm.turn_off_device": "Выключить это устройство?",
    "common.loading": "Загрузка...",
    "common.delete": "Удалить",
    "common.edit": "Редактировать",
    "common.clone": "Клонировать",
    "common.none": "Нет",
    "common.none_no_cspt": "Нет (без шаблона обработки)",
    "common.none_no_input": "Нет (без источника)",
    "common.none_own_speed": "Нет (своя скорость)",
    "common.undo": "Отменить",
    "validation.required": "Обязательное поле",
    "bulk.processing": "Обработка…",
    "api.error.timeout": "Превышено время ожидания — попробуйте снова",
    "api.error.network": "Ошибка сети — проверьте подключение",
    "palette.search": "Поиск…",
    "section.filter.placeholder": "Фильтр...",
    "section.filter.reset": "Очистить фильтр",
    "tags.label": "Теги",
    "tags.hint": "Назначьте теги для группировки и фильтрации карточек",
    "tags.placeholder": "Добавить тег...",
    "section.expand_all": "Развернуть все секции",
    "section.collapse_all": "Свернуть все секции",
    "streams.title": "Источники",
    "streams.description": "Источники определяют конвейер захвата. Сырой источник захватывает экран с помощью шаблона захвата. Обработанный источник применяет постобработку к другому источнику. Назначайте источники устройствам.",
    "streams.group.raw": "Источники",
    "streams.group.raw_templates": "Шаблоны движка",
    "streams.group.processed": "Источники",
    "streams.group.proc_templates": "Шаблоны фильтров",
    "streams.group.css_processing": "Шаблоны Обработки",
    "streams.group.color_strip": "Цветовые Полосы",
    "streams.group.audio": "Аудио",
    "streams.group.audio_templates": "Аудио шаблоны",
    "streams.section.streams": "Источники",
    "streams.add": "Добавить Источник",
    "streams.add.raw": "Добавить Захват Экрана",
    "streams.add.processed": "Добавить Обработанный",
    "streams.edit": "Редактировать Источник",
    "streams.edit.raw": "Редактировать Захват Экрана",
    "streams.edit.processed": "Редактировать Обработанный Источник",
    "streams.name": "Имя Источника:",
    "streams.name.placeholder": "Мой Источник",
    "streams.type": "Тип:",
    "streams.type.raw": "Захват экрана",
    "streams.type.processed": "Обработанный",
    "streams.display": "Дисплей:",
    "streams.display.hint": "Какой экран захватывать",
    "streams.capture_template": "Шаблон Движка:",
    "streams.capture_template.hint": "Шаблон движка, определяющий способ захвата экрана",
    "streams.target_fps": "Целевой FPS:",
    "streams.target_fps.hint": "Целевое количество кадров в секунду (1-90)",
    "streams.source": "Источник:",
    "streams.source.hint": "Источник, к которому применяются фильтры обработки",
    "streams.pp_template": "Шаблон Фильтра:",
    "streams.pp_template.hint": "Шаблон фильтра для применения к источнику",
    "streams.description_label": "Описание (необязательно):",
    "streams.description_placeholder": "Опишите этот источник...",
    "streams.created": "Источник успешно создан",
    "streams.updated": "Источник успешно обновлён",
    "streams.deleted": "Источник успешно удалён",
    "streams.delete.confirm": "Вы уверены, что хотите удалить этот источник?",
    "streams.modal.loading": "Загрузка...",
    "streams.error.load": "Не удалось загрузить источники",
    "streams.error.required": "Пожалуйста, заполните все обязательные поля",
    "streams.error.delete": "Не удалось удалить источник",
    "streams.test.title": "Тест Источника",
    "streams.test.run": "Запустить",
    "streams.test.running": "Тестирование источника...",
    "streams.test.duration": "Длительность Захвата (с):",
    "streams.test.error.failed": "Тест источника не удался",
    "postprocessing.title": "Шаблоны Фильтров",
    "postprocessing.description": "Шаблоны обработки определяют фильтры изображений и цветокоррекцию. Назначайте их обработанным источникам для единообразной постобработки на всех устройствах.",
    "postprocessing.add": "Добавить Шаблон Фильтра",
    "postprocessing.edit": "Редактировать Шаблон Фильтра",
    "postprocessing.name": "Имя Шаблона:",
    "postprocessing.name.placeholder": "Мой Шаблон Фильтра",
    "filters.select_type": "Выберите тип фильтра...",
    "filters.add": "Добавить фильтр",
    "filters.remove": "Удалить",
    "filters.drag_to_reorder": "Перетащите для изменения порядка",
    "filters.empty": "Фильтры не добавлены. Используйте селектор ниже для добавления.",
    "filters.brightness": "Яркость",
    "filters.brightness.desc": "Регулировка общей яркости изображения",
    "filters.saturation": "Насыщенность",
    "filters.saturation.desc": "Усиление или снижение интенсивности цвета",
    "filters.gamma": "Гамма",
    "filters.gamma.desc": "Нелинейная коррекция кривой яркости",
    "filters.downscaler": "Уменьшение",
    "filters.downscaler.desc": "Снижение разрешения для быстрой обработки",
    "filters.pixelate": "Пикселизация",
    "filters.pixelate.desc": "Мозаичное усреднение блоков",
    "filters.auto_crop": "Авто Обрезка",
    "filters.auto_crop.desc": "Удаление чёрных полос из леттербокса",
    "filters.flip": "Отражение",
    "filters.flip.desc": "Зеркальное отражение по горизонтали или вертикали",
    "filters.color_correction": "Цветокоррекция",
    "filters.color_correction.desc": "Баланс белого и цветовая температура",
    "filters.filter_template": "Шаблон фильтров",
    "filters.filter_template.desc": "Встроить другой шаблон обработки",
    "filters.css_filter_template": "Шаблон Фильтра Полос",
    "filters.css_filter_template.desc": "Встроить другой шаблон обработки полос",
    "filters.frame_interpolation": "Интерполяция кадров",
    "filters.frame_interpolation.desc": "Сглаживание между кадрами",
    "filters.noise_gate": "Шумоподавление",
    "filters.noise_gate.desc": "Подавление малых изменений цвета ниже порога",
    "filters.palette_quantization": "Квантизация палитры",
    "filters.palette_quantization.desc": "Сокращение цветов до ограниченной палитры",
    "filters.reverse": "Реверс",
    "filters.reverse.desc": "Изменить порядок светодиодов на обратный",
    "postprocessing.description_label": "Описание (необязательно):",
    "postprocessing.description_placeholder": "Опишите этот шаблон...",
    "postprocessing.created": "Шаблон успешно создан",
    "postprocessing.updated": "Шаблон успешно обновлён",
    "postprocessing.deleted": "Шаблон успешно удалён",
    "postprocessing.delete.confirm": "Вы уверены, что хотите удалить этот шаблон фильтра?",
    "postprocessing.error.load": "Не удалось загрузить шаблоны фильтров",
    "postprocessing.error.required": "Пожалуйста, заполните все обязательные поля",
    "postprocessing.error.delete": "Не удалось удалить шаблон фильтра",
    "postprocessing.config.show": "Показать настройки",
    "postprocessing.test.title": "Тест шаблона фильтра",
    "postprocessing.test.source_stream": "Источник:",
    "postprocessing.test.running": "Тестирование шаблона фильтра...",
    "postprocessing.test.error.no_stream": "Пожалуйста, выберите источник",
    "postprocessing.test.error.failed": "Тест шаблона фильтра не удался",
    "css_processing.title": "Шаблоны Обработки Полос",
    "css_processing.add": "Добавить Шаблон Обработки Полос",
    "css_processing.edit": "Редактировать Шаблон Обработки Полос",
    "css_processing.name": "Имя Шаблона:",
    "css_processing.name_placeholder": "Мой Шаблон Обработки Полос",
    "css_processing.description_label": "Описание (необязательно):",
    "css_processing.description_placeholder": "Опишите этот шаблон...",
    "css_processing.created": "Шаблон обработки полос создан",
    "css_processing.updated": "Шаблон обработки полос обновлён",
    "css_processing.deleted": "Шаблон обработки полос удалён",
    "css_processing.delete.confirm": "Вы уверены, что хотите удалить этот шаблон обработки полос?",
    "css_processing.error.required": "Заполните все обязательные поля",
    "css_processing.error.load": "Ошибка загрузки шаблона обработки полос",
    "css_processing.error.delete": "Ошибка удаления шаблона обработки полос",
    "css_processing.error.clone_failed": "Не удалось клонировать шаблон обработки полос",
    "device.button.stream_selector": "Настройки источника",
    "device.stream_settings.title": "Настройки источника",
    "device.stream_selector.label": "Источник:",
    "device.stream_selector.hint": "Выберите источник, определяющий что это устройство захватывает и обрабатывает",
    "device.stream_selector.none": "-- Источник не назначен --",
    "device.stream_selector.saved": "Настройки источника обновлены",
    "device.stream_settings.border_width": "Ширина границы (px):",
    "device.stream_settings.border_width_hint": "Сколько пикселей от края экрана выбирать для цвета LED (1-100)",
    "device.stream_settings.interpolation": "Режим интерполяции:",
    "device.stream_settings.interpolation.average": "Среднее",
    "device.stream_settings.interpolation.median": "Медиана",
    "device.stream_settings.interpolation.dominant": "Доминантный",
    "device.stream_settings.interpolation_hint": "Как вычислять цвет LED из выбранных пикселей",
    "device.stream_settings.smoothing": "Сглаживание:",
    "device.stream_settings.smoothing_hint": "Временное смешивание между кадрами (0=нет, 1=полное). Уменьшает мерцание.",
    "device.tip.stream_selector": "Настройки источника и проекции LED для этого устройства",
    "streams.group.static_image": "Статические",
    "streams.add.static_image": "Добавить статическое изображение (источник)",
    "streams.edit.static_image": "Редактировать статическое изображение (источник)",
    "streams.type.static_image": "Статическое изображение",
    "streams.group.video": "Видео",
    "streams.add.video": "Добавить видеоисточник",
    "streams.edit.video": "Редактировать видеоисточник",
    "picture_source.type.video": "Видео",
    "picture_source.type.video.desc": "Потоковые кадры из видеофайла, URL или YouTube",
    "picture_source.video.url": "URL видео:",
    "picture_source.video.url.hint": "Локальный файл, HTTP URL или YouTube URL",
    "picture_source.video.url.placeholder": "https://example.com/video.mp4",
    "picture_source.video.loop": "Зацикливание:",
    "picture_source.video.speed": "Скорость воспроизведения:",
    "picture_source.video.start_time": "Время начала (с):",
    "picture_source.video.end_time": "Время окончания (с):",
    "picture_source.video.resolution_limit": "Макс. ширина (px):",
    "picture_source.video.resolution_limit.hint": "Уменьшение видео при декодировании для производительности",
    "streams.image_source": "Источник изображения:",
    "streams.image_source.placeholder": "https://example.com/image.jpg или C:\\path\\to\\image.png",
    "streams.image_source.hint": "Введите URL (http/https) или локальный путь к изображению",
    "streams.validate_image.validating": "Проверка...",
    "streams.validate_image.valid": "Изображение доступно",
    "streams.validate_image.invalid": "Изображение недоступно",
    "targets.title": "Цели",
    "targets.description": "Цели связывают источники цветовых полос с устройствами вывода. Каждая цель ссылается на устройство и источник цветовой полосы.",
    "targets.subtab.wled": "LED",
    "targets.subtab.led": "LED",
    "targets.section.devices": "Устройства",
    "targets.section.color_strips": "Источники цветовых полос",
    "targets.section.targets": "Цели",
    "targets.section.specific_settings": "Специальные настройки",
    "targets.section.advanced": "Расширенные",
    "targets.add": "Добавить Цель",
    "targets.edit": "Редактировать Цель",
    "targets.loading": "Загрузка целей...",
    "targets.none": "Цели не настроены",
    "targets.failed": "Не удалось загрузить цели",
    "targets.name": "Имя Цели:",
    "targets.name.placeholder": "Моя Цель",
    "targets.device": "Устройство:",
    "targets.device.hint": "Выберите LED устройство для передачи данных",
    "targets.device.none": "-- Выберите устройство --",
    "targets.color_strip_source": "Источник цветовой полосы:",
    "targets.color_strip_source.hint": "Выберите источник цветовой полосы, который предоставляет цвета LED для этой цели",
    "targets.no_css": "Нет источника",
    "targets.source": "Источник:",
    "targets.source.hint": "Какой источник изображения захватывать и обрабатывать",
    "targets.source.none": "-- Источник не назначен --",
    "targets.metrics.pipeline": "Детали конвейера",
    "targets.fps": "Целевой FPS:",
    "targets.fps.hint": "Целевая частота кадров для захвата и обновления LED (1-90)",
    "targets.fps.rec": "Макс. аппаратный ≈ {fps} fps ({leds} LED)",
    "targets.border_width": "Ширина границы (px):",
    "targets.border_width.hint": "Сколько пикселей от края экрана выбирать для цвета LED (1-100)",
    "targets.interpolation": "Режим интерполяции:",
    "targets.interpolation.hint": "Как вычислять цвет LED из выбранных пикселей",
    "targets.interpolation.average": "Среднее",
    "targets.interpolation.median": "Медиана",
    "targets.interpolation.dominant": "Доминантный",
    "targets.smoothing": "Сглаживание:",
    "targets.smoothing.hint": "Временное смешивание между кадрами (0=нет, 1=полное). Уменьшает мерцание.",
    "targets.keepalive_interval": "Интервал поддержания связи:",
    "targets.keepalive_interval.hint": "Как часто повторно отправлять последний кадр при статичном источнике для удержания устройства в режиме live (0.5-5.0с)",
    "targets.created": "Цель успешно создана",
    "targets.updated": "Цель успешно обновлена",
    "targets.deleted": "Цель успешно удалена",
    "targets.delete.confirm": "Вы уверены, что хотите удалить эту цель?",
    "targets.error.load": "Не удалось загрузить цели",
    "targets.error.required": "Пожалуйста, заполните все обязательные поля",
    "targets.error.name_required": "Введите название цели",
    "targets.error.delete": "Не удалось удалить цель",
    "targets.button.start": "Запустить",
    "targets.button.stop": "Остановить",
    "targets.status.processing": "Обработка",
    "targets.status.idle": "Ожидание",
    "targets.status.error": "Ошибка",
    "targets.metrics.actual_fps": "Факт. FPS",
    "targets.metrics.target_fps": "Целев. FPS",
    "targets.metrics.frames": "Кадры",
    "targets.metrics.errors": "Ошибки",
    "targets.subtab.key_colors": "Ключевые Цвета",
    "targets.section.key_colors": "Цели Ключевых Цветов",
    "kc.add": "Добавить Цель Ключевых Цветов",
    "kc.edit": "Редактировать Цель Ключевых Цветов",
    "kc.name": "Имя Цели:",
    "kc.name.placeholder": "Моя Цель Ключевых Цветов",
    "kc.source": "Источник:",
    "kc.source.hint": "Из какого источника извлекать цвета",
    "kc.source.none": "-- Источник не назначен --",
    "kc.fps": "FPS Извлечения:",
    "kc.fps.hint": "Сколько раз в секунду извлекать цвета (1-60)",
    "kc.interpolation": "Режим Цвета:",
    "kc.interpolation.hint": "Как вычислять ключевой цвет из пикселей в каждом прямоугольнике",
    "kc.interpolation.average": "Среднее",
    "kc.interpolation.median": "Медиана",
    "kc.interpolation.dominant": "Доминантный",
    "kc.interpolation.average.desc": "Среднее всех цветов пикселей",
    "kc.interpolation.median.desc": "Медианное значение по каналам",
    "kc.interpolation.dominant.desc": "Наиболее частый цвет",
    "kc.smoothing": "Сглаживание:",
    "kc.smoothing.hint": "Временное смешивание между извлечениями (0=нет, 1=полное)",
    "kc.pattern_template": "Шаблон Паттерна:",
    "kc.pattern_template.hint": "Выберите шаблон прямоугольников для извлечения цветов",
    "kc.pattern_template.none": "-- Выберите шаблон паттерна --",
    "kc.brightness_vs": "Источник Яркости:",
    "kc.brightness_vs.hint": "Опциональный источник значений, динамически управляющий яркостью каждый кадр (умножается на ручной слайдер яркости)",
    "kc.brightness_vs.none": "Нет (только ручная яркость)",
    "kc.created": "Цель ключевых цветов успешно создана",
    "kc.updated": "Цель ключевых цветов успешно обновлена",
    "kc.deleted": "Цель ключевых цветов успешно удалена",
    "kc.delete.confirm": "Вы уверены, что хотите удалить эту цель ключевых цветов?",
    "kc.error.no_pattern": "Пожалуйста, выберите шаблон паттерна",
    "kc.error.required": "Пожалуйста, заполните все обязательные поля",
    "kc.colors.none": "Цвета пока не извлечены",
    "kc.test": "Тест",
    "kc.test.error": "Ошибка теста",
    "targets.section.pattern_templates": "Шаблоны Паттернов",
    "pattern.add": "Добавить Шаблон Паттерна",
    "pattern.edit": "Редактировать Шаблон Паттерна",
    "pattern.name": "Имя Шаблона:",
    "pattern.name.placeholder": "Мой Шаблон Паттерна",
    "pattern.description_label": "Описание (необязательно):",
    "pattern.description_placeholder": "Опишите этот паттерн...",
    "pattern.rectangles": "Прямоугольники",
    "pattern.rect.name": "Имя",
    "pattern.rect.x": "X",
    "pattern.rect.y": "Y",
    "pattern.rect.width": "Ш",
    "pattern.rect.height": "В",
    "pattern.rect.add": "Добавить Прямоугольник",
    "pattern.rect.remove": "Удалить",
    "pattern.rect.empty": "Прямоугольники не определены. Добавьте хотя бы один.",
    "pattern.created": "Шаблон паттерна успешно создан",
    "pattern.updated": "Шаблон паттерна успешно обновлён",
    "pattern.deleted": "Шаблон паттерна успешно удалён",
    "pattern.delete.confirm": "Вы уверены, что хотите удалить этот шаблон паттерна?",
    "pattern.delete.referenced": "Невозможно удалить: шаблон используется целью",
    "pattern.error.required": "Пожалуйста, заполните все обязательные поля",
    "pattern.visual_editor": "Визуальный Редактор",
    "pattern.capture_bg": "Захватить Фон",
    "pattern.source_for_bg": "Источник для Фона:",
    "pattern.source_for_bg.none": "-- Выберите источник --",
    "pattern.delete_selected": "Удалить Выбранный",
    "pattern.name.hint": "Описательное имя для этой раскладки прямоугольников",
    "pattern.description.hint": "Необязательные заметки о назначении этого паттерна",
    "pattern.visual_editor.hint": "Нажмите кнопки + чтобы добавить прямоугольники. Тяните края для изменения размера, тяните внутри для перемещения.",
    "pattern.rectangles.hint": "Точная настройка позиций и размеров прямоугольников в координатах (0.0 до 1.0)",
    "overlay.toggle": "Переключить наложение на экран",
    "overlay.button.show": "Показать визуализацию наложения",
    "overlay.button.hide": "Скрыть визуализацию наложения",
    "overlay.started": "Визуализация наложения запущена",
    "overlay.stopped": "Визуализация наложения остановлена",
    "overlay.error.start": "Не удалось запустить наложение",
    "overlay.error.stop": "Не удалось остановить наложение",
    "dashboard.title": "Обзор",
    "dashboard.section.targets": "Цели",
    "dashboard.section.running": "Запущенные",
    "dashboard.section.stopped": "Остановленные",
    "dashboard.no_targets": "Нет настроенных целей",
    "dashboard.uptime": "Время работы",
    "dashboard.fps": "FPS",
    "dashboard.errors": "Ошибки",
    "dashboard.device": "Устройство",
    "dashboard.stop_all": "Остановить все",
    "dashboard.failed": "Не удалось загрузить обзор",
    "dashboard.section.automations": "Автоматизации",
    "dashboard.section.scenes": "Пресеты сцен",
    "dashboard.section.sync_clocks": "Синхронные часы",
    "dashboard.targets": "Цели",
    "dashboard.section.performance": "Производительность системы",
    "dashboard.perf.cpu": "ЦП",
    "dashboard.perf.ram": "ОЗУ",
    "dashboard.perf.gpu": "ГП",
    "dashboard.perf.unavailable": "недоступно",
    "dashboard.perf.color": "Цвет графика",
    "dashboard.poll_interval": "Интервал обновления",
    "automations.title": "Автоматизации",
    "automations.empty": "Автоматизации не настроены. Создайте автоматизацию для автоматической активации сцен.",
    "automations.add": "Добавить автоматизацию",
    "automations.edit": "Редактировать автоматизацию",
    "automations.delete.confirm": "Удалить автоматизацию \"{name}\"?",
    "automations.name": "Название:",
    "automations.name.hint": "Описательное имя для автоматизации",
    "automations.name.placeholder": "Моя автоматизация",
    "automations.enabled": "Включена:",
    "automations.enabled.hint": "Отключённые автоматизации не активируются даже при выполнении условий",
    "automations.condition_logic": "Логика условий:",
    "automations.condition_logic.hint": "Как объединяются несколько условий: ЛЮБОЕ (ИЛИ) или ВСЕ (И)",
    "automations.condition_logic.or": "Любое условие (ИЛИ)",
    "automations.condition_logic.and": "Все условия (И)",
    "automations.condition_logic.or.desc": "Срабатывает при любом совпадении",
    "automations.condition_logic.and.desc": "Срабатывает только при всех",
    "automations.conditions": "Условия:",
    "automations.conditions.hint": "Правила, определяющие когда автоматизация активируется",
    "automations.conditions.add": "Добавить условие",
    "automations.conditions.empty": "Нет условий — автоматизация всегда активна когда включена",
    "automations.condition.always": "Всегда",
    "automations.condition.always.desc": "Всегда активно",
    "automations.condition.always.hint": "Автоматизация активируется сразу при включении и остаётся активной.",
    "automations.condition.startup": "Автозапуск",
    "automations.condition.startup.desc": "При запуске сервера",
    "automations.condition.startup.hint": "Активируется при запуске сервера и остаётся активной пока включена.",
    "automations.condition.application": "Приложение",
    "automations.condition.application.desc": "Приложение запущено",
    "automations.condition.application.apps": "Приложения:",
    "automations.condition.application.apps.hint": "Имена процессов, по одному на строку (например firefox.exe)",
    "automations.condition.application.browse": "Обзор",
    "automations.condition.application.search": "Фильтр процессов...",
    "automations.condition.application.no_processes": "Процессы не найдены",
    "automations.condition.application.match_type": "Тип соответствия:",
    "automations.condition.application.match_type.hint": "Как определять наличие приложения",
    "automations.condition.application.match_type.running": "Запущено",
    "automations.condition.application.match_type.running.desc": "Процесс активен",
    "automations.condition.application.match_type.topmost": "На переднем плане",
    "automations.condition.application.match_type.topmost.desc": "Окно в фокусе",
    "automations.condition.application.match_type.topmost_fullscreen": "Передний план + ПЭ",
    "automations.condition.application.match_type.topmost_fullscreen.desc": "В фокусе + полный экран",
    "automations.condition.application.match_type.fullscreen": "Полный экран",
    "automations.condition.application.match_type.fullscreen.desc": "Любое полноэкранное",
    "automations.condition.time_of_day": "Время суток",
    "automations.condition.time_of_day.desc": "Диапазон времени",
    "automations.condition.time_of_day.start_time": "Время начала:",
    "automations.condition.time_of_day.end_time": "Время окончания:",
    "automations.condition.time_of_day.overnight_hint": "Для ночных диапазонов (например 22:00–06:00) укажите время начала позже времени окончания.",
    "automations.condition.system_idle": "Бездействие системы",
    "automations.condition.system_idle.desc": "Бездействие/активность",
    "automations.condition.system_idle.idle_minutes": "Тайм-аут бездействия (минуты):",
    "automations.condition.system_idle.mode": "Режим срабатывания:",
    "automations.condition.system_idle.when_idle": "При бездействии",
    "automations.condition.system_idle.when_active": "При активности",
    "automations.condition.display_state": "Состояние дисплея",
    "automations.condition.display_state.desc": "Монитор вкл/выкл",
    "automations.condition.display_state.state": "Состояние монитора:",
    "automations.condition.display_state.on": "Включён",
    "automations.condition.display_state.off": "Выключен (спящий режим)",
    "automations.condition.mqtt": "MQTT",
    "automations.condition.mqtt.desc": "MQTT сообщение",
    "automations.condition.mqtt.topic": "Топик:",
    "automations.condition.mqtt.payload": "Значение:",
    "automations.condition.mqtt.match_mode": "Режим сравнения:",
    "automations.condition.mqtt.match_mode.exact": "Точное совпадение",
    "automations.condition.mqtt.match_mode.contains": "Содержит",
    "automations.condition.mqtt.match_mode.regex": "Регулярное выражение",
    "automations.condition.mqtt.hint": "Активировать при получении совпадающего значения по MQTT топику",
    "automations.condition.webhook": "Вебхук",
    "automations.condition.webhook.desc": "HTTP вызов",
    "automations.condition.webhook.hint": "Активировать через HTTP-запрос от внешних сервисов (Home Assistant, IFTTT, curl и т.д.)",
    "automations.condition.webhook.url": "URL вебхука:",
    "automations.condition.webhook.copy": "Скопировать",
    "automations.condition.webhook.copied": "Скопировано!",
    "automations.condition.webhook.save_first": "Сначала сохраните автоматизацию для генерации URL вебхука",
    "automations.scene": "Сцена:",
    "automations.scene.hint": "Пресет сцены для активации при выполнении условий",
    "automations.scene.search_placeholder": "Поиск сцен...",
    "automations.scene.none_selected": "Нет (без сцены)",
    "automations.scene.none_available": "Нет доступных сцен",
    "automations.deactivation_mode": "Деактивация:",
    "automations.deactivation_mode.hint": "Что происходит, когда условия перестают выполняться",
    "automations.deactivation_mode.none": "Ничего",
    "automations.deactivation_mode.none.desc": "Оставить текущее состояние",
    "automations.deactivation_mode.revert": "Откатить",
    "automations.deactivation_mode.revert.desc": "Вернуть предыдущее состояние",
    "automations.deactivation_mode.fallback_scene": "Резервная",
    "automations.deactivation_mode.fallback_scene.desc": "Активировать резервную сцену",
    "automations.deactivation_scene": "Резервная сцена:",
    "automations.deactivation_scene.hint": "Сцена для активации при деактивации автоматизации",
    "automations.status.active": "Активна",
    "automations.status.inactive": "Неактивна",
    "automations.status.disabled": "Отключена",
    "automations.action.disable": "Отключить",
    "automations.last_activated": "Последняя активация",
    "automations.logic.and": " И ",
    "automations.logic.or": " ИЛИ ",
    "automations.logic.all": "ВСЕ",
    "automations.logic.any": "ЛЮБОЕ",
    "automations.updated": "Автоматизация обновлена",
    "automations.created": "Автоматизация создана",
    "automations.deleted": "Автоматизация удалена",
    "automations.error.name_required": "Введите название",
    "automations.error.clone_failed": "Не удалось клонировать автоматизацию",
    "scenes.title": "Сцены",
    "scenes.add": "Захватить сцену",
    "scenes.edit": "Редактировать сцену",
    "scenes.name": "Название:",
    "scenes.name.hint": "Описательное имя для этого пресета сцены",
    "scenes.name.placeholder": "Моя сцена",
    "scenes.description": "Описание:",
    "scenes.description.hint": "Необязательное описание назначения этой сцены",
    "scenes.targets": "Цели:",
    "scenes.targets.hint": "Выберите какие цели включить в снимок сцены",
    "scenes.targets.add": "Добавить цель",
    "scenes.targets.search_placeholder": "Поиск целей...",
    "scenes.capture": "Захват",
    "scenes.activate": "Активировать сцену",
    "scenes.recapture": "Перезахватить текущее состояние",
    "scenes.delete": "Удалить сцену",
    "scenes.targets_count": "целей",
    "scenes.captured": "Сцена захвачена",
    "scenes.updated": "Сцена обновлена",
    "scenes.activated": "Сцена активирована",
    "scenes.activated_partial": "Сцена активирована частично",
    "scenes.errors": "ошибок",
    "scenes.recaptured": "Сцена перезахвачена",
    "scenes.deleted": "Сцена удалена",
    "scenes.recapture_confirm": "Перезахватить текущее состояние в \"{name}\"?",
    "scenes.delete_confirm": "Удалить сцену \"{name}\"?",
    "scenes.error.name_required": "Необходимо указать название",
    "scenes.error.save_failed": "Не удалось сохранить сцену",
    "scenes.error.activate_failed": "Не удалось активировать сцену",
    "scenes.error.recapture_failed": "Не удалось перезахватить сцену",
    "scenes.error.delete_failed": "Не удалось удалить сцену",
    "scenes.cloned": "Сцена клонирована",
    "scenes.error.clone_failed": "Не удалось клонировать сцену",
    "time.hours_minutes": "{h}ч {m}м",
    "time.minutes_seconds": "{m}м {s}с",
    "time.seconds": "{s}с",
    "dashboard.type.led": "LED",
    "dashboard.type.kc": "Цвета клавиш",
    "aria.close": "Закрыть",
    "aria.save": "Сохранить",
    "aria.cancel": "Отмена",
    "aria.previous": "Назад",
    "aria.next": "Вперёд",
    "aria.hint": "Показать подсказку",
    "color_strip.select_type": "Выберите тип цветовой полосы",
    "color_strip.add": "Добавить источник цветовой полосы",
    "color_strip.edit": "Редактировать источник цветовой полосы",
    "color_strip.name": "Название:",
    "color_strip.name.placeholder": "Настенная полоса",
    "color_strip.picture_source": "Источник изображения:",
    "color_strip.picture_source.hint": "Источник захвата экрана для расчёта цветов светодиодов",
    "color_strip.fps": "Целевой FPS:",
    "color_strip.fps.hint": "Целевая частота кадров для обновления цветов светодиодов (10-90)",
    "color_strip.interpolation": "Режим цвета:",
    "color_strip.interpolation.hint": "Как вычислять цвет светодиода по пикселям рамки",
    "color_strip.interpolation.average": "Среднее",
    "color_strip.interpolation.median": "Медиана",
    "color_strip.interpolation.dominant": "Доминирующий",
    "color_strip.interpolation.average.desc": "Смешивает все пиксели в усреднённый цвет",
    "color_strip.interpolation.median.desc": "Берёт средний цвет, игнорируя выбросы",
    "color_strip.interpolation.dominant.desc": "Использует самый частый цвет в выборке",
    "color_strip.smoothing": "Сглаживание:",
    "color_strip.smoothing.hint": "Временное смешивание кадров (0=без смешивания, 1=полное). Уменьшает мерцание.",
    "color_strip.frame_interpolation": "Интерполяция кадров:",
    "color_strip.frame_interpolation.hint": "Смешивает последовательные захваченные кадры для вывода на полной целевой частоте кадров, даже если скорость захвата ниже. Уменьшает заметные ступеньки при плавных переходах.",
    "color_strip.color_corrections": "Цветокоррекция",
    "color_strip.brightness": "Яркость:",
    "color_strip.brightness.hint": "Множитель яркости (0=выкл, 1=без изменений, 2=двойная). Применяется после извлечения цвета.",
    "color_strip.saturation": "Насыщенность:",
    "color_strip.saturation.hint": "Насыщенность цвета (0=оттенки серого, 1=без изменений, 2=двойная насыщенность)",
    "color_strip.gamma": "Гамма:",
    "color_strip.gamma.hint": "Гамма-коррекция (1=без коррекции, <1=ярче средние тона, >1=темнее средние тона)",
    "color_strip.test_device": "Тестировать на устройстве:",
    "color_strip.test_device.hint": "Выберите устройство для отправки тестовых пикселей при нажатии на рамку",
    "color_strip.leds": "Количество светодиодов",
    "color_strip.led_count": "Количество LED:",
    "color_strip.led_count.hint": "Общее число светодиодов на физической полосе. Для источников экрана: 0 = автоматически из калибровки (светодиоды за ТВ будут чёрными). Для статического цвета: укажите точное количество светодиодов устройства.",
    "color_strip.created": "Источник цветовой полосы создан",
    "color_strip.updated": "Источник цветовой полосы обновлён",
    "color_strip.deleted": "Источник цветовой полосы удалён",
    "color_strip.delete.confirm": "Удалить этот источник цветовой полосы?",
    "color_strip.delete.referenced": "Невозможно удалить: источник используется в цели",
    "color_strip.error.name_required": "Введите название",
    "color_strip.type": "Тип:",
    "color_strip.type.hint": "Источник изображения получает цвета светодиодов из захвата экрана. Статический цвет заполняет все светодиоды одним постоянным цветом. Градиент распределяет цветовой градиент по всем светодиодам. Смена цвета плавно циклически переключается между заданными цветами. Композит накладывает несколько источников как смешанные слои. Аудиореактив управляет LED от аудиосигнала в реальном времени. API-ввод принимает массивы цветов LED от внешних клиентов через REST или WebSocket.",
    "color_strip.type.picture": "Источник изображения",
    "color_strip.type.picture.desc": "Цвета из захвата экрана",
    "color_strip.type.picture_advanced": "Мультимонитор",
    "color_strip.type.picture_advanced.desc": "Калибровка линиями по нескольким мониторам",
    "color_strip.type.static": "Статический цвет",
    "color_strip.type.static.desc": "Заливка одним цветом",
    "color_strip.type.gradient": "Градиент",
    "color_strip.type.gradient.desc": "Плавный переход цветов по ленте",
    "color_strip.type.color_cycle": "Смена цвета",
    "color_strip.type.color_cycle.desc": "Циклическая смена списка цветов",
    "color_strip.static_color": "Цвет:",
    "color_strip.static_color.hint": "Статический цвет, который будет отправлен на все светодиоды полосы.",
    "color_strip.gradient.preview": "Градиент:",
    "color_strip.gradient.preview.hint": "Предпросмотр градиента. Нажмите на дорожку маркеров чтобы добавить остановку. Перетащите маркеры для изменения позиции.",
    "color_strip.gradient.stops": "Цветовые остановки:",
    "color_strip.gradient.stops.hint": "Каждая остановка задаёт цвет в относительной позиции (0.0 = начало, 1.0 = конец). Кнопка ↔ добавляет цвет справа для создания резкого перехода.",
    "color_strip.gradient.stops_count": "остановок",
    "color_strip.gradient.add_stop": "+ Добавить",
    "color_strip.gradient.position": "Позиция (0.0–1.0)",
    "color_strip.gradient.bidir.hint": "Добавить второй цвет справа от этой остановки для создания резкого перехода в градиенте.",
    "color_strip.gradient.min_stops": "Градиент должен содержать не менее 2 остановок",
    "color_strip.gradient.preset": "Пресет:",
    "color_strip.gradient.preset.hint": "Загрузить готовую палитру градиента. Выбор пресета заменяет текущие остановки.",
    "color_strip.gradient.preset.custom": "— Свой —",
    "color_strip.gradient.preset.rainbow": "Радуга",
    "color_strip.gradient.preset.sunset": "Закат",
    "color_strip.gradient.preset.ocean": "Океан",
    "color_strip.gradient.preset.forest": "Лес",
    "color_strip.gradient.preset.fire": "Огонь",
    "color_strip.gradient.preset.lava": "Лава",
    "color_strip.gradient.preset.aurora": "Аврора",
    "color_strip.gradient.preset.ice": "Лёд",
    "color_strip.gradient.preset.warm": "Тёплый",
    "color_strip.gradient.preset.cool": "Холодный",
    "color_strip.gradient.preset.neon": "Неон",
    "color_strip.gradient.preset.pastel": "Пастельный",
    "color_strip.gradient.preset.save_button": "Сохранить как пресет…",
    "color_strip.gradient.preset.save_prompt": "Введите название пресета:",
    "color_strip.gradient.preset.saved": "Пресет сохранён",
    "color_strip.gradient.preset.deleted": "Пресет удалён",
    "color_strip.gradient.preset.apply": "Применить",
    "color_strip.animation": "Анимация",
    "color_strip.animation.type": "Эффект:",
    "color_strip.animation.type.hint": "Эффект анимации.",
    "color_strip.animation.type.none": "Нет (без эффекта анимации)",
    "color_strip.animation.type.none.desc": "Статичные цвета без анимации",
    "color_strip.animation.type.breathing": "Дыхание",
    "color_strip.animation.type.breathing.desc": "Плавное угасание и нарастание яркости",
    "color_strip.animation.type.color_cycle": "Смена цвета",
    "color_strip.animation.type.gradient_shift": "Сдвиг градиента",
    "color_strip.animation.type.gradient_shift.desc": "Сдвигает градиент вдоль ленты",
    "color_strip.animation.type.wave": "Волна",
    "color_strip.animation.type.wave.desc": "Синусоидальная волна яркости вдоль ленты",
    "color_strip.animation.type.strobe": "Стробоскоп",
    "color_strip.animation.type.strobe.desc": "Быстрое мигание вкл/выкл",
    "color_strip.animation.type.sparkle": "Искры",
    "color_strip.animation.type.sparkle.desc": "Случайные светодиоды кратковременно вспыхивают",
    "color_strip.animation.type.pulse": "Пульс",
    "color_strip.animation.type.pulse.desc": "Резкая вспышка яркости с быстрым затуханием",
    "color_strip.animation.type.candle": "Свеча",
    "color_strip.animation.type.candle.desc": "Тёплое мерцание, как у свечи",
    "color_strip.animation.type.rainbow_fade": "Радужный перелив",
    "color_strip.animation.type.rainbow_fade.desc": "Циклический переход по всему спектру оттенков",
    "color_strip.animation.speed": "Скорость:",
    "color_strip.animation.speed.hint": "Множитель скорости анимации. 1.0 ≈ один цикл в секунду для дыхания; большие значения ускоряют анимацию.",
    "color_strip.color_cycle.colors": "Цвета:",
    "color_strip.color_cycle.colors.hint": "Список цветов для плавной циклической смены. Минимум 2 цвета. По умолчанию — полный радужный спектр.",
    "color_strip.color_cycle.add_color": "+ Добавить цвет",
    "color_strip.color_cycle.speed": "Скорость:",
    "color_strip.color_cycle.speed.hint": "Множитель скорости смены. 1.0 ≈ один полный цикл за 20 секунд; большие значения ускоряют смену.",
    "color_strip.color_cycle.min_colors": "Смена цвета должна содержать не менее 2 цветов",
    "color_strip.type.effect": "Эффект",
    "color_strip.type.effect.desc": "Процедурные эффекты: огонь, плазма, аврора",
    "color_strip.type.effect.hint": "Процедурные LED-эффекты (огонь, метеор, плазма, шум, аврора), генерируемые в реальном времени.",
    "color_strip.type.composite": "Композит",
    "color_strip.type.composite.desc": "Наложение и смешивание источников",
    "color_strip.type.composite.hint": "Наложение нескольких источников цветовой ленты как слоёв с режимами смешивания и прозрачностью.",
    "color_strip.type.mapped": "Маппинг",
    "color_strip.type.mapped.desc": "Назначение источников на зоны LED",
    "color_strip.type.mapped.hint": "Назначает разные источники цветовой полосы на разные диапазоны LED (зоны). В отличие от композита, маппинг размещает источники рядом друг с другом.",
    "color_strip.type.audio": "Аудиореактив",
    "color_strip.type.audio.desc": "LED от аудиосигнала",
    "color_strip.type.audio.hint": "Цвета LED управляются аудиосигналом в реальном времени — системный звук или микрофон.",
    "color_strip.type.api_input": "API-ввод",
    "color_strip.type.api_input.desc": "Приём цветов от внешних приложений",
    "color_strip.type.api_input.hint": "Принимает массивы цветов LED от внешних клиентов через REST POST или WebSocket. Используйте для интеграции с собственным ПО, домашней автоматизацией или любой системой, способной отправлять HTTP-запросы.",
    "color_strip.api_input.fallback_color": "Цвет по умолчанию:",
    "color_strip.api_input.fallback_color.hint": "Цвет для отображения, когда данные не получены в течение периода ожидания. LED покажут этот цвет при запуске и после потери соединения.",
    "color_strip.api_input.timeout": "Тайм-аут (секунды):",
    "color_strip.api_input.timeout.hint": "Время ожидания новых данных о цветах перед возвратом к цвету по умолчанию. Установите 0, чтобы не использовать тайм-аут.",
    "color_strip.api_input.endpoints": "Эндпоинты для отправки:",
    "color_strip.api_input.endpoints.hint": "Используйте эти URL для отправки данных о цветах LED из вашего внешнего приложения. REST принимает JSON, WebSocket принимает как JSON, так и бинарные кадры.",
    "color_strip.api_input.save_first": "Сначала сохраните источник, чтобы увидеть URL эндпоинтов.",
    "color_strip.type.notification": "Уведомления",
    "color_strip.type.notification.desc": "Разовый эффект по вебхуку",
    "color_strip.type.notification.hint": "Вспышка, пульс или волна при срабатывании через вебхук. Предназначен для использования как слой в композитном источнике.",
    "color_strip.notification.effect": "Эффект:",
    "color_strip.notification.effect.hint": "Визуальный эффект при уведомлении. Вспышка — линейное затухание, Пульс — плавная волна, Волна — заполнение и затухание.",
    "color_strip.notification.effect.flash": "Вспышка",
    "color_strip.notification.effect.flash.desc": "Мгновенное включение, линейное затухание",
    "color_strip.notification.effect.pulse": "Пульс",
    "color_strip.notification.effect.pulse.desc": "Плавное свечение колоколом",
    "color_strip.notification.effect.sweep": "Волна",
    "color_strip.notification.effect.sweep.desc": "Заполняет слева направо, затем гаснет",
    "color_strip.notification.duration": "Длительность (мс):",
    "color_strip.notification.duration.hint": "Как долго длится эффект уведомления в миллисекундах.",
    "color_strip.notification.default_color": "Цвет по умолчанию:",
    "color_strip.notification.default_color.hint": "Цвет, когда для приложения нет специфического назначения цвета.",
    "color_strip.notification.filter_mode": "Фильтр приложений:",
    "color_strip.notification.filter_mode.hint": "Фильтр уведомлений по имени приложения. Выкл = все, Белый список = только указанные, Чёрный список = все кроме указанных.",
    "color_strip.notification.filter_mode.off": "Выкл",
    "color_strip.notification.filter_mode.whitelist": "Белый список",
    "color_strip.notification.filter_mode.blacklist": "Чёрный список",
    "color_strip.notification.filter_mode.off.desc": "Принимать все уведомления",
    "color_strip.notification.filter_mode.whitelist.desc": "Только указанные приложения",
    "color_strip.notification.filter_mode.blacklist.desc": "Все кроме указанных приложений",
    "color_strip.notification.filter_list": "Список приложений:",
    "color_strip.notification.filter_list.hint": "Одно имя приложения на строку. Используйте «Обзор» для выбора из запущенных процессов.",
    "color_strip.notification.filter_list.placeholder": "Discord\nSlack\nTelegram",
    "color_strip.notification.app_colors": "Цвета приложений",
    "color_strip.notification.app_colors.label": "Назначения цветов:",
    "color_strip.notification.app_colors.hint": "Индивидуальные цвета для приложений. Каждая строка связывает имя приложения с цветом уведомления.",
    "color_strip.notification.app_colors.add": "+ Добавить",
    "color_strip.notification.endpoint": "Вебхук:",
    "color_strip.notification.endpoint.hint": "URL для запуска уведомлений из внешних систем. POST с JSON телом: {\"app\": \"AppName\", \"color\": \"#FF0000\"}.",
    "color_strip.notification.save_first": "Сначала сохраните источник, чтобы увидеть URL вебхука.",
    "color_strip.notification.app_count": "прилож.",
    "color_strip.notification.test": "Тестовое уведомление",
    "color_strip.notification.test.ok": "Уведомление отправлено",
    "color_strip.notification.test.no_streams": "Нет запущенных потоков для этого источника",
    "color_strip.notification.test.error": "Не удалось отправить уведомление",
    "color_strip.notification.history.title": "История уведомлений",
    "color_strip.notification.history.hint": "Последние ОС-уведомления, захваченные слушателем (новейшие сверху). До 50 записей.",
    "color_strip.notification.history.empty": "Уведомления ещё не захвачены",
    "color_strip.notification.history.unavailable": "Слушатель уведомлений ОС недоступен на этой платформе",
    "color_strip.notification.history.error": "Не удалось загрузить историю уведомлений",
    "color_strip.notification.history.refresh": "Обновить",
    "color_strip.notification.history.unknown_app": "Неизвестное приложение",
    "color_strip.notification.history.fired": "Потоков запущено",
    "color_strip.notification.history.filtered": "Потоков отфильтровано",
    "color_strip.test.title": "Предпросмотр",
    "color_strip.test.connecting": "Подключение...",
    "color_strip.test.error": "Не удалось подключиться к потоку предпросмотра",
    "color_strip.test.led_count": "Кол-во LED:",
    "color_strip.test.fps": "FPS:",
    "color_strip.test.receive_fps": "Частота приёма",
    "color_strip.test.apply": "Применить",
    "color_strip.test.composite": "Композит",
    "color_strip.preview.title": "Предпросмотр",
    "color_strip.preview.not_connected": "Не подключено",
    "color_strip.preview.connecting": "Подключение...",
    "color_strip.preview.connected": "Подключено",
    "color_strip.preview.unsupported": "Предпросмотр недоступен для этого типа источника",
    "color_strip.type.daylight": "Дневной цикл",
    "color_strip.type.daylight.desc": "Имитация естественного дневного света за 24 часа",
    "color_strip.type.daylight.hint": "Имитирует цветовую температуру солнца в течение суток — от тёплого рассвета до прохладного дневного света, заката и ночи.",
    "color_strip.daylight.speed": "Скорость:",
    "color_strip.daylight.speed.hint": "Множитель скорости цикла. 1.0 = полный цикл день/ночь за ~4 минуты.",
    "color_strip.daylight.use_real_time": "Реальное время:",
    "color_strip.daylight.use_real_time.hint": "Если включено, цвет LED соответствует реальному времени суток. Настройка скорости игнорируется.",
    "color_strip.daylight.real_time": "Реальное время",
    "color_strip.daylight.latitude": "Широта:",
    "color_strip.daylight.latitude.hint": "Географическая широта (-90 до 90). Влияет на время восхода/заката в режиме реального времени.",
    "color_strip.type.candlelight": "Свечи",
    "color_strip.type.candlelight.desc": "Реалистичная имитация мерцания свечей",
    "color_strip.type.candlelight.hint": "Реалистичное мерцание свечей с тёплыми тонами и органическими паттернами.",
    "color_strip.candlelight.color": "Базовый цвет:",
    "color_strip.candlelight.color.hint": "Тёплый базовый цвет пламени свечи. По умолчанию — натуральный тёплый янтарь.",
    "color_strip.candlelight.intensity": "Интенсивность мерцания:",
    "color_strip.candlelight.intensity.hint": "Сила мерцания свечей. Низкие значения — мягкое свечение, высокие — свеча на ветру.",
    "color_strip.candlelight.num_candles_label": "Количество свечей:",
    "color_strip.candlelight.num_candles": "свечей",
    "color_strip.candlelight.num_candles.hint": "Сколько независимых источников свечей вдоль ленты. Каждый мерцает по-своему.",
    "color_strip.candlelight.speed": "Скорость мерцания:",
    "color_strip.candlelight.speed.hint": "Скорость анимации мерцания. Большие значения — более быстрое, беспокойное пламя.",
    "color_strip.type.processed": "Обработанный",
    "color_strip.type.processed.desc": "Применить шаблон обработки к другому источнику",
    "color_strip.type.processed.hint": "Оборачивает существующий источник цветовой полосы и пропускает его вывод через цепочку фильтров.",
    "color_strip.processed.input": "Источник:",
    "color_strip.processed.input.hint": "Источник цветовой полосы, вывод которого будет обработан",
    "color_strip.processed.template": "Шаблон обработки:",
    "color_strip.processed.template.hint": "Цепочка фильтров для применения к выводу входного источника",
    "color_strip.processed.error.no_input": "Выберите входной источник",
    "color_strip.composite.layers": "Слои:",
    "color_strip.composite.layers.hint": "Наложение нескольких источников. Первый слой — нижний, последний — верхний. Каждый слой может иметь свой режим смешивания и прозрачность.",
    "color_strip.composite.add_layer": "+ Добавить слой",
    "color_strip.composite.source": "Источник",
    "color_strip.composite.blend_mode": "Смешивание",
    "color_strip.composite.blend_mode.normal": "Обычное",
    "color_strip.composite.blend_mode.normal.desc": "Стандартное альфа-смешивание",
    "color_strip.composite.blend_mode.add": "Сложение",
    "color_strip.composite.blend_mode.add.desc": "Осветляет, складывая цвета",
    "color_strip.composite.blend_mode.multiply": "Умножение",
    "color_strip.composite.blend_mode.multiply.desc": "Затемняет, умножая цвета",
    "color_strip.composite.blend_mode.screen": "Экран",
    "color_strip.composite.blend_mode.screen.desc": "Осветляет, обратное умножение",
    "color_strip.composite.blend_mode.override": "Замена",
    "color_strip.composite.blend_mode.override.desc": "Чёрный = прозрачный, яркий = непрозрачный",
    "color_strip.composite.opacity": "Непрозрачность",
    "color_strip.composite.brightness": "Яркость",
    "color_strip.composite.brightness.none": "Нет (полная яркость)",
    "color_strip.composite.processing": "Обработка",
    "color_strip.composite.enabled": "Включён",
    "color_strip.composite.error.min_layers": "Необходим хотя бы 1 слой",
    "color_strip.composite.error.no_source": "Для каждого слоя должен быть выбран источник",
    "color_strip.composite.layers_count": "слоёв",
    "color_strip.mapped.zones": "Зоны:",
    "color_strip.mapped.zones.hint": "Каждая зона привязывает источник цветовой полосы к определённому диапазону LED. Зоны размещаются рядом — промежутки остаются чёрными.",
    "color_strip.mapped.add_zone": "+ Добавить зону",
    "color_strip.mapped.zone_source": "Источник",
    "color_strip.mapped.zone_start": "Начало LED",
    "color_strip.mapped.zone_end": "Конец LED",
    "color_strip.mapped.zone_reverse": "Реверс",
    "color_strip.mapped.zones_count": "зон",
    "color_strip.mapped.select_source": "Поиск источников...",
    "color_strip.mapped.error.no_source": "Для каждой зоны должен быть выбран источник",
    "color_strip.audio.visualization": "Визуализация:",
    "color_strip.audio.visualization.hint": "Способ отображения аудиоданных на LED.",
    "color_strip.audio.viz.spectrum": "Анализатор спектра",
    "color_strip.audio.viz.spectrum.desc": "Частотные полосы по ленте",
    "color_strip.audio.viz.beat_pulse": "Пульс бита",
    "color_strip.audio.viz.beat_pulse.desc": "Все LED пульсируют в такт",
    "color_strip.audio.viz.vu_meter": "VU-метр",
    "color_strip.audio.viz.vu_meter.desc": "Уровень громкости заполняет ленту",
    "color_strip.audio.source": "Аудиоисточник:",
    "color_strip.audio.source.hint": "Аудиоисточник для визуализации. Может быть многоканальным (устройство) или моно (один канал). Создавайте и управляйте аудиоисточниками на вкладке Источники.",
    "color_strip.audio.sensitivity": "Чувствительность:",
    "color_strip.audio.sensitivity.hint": "Множитель усиления аудиосигнала. Более высокие значения делают LED чувствительнее к тихим звукам.",
    "color_strip.audio.smoothing": "Сглаживание:",
    "color_strip.audio.smoothing.hint": "Временное сглаживание между кадрами. Более высокие значения дают плавную, но медленнее реагирующую визуализацию.",
    "color_strip.audio.palette": "Палитра:",
    "color_strip.audio.palette.hint": "Цветовая палитра для полос спектра или пульсации бита.",
    "color_strip.audio.color": "Базовый цвет:",
    "color_strip.audio.color.hint": "Цвет низкого уровня для полосы VU-метра.",
    "color_strip.audio.color_peak": "Пиковый цвет:",
    "color_strip.audio.color_peak.hint": "Цвет высокого уровня в верхней части полосы VU-метра.",
    "color_strip.audio.mirror": "Зеркало:",
    "color_strip.audio.mirror.hint": "Зеркалирование спектра от центра к краям: басы в середине, высокие частоты по краям.",
    "color_strip.effect.type": "Тип эффекта:",
    "color_strip.effect.type.hint": "Выберите процедурный алгоритм.",
    "color_strip.effect.fire": "Огонь",
    "color_strip.effect.fire.desc": "Клеточный автомат, имитирующий поднимающееся пламя с диффузией тепла",
    "color_strip.effect.meteor": "Метеор",
    "color_strip.effect.meteor.desc": "Яркая точка движется по ленте с экспоненциально затухающим хвостом",
    "color_strip.effect.plasma": "Плазма",
    "color_strip.effect.plasma.desc": "Наложение синусоидальных волн с палитрой — классический демо-эффект",
    "color_strip.effect.noise": "Шум",
    "color_strip.effect.noise.desc": "Прокручиваемый фрактальный шум, отображённый на палитру",
    "color_strip.effect.aurora": "Аврора",
    "color_strip.effect.aurora.desc": "Наложенные шумовые полосы, дрейфующие и смешивающиеся — в стиле северного сияния",
    "color_strip.effect.speed": "Скорость:",
    "color_strip.effect.speed.hint": "Множитель скорости анимации эффекта (0.1 = очень медленно, 10.0 = очень быстро).",
    "color_strip.effect.palette": "Палитра:",
    "color_strip.effect.palette.hint": "Цветовая палитра для отображения значений эффекта в RGB-цвета.",
    "color_strip.effect.color": "Цвет метеора:",
    "color_strip.effect.color.hint": "Цвет головной точки метеора.",
    "color_strip.effect.intensity": "Интенсивность:",
    "color_strip.effect.intensity.hint": "Интенсивность эффекта — частота искр (огонь), затухание хвоста (метеор) или диапазон яркости (аврора).",
    "color_strip.effect.scale": "Масштаб:",
    "color_strip.effect.scale.hint": "Пространственный масштаб — частота волн (плазма), уровень масштабирования (шум) или ширина полос (аврора).",
    "color_strip.effect.mirror": "Отражение:",
    "color_strip.effect.mirror.hint": "Режим отскока — метеор меняет направление у краёв ленты вместо переноса.",
    "color_strip.palette.fire": "Огонь",
    "color_strip.palette.ocean": "Океан",
    "color_strip.palette.lava": "Лава",
    "color_strip.palette.forest": "Лес",
    "color_strip.palette.rainbow": "Радуга",
    "color_strip.palette.aurora": "Аврора",
    "color_strip.palette.sunset": "Закат",
    "color_strip.palette.ice": "Лёд",
    "audio_source.title": "Аудиоисточники",
    "audio_source.group.multichannel": "Многоканальные",
    "audio_source.group.mono": "Моно",
    "audio_source.add": "Добавить аудиоисточник",
    "audio_source.add.multichannel": "Добавить многоканальный",
    "audio_source.add.mono": "Добавить моно",
    "audio_source.edit": "Редактировать аудиоисточник",
    "audio_source.edit.multichannel": "Редактировать многоканальный",
    "audio_source.edit.mono": "Редактировать моно",
    "audio_source.name": "Название:",
    "audio_source.name.placeholder": "Системный звук",
    "audio_source.name.hint": "Описательное имя для этого аудиоисточника",
    "audio_source.type": "Тип:",
    "audio_source.type.hint": "Многоканальный захватывает все каналы с аудиоустройства. Моно извлекает один канал из многоканального источника.",
    "audio_source.type.multichannel": "Многоканальный",
    "audio_source.type.mono": "Моно",
    "audio_source.device": "Аудиоустройство:",
    "audio_source.device.hint": "Источник аудиосигнала. Устройства обратной петли захватывают системный звук; устройства ввода — микрофон или линейный вход.",
    "audio_source.refresh_devices": "Обновить устройства",
    "audio_source.parent": "Родительский источник:",
    "audio_source.parent.hint": "Многоканальный источник для извлечения канала",
    "audio_source.channel": "Канал:",
    "audio_source.channel.hint": "Какой аудиоканал извлечь из многоканального источника",
    "audio_source.channel.mono": "Моно (Л+П микс)",
    "audio_source.channel.left": "Левый",
    "audio_source.channel.right": "Правый",
    "audio_source.description": "Описание (необязательно):",
    "audio_source.description.placeholder": "Опишите этот аудиоисточник...",
    "audio_source.description.hint": "Необязательные заметки об этом аудиоисточнике",
    "audio_source.created": "Аудиоисточник создан",
    "audio_source.updated": "Аудиоисточник обновлён",
    "audio_source.deleted": "Аудиоисточник удалён",
    "audio_source.delete.confirm": "Удалить этот аудиоисточник?",
    "audio_source.error.name_required": "Введите название",
    "audio_source.audio_template": "Аудиошаблон:",
    "audio_source.audio_template.hint": "Шаблон аудиозахвата определяет, какой движок и настройки использовать для этого устройства",
    "audio_source.test": "Тест",
    "audio_source.test.title": "Тест аудиоисточника",
    "audio_source.test.rms": "RMS",
    "audio_source.test.peak": "Пик",
    "audio_source.test.beat": "Бит",
    "audio_source.test.connecting": "Подключение...",
    "audio_source.test.error": "Ошибка теста аудио",
    "audio_template.test": "Тест",
    "audio_template.test.title": "Тест аудиошаблона",
    "audio_template.test.device": "Аудиоустройство:",
    "audio_template.test.device.hint": "Выберите устройство для захвата звука во время теста",
    "audio_template.test.run": "Запуск",
    "audio_template.title": "Аудиошаблоны",
    "audio_template.add": "Добавить аудиошаблон",
    "audio_template.edit": "Редактировать аудиошаблон",
    "audio_template.name": "Название шаблона:",
    "audio_template.name.placeholder": "Мой аудиошаблон",
    "audio_template.description.label": "Описание (необязательно):",
    "audio_template.description.placeholder": "Опишите этот шаблон...",
    "audio_template.engine": "Аудиодвижок:",
    "audio_template.engine.hint": "Выберите движок аудиозахвата. WASAPI — только Windows с поддержкой loopback. Sounddevice — кроссплатформенный.",
    "audio_template.engine.unavailable": "Недоступен",
    "audio_template.engine.unavailable.hint": "Этот движок недоступен в вашей системе",
    "audio_template.config": "Конфигурация",
    "audio_template.config.show": "Показать конфигурацию",
    "audio_template.created": "Аудиошаблон создан",
    "audio_template.updated": "Аудиошаблон обновлён",
    "audio_template.deleted": "Аудиошаблон удалён",
    "audio_template.delete.confirm": "Удалить этот аудиошаблон?",
    "audio_template.error.load": "Не удалось загрузить аудиошаблоны",
    "audio_template.error.engines": "Не удалось загрузить аудиодвижки",
    "audio_template.error.required": "Пожалуйста, заполните все обязательные поля",
    "audio_template.error.delete": "Не удалось удалить аудиошаблон",
    "streams.group.value": "Источники значений",
    "streams.group.sync": "Часы синхронизации",
    "tree.group.picture": "Источники изображений",
    "tree.group.capture": "Захват экрана",
    "tree.group.static": "Статичные",
    "tree.group.processing": "Обработанные",
    "tree.group.strip": "Цветовые полосы",
    "tree.group.audio": "Аудио",
    "tree.group.utility": "Утилиты",
    "tree.leaf.sources": "Источники",
    "tree.leaf.engine_templates": "Шаблоны движка",
    "tree.leaf.images": "Изображения",
    "tree.leaf.video": "Видео",
    "tree.leaf.filter_templates": "Шаблоны фильтров",
    "tree.leaf.processing_templates": "Шаблоны обработки",
    "tree.leaf.templates": "Шаблоны",
    "value_source.group.title": "Источники значений",
    "value_source.select_type": "Выберите тип источника значений",
    "value_source.add": "Добавить источник значений",
    "value_source.edit": "Редактировать источник значений",
    "value_source.name": "Название:",
    "value_source.name.placeholder": "Пульс яркости",
    "value_source.name.hint": "Описательное имя для этого источника значений",
    "value_source.type": "Тип:",
    "value_source.type.hint": "Статический выдаёт постоянное значение. Анимированный циклически меняет форму волны. Аудио реагирует на звук. Адаптивные типы автоматически подстраивают яркость по времени суток или содержимому сцены.",
    "value_source.type.static": "Статический",
    "value_source.type.static.desc": "Постоянное выходное значение",
    "value_source.type.animated": "Анимированный",
    "value_source.type.animated.desc": "Циклическая смена по форме волны",
    "value_source.type.audio": "Аудио",
    "value_source.type.audio.desc": "Реагирует на звуковой сигнал",
    "value_source.type.adaptive_time": "Адаптивный (Время)",
    "value_source.type.adaptive_time.desc": "Подстройка по времени суток",
    "value_source.type.adaptive_scene": "Адаптивный (Сцена)",
    "value_source.type.adaptive_scene.desc": "Подстройка по содержимому сцены",
    "value_source.type.daylight": "Дневной цикл",
    "value_source.type.daylight.desc": "Яркость следует за циклом дня/ночи",
    "value_source.daylight.speed": "Скорость:",
    "value_source.daylight.speed.hint": "Множитель скорости цикла. 1.0 = полный цикл день/ночь за ~4 минуты.",
    "value_source.daylight.use_real_time": "Реальное время:",
    "value_source.daylight.use_real_time.hint": "Яркость следует за реальным временем суток. Скорость игнорируется.",
    "value_source.daylight.enable_real_time": "Следовать за часами",
    "value_source.daylight.latitude": "Широта:",
    "value_source.daylight.latitude.hint": "Географическая широта (-90 до 90). Влияет на время восхода/заката в режиме реального времени.",
    "value_source.daylight.real_time": "Реальное время",
    "value_source.daylight.speed_label": "Скорость",
    "value_source.value": "Значение:",
    "value_source.value.hint": "Постоянное выходное значение (0.0 = выкл, 1.0 = полная яркость)",
    "value_source.waveform": "Форма волны:",
    "value_source.waveform.hint": "Форма цикла анимации яркости",
    "value_source.waveform.sine": "Синус",
    "value_source.waveform.triangle": "Треугольник",
    "value_source.waveform.square": "Прямоугольник",
    "value_source.waveform.sawtooth": "Пила",
    "value_source.speed": "Скорость (цикл/мин):",
    "value_source.speed.hint": "Циклов в минуту — как быстро повторяется волна (1 = очень медленно, 120 = очень быстро)",
    "value_source.min_value": "Мин. значение:",
    "value_source.min_value.hint": "Минимальный выход цикла волны",
    "value_source.max_value": "Макс. значение:",
    "value_source.max_value.hint": "Максимальный выход цикла волны",
    "value_source.audio_source": "Аудиоисточник:",
    "value_source.audio_source.hint": "Аудиоисточник для считывания уровня звука (многоканальный или моно)",
    "value_source.mode": "Режим:",
    "value_source.mode.hint": "RMS измеряет среднюю громкость. Пик отслеживает самые громкие моменты. Бит реагирует на ритм.",
    "value_source.mode.rms": "RMS (Громкость)",
    "value_source.mode.peak": "Пик",
    "value_source.mode.beat": "Бит",
    "value_source.mode.rms.desc": "Средний уровень громкости",
    "value_source.mode.peak.desc": "Отслеживание пиковых моментов",
    "value_source.mode.beat.desc": "Детекция ритмических ударов",
    "value_source.auto_gain": "Авто-усиление:",
    "value_source.auto_gain.hint": "Автоматически нормализует уровни звука, чтобы выходное значение использовало полный диапазон независимо от громкости входного сигнала",
    "value_source.auto_gain.enable": "Включить авто-усиление",
    "value_source.sensitivity": "Чувствительность:",
    "value_source.sensitivity.hint": "Множитель усиления аудиосигнала (выше = более реактивный)",
    "value_source.scene_sensitivity.hint": "Множитель усиления сигнала яркости (выше = более чувствительный к изменениям яркости)",
    "value_source.smoothing": "Сглаживание:",
    "value_source.smoothing.hint": "Временное сглаживание (0 = мгновенный отклик, 1 = очень плавный/медленный)",
    "value_source.audio_min_value": "Мин. значение:",
    "value_source.audio_min_value.hint": "Выход при тишине (напр. 0.3 = минимум 30% яркости)",
    "value_source.audio_max_value": "Макс. значение:",
    "value_source.audio_max_value.hint": "Выход при максимальном уровне звука",
    "value_source.schedule": "Расписание:",
    "value_source.schedule.hint": "Определите минимум 2 временные точки. Яркость линейно интерполируется между ними, с переходом через полночь.",
    "value_source.schedule.add": "+ Добавить точку",
    "value_source.schedule.points": "точек",
    "value_source.picture_source": "Источник изображения:",
    "value_source.picture_source.hint": "Источник изображения, кадры которого будут анализироваться на среднюю яркость.",
    "value_source.scene_behavior": "Поведение:",
    "value_source.scene_behavior.hint": "Дополнение: тёмная сцена = высокая яркость (для фоновой подсветки). Совпадение: яркая сцена = высокая яркость.",
    "value_source.scene_behavior.complement": "Дополнение (тёмный → ярко)",
    "value_source.scene_behavior.match": "Совпадение (яркий → ярко)",
    "value_source.adaptive_min_value": "Мин. значение:",
    "value_source.adaptive_min_value.hint": "Минимальная выходная яркость",
    "value_source.adaptive_max_value": "Макс. значение:",
    "value_source.adaptive_max_value.hint": "Максимальная выходная яркость",
    "value_source.error.schedule_min": "Расписание требует минимум 2 временные точки",
    "value_source.description": "Описание (необязательно):",
    "value_source.description.placeholder": "Опишите этот источник значений...",
    "value_source.description.hint": "Необязательные заметки об этом источнике значений",
    "value_source.created": "Источник значений создан",
    "value_source.updated": "Источник значений обновлён",
    "value_source.deleted": "Источник значений удалён",
    "value_source.delete.confirm": "Удалить этот источник значений?",
    "value_source.error.name_required": "Введите название",
    "value_source.test": "Тест",
    "value_source.test.title": "Тест источника значений",
    "value_source.test.connecting": "Подключение...",
    "value_source.test.error": "Не удалось подключиться",
    "value_source.test.current": "Текущее",
    "value_source.test.min": "Мин",
    "value_source.test.max": "Макс",
    "test.frames": "Кадры",
    "test.fps": "Кадр/с",
    "test.avg_capture": "Сред",
    "targets.brightness_vs": "Источник яркости:",
    "targets.brightness_vs.hint": "Необязательный источник значений для динамического управления яркостью каждый кадр (переопределяет яркость устройства)",
    "targets.brightness_vs.none": "Нет (яркость устройства)",
    "targets.min_brightness_threshold": "Мин. порог яркости:",
    "targets.min_brightness_threshold.hint": "Если итоговая яркость (яркость пикселей × яркость устройства/источника) ниже этого значения, светодиоды полностью выключаются (0 = отключено)",
    "targets.adaptive_fps": "Адаптивный FPS:",
    "targets.adaptive_fps.hint": "Автоматически снижает частоту отправки, когда устройство перестаёт отвечать, и постепенно восстанавливает её при стабилизации. Рекомендуется для WiFi-устройств со слабым сигналом.",
    "targets.protocol": "Протокол:",
    "targets.protocol.hint": "DDP отправляет пиксели по быстрому UDP (рекомендуется). HTTP использует JSON API — медленнее, но надёжнее, ограничение ~500 LED.",
    "targets.protocol.ddp": "DDP (UDP)",
    "targets.protocol.ddp.desc": "Быстрые UDP-пакеты — рекомендуется",
    "targets.protocol.http": "HTTP",
    "targets.protocol.http.desc": "JSON API — медленнее, ≤500 LED",
    "targets.protocol.serial": "Serial",
    "search.open": "Поиск (Ctrl+K)",
    "search.placeholder": "Поиск... (Ctrl+K)",
    "search.loading": "Загрузка...",
    "search.no_results": "Ничего не найдено",
    "search.group.devices": "Устройства",
    "search.group.targets": "LED-цели",
    "search.group.kc_targets": "Цели Key Colors",
    "search.group.css": "Источники цветных лент",
    "search.group.automations": "Автоматизации",
    "search.group.streams": "Потоки изображений",
    "search.group.capture_templates": "Шаблоны захвата",
    "search.group.pp_templates": "Шаблоны постобработки",
    "search.group.pattern_templates": "Шаблоны паттернов",
    "search.group.audio": "Аудиоисточники",
    "search.group.value": "Источники значений",
    "search.group.scenes": "Пресеты сцен",
    "search.group.cspt": "Шаблоны обработки полос",
    "search.group.sync_clocks": "Синхронные часы",
    "search.group.actions": "Действия",
    "search.action.start": "Запустить",
    "search.action.stop": "Остановить",
    "search.action.activate": "Активировать",
    "search.action.enable": "Включить",
    "search.action.disable": "Отключить",
    "settings.backup.label": "Резервное копирование",
    "settings.backup.hint": "Скачать всю конфигурацию (устройства, цели, потоки, шаблоны, автоматизации) в виде одного JSON-файла.",
    "settings.backup.button": "Скачать резервную копию",
    "settings.backup.success": "Резервная копия скачана",
    "settings.backup.error": "Ошибка скачивания резервной копии",
    "settings.restore.label": "Восстановление конфигурации",
    "settings.restore.hint": "Загрузите ранее сохранённый файл резервной копии для замены всей конфигурации. Сервер перезапустится автоматически.",
    "settings.restore.button": "Восстановить из копии",
    "settings.restore.confirm": "Это заменит ВСЮ конфигурацию и перезапустит сервер. Вы уверены?",
    "settings.restore.success": "Конфигурация восстановлена",
    "settings.restore.error": "Ошибка восстановления",
    "settings.restore.restarting": "Сервер перезапускается...",
    "settings.restore.restart_timeout": "Сервер не отвечает. Обновите страницу вручную.",
    "settings.restart_server": "Перезапустить сервер",
    "settings.restart_confirm": "Перезапустить сервер? Активные цели будут остановлены.",
    "settings.restarting": "Перезапуск сервера...",
    "settings.button.close": "Закрыть",
    "settings.log_level.label": "Уровень логирования",
    "settings.log_level.hint": "Изменить подробность логов сервера в реальном времени. DEBUG — максимум деталей, CRITICAL — только критические ошибки.",
    "settings.log_level.save": "Применить",
    "settings.log_level.saved": "Уровень логирования изменён",
    "settings.log_level.save_error": "Не удалось изменить уровень логирования",
    "settings.log_level.desc.debug": "Подробный вывод для разработки",
    "settings.log_level.desc.info": "Обычные сообщения",
    "settings.log_level.desc.warning": "Возможные проблемы",
    "settings.log_level.desc.error": "Только ошибки",
    "settings.log_level.desc.critical": "Только критические ошибки",
    "settings.auto_backup.label": "Авто-бэкап",
    "settings.auto_backup.hint": "Автоматическое создание периодических резервных копий конфигурации. Старые копии удаляются при превышении максимального количества.",
    "settings.auto_backup.enable": "Включить авто-бэкап",
    "settings.auto_backup.interval_label": "Интервал",
    "settings.auto_backup.max_label": "Макс. копий",
    "settings.auto_backup.save": "Сохранить настройки",
    "settings.auto_backup.saved": "Настройки авто-бэкапа сохранены",
    "settings.auto_backup.save_error": "Не удалось сохранить настройки авто-бэкапа",
    "settings.auto_backup.last_backup": "Последний бэкап",
    "settings.auto_backup.never": "Никогда",
    "settings.saved_backups.label": "Сохранённые копии",
    "settings.saved_backups.hint": "Файлы авто-бэкапа на сервере. Скачайте для локального хранения или удалите для освобождения места.",
    "settings.saved_backups.empty": "Нет сохранённых копий",
    "settings.saved_backups.restore": "Восстановить",
    "settings.saved_backups.download": "Скачать",
    "settings.saved_backups.delete": "Удалить",
    "settings.saved_backups.delete_confirm": "Удалить эту резервную копию?",
    "settings.saved_backups.delete_error": "Не удалось удалить копию",
    "settings.saved_backups.type.auto": "авто",
    "settings.saved_backups.type.manual": "ручной",
    "settings.mqtt.label": "MQTT",
    "settings.mqtt.hint": "Настройте подключение к MQTT-брокеру для условий и триггеров автоматизации.",
    "settings.mqtt.enabled": "Включить MQTT",
    "settings.mqtt.host_label": "Хост брокера",
    "settings.mqtt.port_label": "Порт",
    "settings.mqtt.username_label": "Имя пользователя",
    "settings.mqtt.password_label": "Пароль",
    "settings.mqtt.password_set_hint": "Пароль задан — оставьте пустым, чтобы сохранить",
    "settings.mqtt.client_id_label": "Идентификатор клиента",
    "settings.mqtt.base_topic_label": "Базовый топик",
    "settings.mqtt.save": "Сохранить настройки MQTT",
    "settings.mqtt.saved": "Настройки MQTT сохранены",
    "settings.mqtt.save_error": "Не удалось сохранить настройки MQTT",
    "settings.mqtt.error_host_required": "Требуется указать хост брокера",
    "settings.logs.label": "Журнал сервера",
    "settings.logs.hint": "Просмотр журнала сервера в реальном времени. Используйте фильтр для отображения нужных уровней.",
    "settings.logs.connect": "Подключить",
    "settings.logs.disconnect": "Отключить",
    "settings.logs.clear": "Очистить",
    "settings.logs.error": "Ошибка подключения к журналу",
    "settings.logs.filter.all": "Все уровни",
    "settings.logs.filter.info": "Info+",
    "settings.logs.filter.warning": "Warning+",
    "settings.logs.filter.error": "Только ошибки",
    "settings.logs.filter.all_desc": "Все сообщения лога",
    "settings.logs.filter.info_desc": "Info, предупреждения и ошибки",
    "settings.logs.filter.warning_desc": "Только предупреждения и ошибки",
    "settings.logs.filter.error_desc": "Только ошибки",
    "device.error.power_off_failed": "Не удалось выключить устройство",
    "device.error.remove_failed": "Не удалось удалить устройство",
    "device.error.settings_load_failed": "Не удалось загрузить настройки устройства",
    "device.error.brightness": "Не удалось обновить яркость",
    "device.error.required": "Пожалуйста, заполните все поля",
    "device.error.update": "Не удалось обновить устройство",
    "device.error.save": "Не удалось сохранить настройки",
    "device.error.clone_failed": "Не удалось клонировать устройство",
    "device_discovery.error.fill_all_fields": "Пожалуйста, заполните все поля",
    "device_discovery.added": "Устройство успешно добавлено",
    "device_discovery.error.add_failed": "Не удалось добавить устройство",
    "calibration.error.load_failed": "Не удалось загрузить калибровку",
    "calibration.error.css_load_failed": "Не удалось загрузить источник цветовой полосы",
    "calibration.error.test_toggle_failed": "Не удалось переключить тестовый край",
    "calibration.error.save_failed": "Не удалось сохранить калибровку",
    "calibration.error.led_count_mismatch": "Общее количество LED должно совпадать с количеством LED устройства",
    "calibration.error.led_count_exceeded": "Калиброванных LED больше, чем общее количество LED",
    "calibration.mode.simple": "Простой",
    "calibration.mode.advanced": "Расширенный",
    "calibration.switch_to_advanced": "Расширенный режим",
    "calibration.advanced.title": "Расширенная калибровка",
    "calibration.advanced.switch_to_simple": "Простой режим",
    "calibration.advanced.lines_title": "Линии",
    "calibration.advanced.canvas_hint": "Перетаскивайте мониторы. Нажимайте на грани для выбора линий. Прокрутка — масштаб, перетаскивание пустого места — сдвиг.",
    "calibration.advanced.reset_view": "Сбросить вид",
    "calibration.advanced.line_properties": "Свойства линии",
    "calibration.advanced.picture_source": "Источник:",
    "calibration.advanced.picture_source.hint": "Источник изображения (монитор), с которого эта линия снимает данные",
    "calibration.advanced.edge": "Грань:",
    "calibration.advanced.edge.hint": "С какой грани экрана снимать пиксели",
    "calibration.advanced.led_count": "Светодиоды:",
    "calibration.advanced.led_count.hint": "Количество светодиодов на этой линии",
    "calibration.advanced.span_start": "Начало:",
    "calibration.advanced.span_start.hint": "Откуда начинается захват вдоль грани (0 = начало, 1 = конец). Позволяет покрыть только часть грани.",
    "calibration.advanced.span_end": "Конец:",
    "calibration.advanced.span_end.hint": "Где заканчивается захват вдоль грани (0 = начало, 1 = конец). Вместе с «Начало» определяет активный участок.",
    "calibration.advanced.border_width": "Глубина (пкс):",
    "calibration.advanced.border_width.hint": "Сколько пикселей вглубь от края захватывать. Большие значения берут больше внутренней части экрана.",
    "calibration.advanced.reverse": "Реверс",
    "calibration.advanced.no_lines_warning": "Добавьте хотя бы одну линию",
    "dashboard.error.automation_toggle_failed": "Не удалось переключить автоматизацию",
    "dashboard.error.start_failed": "Не удалось запустить обработку",
    "dashboard.error.stop_failed": "Не удалось остановить обработку",
    "dashboard.error.stop_all": "Не удалось остановить все цели",
    "target.error.editor_open_failed": "Не удалось открыть редактор цели",
    "target.error.start_failed": "Не удалось запустить цель",
    "target.error.stop_failed": "Не удалось остановить цель",
    "target.error.clone_failed": "Не удалось клонировать цель",
    "target.error.delete_failed": "Не удалось удалить цель",
    "targets.stop_all.button": "Остановить все",
    "targets.stop_all.none_running": "Нет запущенных целей",
    "targets.stop_all.stopped": "Остановлено целей: {count}",
    "targets.stop_all.error": "Не удалось остановить цели",
    "audio_source.error.load": "Не удалось загрузить аудиоисточник",
    "audio_template.error.clone_failed": "Не удалось клонировать аудиошаблон",
    "value_source.error.load": "Не удалось загрузить источник значений",
    "color_strip.error.editor_open_failed": "Не удалось открыть редактор цветовой полосы",
    "color_strip.error.clone_failed": "Не удалось клонировать источник цветовой полосы",
    "color_strip.error.delete_failed": "Не удалось удалить источник цветовой полосы",
    "pattern.error.editor_open_failed": "Не удалось открыть редактор шаблона узоров",
    "pattern.error.clone_failed": "Не удалось клонировать шаблон узоров",
    "pattern.error.delete_failed": "Не удалось удалить шаблон узоров",
    "pattern.error.capture_bg_failed": "Не удалось захватить фон",
    "stream.error.clone_picture_failed": "Не удалось клонировать источник изображения",
    "stream.error.clone_capture_failed": "Не удалось клонировать шаблон захвата",
    "stream.error.clone_pp_failed": "Не удалось клонировать шаблон постобработки",
    "kc_target.error.editor_open_failed": "Не удалось открыть редактор ключевых цветов",
    "kc_target.error.clone_failed": "Не удалось клонировать цель ключевых цветов",
    "kc_target.error.delete_failed": "Не удалось удалить цель ключевых цветов",
    "theme.switched.dark": "Переключено на тёмную тему",
    "theme.switched.light": "Переключено на светлую тему",
    "accent.color.updated": "Цвет акцента обновлён",
    "search.footer": "↑↓ навигация · Enter выбор · Esc закрыть",
    "sync_clock.group.title": "Часы синхронизации",
    "sync_clock.add": "Добавить часы",
    "sync_clock.edit": "Редактировать часы",
    "sync_clock.name": "Название:",
    "sync_clock.name.placeholder": "Основные часы анимации",
    "sync_clock.name.hint": "Описательное название для этих часов синхронизации",
    "sync_clock.speed": "Скорость:",
    "sync_clock.speed.hint": "Множитель скорости анимации для всех привязанных источников. 1.0 = обычная, 2.0 = двойная, 0.5 = половинная.",
    "sync_clock.description": "Описание (необязательно):",
    "sync_clock.description.placeholder": "Необязательное описание",
    "sync_clock.description.hint": "Необязательные заметки о назначении этих часов",
    "sync_clock.status.running": "Работает",
    "sync_clock.status.paused": "Приостановлено",
    "sync_clock.action.pause": "Приостановить",
    "sync_clock.action.resume": "Возобновить",
    "sync_clock.action.reset": "Сбросить",
    "sync_clock.error.name_required": "Название часов обязательно",
    "sync_clock.error.load": "Не удалось загрузить часы синхронизации",
    "sync_clock.created": "Часы синхронизации созданы",
    "sync_clock.updated": "Часы синхронизации обновлены",
    "sync_clock.deleted": "Часы синхронизации удалены",
    "sync_clock.paused": "Часы приостановлены",
    "sync_clock.resumed": "Часы возобновлены",
    "sync_clock.reset_done": "Часы сброшены на ноль",
    "sync_clock.delete.confirm": "Удалить эти часы синхронизации? Привязанные источники потеряют синхронизацию и будут работать на скорости по умолчанию.",
    "sync_clock.elapsed": "Прошло времени",
    "color_strip.clock": "Часы синхронизации:",
    "color_strip.clock.hint": "Привязка к часам для синхронизации анимации между источниками. Скорость управляется на часах.",
    "graph.title": "Граф",
    "graph.fit_all": "Показать все узлы",
    "graph.zoom_in": "Приблизить",
    "graph.zoom_out": "Отдалить",
    "graph.search": "Поиск узлов",
    "graph.search_placeholder": "Поиск сущностей...",
    "graph.legend": "Легенда",
    "graph.minimap": "Миникарта",
    "graph.relayout": "Перестроить",
    "graph.empty": "Ещё нет сущностей",
    "graph.empty.hint": "Создайте устройства, источники и цели, чтобы увидеть их здесь.",
    "graph.disconnect": "Отключить",
    "graph.connection_updated": "Соединение обновлено",
    "graph.connection_failed": "Не удалось обновить соединение",
    "graph.connection_removed": "Соединение удалено",
    "graph.disconnect_failed": "Не удалось отключить",
    "graph.relayout_confirm": "Сбросить все ручные позиции узлов и перестроить граф?",
    "graph.fullscreen": "Полноэкранный режим",
    "graph.add_entity": "Добавить сущность",
    "graph.color_picker": "Цвет узла",
    "graph.filter": "Фильтр узлов",
    "graph.filter_placeholder": "Фильтр по имени...",
    "graph.filter_clear": "Очистить фильтр",
    "graph.filter_running": "Запущен",
    "graph.filter_stopped": "Остановлен",
    "graph.filter_types": "Типы",
    "graph.filter_group.capture": "Захват",
    "graph.filter_group.strip": "Цвет. полосы",
    "graph.filter_group.audio": "Аудио",
    "graph.filter_group.targets": "Цели",
    "graph.filter_group.other": "Другое",
    "graph.bulk_delete_confirm": "Удалить {count} выбранных сущностей?",
    "graph.nothing_to_undo": "Нечего отменять",
    "graph.nothing_to_redo": "Нечего повторять",
    "graph.help_title": "Горячие клавиши",
    "graph.help.search": "Поиск",
    "graph.help.filter": "Фильтр",
    "graph.help.add": "Добавить сущность",
    "graph.help.shortcuts": "Горячие клавиши",
    "graph.help.delete": "Удалить / Отсоединить",
    "graph.help.select_all": "Выбрать все",
    "graph.help.undo": "Отменить",
    "graph.help.redo": "Повторить",
    "graph.help.fullscreen": "Полный экран",
    "graph.help.deselect": "Снять выбор",
    "graph.help.navigate": "Навигация по узлам",
    "graph.help.click": "Клик",
    "graph.help.click_desc": "Выбрать узел",
    "graph.help.dblclick": "Двойной клик",
    "graph.help.dblclick_desc": "Приблизить к узлу",
    "graph.help.shift_click": "Shift+Клик",
    "graph.help.shift_click_desc": "Множественный выбор",
    "graph.help.shift_drag": "Shift+Перетащить",
    "graph.help.shift_drag_desc": "Выбор рамкой",
    "graph.help.drag_node": "Перетащить узел",
    "graph.help.drag_node_desc": "Переместить",
    "graph.help.drag_port": "Перетащить порт",
    "graph.help.drag_port_desc": "Соединить сущности",
    "graph.help.right_click": "ПКМ по связи",
    "graph.help.right_click_desc": "Отсоединить связь",
    "graph.tooltip.fps": "FPS",
    "graph.tooltip.errors": "Ошибки",
    "graph.tooltip.uptime": "Время работы",
    "automation.enabled": "Автоматизация включена",
    "automation.disabled": "Автоматизация выключена",
    "scene_preset.activated": "Пресет активирован",
    "scene_preset.used_by": "Используется в %d автоматизации(ях)",
    "settings.api_keys.label": "API-ключи",
    "settings.api_keys.hint": "API-ключи определяются в конфигурационном файле сервера (config.yaml). Отредактируйте файл и перезапустите сервер для применения изменений.",
    "settings.api_keys.empty": "API-ключи не настроены",
    "settings.api_keys.load_error": "Не удалось загрузить API-ключи",
    "settings.partial.label": "Частичный экспорт / импорт",
    "settings.partial.hint": "Экспортировать или импортировать один тип объектов. Импорт заменяет или объединяет данные и перезапускает сервер.",
    "settings.partial.store.devices": "Устройства",
    "settings.partial.store.output_targets": "LED-цели",
    "settings.partial.store.color_strip_sources": "Цветные полосы",
    "settings.partial.store.picture_sources": "Источники изображений",
    "settings.partial.store.audio_sources": "Аудио-источники",
    "settings.partial.store.audio_templates": "Аудио-шаблоны",
    "settings.partial.store.capture_templates": "Шаблоны захвата",
    "settings.partial.store.postprocessing_templates": "Шаблоны постобработки",
    "settings.partial.store.color_strip_processing_templates": "Шаблоны обработки полос",
    "settings.partial.store.pattern_templates": "Шаблоны паттернов",
    "settings.partial.store.value_sources": "Источники значений",
    "settings.partial.store.sync_clocks": "Синхронные часы",
    "settings.partial.store.automations": "Автоматизации",
    "settings.partial.store.scene_presets": "Пресеты сцен",
    "settings.partial.export_button": "Экспорт",
    "settings.partial.import_button": "Импорт из файла",
    "settings.partial.merge_label": "Объединить (добавить/перезаписать, сохранить существующие)",
    "settings.partial.export_success": "Экспорт выполнен",
    "settings.partial.export_error": "Ошибка экспорта",
    "settings.partial.import_success": "Импорт выполнен",
    "settings.partial.import_error": "Ошибка импорта",
    "settings.partial.import_confirm_replace": "Это ЗАМЕНИТ все данные {store} и перезапустит сервер. Продолжить?",
    "settings.partial.import_confirm_merge": "Это ОБЪЕДИНИТ данные {store} и перезапустит сервер. Продолжить?",
    "section.empty.devices": "Устройств пока нет. Нажмите + для добавления.",
    "section.empty.targets": "LED-целей пока нет. Нажмите + для добавления.",
    "section.empty.kc_targets": "Целей ключевых цветов пока нет. Нажмите + для добавления.",
    "section.empty.pattern_templates": "Шаблонов паттернов пока нет. Нажмите + для добавления.",
    "section.empty.picture_sources": "Источников пока нет. Нажмите + для добавления.",
    "section.empty.capture_templates": "Шаблонов захвата пока нет. Нажмите + для добавления.",
    "section.empty.pp_templates": "Шаблонов постобработки пока нет. Нажмите + для добавления.",
    "section.empty.audio_sources": "Аудио-источников пока нет. Нажмите + для добавления.",
    "section.empty.audio_templates": "Аудио-шаблонов пока нет. Нажмите + для добавления.",
    "section.empty.color_strips": "Цветных полос пока нет. Нажмите + для добавления.",
    "section.empty.value_sources": "Источников значений пока нет. Нажмите + для добавления.",
    "section.empty.sync_clocks": "Синхронных часов пока нет. Нажмите + для добавления.",
    "section.empty.cspt": "Шаблонов обработки полос пока нет. Нажмите + для добавления.",
    "section.empty.automations": "Автоматизаций пока нет. Нажмите + для добавления.",
    "section.empty.scenes": "Пресетов сцен пока нет. Нажмите + для добавления.",
    "bulk.select": "Выбрать",
    "bulk.cancel": "Отмена",
    "bulk.selected_count.one": "{count} выбран",
    "bulk.selected_count.few": "{count} выбрано",
    "bulk.selected_count.many": "{count} выбрано",
    "bulk.select_all": "Выбрать все",
    "bulk.deselect_all": "Снять выбор",
    "bulk.delete": "Удалить",
    "bulk.start": "Запустить",
    "bulk.stop": "Остановить",
    "bulk.enable": "Включить",
    "bulk.disable": "Выключить",
    "bulk.confirm_delete.one": "Удалить {count} элемент?",
    "bulk.confirm_delete.few": "Удалить {count} элемента?",
    "bulk.confirm_delete.many": "Удалить {count} элементов?",
    "color_strip": {
        "notification": {
            "search_apps": "Поиск приложений…"
        }
    }
}