Files
OpenFlare/frontend/messages/fragments/runtime.ru.json
T
2026-10-25 22:35:32 +03:00

576 lines
109 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"runtime": {
"api_documentation_cb3d2229": "Документация API",
"openflare_provides_a_simple_powerful_api_for_ba400468": "OpenFlare предоставляет простой и мощный API для ряда языков программирования и сред разработки. Его стандартный интерфейс RESTful упрощает интеграцию и настройку серверной части.",
"platform_user_guide_d0ead991": "Руководство пользователя платформы",
"welcome_to_the_openflare_management_platform_this_e8ecbe4d": "Добро пожаловать на платформу управления OpenFlare. В этом руководстве представлены основные компоненты, роли и разрешения, а также рабочий процесс настройки, которые помогут вам начать работу.",
"privacy_policy_b6da1ca6": "Политика конфиденциальности",
"we_value_your_privacy_this_policy_explains_2c9e3c0b": "Мы ценим вашу конфиденциальность. Эта политика объясняет, как мы собираем, используем и храним вашу личную информацию. ",
"and_the_rights_you_have_over_it_4560abf2": "и права, которые вы имеете на это.",
"terms_of_service_4e80a140": "Условия обслуживания",
"please_read_the_following_terms_carefully_to_c46a6a61": "Пожалуйста, внимательно прочитайте следующие условия, чтобы понять свои права.",
"use_1b3d699e": ": использовать ",
"or_07d4e3c0": "(или ",
"place_the_lucide_icon_directly_inside_the_104f794c": ": поместите значок Lucide прямо внутри контейнера заголовка и примените ",
"use_only_5e12eecb": ": использовать только ",
"for_pages_with_multiple_tabs_keep_each_5f721959": ": для страниц с несколькими вкладками содержимое каждой вкладки должно храниться в отдельном файле компонента (например, ",
"beyond_tabs_when_a_page_exceeds_600_d152cfdc": ": когда страница превышает 600 ",
"message_18ab4763": ") ",
"and_de1d5dd0": " и ",
"inputs_fabee312": "Входы (",
"and_selectors_e4875cdf": ") и селекторы (",
"should_share_the_compact_height_f1fe2218": ") должен иметь компактную высоту ",
"with_font_size_e7c29991": ", с размером шрифта ",
"and_use_ca398a12": "и использовать ",
"to_remove_overlapping_native_shadows_dd65b475": " чтобы удалить перекрывающиеся собственные тени.",
"align_checkboxes_toward_the_top_left_using_092dcef0": "Выровняйте флажки в левом верхнем углу, используя контейнер с ",
"add_bf15da3a": ". Добавить ",
"to_the_checkbox_so_multiline_descriptions_stay_1bb85c4b": " установите флажок, чтобы многострочные описания оставались выровненными вверху.",
"use_the_default_primary_or_secondary_db7513e5": "Используйте основной или дополнительный по умолчанию ",
"button_for_forms_and_create_save_actions_a657dba8": " кнопка для форм и действий создания/сохранения с компактной высотой ",
"outline_buttons_must_include_the_66ace005": ". Кнопки структуры должны включать ",
"class_43eff5ff": " класс.",
"1_align_label_and_input_32d4558d": "// 1. Align Label and Input",
"div_classname_space_y_1_5_label_32230ad7": "<div className=\"space-y-1.5\">\n <Label htmlFor=\"id\" className=\"text-xs font-medium text-foreground\">Title</Label>\n <Input id=\"id\" className=\"h-8 text-xs shadow-none\" />\n</div>",
"2_align_checkbox_to_the_top_bdf68ad8": "// 2. Align Checkbox to the top",
"div_classname_flex_items_start_gap_2_ccf0d526": "<div className=\"flex items-start gap-2.5\">\n <Checkbox id=\"c\" className=\"mt-0.5\" />\n <div className=\"grid gap-1\">\n <label htmlFor=\"c\" className=\"text-xs font-medium leading-none\">Title</label>\n <p className=\"text-[10px] text-muted-foreground\">Multiline description</p>\n </div>\n</div>",
"card_classname_border_dashed_shadow_none_cardheader_35727acf": "<Card className=\"border-dashed shadow-none\">\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Metric title</span>\n <Cpu className=\"size-4 text-primary\" />\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"text-2xl font-semibold tracking-tight\">42.8 %</div>\n <Progress value={42.8} className=\"h-1.5\" />\n <p className=\"text-[10px] text-muted-foreground\">Status description</p>\n </CardContent>\n</Card>",
"div_classname_border_border_dashed_shadow_none_b430b520": "<div className=\"border border-dashed shadow-none rounded-lg overflow-hidden bg-background\">\n <Table>\n <TableHeader className=\"bg-muted/40\">\n <TableRow className=\"border-dashed hover:bg-transparent\">\n <TableHead className=\"text-xs font-semibold\">ID</TableHead>\n <TableHead className=\"text-xs font-semibold\">Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow className=\"border-dashed hover:bg-muted/10 transition-colors\">\n <TableCell className=\"font-mono text-xs\">ID-1001</TableCell>\n <TableCell>\n <Badge variant=\"outline\" className=\"text-[10px] bg-emerald-500/10 border-emerald-500/20 text-emerald-600 rounded-full py-0 px-2\">\n <span className=\"size-1 bg-emerald-500 rounded-full mr-1.5 shrink-0\" />\n Success\n </Badge>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n</div>",
"disabled_f95ea7f4": "Отключено",
"title_administrator_login_alert_content_administrator_user_6f32cf7c": "{\"title\": \"Вход администратора\", \"content\": \"Администратор {{user.username}} ...\", \"level\": \"INFO\"}",
"lark_webhook_c2e0b312": "Lark Вебхук",
"title_content_view_details_url_7af4b7d5": "### $title\n$content\n\n[Подробнее]($url)",
"dingtalk_group_bot_5d8efec9": "DingTalk групповой бот",
"wecom_group_bot_138ea7a8": "WeCom групповой бот",
"under_development_78c33fbf": "В разработке",
"this_feature_is_being_migrated_and_developed_61ebaf78": "Эта функция переносится и развивается. Пожалуйста, зайдите позже.",
"port_for_the_built_in_frps_web_cfab540f": "Порт для встроенного интерфейса веб-администрирования FRPS",
"request_failed_please_try_again_later_8977b79a": "Запрос не выполнен. Пожалуйста, повторите попытку позже.",
"operation_failed_0c3b4cf7": "Операция не удалась",
"automatic_configuration_must_be_a_json_object_90ba17a4": "Автоматическая конфигурация должна быть объектом JSON.",
"high_frequency_404_scan_from_one_ip_f7d27ffb": "Высокочастотное сканирование 404 с одного IP",
"abnormal_direct_access_from_one_ip_732dbeee": "Аномальный прямой доступ с одного IP",
"permanent_3e71ccc8": "Постоянный",
"expired_2fe0e333": "Срок действия истек",
"in_value0_minutes_fd2a5b53": "Через {value0} мин",
"in_value0_hours_5ca37144": "Через {value0} ч",
"node_2410d860": "Узел",
"edge_099db313": "Ребро",
"edge_s_id_74f6affc": "Edge(?:\\s+ID)?",
"value0_s_value1_s_40960c98": "{value0}\\s+{value1}(?=$|[\\s,.:])",
"rule_graph_schema_version_must_be_1_ea9a1161": "График правил schema_version должен быть равен 1.",
"rule_graph_exceeds_the_size_limit_337651b9": "График правил превышает ограничение по размеру",
"node_id_must_not_be_empty_51a5de58": "Узел ID не должен быть пустым.",
"duplicate_node_id_value0_621230af": "Повторяющийся ID узла: {value0}",
"edge_id_must_not_be_empty_bc8f69cb": "Край ID не должен быть пустым.",
"duplicate_edge_id_value0_0a9d1c7c": "Повторяющийся ID ребра: {value0}",
"the_start_node_must_not_have_incoming_50a07b17": "Начальный узел не должен иметь входящих ребер.",
"the_rule_graph_must_contain_exactly_one_7dfbc027": "Граф правил должен содержать ровно один начальный узел.",
"the_rule_graph_must_contain_exactly_one_0036eb82": "Граф правил должен содержать ровно один разрешающий узел.",
"edge_value0_has_an_invalid_endpoint_or_9d84eb7e": "Ребро {value0} содержит неверный узел подключения или порт.",
"node_value0_output_value1_is_not_connected_c3038e81": "Выход {value1} узла {value0} не подключён",
"node_value0_output_value1_can_only_be_903e54ce": "Выход {value1} узла {value0} можно подключить только один раз.",
"node_value0_is_unreachable_from_the_start_086531dc": "Узел {value0} недоступен из начального узла.",
"node_value0_cannot_reach_a_terminal_node_8de2ff6e": "Узел {value0} не может достичь конечного узла.",
"the_rule_graph_must_not_contain_cycles_fd6fe797": "Граф правил не должен содержать циклов",
"node_value0_contains_an_invalid_ip_address_1873ab94": "Узел {value0} содержит неверный адрес IP.",
"node_value0_contains_an_invalid_cidr_00c880d9": "Узел {value0} содержит недопустимый CIDR.",
"node_value0_contains_an_invalid_ip_group_589219a5": "Узел {value0} содержит недопустимую группу IP.",
"node_value0_contains_an_invalid_geography_code_1a9f469b": "Узел {value0} содержит неверный географический код.",
"node_value0_has_pow_settings_outside_the_9fd2a4cb": "У узла {value0} настройки PoW выходят за пределы допустимого диапазона.",
"node_value0_has_invalid_block_response_settings_ae4c35ca": "Узел {value0} имеет неверные настройки ответа на блокировку.",
"node_value0_match_mode_must_be_and_242c1ae7": "Режим сопоставления узла {value0} должен быть and или or",
"node_value0_contains_an_invalid_browser_tag_4d0e6740": "Узел {value0} содержит недопустимый тег браузера.",
"node_value0_contains_an_invalid_operating_system_45bea1fb": "Узел {value0} содержит недопустимый тег операционной системы.",
"node_value0_allows_at_most_32_custom_497938c6": "Узел {value0} позволяет использовать не более 32 пользовательских шаблонов UA.",
"node_value0_custom_ua_pattern_must_not_a72718be": "Пользовательский шаблон узла {value0} UA не должен быть пустым.",
"node_value0_custom_ua_pattern_is_too_c2c83c0e": "Пользовательский шаблон узла {value0} UA слишком длинный.",
"node_value0_has_an_invalid_custom_ua_c47ffd0d": "Узел {value0} имеет недопустимый пользовательский шаблон UA.",
"node_value0_requires_at_least_one_pattern_6114bb93": "Узел {value0} требует хотя бы один шаблон, если включена пользовательская блокировка UA.",
"start_d2bb025a": "Начало",
"ip_match_43f4b6d4": "Проверка IP",
"geography_match_9acb08c4": "Проверка географии",
"ua_check_b56dac23": "Проверка User-Agent",
"security_checks_e09822e6": "Проверки безопасности",
"pow_challenge_3c043088": "Проверка PoW",
"allow_1e9f2561": "Разрешить",
"block_2a366d09": "Заблокировать",
"wechat_81b430b6": "WeChat",
"wildcard_c6b0739e": "Подстановочный знак",
"exact_match_391fe725": "Точное совпадение",
"value0_expires_value1_7d8600f8": "{value0} (срок действия: {value1})",
"sorry_the_page_you_requested_seems_to_ba66cd83": "Запрошенная вами страница не найдена.",
"check_the_path_or_return_to_safety_b1f31888": "Проверьте URL или вернитесь на панель управления.",
"previous_c9b9ae7a": "Назад",
"home_203c08e0": "Главная",
"1_api_conventions_and_authentication_e6d4df61": "1. API соглашения и аутентификация",
"standard_api_request_conventions_and_developer_access_39eb956e": "Стандартные соглашения о запросах API и проверка подлинности токена доступа разработчика.",
"1_1_standard_response_format_5cddae2f": "1.1 Стандартный формат ответа",
"all_api_endpoints_use_a_standard_json_87c92fb0": "Все конечные точки API используют стандартную структуру ответа JSON:",
"field_49ecd0e3": "Поле",
"type_ba40014f": "Тип",
"description_4262c45d": "Описание",
"error_message_empty_on_success_contains_error_d89d457f": "Сообщение об ошибке. Пусто (\"\") в случае успеха; содержит сведения об ошибке при сбое.",
"the_response_payload_null_when_the_request_97b8b29c": "Параметры ответа. null, если запрос не выполнен или данные не возвращаются.",
"successful_response_example_8917e853": "Пример успешного ответа:",
"failed_response_example_eae899e1": "Пример неудачного ответа:",
"error_msg_incorrect_password_data_null_b2eccc86": "{\n \"error_msg\": \"Неверный пароль\",\n \"data\": null\n}",
"1_2_authentication_methods_3c5db38a": "1.2 Методы аутентификации",
"protected_endpoints_require_credentials_except_public_endpoints_1fa0a24c": "Аутентификация требуется, за исключением общедоступных конечных точек, таких как вход в систему, регистрация и общедоступная конфигурация:",
"session_credentials_de72024d": "Учетные данные сеанса:",
"browser_clients_can_stay_signed_in_using_f316279b": "Клиенты браузера могут оставаться в системе, используя стандартный файл cookie сеанса.",
"access_tokens_8de23550": "Токены доступа:",
"for_backend_calls_and_third_party_integrations_dfd8bf0f": "Для бэкэнд-вызовов и сторонних интеграций. Создайте токен доступа API и включите его в заголовок запроса для аутентификации.",
"use_either_of_the_following_request_headers_1e03b04b": "Используйте любой из следующих заголовков запроса:",
"2_user_and_authentication_endpoints_4a89d429": "2. Конечные точки пользователя и аутентификации",
"2_1_user_registration_4f332f85": "2.1 Регистрация пользователя",
"endpoint_79a2369a": "Конечная точка:",
"description_3e633a20": "Описание:",
"register_a_local_account_when_registration_is_938891dc": "Зарегистрируйте локальную учетную запись, если регистрация включена в настройках администрирования.",
"parameter_9634fb08": "Параметр",
"required_11da9dc4": "Требуется",
"yes_b5141d3d": "Да",
"username_must_be_unique_and_contain_no_e81c1e5c": "Имя пользователя; должно быть уникальным и не содержать пробелов.",
"password_at_least_8_characters_37cdc807": "Пароль; не менее 8 символов.",
"no_0c70665b": "Нет",
"nickname_defaults_to_the_username_when_omitted_676aae7e": "Никнейм. По умолчанию используется имя пользователя, если оно опущено.",
"2_2_password_login_271483ba": "2.2 Вход по паролю",
"authenticate_with_a_username_and_password_establishing_a38ff252": "Аутентификация с использованием имени пользователя и пароля, создание файла cookie сеанса в случае успеха.",
"username_1a3f0617": "Имя пользователя",
"password_a621ab60": "Пароль",
"2_3_sign_out_3252611d": "2.3 Выйти",
"delete_the_current_session_cookie_and_sign_c213ffd9": "Удалите файл cookie текущего сеанса и выйдите из системы.",
"2_4_get_profile_7b96110a": "2.4 Получить профиль",
"get_the_signed_in_account_s_basic_b0eb8cfa": "Получите основную информацию об учетной записи, в которую выполнен вход, включая ID, роль и псевдоним.",
"3_personal_access_token_endpoints_989f5d7c": "3. Конечные точки токена личного доступа",
"access_token_management_requires_a_session_login_42d91543": "Управление токенами доступа требует входа в систему и доступно обычным пользователям.",
"3_1_list_tokens_9840c227": "3.1 Список токенов",
"list_the_current_user_s_tokens_with_c34d2210": "Вывести список токенов текущего пользователя с замаскированными секретными значениями.",
"3_2_create_an_access_token_e53bd784": "3.2 Создайте токен доступа",
"parameters_ba89685c": "Параметры:",
"name_token_name_is_admin_false_4f3e4868": "{\"name\": \"название токена\", \"is_admin\": false}",
"generate_an_access_token_the_response_includes_70552390": "Создайте токен доступа. Ответ включает значение открытого текста один раз; храните его в надежном месте.",
"optional_default_210b9d8f": " (необязательно, по умолчанию ",
"grant_administrator_privileges_to_the_token_only_2292cad8": "): предоставить токену права администратора. Только администраторы могут включить это. Обычные токены не могут получить доступ ",
"endpoints_815c88e5": " конечные точки.",
"successful_response_example_7783a39c": "Пример успешного ответа:",
"3_3_revoke_delete_a_token_ae510f58": "3.3 Отзыв/удаление токена",
"permanently_delete_a_token_by_id_immediately_145287f6": "Окончательно удалите токен до ID, немедленно сделав его недействительным.",
"3_4_rotate_a_token_secret_79209983": "3.4 Замена секрета токена",
"replace_a_token_s_secret_and_return_d2caca89": "Замените секрет токена и верните его новое значение в виде открытого текста. Предыдущий секрет становится недействительным; его имя и ID остаются прежними.",
"4_public_configuration_and_administration_17ebdbd5": "4. Публичная настройка и администрирование",
"4_1_public_system_configuration_2be912e4": "4.1 Конфигурация общедоступной системы",
"get_publicly_visible_configuration_keys_and_values_bc7bff66": "Получите общедоступные ключи конфигурации и значения для динамического рендеринга интерфейса.",
"response_example_d3087445": "Пример ответа:",
"4_2_system_configuration_crud_administrator_2ce66c8b": "4.2 Конфигурация системы CRUD (администратор)",
"manage_system_configs_dynamically_through_an_administrator_acdcdb99": "Управляйте system_configs динамически через сеанс администратора.",
"list_configuration_3d58680b": "Конфигурация списка:",
"create_a_configuration_entry_1d995264": "Создайте запись конфигурации:",
"update_a_configuration_value_2a0b0b76": "Обновите значение конфигурации:",
"delete_a_configuration_entry_1b77a6ea": "Удалить запись конфигурации:",
"1_quick_start_ef8fbb58": "1. Быстрый старт",
"a_guide_to_the_general_purpose_full_9cd8c987": "Руководство по универсальной полнофункциональной платформе разработки.",
"architecture_e992b65c": "Архитектура:",
"go_gin_gorm_redis_asynq_backend_react_d5fe02d3": "Go (Gin + GORM + Redis + Asynq) бэкэнд + React (Next.js 16 + Tailwind CSS 4 + shadcn/ui) интерфейс",
"authentication_d36b345b": "Аутентификация:",
"local_username_password_registration_and_login_plus_583ab638": "Локальная регистрация имени пользователя/пароля и вход в систему, а также привязка сторонней учетной записи OIDC (OAuth2)",
"access_tokens_b7b856d3": "Токены доступа:",
"personal_developer_access_tokens_api_keys_for_4b407149": "Токены доступа персонального разработчика (ключи API) для вызова системных API через заголовки HTTP.",
"observability_ea0cc1bf": "Наблюдаемость:",
"zap_structured_logging_and_opentelemetry_distributed_tracing_9fd6da9f": "Структурированное ведение журнала Zap и распределенная трассировка OpenTelemetry",
"2_authentication_and_security_settings_76967059": "2. Настройки аутентификации и безопасности",
"the_platform_combines_authentication_methods_to_support_bc9f1772": "Платформа сочетает в себе методы аутентификации для поддержки различных развертываний и вариантов использования:",
"2_1_username_and_password_authentication_97184f8f": "2.1 Аутентификация имени пользователя и пароля",
"registration_and_password_login_c5bd6cb4": "Регистрация и пароль для входа:",
"users_can_register_and_create_sessions_with_21883e04": "Пользователи могут регистрироваться и создавать сеансы с именем пользователя и паролем. Пароли хранятся с помощью ",
"salted_hashing_dc2a9b63": " хеширование с солью.",
"system_switches_53741557": "Системные переключатели:",
"administrators_can_disable_password_registration_or_login_a2648e62": "Администраторы могут в любое время отключить регистрацию пароля или вход в систему, чтобы потребовать стороннюю аутентификацию.",
"2_2_third_party_oidc_providers_f14083c8": "2.2 Сторонние поставщики OIDC",
"users_can_link_external_accounts_from_their_c08d3f5a": "Пользователи могут связать внешние учетные записи со страницы своего профиля:",
"open_4540d74d": "Открыть ",
"settings_profile_32835b0d": "Настройки/Профиль",
"message_a173cce8": ".",
"under_linked_accounts_view_existing_connections_or_5151eb9b": "В разделе «Связанные учетные записи» просмотрите существующие подключения или выберите доступного поставщика OIDC, чтобы начать процесс связывания OAuth2.",
"after_linking_use_the_oidc_login_button_6095b15d": "После привязки воспользуйтесь кнопкой входа OIDC на странице входа для быстрого доступа.",
"3_integrating_personal_access_tokens_af2647b5": "3. Интеграция токенов личного доступа",
"personal_access_tokens_allow_developers_and_third_9a242a0e": "Токены личного доступа позволяют разработчикам и сторонним инструментам напрямую вызывать системные API.",
"3_1_token_generation_and_storage_2b78c681": "3.1 Генерация и хранение токенов",
"one_time_plaintext_display_fd13912a": "Одноразовое отображение открытого текста:",
"a_newly_generated_plaintext_token_such_as_57eb11a1": "Недавно сгенерированный токен открытого текста (например, ",
"is_displayed_only_once_copy_and_save_8d378c8a": ") отображается только один раз. Скопируйте и немедленно сохраните его; его невозможно получить после закрытия диалога.",
"secure_hash_storage_1ce392ff": "Безопасное хранение хеша:",
"only_a_sha_256_hash_of_the_dbf434b1": "В базе данных хранится только хеш токена SHA-256, что предотвращает восстановление открытого текста из утекшего дайджеста.",
"3_2_calling_apis_with_headers_fccd7b0d": "3.2 Вызов API с заголовками",
"use_your_saved_plaintext_token_with_either_3af53a05": "Используйте сохраненный токен открытого текста с любым из следующих заголовков аутентификации HTTP:",
"method_1_authorization_bearer_header_2a9c2a6c": "Метод 1: заголовок носителя авторизации",
"method_2_custom_x_access_token_header_4548169f": "Способ 2: Пользовательский заголовок X-Access-Token",
"4_dynamic_system_configuration_b3bf8c49": "4. Динамическая конфигурация системы",
"the_built_in_key_value_configuration_module_713f6d05": "Встроенный модуль конфигурации «ключ/значение» позволяет администраторам динамически настраивать поведение во время выполнения:",
"cached_reads_35828322": "В кэше читается:",
"configuration_is_read_from_the_database_through_3e9f6a34": "Конфигурация считывается из базы данных через GORM и ускоряется с помощью хэш-кэширования Redis для уменьшения задержки запроса.",
"core_system_configuration_keys_6dc02be8": "Ключи конфигурации основной системы:",
"platform_display_name_116219b1": ": отображаемое имя платформы",
"password_login_switch_153eaa45": ": переключатель входа в систему с паролем",
"user_registration_switch_827b5b21": ": переключатель регистрации пользователя",
"maximum_tokens_per_regular_user_default_5_5dd6d9e7": ": максимальное количество токенов на обычного пользователя (по умолчанию: 5)",
"5_background_tasks_and_scheduling_7142ce96": "5. Фоновые задачи и планирование",
"cobra_provides_separate_commands_so_worker_services_1bbae2df": "Cobra предоставляет отдельные команды для независимого выполнения тяжёлых вычислений и медленных операций ввода-вывода:",
"scheduled_dispatch_scheduler_command_e79062ad": "Запланированная отправка (команда планировщика):",
"enqueues_tasks_in_redis_according_to_their_694e5985": "Ставит задачи в очередь Redis в соответствии с их выражениями Cron.",
"workers_with_queue_priorities_worker_command_faa970b1": "Воркеры с приоритетами очереди (рабочая команда):",
"asynq_consumes_tasks_by_priority_and_executes_69d82251": "Asynq использует задачи по приоритету и выполняет их одновременно, например очистку временной загрузки и синхронизацию внешнего журнала.",
"6_distributed_tracing_and_structured_logs_e8971cad": "6. Распределенная трассировка и структурированные журналы.",
"the_platform_integrates_monitoring_components_for_observability_2b1da50f": "Платформа объединяет компоненты мониторинга для обеспечения наблюдения за распределенными сервисами:",
"tracing_context_is_propagated_automatically_gin_requests_0f549cce": "Контекст трассировки передаётся автоматически. Запросы Gin, исходящие запросы и операции GORM содержат спаны для диагностики задержек и ошибок.",
"zap_structured_logs_1c9725e8": "Структурированные журналы Zap:",
"standardizes_backend_console_and_log_output_as_16970757": "Стандартизирует серверную консоль и вывод журнала как JSON для интеграции со сборщиками журналов, такими как ELK и Loki.",
"last_updated_value0_87a896df": "Последнее обновление: {value0}",
"back_to_home_d66f4359": "Вернуться домой",
"sections_fcb2696e": " разделы",
"last_updated_a83cd480": "Последнее обновление:",
"copied_8f6f8d97": "Скопировано",
"copy_markdown_f9c71ee4": "Копировать Markdown",
"table_of_contents_52daa71e": "Оглавление",
"questions_about_this_content_feb7d44a": "Есть вопросы об этом контенте?",
"contact_support_4cac90c8": "Связаться со службой поддержки",
"1_information_we_collect_af0db091": "1. Информация, которую мы собираем",
"we_collect_only_the_information_necessary_to_72f6e528": "Мы собираем только ту информацию, которая необходима для предоставления этой услуги, следуя принципам законности, справедливости и необходимости. Сбор ограничен следующим:",
"1_1_authentication_information_60199ee9": "1.1 Информация для аутентификации:",
"when_you_register_locally_or_sign_in_acdd6bd1": "Когда вы регистрируетесь локально или входите в систему через стороннего поставщика OIDC, мы собираем ваше имя пользователя, связанный адрес электронной почты, хэш пароля и связанный сторонний идентификатор OpenID.",
"we_do_not_require_a_phone_number_3540dfca": "Нам не требуется номер телефона, документ, удостоверяющий личность, или другая реальная идентификационная информация.",
"1_2_service_and_api_logs_46c9a04d": "1.2 Сервисные и API логи:",
"for_system_security_and_auditing_we_automatically_89737fdd": "В целях безопасности и аудита системы мы автоматически собираем журналы активности, включая адрес IP, дату и время доступа, токен личного доступа API историю вызовов и User-Agent (браузер, устройство или инструмент запроса).",
"2_data_storage_and_security_7cc5cdef": "2. Хранение и безопасность данных",
"we_recognize_the_importance_of_data_security_cd3bd4d9": "Мы осознаем важность безопасности данных и используем стандартные технические меры для защиты ваших данных:",
"storage_security_a33cfbef": "Безопасность хранения:",
"user_data_is_stored_in_a_dedicated_132af7bb": "Пользовательские данные хранятся в выделенной облачной базе данных или локальном контейнерном хранилище, доступном только авторизованным системным приложениям.",
"cryptography_9a15a88b": "Криптография:",
"sensitive_password_and_personal_access_token_hashes_9f724cd8": "Хэши конфиденциальных паролей и токенов личного доступа хранятся с использованием надежных криптографических алгоритмов. Для передачи данных API требуется шифрование SSL/TLS.",
"access_control_3471eafa": "Контроль доступа:",
"we_apply_the_principle_of_least_privilege_79328c28": "Мы применяем принцип наименьших привилегий. Данные платформы не передаются извне, а внутреннее администрирование системы записывается в журналы аудита.",
"3_how_we_use_information_41b4d6ad": "3. Как мы используем информацию",
"collected_information_is_used_only_for_the_4868b538": "Собранная информация используется только для следующих целей:",
"identification_481b07f4": "Идентификация:",
"to_identify_your_registered_account_and_display_8c559094": "Для идентификации вашей зарегистрированной учетной записи и отображения вашего профиля и настроек.",
"service_functions_c5834f20": "Функции сервиса:",
"to_identify_and_process_api_authentication_requests_d48a36a2": "Для идентификации и обработки запросов аутентификации API с использованием ваших личных токенов доступа.",
"security_e7132437": "Безопасность:",
"to_analyze_ip_addresses_and_activity_logs_5210836a": "Для анализа адресов IP и журналов активности на предмет злоупотреблений API и атак методом перебора, защищая стабильность серверной части.",
"prohibited_uses_b13fde94": "Запрещенное использование:",
"we_will_8856fb95": "Мы ",
"never_c1d7d603": "никогда не будем",
"sell_your_data_to_third_parties_or_7bb4d77a": " продавать ваши данные третьим лицам или предоставлять каким-либо организациям услуги профилирования пользователей или рекламных рассылок.",
"4_information_sharing_and_disclosure_c034d295": "4. Обмен и раскрытие информации",
"4_1_sharing_principles_b89eb890": "4.1 Принципы обмена:",
"we_do_not_share_personal_information_with_ffcf1e8f": "Мы не передаем личную информацию третьим лицам, включая аффилированные лица и деловых партнеров, за исключением следующих обстоятельств:",
"with_your_prior_explicit_authorization_or_consent_0fa05878": "С вашего предварительного явного разрешения или согласия;",
"when_required_by_applicable_laws_legal_proceedings_cb547dd6": "Когда этого требуют применимые законы, судебные разбирательства или обязательные административные или судебные требования.",
"4_2_transfer_and_public_disclosure_383d35be": "4.2 Передача и публичное раскрытие:",
"we_do_not_transfer_your_personal_information_e3339921": "Мы не передаем вашу личную информацию какой-либо компании, организации или частному лицу и не раскрываем ее публично в коммерческих целях.",
"5_your_rights_and_data_management_08999326": "5. Ваши права и управление данными",
"under_the_personal_information_protection_law_of_94ea405e": "В соответствии с Законом о защите личной информации Китайской Народной Республики вы сохраняете контроль над своей личной информацией:",
"5_1_access_and_management_854d0793": "5.1 Доступ и управление:",
"you_may_sign_in_at_any_time_8727c5be": "Вы можете войти в систему в любое время, чтобы просмотреть свою основную личную информацию и сгенерировать, заменить или отозвать токены доступа (ключи API).",
"5_2_deletion_and_account_closure_9d1e7aba": "5.2 Удаление и закрытие аккаунта:",
"if_you_stop_using_the_service_you_24c642c6": "Если вы прекратите пользоваться услугой, вы можете запросить закрытие учетной записи. Мы незамедлительно удалим конфиденциальную информацию из активного хранилища, за исключением журналов безопасности, которые должны храниться по закону.",
"6_policy_updates_and_notices_444076f5": "6. Обновления и уведомления политики",
"this_privacy_policy_may_change_as_the_2a270464": "Эта политика конфиденциальности может меняться по мере развития сервиса или изменения действующего законодательства.",
"we_will_prominently_announce_material_changes_for_210fbd3b": "Мы будем публично объявлять о существенных изменениях, например, посредством объявлений на платформе или диалогов. Продолжение использования услуги означает принятие пересмотренной политики.",
"1_agreement_and_service_overview_511c6782": "1. Соглашение и обзор услуг",
"1_1_parties_d2bf79cd": "1.1 Стороны:",
"these_terms_of_service_the_agreement_govern_1e6754fc": "Настоящие Условия обслуживания (Соглашение) регулируют использование данной системы между вами (Пользователем или Разработчиком) и оператором этой универсальной платформы разработки (Системы или Платформы).",
"1_2_read_carefully_dfde346e": "1.2 Читайте внимательно:",
"this_system_is_a_general_purpose_full_f1d395fe": "Эта система представляет собой универсальную полнофункциональную основу для настройки, обеспечения регистрации, сеансов, интеграции OIDC, аутентификации по ключу API и администрирования. Пожалуйста, прочтите все условия перед использованием.",
"1_3_agreement_contents_f05cebc0": "1.3 Содержание Соглашения:",
"the_agreement_includes_these_terms_and_any_43e244b6": "Соглашение включает в себя настоящие условия, а также любые правила, заявления или пояснения, которые мы опубликовали или можем опубликовать. Эти правила являются неотъемлемой частью Соглашения и имеют равную юридическую силу.",
"2_service_definition_and_nature_61db87f8": "2. Определение и характер услуги",
"your_responsibility_527cbdbf": "Ваша ответственность:",
"the_entity_deploying_and_operating_a_customized_047c6a8f": "Организация, развертывающая и эксплуатирующая настроенную версию этой системы, принимает на себя всю ответственность за соблюдение требований в отношении своей деловой деятельности в других производственных средах.",
"3_registration_and_account_use_cfab1555": "3. Регистрация и использование аккаунта",
"3_1_accounts_2631c114": "3.1 Счета:",
"users_may_register_through_the_frontend_or_e527ef52": "Пользователи могут зарегистрироваться через интерфейс или связать логин через стороннего поставщика OIDC, включенного администратором.",
"3_2_password_and_token_security_80dd80d9": "3.2 Безопасность пароля и токена:",
"password_security_7a29e44e": "Безопасность пароля:",
"keep_your_account_password_secure_eb9adf10": "Держите пароль своей учетной записи в безопасности.",
"api_token_security_34af066f": "Безопасность токена API:",
"a_personal_access_token_api_key_represents_6215b3b0": "Токен личного доступа (ключ API) представляет полные разрешения API вашей учетной записи.",
"you_are_responsible_for_data_loss_or_0c9acc88": "Вы несете ответственность за потерю данных или повреждение системы в результате утечки токена, вызванной ненадлежащим хранением.",
"4_prohibited_user_conduct_bd5628b6": "4. Запрещенное поведение пользователя",
"when_using_this_system_you_must_comply_1e54356c": "При использовании этой системы вы должны соблюдать применимые законы, в том числе Закон о кибербезопасности Китайской Народной Республики и Меры по обеспечению безопасности компьютерных информационных сетей, подключенных к Интернету.",
"the_following_activities_are_strictly_prohibited_5b57de7f": "Строго запрещены следующие виды деятельности:",
"endangering_national_security_4a160c4e": "Угроза национальной безопасности:",
"opposing_constitutional_principles_endangering_national_security_disclosing_bdfb8814": "Противодействие конституционным принципам, создание угрозы национальной безопасности, разглашение государственной тайны, подрыв государственной власти или подрыв национального единства;",
"illegal_information_services_c97748bb": "Незаконные информационные услуги:",
"hacking_tools_ddos_attack_services_server_brute_686746c4": "Хакерские инструменты, услуги DDoS-атак, услуги перебора серверов или другие нелегальные информационные сервисные платформы;",
"pornography_gambling_and_drugs_fdb44a54": "Порнография, азартные игры и наркотики:",
"creating_copying_publishing_or_distributing_obscene_pornographic_ec8c0fdb": "Создание, копирование, публикация или распространение непристойного, порнографического, связанного с азартными играми, жестокого, убийственного, террористического или провоцирующего преступления контента;",
"intellectual_property_infringement_cc10b950": "Нарушение интеллектуальной собственности:",
"selling_pirated_software_or_media_illegal_game_3f0f4159": "Продажа пиратского программного обеспечения или носителей, незаконных игровых читов, неавторизованных игровых серверов, украденных учетных записей или утечки личных баз данных;",
"other_unlawful_information_4085c17c": "Другая незаконная информация:",
"spreading_rumors_promoting_cults_or_superstition_insulting_a062981a": "Распространение слухов, пропаганда культов или суеверий, оскорбление или клевета на других людей, а также нарушение их законных прав.",
"enforcement_9c7cfd68": "Правоприменение:",
"if_these_rules_are_violated_the_platform_86df3b18": "В случае нарушения этих правил оператор платформы может без предварительного уведомления ",
"permanently_suspend_your_account_block_all_access_b9f04a42": "навсегда заблокировать вашу учетную запись, заблокировать все запросы токенов доступа и передать соответствующую информацию органам общественной безопасности или кибербезопасности, как того требует закон.",
"5_disclaimer_and_force_majeure_be649f43": "5. Отказ от ответственности и форс-мажорные обстоятельства",
"5_1_general_disclaimer_30d01f0d": "5.1 Общий отказ от ответственности:",
"this_development_platform_is_provided_as_is_23bc2b55": "Эта платформа разработки предоставляется в том виде, в каком она есть и доступна. Мы не гарантируем, что он соответствует вашим конкретным потребностям разработки, и не предоставляем дополнительных гарантий своевременности, безопасности или точности.",
"5_2_service_interruptions_16558fa8": "5.2 Перебои в обслуживании:",
"the_platform_is_not_liable_for_interruptions_405b1c95": "Платформа не несет ответственности за сбои, потерю данных или повреждение учетной записи, вызванные следующими форс-мажорными обстоятельствами:",
"natural_disasters_including_typhoons_earthquakes_tsunamis_and_1bbbfb21": "Стихийные бедствия, включая тайфуны, землетрясения, цунами и наводнения;",
"government_actions_cybersecurity_law_changes_or_administrative_2b7322f5": "Действия правительства, изменения в законодательстве о кибербезопасности или административные приказы;",
"telecommunication_faults_or_damage_to_data_center_259a542f": "Сбои в телекоммуникациях или повреждение центров обработки данных или подводных кабелей;",
"data_corruption_or_downtime_caused_by_hacking_68f2e04f": "Повреждение данных или простои, вызванные взломом или программами-вымогателями.",
"6_governing_law_and_disputes_b9663c86": "6. Применимое право и споры",
"6_1_governing_law_ff2afc5e": "6.1 Применимое право:",
"the_formation_performance_interpretation_and_resolution_of_c1510775": "Формирование, ведение, толкование и разрешение споров по настоящему Соглашению регулируются ",
"the_laws_of_the_people_s_republic_5d5c80d6": "законы Китайской Народной Республики",
"excluding_the_conflict_of_laws_rules_of_b235c4e3": " (за исключением коллизионных норм Гонконга, Макао и Тайваня).",
"6_2_dispute_resolution_44e871de": "6.2 Разрешение споров:",
"disputes_should_first_be_resolved_through_friendly_1ccf4610": "Споры следует сначала разрешать путем дружеских переговоров. Если переговоры не увенчались успехом, они должны быть переданы в компетентный народный суд по месту нахождения развертывающего или оператора системы.",
"failed_to_load_value0_7f5a06a3": "Не удалось загрузить {value0}",
"load_failed_d1d04482": "Загрузка не удалась",
"no_data_497c8569": "Нет данных",
"loading_d04fcbda": "Загрузка",
"saved_e05ddf99": "Сохранено",
"save_failed_6309a3bb": "Сохранить не удалось",
"unknown_error_13a46616": "Неизвестная ошибка",
"deleted_5223f91b": "Удалено",
"delete_failed_c228558c": "Удаление не удалось",
"configuration_list_53052147": "Список конфигурации",
"confirm_delete_2d61cf17": "Подтвердить удаление?",
"this_cannot_be_undone_this_will_permanently_8c896756": "Это невозможно отменить. Это приведет к безвозвратному удалению конфигурации.",
"cancel_2cd0f3be": "Отмена",
"confirm_delete_a3ea3c17": "Подтвердить удаление",
"configuration_info_7f69a860": "Информация о конфигурации",
"select_a_configuration_to_view_details_ec4949ab": "Выберите конфигурацию, чтобы просмотреть подробности",
"updating_e1d9dd03": " Обновление",
"update_3055a035": "Сохранить",
"actions_ed31fbb4": "Действия",
"enter_password_728a7b60": "Введите пароль",
"for_your_account_security_please_enter_the_28fc0bbd": "Для безопасности вашей учетной записи введите 6-значный пароль подтверждения.",
"verifying_6c128e0a": "Проверка…",
"confirm_36f33ada": "Подтвердить",
"profile_b94d13a4": "Профиль",
"manage_your_account_information_and_preferences_cced83b4": "Управляйте информацией и настройками своей учетной записи",
"user_guide_c83b6b0a": "Руководство пользователя",
"api_integration_and_everyday_operation_guides_281269a1": "API руководства по интеграции и повседневной работе",
"system_settings_68ea5dd4": "Системные настройки",
"manage_registration_login_and_authentication_provider_security_f378ed37": "Управляйте безопасностью поставщика регистрации, входа и аутентификации.",
"global_system_configuration_1eb8931e": "Глобальная конфигурация системы",
"manage_core_platform_runtime_settings_341e4182": "Управление настройками среды выполнения базовой платформы",
"user_permissions_8e8b1d33": "Разрешения пользователя",
"view_and_manage_registered_users_and_their_db533b7c": "Просмотр и управление зарегистрированными пользователями и статусом их учетной записи",
"background_task_scheduling_408172d1": "Планирование фоновых задач",
"dispatch_and_monitor_background_and_scheduled_tasks_83967fc9": "Отправка и мониторинг фоновых и запланированных задач",
"system_logs_366ada1d": "Системные журналы",
"view_background_task_logs_and_system_status_24fd6a7d": "Просмотр журналов фоновых задач и состояния системы",
"a_modern_extensible_administration_platform_with_ready_0d95c0c1": "Современная расширяемая платформа администрирования с готовой инфраструктурой для создания корпоративных приложений.",
"get_started_715ee9dc": "Начать",
"hide_tip_738f4b27": "Скрыть подсказку",
"quick_navigation_05deefcb": "Быстрая навигация",
"open_fee3b5a5": "Открыть ",
"open_df42ebc3": "Открыть ",
"administration_console_ceb0c289": "Консоль администрирования",
"live_origin_error_page_preview_a2a12823": "Предварительный просмотр страницы ошибки в реальном времени",
"html_editor_19f0d7b7": "Редактор HTML",
"bytes_f5d87a8b": " байты",
"leave_empty_for_the_built_in_default_29ffce9f": " · Оставьте пустым для встроенного значения по умолчанию.",
"leave_empty_to_use_the_built_in_e57252bd": "Оставьте пустым, чтобы использовать встроенный шаблон по умолчанию…",
"drag_to_resize_b5154511": "Перетащите, чтобы изменить размер",
"live_preview_a76fdaad": "Предпросмотр",
"preview_13d61fea": "Предпросмотр",
"for_example_github_1061e2e4": "Например: гитхаб",
"for_example_github_login_1e0c113c": "Например: GitHub логин",
"https_or_leave_empty_a0d86d9b": "https://... или оставьте пустым",
"missing_configuration_value0_31b43fa6": "Отсутствует конфигурация: {value0}",
"missing_configuration_file_access_whitelist_6dd80936": "Отсутствует конфигурация: file_access_whitelist",
"directory_visibility_configuration_json_string_format_url_8e3c0671": "Конфигурация видимости каталога (строка JSON, формат: {url: enabled})",
"missing_configuration_login_session_ttl_hours_d6f433c2": "Отсутствует конфигурация: login_session_ttl_hours",
"server_address_d3716cc5": "Адрес сервера",
"platform_display_name_4b656edf": "Отображаемое имя платформы",
"for_example_openflare_28e07341": "Например: OpenFlare",
"for_example_https_example_com_9cf31711": "Например: https://example.com",
"allow_search_engines_to_crawl_and_index_59eff8b5": "Разрешить поисковым системам сканировать и индексировать",
"for_example_smtp_example_com_834569b4": "Например: smtp.example.com.",
"for_example_587_or_465_1bd015a5": "Например: 587 или 465.",
"for_example_sender_example_com_1795f7c6": "Например: sender@example.com",
"for_example_receiver_example_com_ade0ff8b": "Например: receiver@example.com",
"for_example_login_email_c7212e1f": "Например: login_email",
"for_example_login_verification_email_9d28f166": "Например: электронное письмо для подтверждения входа.",
"for_example_openflare_login_verification_code_0925e8d4": "Например: OpenFlare код подтверждения входа.",
"for_example_your_code_is_code_valid_44cf273f": "например Электронная почта для подтверждения. Доступная переменная: {{.Code}}",
"h3_message_title_h3_p_message_content_20c91d04": "<h3>Название сообщения</h3><p>Содержание сообщения; доступная переменная: {{.Code}}</p>",
"register_a_user_curl_x_post_https_4ae682b0": "# Register a user\ncurl -X POST https://api.example.com/api/v1/auth/register \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"username\": \"developer\",\n \"email\": \"dev@example.com\",\n \"password\": \"secure_password\"\n }'",
"quick_start_42fbb067": "# Быстрый старт",
"developer_friendly_40c2a4ce": "Дружественный к разработчикам, ",
"quick_to_integrate_18cbee8a": "быстрая интеграция",
"standard_restful_apis_complete_typescript_types_detailed_6369a0e2": "Стандартные API-интерфейсы RESTful, полные типы TypeScript, подробная документация и Swagger UI. Интегрируйтесь с помощью всего лишь нескольких строк кода на предпочитаемом вами языке.",
"restful_api_with_clear_understandable_semantics_1fa9d6f5": "RESTful API с четкой и понятной семантикой",
"openapi_swagger_documentation_ccbcbc84": "OpenAPI / Swagger документация",
"developer_friendly_typescript_type_definitions_910a7909": "Удобные для разработчиков определения типа TypeScript",
"code_samples_and_integration_guides_9e998a5a": "Примеры кода и руководства по интеграции",
"an_open_source_platform_for_managing_edge_317d8f34": "Платформа с открытым исходным кодом для управления пограничными узлами и обратными прокси. Создан на Go и React для управления узлами OpenResty, правилами веб-сайта и конфигурацией WAF.",
"product_aea82737": "Продукт",
"dashboard_0853bf3c": "Обзор",
"personal_c2952a5f": "Персональный",
"development_9ec42862": "Разработка",
"source_code_606a4e58": "Исходный код",
"community_5bcd0ddc": "Сообщество",
"discussions_3cef912c": "Обсуждения",
"privacy_policy_e464b41f": "Политика конфиденциальности",
"terms_of_service_9303687a": "Условия обслуживания",
"built_for_customization_ff3cf147": "Создан для индивидуальной настройки",
"a_modern_administration_platform_116688ff": "Современная платформа администрирования",
"ready_to_use_infrastructure_that_is_easy_77776634": "Готовая к использованию инфраструктура, которую легко расширить для корпоративных приложений.",
"get_started_d1f9c450": "Начать",
"learn_more_ca66c2da": "Узнать больше",
"ready_to_use_c58cfea2": "Готов к использованию",
"highly_extensible_9dfa6c10": "Высокая расширяемость",
"production_infrastructure_08c3a5e6": "Производственная инфраструктура",
"good_fortune_b3541887": "Удача",
"retry_b8784c8d": "Повторить",
"an_unknown_error_occurred_please_try_again_79a9f98a": "Произошла неизвестная ошибка. Пожалуйста, повторите попытку позже.",
"view_error_details_9e7e4e37": "Просмотр сведений об ошибке",
"unknown_error_e83a8ca8": "Неизвестная ошибка",
"fetching_data_9ac5e428": "Получение данных...",
"type_and_press_enter_to_add_e30b7b5f": "Введите и нажмите Enter, чтобы добавить",
"remove_value0_30c2158a": "Удалить {value0}",
"fnv_1a_32_bit_function_fnv1a_str_a1690b96": "\n// FNV-1a 32-bit\nfunction fnv1a(str) {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h;\n}\nfunction fnv1aResume(state, str) {\n let h = state >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h;\n}\n\n// xorshift32 PRNG → hex string\nfunction prngFromHash(seed, len) {\n let s = seed >>> 0, r = '';\n while (r.length < len) {\n s ^= (s << 13) >>> 0;\n s ^= (s >>> 17) >>> 0;\n s ^= (s << 5) >>> 0;\n s = s >>> 0;\n r += s.toString(16).padStart(8, '0');\n }\n return r.slice(0, len);\n}\n\n// SHA-256 via SubtleCrypto (available in workers)\nasync function sha256Hex(input) {\n const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(input));\n return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');\n}\n\n// Solve one puzzle\nasync function solvePuzzle(token, index, size, difficulty) {\n const tFnv = fnv1a(token);\n const saltSeed = fnv1aResume(tFnv, String(index + 1));\n const targetSeed = fnv1aResume(saltSeed, 'd');\n const salt = prngFromHash(saltSeed, size);\n const target = prngFromHash(targetSeed, difficulty);\n\n for (let nonce = 0; nonce < 10_000_000; nonce++) {\n if ((await sha256Hex(salt + nonce)).startsWith(target)) return nonce;\n }\n throw new Error('Could not solve puzzle ' + (index + 1) + ' within the allowed search range');\n}\n\n// Entry point — receive task from main thread\nself.onmessage = async ({ data }) => {\n const { token, count, size, difficulty } = data;\n try {\n const t0 = performance.now();\n const solutions = [];\n for (let i = 0; i < count; i++) {\n solutions.push(await solvePuzzle(token, i, size, difficulty));\n }\n const elapsed = ((performance.now() - t0) / 1000).toFixed(3);\n self.postMessage({ type: 'done', solutions, elapsed });\n } catch (err) {\n self.postMessage({ type: 'error', message: err.message });\n }\n};\n",
"worker_execution_failed_1877e35b": "Ошибка выполнения воркера",
"failed_to_fetch_the_verification_challenge_95553133": "Не удалось получить запрос на проверку.",
"cap_starting_verification_pow_solver_657f3af5": "[Шапка] Запускаем верификацию PoW решателя",
"challenge_count_value0_ea1ffc80": " Количество испытаний: {value0}",
"difficulty_value0_f104cb0d": " Сложность: {value0}",
"salt_size_value0_4f2bae5d": " Размер соли: {value0}",
"cap_verification_pow_solver_completed_e1f79fd5": "[Cap] Проверка решателя PoW завершена",
"worker_duration_value0_s_8de32777": " Продолжительность рабочего: {value0}s",
"total_duration_including_communication_value0_s_004a6894": " Общая продолжительность (включая общение): {value0}s",
"verification_failed_d3925ab2": "Проверка не удалась",
"doctype_html_html_lang_en_head_meta_3e4f5ecb": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: #f4f3ef;\n color: #121212;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n }\n\n .bauhaus-card {\n width: 100%;\n max-width: 580px;\n background: #ffffff;\n border: 3px solid #121212;\n box-shadow: 8px 8px 0px #121212;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .card-accent-bar {\n height: 12px;\n display: flex;\n }\n\n .accent-red { flex: 2; background-color: #e63946; }\n .accent-blue { flex: 3; background-color: #1d3557; }\n .accent-yellow { flex: 1; background-color: #f1faee; }\n\n .card-body {\n padding: 40px 32px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .tag {\n align-self: flex-start;\n background-color: #121212;\n color: #ffffff;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n padding: 4px 10px;\n }\n\n .title {\n font-size: 28px;\n font-weight: 800;\n line-height: 1.2;\n letter-spacing: -0.02em;\n }\n\n .message {\n font-size: 15px;\n line-height: 1.6;\n color: #4a4a4a;\n }\n\n .contact-box {\n border: 2px solid #121212;\n background-color: #f9f8f3;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .contact-line {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 14px;\n font-weight: 600;\n }\n\n .contact-line a {\n color: #e63946;\n text-decoration: none;\n font-weight: 700;\n }\n\n .contact-line a:hover {\n text-decoration: underline;\n }\n\n .card-footer {\n border-top: 2px solid #121212;\n padding: 16px 32px;\n background-color: #faf9f6;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.05em;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .brand-icon {\n width: 16px;\n height: 16px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"bauhaus-card\">\n <div class=\"card-accent-bar\">\n <div class=\"accent-red\"></div>\n <div class=\"accent-blue\"></div>\n <div class=\"accent-yellow\"></div>\n </div>\n <div class=\"card-body\">\n <div class=\"tag\">РЕЗЕРВНАЯ СТРАНИЦА</div>\n <h1 class=\"title\">Сайт недоступен</h1>\n <p class=\"message\">\n Сервер-источник временно недоступен. Этот запрос обработан Service Worker в автономном режиме. Свяжитесь с администратором по контактам ниже.\n </p>\n <div class=\"contact-box\">\n <div class=\"contact-line\">\n <span>Почта администратора</span>\n <a href=\"mailto:admin@example.com\">admin@example.com</a>\n </div>\n <div class=\"contact-line\">\n <span>Состояние сервиса</span>\n <a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a>\n </div>\n </div>\n </div>\n <div class=\"card-footer\">\n <div class=\"brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Service Worker</span>\n </div>\n <span>БЕЗ СЕТИ</span>\n </div>\n</div>\n</body>\n</html>\n",
"minimal_white_5636e8a9": "Минимализм",
"line_topology_22ad450c": "Схема соединений",
"bauhaus_5cc69781": "Bauhaus",
"doctype_html_html_lang_en_head_meta_42a4f2da": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :root {\n --color-bg: #fcfcfc;\n --color-line: #e0e0e0;\n --color-line-hover: #1a1a1a;\n --color-text-main: #1a1a1a;\n --color-text-sub: #666666;\n --color-text-muted: #999999;\n --color-accent: #d4d4d4;\n --font-geo: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n body {\n font-family: var(--font-geo);\n background-color: var(--color-bg);\n background-image: radial-gradient(circle, var(--color-accent) 0.8px, transparent 0.8px);\n background-size: 24px 24px;\n color: var(--color-text-main);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n letter-spacing: 0.01em;\n }\n\n .main-container {\n width: 100%;\n max-width: 640px;\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n\n .line-box {\n border: 1px solid var(--color-line);\n background: rgba(255, 255, 255, 0.7);\n backdrop-filter: blur(4px);\n padding: 32px;\n transition: all var(--transition-fast);\n position: relative;\n }\n\n .line-box:hover {\n border-color: var(--color-line-hover);\n box-shadow: 0 0 0 1px var(--color-line-hover);\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: var(--color-text-sub);\n margin-bottom: 12px;\n }\n\n .status-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #f59e0b;\n }\n\n .title {\n font-size: 24px;\n font-weight: 700;\n letter-spacing: -0.02em;\n margin-bottom: 12px;\n }\n\n .description {\n font-size: 14px;\n line-height: 1.6;\n color: var(--color-text-sub);\n margin-bottom: 24px;\n }\n\n .contact-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n border-top: 1px dashed var(--color-line);\n padding-top: 20px;\n }\n\n .contact-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 13px;\n }\n\n .contact-label {\n color: var(--color-text-muted);\n font-size: 12px;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n }\n\n .contact-value a {\n color: var(--color-text-main);\n font-weight: 600;\n text-decoration: none;\n border-bottom: 1px solid var(--color-line);\n transition: border-color var(--transition-fast);\n }\n\n .contact-value a:hover {\n border-color: var(--color-text-main);\n }\n\n .footer-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 11px;\n color: var(--color-text-muted);\n letter-spacing: 0.05em;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: var(--color-text-main);\n }\n\n .brand-icon {\n width: 14px;\n height: 14px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"main-container\">\n <div class=\"line-box\">\n <div class=\"status-badge\">\n <span class=\"status-dot\"></span>\n SERVICE WORKER НЕТ СЕТИ CACHE\n </div>\n <h1 class=\"title\">Сеть прервана или источник недоступен</h1>\n <p class=\"description\">\n Резервная защита Service Worker активна. Свяжитесь с администратором по следующим каналам:\n </p>\n <div class=\"contact-list\">\n <div class=\"contact-row\">\n <span class=\"contact-label\">Поддержка по электронной почте</span>\n <span class=\"contact-value\"><a href=\"mailto:admin@example.com\">admin@example.com</a></span>\n </div>\n <div class=\"contact-row\">\n <span class=\"contact-label\">Страница статуса</span>\n <span class=\"contact-value\"><a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a></span>\n </div>\n </div>\n </div>\n <div class=\"footer-bar\">\n <div class=\"brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Край</span>\n </div>\n <span>FALLBACK ACTIVE</span>\n </div>\n</div>\n</body>\n</html>\n",
"doctype_html_html_lang_en_head_meta_505c1308": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: #ffffff;\n color: #333333;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 48px 24px;\n }\n .container {\n max-width: 560px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n }\n .badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 9999px;\n background-color: #f3f4f6;\n color: #4b5563;\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.05em;\n }\n .title {\n font-size: 32px;\n font-weight: 700;\n color: #111827;\n line-height: 1.25;\n }\n .description {\n font-size: 15px;\n line-height: 1.6;\n color: #6b7280;\n max-width: 480px;\n }\n .contact-card {\n width: 100%;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n text-align: left;\n }\n .contact-item {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 14px;\n color: #374151;\n }\n .contact-item svg {\n width: 18px;\n height: 18px;\n color: #6b7280;\n flex-shrink: 0;\n }\n .contact-item a {\n color: #2563eb;\n text-decoration: none;\n }\n .contact-item a:hover {\n text-decoration: underline;\n }\n .footer {\n margin-top: 32px;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #9ca3af;\n font-size: 13px;\n }\n .brand-icon {\n width: 20px;\n height: 20px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"container\">\n <div class=\"badge\">НЕТ СЕТИ CONTACT</div>\n <h1 class=\"title\">Сайт недоступен: свяжитесь с администратором</h1>\n <p class=\"description\">\n Источник в настоящее время недоступен. Автономная защита Service Worker активна. Свяжитесь с администратором по контактам ниже.\n </p>\n <div class=\"contact-card\">\n <div class=\"contact-item\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"></path></svg>\n <span>Контактный адрес электронной почты: <a href=\"mailto:admin@example.com\">admin@example.com</a></span>\n </div>\n <div class=\"contact-item\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\"></path></svg>\n <span>Состояние сервиса: <a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a></span>\n </div>\n </div>\n <div class=\"footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Защита</span>\n </div>\n</div>\n</body>\n</html>\n",
"status_code_tag_must_not_be_empty_21235ebf": "Тег кода статуса не должен быть пустым.",
"invalid_status_code_range_value0_8983e96e": "Неверный диапазон кода состояния: {value0}",
"invalid_status_code_value0_0f206e48": "Неверный код статуса: {value0}",
"status_code_range_endpoints_are_reversed_value0_d92c2784": "Конечные точки диапазона кода состояния поменяны местами: {value0}",
"status_code_must_be_between_value0_value1_c5b04822": "Код состояния должен находиться в диапазоне {value0}–{value1}: {value2}",
"invalid_status_code_tag_d16e85d7": "Неверный тег кода состояния",
"add_at_least_one_status_code_tag_b81b2696": "Добавьте хотя бы один тег кода статуса.",
"the_expanded_status_code_list_is_empty_47245f34": "Расширенный список кодов состояния пуст.",
"request_canceled_5892f9b1": "Запрос отменен",
"insufficient_permissions_complete_verification_and_try_again_73719073": "Недостаточно разрешений; завершите проверку и повторите попытку",
"the_requested_resource_was_not_found_aecc0681": "Запрошенный ресурс не найден",
"request_parameter_validation_failed_60ef7c51": "Проверка параметров запроса не удалась",
"too_many_requests_retry_in_value0_seconds_ab5e78f1": "Слишком много запросов. Повторите через {value0, plural, one {# секунду} few {# секунды} many {# секунд} other {# секунды}}.",
"request_rate_limit_ad4f0f8b": "Ограничение скорости запроса",
"internal_server_error_try_again_later_4f0dd7e9": "Внутренняя ошибка сервера; попробуйте еще раз позже",
"cannot_connect_to_the_server_check_that_5551f4fc": "Невозможно подключиться к серверу; проверьте, что бэкэнд работает",
"network_request_failed_8407ceab": "Сетевой запрос не выполнен",
"request_canceled_manually_7ba622e6": "Запрос отменен вручную",
"all_requests_canceled_72f8fa9a": "Все запросы отменены",
"network_connection_failed_check_your_network_cbf47b07": "Сетевое соединение не удалось; проверьте свою сеть",
"request_timed_out_try_again_later_6c3465f6": "Время запроса истекло; попробуйте еще раз позже",
"unauthorized_sign_in_first_466879f5": "Несанкционированный; сначала войдите в систему",
"insufficient_permissions_5e3c8a26": "Недостаточно разрешений",
"value0_must_be_a_valid_number_1d79f887": "{value0}: укажите корректное число",
"value0_must_be_true_or_false_23cce68e": "{value0}: допустимы только true или false",
"value0_must_not_be_empty_8bf3a929": "{value0} не должно быть пустым",
"request_canceled_282c4cfb": "Запрос отменен",
"base64_encoding_is_not_supported_in_this_7642d848": "Кодировка Base64 не поддерживается в этой среде.",
"rate_limit_retry_later": "Слишком много запросов; попробуйте еще раз позже",
"list_separator": ", ",
"sentence_end": ".",
"task_notification_template_example": "{\"title\":\"Задача завершена\",\"content\":\"{{task_name}}: {{task_status}}\",\"level\":\"INFO\"}",
"ui_totalRequests": "Всего запросов",
"ui_totalVisits": "Всего посещений",
"ui_bandwidthServed": "Передано данных",
"ui_requestsOverTime": "Динамика запросов",
"ui_requestsByDevice": "Запросы по типам устройств",
"ui_statusCodes": "Коды ответа",
"ui_topPaths": "Популярные пути",
"ui_topHosts": "Популярные хосты",
"ui_topIps": "Популярные IP-адреса",
"ui_topBrowsers": "Популярные браузеры",
"ui_topOperatingSystems": "Операционные системы",
"ui_topUserAgents": "Популярные User-Agent",
"ui_deviceTypes": "Типы устройств",
"ui_fileHash": "Хэш (SHA-256)",
"ui_pathStyle": "Адресация через путь (Path Style)",
"ui_requestHeaders": "Заголовки запроса",
"ui_barkApp": "Приложение Bark",
"ui_administrator": "Администратор",
"ui_nodeLabel": "Узел:",
"ui_payload": "Параметры задачи",
"ui_selectAll": "Выбрать всё",
"ui_production": "Рабочая версия",
"ui_allDeployments": "Все развёртывания",
"ui_remoteUrl": "URL архива",
"ui_githubRelease": "Релиз GitHub",
"ui_releaseTag": "Тег релиза",
"ui_originHostHeader": "Заголовок Host сервера-источника",
"ui_globalRuleGroup": "Глобальная группа правил",
"ui_zone": "Зона DNS",
"ui_pageNotFound": "Страница не найдена",
"ui_jsonBody": "Тело JSON",
"ui_openTelemetryTracing": "Трассировка OpenTelemetry:",
"ui_clientId": "ID клиента",
"ui_clientSecret": "Секрет клиента",
"ui_scopes": "Области доступа",
"ui_copyright": "© 2026 Modern Platform. Все права защищены.",
"ui_technologyStack": "Технологии",
"ui_readyFor": "Готово к",
"ui_development": "Разработке",
"ui_features": "Возможности",
"ui_modern": "Современный",
"ui_versionLabel": "Версия",
"ui_builtAt": "Дата сборки",
"ui_breadcrumb": "Навигационная цепочка",
"ui_more": "Ещё",
"ui_previousSlide": "Предыдущий слайд",
"ui_nextSlide": "Следующий слайд",
"ui_closeLabel": "Закрыть",
"ui_imageCrop": "Обрезка изображения",
"ui_pagination": "Страницы",
"ui_previousPage": "Предыдущая страница",
"ui_previousLabel": "Назад",
"ui_nextPage": "Следующая страница",
"ui_nextLabel": "Далее",
"ui_morePages": "Другие страницы",
"ui_sidebarLabel": "Боковая панель",
"ui_mobileSidebarDescription": "Меню навигации на мобильных устройствах.",
"ui_toggleSidebar": "Переключить боковую панель",
"ui_loadingLabel": "Загрузка",
"origin_error_page_minimalist": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n background-color: #ffffff;\n color: #333333;\n height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .container {\n max-width: 600px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n }\n\n .error-code {\n font-size: 48px;\n font-weight: 700;\n color: #333333;\n line-height: 1.2;\n letter-spacing: -0.02em;\n }\n\n .error-description {\n font-size: 20px;\n line-height: 1.6;\n color: #666666;\n max-width: 480px;\n }\n\n .host {\n font-size: 14px;\n color: #999999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n word-break: break-all;\n }\n\n .footer {\n margin-top: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n color: #999999;\n font-size: 14px;\n font-weight: 500;\n }\n\n .brand-icon {\n width: 24px;\n height: 24px;\n fill: currentColor;\n display: block;\n }\n\n @media (max-width: 480px) {\n .error-code {\n font-size: 36px;\n }\n\n .error-description {\n font-size: 18px;\n }\n }\n </style>\n</head>\n<body>\n<div class=\"container\">\n <h1 class=\"error-code\" aria-label=\"Код HTTP\">{{status}}</h1>\n <p class=\"error-description\">\n Сервер-источник недоступен. Попробуйте позже. Если проблема повторяется, обратитесь к администратору сайта.\n </p>\n <p class=\"host\">{{host}}</p>\n <div class=\"footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare</span>\n </div>\n</div>\n</body>\n</html>\n",
"origin_error_page_line_style": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :root {\n --color-bg: #fcfcfc;\n --color-line: #e0e0e0;\n --color-line-hover: #1a1a1a;\n --color-text-main: #1a1a1a;\n --color-text-sub: #666666;\n --color-text-muted: #999999;\n --color-accent: #d4d4d4;\n --font-geo: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n body {\n font-family: var(--font-geo);\n background-color: var(--color-bg);\n background-image: radial-gradient(circle, var(--color-accent) 0.8px, transparent 0.8px);\n background-size: 24px 24px;\n color: var(--color-text-main);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: 0.01em;\n }\n\n .main-container {\n width: 100%;\n max-width: 640px;\n display: flex;\n flex-direction: column;\n gap: 48px;\n }\n\n .line-box {\n border: 1px solid var(--color-line);\n background: rgba(255, 255, 255, 0.6);\n backdrop-filter: blur(4px);\n padding: 32px;\n transition: all var(--transition-fast);\n position: relative;\n }\n\n .line-box:hover {\n border-color: var(--color-line-hover);\n box-shadow: 0 0 0 1px var(--color-line-hover);\n }\n\n .line-box:active {\n transform: scale(0.995);\n transition-duration: 100ms;\n }\n\n .error-header {\n text-align: center;\n }\n\n .error-code {\n font-size: 64px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.03em;\n color: var(--color-text-main);\n margin-bottom: 12px;\n }\n\n .error-label {\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n color: var(--color-text-sub);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n }\n\n .error-label::before,\n .error-label::after {\n content: '';\n width: 24px;\n height: 1px;\n background-color: var(--color-line);\n }\n\n .topology-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .topology-svg {\n width: 100%;\n height: 140px;\n display: block;\n }\n\n .node-circle {\n fill: var(--color-bg);\n stroke: var(--color-text-main);\n stroke-width: 1.5;\n transition: all var(--transition-fast);\n }\n\n .node-circle.error {\n stroke: var(--color-text-muted);\n stroke-dasharray: 3 3;\n }\n\n .flow-line {\n stroke: var(--color-accent);\n stroke-width: 1.5;\n fill: none;\n transition: stroke var(--transition-fast);\n }\n\n .flow-line.error {\n stroke: var(--color-text-muted);\n stroke-dasharray: 4 4;\n }\n\n .node-text {\n font-family: var(--font-geo);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.1em;\n fill: var(--color-text-sub);\n text-anchor: middle;\n }\n\n .status-text {\n font-family: var(--font-geo);\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.05em;\n fill: var(--color-text-muted);\n text-anchor: middle;\n }\n\n .status-text.error {\n fill: #b0b0b0;\n }\n\n .description {\n text-align: center;\n }\n\n .desc-text {\n font-size: 18px;\n line-height: 1.6;\n color: var(--color-text-sub);\n font-weight: 400;\n max-width: 480px;\n margin: 0 auto 24px;\n }\n\n .meta-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n border-top: 1px solid var(--color-line);\n padding-top: 24px;\n text-align: left;\n }\n\n .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .meta-key {\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--color-text-muted);\n }\n\n .meta-val {\n font-size: 13px;\n font-family: 'SF Mono', 'Fira Code', monospace, var(--font-geo);\n color: var(--color-text-main);\n font-weight: 500;\n word-break: break-all;\n }\n\n .footer-brand {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n color: var(--color-text-muted);\n font-size: 13px;\n font-weight: 500;\n letter-spacing: 0.05em;\n transition: color var(--transition-fast);\n cursor: default;\n }\n\n .footer-brand:hover {\n color: var(--color-text-main);\n }\n\n .brand-icon {\n width: 20px;\n height: 20px;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n fill: none;\n }\n\n @media (max-width: 480px) {\n body {\n padding: 32px 16px;\n }\n .error-code {\n font-size: 48px;\n }\n .line-box {\n padding: 24px 16px;\n }\n .meta-grid {\n grid-template-columns: 1fr;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"main-container\">\n <div class=\"line-box error-header\">\n <div class=\"error-code\" aria-label=\"Код HTTP\">{{status}}</div>\n <div class=\"error-label\">Сервер-источник недоступен</div>\n </div>\n\n <div class=\"line-box topology-wrapper\">\n <svg class=\"topology-svg\" viewBox=\"0 0 600 140\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 8 5 L 0 9 z\" fill=\"#d4d4d4\" />\n </marker>\n <marker id=\"arrow-error\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 8 5 L 0 9 z\" fill=\"#999999\" />\n </marker>\n </defs>\n\n <line x1=\"135\" y1=\"70\" x2=\"265\" y2=\"70\" class=\"flow-line\" marker-end=\"url(#arrow)\" />\n <line x1=\"335\" y1=\"70\" x2=\"465\" y2=\"70\" class=\"flow-line error\" marker-end=\"url(#arrow-error)\" />\n\n <circle cx=\"110\" cy=\"70\" r=\"20\" class=\"node-circle\" />\n <text x=\"110\" y=\"74\" class=\"node-text\" style=\"font-size: 8px; fill: #1a1a1a;\">CLI</text>\n <text x=\"110\" y=\"115\" class=\"node-text\">КЛИЕНТ</text>\n <text x=\"110\" y=\"130\" class=\"status-text\">ЗАПРОС ОТПРАВЛЕН</text>\n\n <circle cx=\"300\" cy=\"70\" r=\"20\" class=\"node-circle\" />\n <path d=\"M296 70 L304 64 L301 70 L305 70 L296 76 L299 70 Z\" fill=\"none\" stroke=\"#1a1a1a\" stroke-width=\"1\" stroke-linejoin=\"round\"/>\n <text x=\"300\" y=\"115\" class=\"node-text\">OPENFLARE</text>\n <text x=\"300\" y=\"130\" class=\"status-text\">ПРОКСИ</text>\n\n <circle cx=\"490\" cy=\"70\" r=\"20\" class=\"node-circle error\" />\n <line x1=\"484\" y1=\"64\" x2=\"496\" y2=\"76\" stroke=\"#999\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <line x1=\"496\" y1=\"64\" x2=\"484\" y2=\"76\" stroke=\"#999\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <text x=\"490\" y=\"115\" class=\"node-text\" style=\"fill: #999;\">ИСТОЧНИК</text>\n <text x=\"490\" y=\"130\" class=\"status-text error\">НЕДОСТУПЕН</text>\n </svg>\n </div>\n\n <div class=\"footer-brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n </svg>\n <span>OpenFlare</span>\n </div>\n </div>\n\n <script>\n document.addEventListener('DOMContentLoaded', () => {\n const tsEl = document.getElementById('timestamp');\n if (tsEl) {\n const now = new Date();\n tsEl.textContent = now.toISOString().replace('T', ' ').substring(0, 19) + ' UTC';\n }\n });\n </script>\n</body>\n</html>\n",
"origin_error_page_baohaus": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n :root {\n --color-red: #E53935;\n --color-yellow: #FDD835;\n --color-blue: #1E88E5;\n --color-black: #212121;\n --color-white: #FAFAFA;\n --color-grey: #9E9E9E;\n --font-primary: 'Futura', 'Century Gothic', 'Tw Cen MT', sans-serif;\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n background-color: var(--color-white);\n color: var(--color-black);\n font-family: var(--font-primary);\n min-height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow-x: hidden;\n }\n\n body::before {\n content: \"\";\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: radial-gradient(var(--color-grey) 1px, transparent 1px);\n background-size: 20px 20px;\n opacity: 0.15;\n z-index: -1;\n pointer-events: none;\n }\n\n .layout-container {\n display: grid;\n grid-template-columns: 1fr 1.618fr;\n grid-template-rows: 1fr 1fr;\n min-height: 100vh;\n width: 100%;\n }\n\n .zone-left {\n grid-column: 1 / 2;\n grid-row: 1 / 3;\n border-right: 4px solid var(--color-black);\n border-bottom: 4px solid var(--color-black);\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: var(--color-white);\n padding: 2rem;\n z-index: 2;\n }\n\n .decor-circle {\n position: absolute;\n width: 40vh;\n height: 40vh;\n background-color: var(--color-yellow);\n border-radius: 50%;\n top: 15%;\n left: 10%;\n z-index: 1;\n }\n\n .error-number {\n font-size: clamp(6rem, 12vw, 14rem);\n font-weight: 700;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: var(--color-black);\n position: relative;\n z-index: 2;\n }\n\n .brand-footer {\n position: absolute;\n bottom: 2rem;\n left: 2rem;\n display: flex;\n align-items: center;\n gap: 10px;\n z-index: 3;\n }\n\n .brand-icon {\n width: 24px;\n height: 24px;\n fill: var(--color-black);\n }\n\n .brand-text {\n font-size: 0.85rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.15em;\n }\n\n .zone-top-right {\n grid-column: 2 / 3;\n grid-row: 1 / 2;\n border-bottom: 4px solid var(--color-black);\n background-color: var(--color-white);\n padding: 4rem;\n display: flex;\n flex-direction: column;\n justify-content: center;\n z-index: 2;\n }\n\n .error-title {\n font-size: clamp(1.5rem, 3vw, 2.5rem);\n text-transform: uppercase;\n font-weight: 700;\n margin-bottom: 1.5rem;\n letter-spacing: 0.05em;\n }\n\n .error-desc {\n font-size: 1.1rem;\n line-height: 1.6;\n max-width: 450px;\n color: var(--color-black);\n }\n\n .meta-data {\n margin-top: 2rem;\n font-family: monospace;\n font-size: 0.8rem;\n color: var(--color-grey);\n border-top: 1px solid var(--color-grey);\n padding-top: 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n word-break: break-all;\n }\n\n .zone-bottom-right {\n grid-column: 2 / 3;\n grid-row: 2 / 3;\n background-color: var(--color-white);\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n }\n\n .geo-line {\n position: absolute;\n width: 100%;\n height: 3px;\n background-color: var(--color-black);\n top: 50%;\n left: 0;\n }\n\n .geo-triangle {\n position: absolute;\n right: 15%;\n bottom: 15%;\n width: 0;\n height: 0;\n border-left: 80px solid transparent;\n border-right: 80px solid transparent;\n border-bottom: 140px solid var(--color-blue);\n }\n\n .geo-rect {\n position: absolute;\n top: 40%;\n left: 20%;\n width: 150px;\n height: 30px;\n background-color: var(--color-red);\n transform: rotate(-45deg);\n }\n\n @media (max-width: 900px) {\n .layout-container {\n display: flex;\n flex-direction: column;\n }\n\n .zone-left {\n border-right: none;\n border-bottom: 4px solid var(--color-black);\n min-height: 50vh;\n padding-top: 4rem;\n }\n\n .decor-circle {\n width: 30vh;\n height: 30vh;\n top: 10%;\n }\n\n .zone-top-right {\n border-bottom: 4px solid var(--color-black);\n padding: 2rem;\n }\n\n .zone-bottom-right {\n min-height: 30vh;\n }\n\n .geo-triangle {\n border-left-width: 50px;\n border-right-width: 50px;\n border-bottom-width: 90px;\n right: 10%;\n }\n\n .geo-rect {\n width: 100px;\n height: 20px;\n left: 15%;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"layout-container\">\n <div class=\"zone-left\">\n <div class=\"decor-circle\"></div>\n <div class=\"error-number\" aria-label=\"Код HTTP\">{{status}}</div>\n\n <div class=\"brand-footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"/>\n </svg>\n <span class=\"brand-text\">OpenFlare</span>\n </div>\n </div>\n\n <div class=\"zone-top-right\">\n <h1 class=\"error-title\">Сервер-источник недоступен</h1>\n <p class=\"error-desc\">\n Сервер получил некорректный ответ от сервера-источника.\n <br><br>\n <strong>Форма следует функции:</strong> Соединение прервано. Проверьте состояние сервера-источника.\n </p>\n <div class=\"meta-data\">\n <div>КОД: {{status}}</div>\n <div>ХОСТ: {{host}}</div>\n <div>ПРОКСИ: OPENFLARE_EDGE</div>\n <div id=\"timestamp\">--:--:-- UTC</div>\n </div>\n </div>\n\n <div class=\"zone-bottom-right\">\n <div class=\"geo-line\"></div>\n <div class=\"geo-rect\"></div>\n <div class=\"geo-triangle\"></div>\n </div>\n </div>\n\n <script>\n document.addEventListener('DOMContentLoaded', () => {\n const tsElement = document.getElementById('timestamp');\n if (tsElement) {\n const now = new Date();\n tsElement.textContent = now.toISOString().split('T')[1].split('.')[0] + ' UTC';\n }\n });\n </script>\n</body>\n</html>\n",
"ui_accountId": "ID учётной записи",
"ui_endpointLabel": "Адрес сервиса",
"ui_regionLabel": "Регион",
"ui_bucketLabel": "Бакет",
"ui_accessKeyId": "ID ключа доступа",
"ui_secretAccessKey": "Секретный ключ доступа",
"ui_isoCode": "Код ISO",
"ui_serverUrl": "URL сервера",
"ui_commandPalette": "Палитра команд",
"ui_commandSearch": "Найти команду…",
"ui_botLabel": "Бот",
"ui_unknownLabel": "Неизвестно",
"ui_otherLabel": "Прочее",
"ui_toastRegion": "Уведомления",
"ui_closeToast": "Закрыть уведомление",
"node_type_edge": "Пограничный узел",
"node_type_relay": "Ретранслятор",
"node_type_tunnel": "Туннель",
"system_metric_day": "{count} дн.",
"system_metric_hour": "{count} ч",
"system_metric_minute": "{count} мин",
"system_metric_second": "{count} с",
"system_metric_unknown": "Неизвестно",
"system_metric_none": "Нет"
}
}