PageSourceSearch

https://catellix.com/static/js/detector-i18n.js?v=50&_cb=1789769345

js catellix.com collected 2026-09-24 12:57:01 UTC 134,764 bytes, 2,366 lines download raw bytes

1/**
2 * Catellix Detector — i18n (PT padrão · EN).
3 * Chaves: detectorT('chave') ou data-i18n no HTML.
4 */
5(function (global) {
6    var STORAGE_KEY = 'detector_locale';
7    var ALLOWED = { pt: true, en: true };
8
9    var PACKS = {
10        pt: {},
11        en: {},
12    };
13
14    function merge(into, obj) {
15        for (var k in obj) {
16            if (Object.prototype.hasOwnProperty.call(obj, k)) into[k] = obj[k];
17        }
18    }
19
20    /* ── Strings PT (revisão pt-BR onde faz sentido) ── */
21    merge(PACKS.pt, {
22        meta_description:
23            'Histórico de 7 dias dos principais serviços da rede mundial — Catellix Detector.',
24        page_title: 'Catellix Detector — Histórico 7 dias',
25
26        nav_quick_actions: 'Ações rápidas do Detector',
27        nav_mascote_aria: 'Ver vídeo do mascote Catellix',
28        nav_report: 'Clique aqui para reportar',
29        locale_switch_aria: 'Idioma: Português ou English',
30        theme_goto_dark: 'Ativar tema escuro',
31        theme_goto_light: 'Ativar tema claro',
32
33        back_home: '← Voltar à página inicial',
34        back_home_aria: 'Voltar à página inicial da Catellix (catellix.com)',
35
36        sidebar_complaints_title: 'Top 10 reclamações',
37        sidebar_complaints_window: 'Janela',
38        sidebar_rank_live: 'Live',
39        sidebar_rank_live_title:
40            'Atualização automática: o ranking volta a pedir dados ao servidor a cada ~75 s (relatos + sinais agregados).',
41        sidebar_complaints_loading: 'Carregando…',
42        sidebar_complaints_aria: 'Serviços com mais relatos da comunidade',
43        sidebar_ad_slots_title: 'Apoie o Projeto',
44        sidebar_ad_slots_lead:
45            'Contribua com o Catellix Detector e tenha o seu logo em destaque com link direto na nossa página principal.',
46        ad_right_mobile_badge:
47            'Faixa premium — na versão mobile é a ÚNICA propaganda que aparece, fixada no topo e passando em destaque contínuo!',
48        sidebar_ad_slots_scroll_hint: 'Passe o rato sobre a faixa para pausar a animação.',
49        sidebar_ad_slots_reduced_hint: 'Slots estáticos (animação reduzida pelo sistema).',
50        sidebar_ad_slots_carousel_aria: 'Logos de apoiadores do Catellix Detector',
51        sidebar_ad_slots_count_tpl: '{avail}/{total} espaços disponíveis',
52        sidebar_ad_slots_count_caption: 'Vagas na faixa de destaque',
53        sidebar_ad_slots_count_hint_tpl: '{avail} livres · {total} espaços no total',
54        sidebar_ad_slots_count_sr_tpl: '{avail} lugares livres em {total} espaços na faixa de destaque.',
55        sidebar_ad_slots_micro_add_aria: 'Abrir contribuição para publicar o seu logo',
56        sidebar_spotlight_campaign_badge_tpl: '{n}d',
57        det_local_ad_img_alt: 'Logo do apoiador',
58        det_local_ad_cta: 'Visitar o projeto',
59        det_local_ad_close_aria: 'Fechar',
60        det_local_ad_countdown_tpl: 'Fecha em {s}s',
61        det_support_3d_title: 'Deseja apoiar?',
62        det_support_3d_sub: 'Projeto aberto à comunidade — contribua e publique o seu logo.',
63        det_support_3d_cta: 'Contribuir / Publicar logo',
64        det_topbar_dismiss_aria: 'Fechar publicidade',
65        ad_pack_kicker: 'Catellix Detector · Apoiadores',
66        ad_pack_headline: 'Contribua com o projeto e publique o seu logo aqui!',
67        ad_pack_base_note_tpl:
68            'Esta faixa premium: {dayrate} por dia. Desconto gradual: quanto mais dias, maior o desconto (até −20% em {days} dias). Ex.: {days} dias de {full30} por {final30}.',
69        ad_pack_left_strip_notice:
70            'Dica: na faixa à esquerda há anúncios a partir de R$ 10/dia. Esta janela é para a faixa premium à direita (R$ 20/dia).',
71        ad_pack_right_strip_notice:
72            'Dica: na faixa premium à direita há posições por R$ 20/dia. Esta janela é para a faixa à esquerda (R$ 10/dia).',
73        ad_pack_table_title: 'Valores de referência',
74        ad_pack_th_days: 'Dias',
75        ad_pack_th_price: 'Contribuição',
76        ad_pack_days_label: 'Dias em destaque',
77        ad_pack_email_label: 'E-mail (relatório ao fim do período)',
78        ad_pack_foot_lead:
79            'A sua contribuição reforça sondas, monitorização de aplicações e o Detector aberto à comunidade. História completa e transparência no site.',
80        ad_pack_quem_somos_btn: 'Quem somos — ver completo',
81        ad_pack_quem_somos_aria: 'Quem somos — abrir página completa no site Catellix (nova janela)',
82        ad_pack_price_promo_badge: 'Desconto especial -20%',
83        ad_pack_cancel: 'Fechar',
84        ad_pack_pay_mp: 'Mercado Pago (cartão ou PIX no site)',
85        ad_pack_pay_pix: 'PIX nesta página',
86        ad_pack_pix_intro:
87            'Copie o código ou use o QR code. Pode também abrir no app ou site do Mercado Pago. Após a confirmação, ativamos o seu espaço e enviamos o relatório ao fim do ciclo.',
88        ad_pack_pix_code_lbl: 'PIX copia e cola',
89        ad_pack_pix_copy: 'Copiar código',
90        ad_pack_pix_open_mp: 'Abrir PIX no Mercado Pago',
91        ad_pack_pix_pending: 'Aguardando confirmação…',
92        ad_pack_pix_approved:
93            'Contribuição confirmada! Enviámos um e-mail de relatório demonstrativo. O relatório oficial chega ao fim do ciclo. Envie o seu logo abaixo.',
94        ad_pack_pix_paid_btn: 'Já realizei o pagamento',
95        ad_pack_redirecting: 'A abrir o checkout seguro…',
96        ad_pack_err_network: 'Erro ao comunicar com o servidor. Tente de novo.',
97        ad_pack_err_checkout: 'Não foi possível iniciar o pagamento.',
98        ad_pack_close_aria: 'Fechar',
99        ad_pack_estimate_tpl: 'Contribuição total: {price} ({days} dia(s)).',
100        ad_pack_success:
101            'Pedido registado! A nossa equipa contacta-o em breve para confirmar e ativar o seu espaço.',
102        ad_pack_err_days_tpl: 'Indique entre 1 e {max} dias.',
103        ad_pack_err_email: 'Indique um e-mail válido.',
104        ad_pack_slot_aria_tpl: 'Apoiar o Catellix — espaço {n}',
105        ad_pack_slots_tpl: 'Espaços disponíveis {avail}/{total}',
106        top_bar_local_spin_region_aria: 'Apoiadores em destaque — rotação automática',
107        top_bar_local_spin_link_aria: 'Apoiador do Catellix — visitar site (nova janela)',
108        ad_pack_pre_notice_title: 'Antes de contribuir',
109        ad_pack_pre_notice_body:
110            'Após a confirmação, poderá enviar o seu logo uma única vez neste fluxo. Para trocar a imagem, alterar o link ou corrigir um envio, abra um ticket no nosso suporte — a equipa trata por ordem de chegada.',
111        ad_pack_open_support: 'Contactar suporte',
112        ad_pack_spotlight_5s: '',
113        ad_pack_spotlight_fair: '',
114        ad_pack_report_note: '',
115        ad_pack_post_pay_title: 'Contribuição confirmada! 🎉',
116        ad_pack_post_pay_lead:
117            'O logo e o link que escolheu acima serão enviados à equipa. Confirme com o botão abaixo. Para alterações depois do envio, use o suporte.',
118        ad_pack_creative_label: 'O seu logo',
119        ad_pack_creative_hint: 'PNG, JPEG ou WebP · máx. 4 MB · quadrado recomendado.',
120        ad_pack_creative_submit: 'Enviar logo à equipa Catellix',
121        ad_pack_creative_ok: 'Logo recebido! A nossa equipa foi notificada e ativará o espaço em breve.',
122        ad_pack_creative_err: 'Não foi possível enviar. Tente de novo ou contacte o suporte.',
123        ad_pack_demo_report_err: 'Relatório demonstrativo: falha ao enviar e-mail (verifique SMTP no servidor).',
124        ad_pack_creative_need_file: 'Escolha uma imagem do logo (PNG, JPEG ou WebP) antes de enviar.',
125        ad_pack_creative_url_label: 'URL do seu site ou projeto',
126        ad_pack_creative_url_hint: 'Destino ao clicar no logo (https://…).',
127        ad_pack_creative_err_url: 'Indique um endereço válido começando por https:// ou http://.',
128        ad_pack_ticket_top: 'Abrir ticket',
129        ad_pack_story_heading: 'Brasil · Enterprise',
130        ad_pack_story_p1:
131            'Detector aberto à comunidade: latência, incidentes e saúde de serviços na rede — com transparência.',
132        ad_pack_story_p2:
133            'Duas faixas de destaque: 25 slots à esquerda (R$ 10/dia) e 15 premium à direita (R$ 20/dia). Três logos fixos (Catellix, Kids e Hoje+) estão sempre presentes. Contribuições reforçam sondas e o Detector aberto à comunidade.',
134        ad_pack_mobile_premium_seal: 'Os 15 slots desta faixa são exibid
134os em destaque no topo da versão mobile — a ÚNICA propaganda visível no celular, passando em carrossel contínuo com moldura dourada.',
135        ad_pack_report_title: 'Exemplo de relatório diário que você recebe por e-mail',
136        ad_pack_report_th_metric: 'Métrica',
137        ad_pack_report_th_value: 'Valor',
138        ad_pack_report_row_impressions: 'Impressões (exibições)',
139        ad_pack_report_row_clicks: 'Cliques reais',
140        ad_pack_report_row_ctr: 'CTR (taxa de clique)',
141        ad_pack_report_row_day: 'Dia da campanha',
142        ad_pack_report_row_remaining: 'Dias restantes',
143        ad_pack_report_row_strip: 'Faixa',
144        ad_pack_report_footer: 'Enviado diariamente às 06:00 · dados reais do servidor · inclui pré-aviso 24h antes de expirar',
145        ad_pack_report_strip_left: 'Esquerda (R$ 10/dia)',
146        ad_pack_report_strip_right: 'Premium direita (R$ 20/dia)',
147        ad_pack_pixel_rec: '📐 Recomendado: 400×400 px (quadrado) · PNG ou WebP transparente · máx. 512 KB',
148        ad_pack_enterprise_badge: 'Enterprise',
149        ad_pack_enterprise_title: 'Carregue o logo, o link e veja o preview antes de pagar.',
150        ad_pack_enterprise_back_kicker: 'Destaque na comunidade',
151        ad_pack_enterprise_back_title: 'O seu projeto em evidência',
152        ad_pack_enterprise_back_lead:
153            'Logo na faixa do Detector com link direto, rotação justa entre apoiadores e relatório de visibilidade ao fim do ciclo.',
154        ad_pack_enterprise_back_li1: 'Alcance técnico: quem usa o Catellix vê o seu brand junto ao estado dos serviços.',
155        ad_pack_enterprise_back_li2: 'Transparência: contribuições reforçam sondas e monitorização aberta à comunidade.',
156        ad_pack_enterprise_back_hint: 'Segure e arraste o cartão (fora dos botões) para o ver em 3D.',
157        ad_pack_preview_placeholder: 'Carregue o logo para ver o preview.',
158        ad_pack_pick_image: 'Carregar imagem',
159        ad_pack_err_creative_before_pay:
160            'Carregue o logo e indique uma URL válida (https:// ou http://) antes de continuar para o pagamento.',
161        sidebar_catellix_products_aria: 'Estado dos produtos Catellix',
162        sidebar_mon_aria: 'Catellix Monitoring — abrir página oficial (nova janela)',
163        sidebar_kids_aria: 'Catellix Kids — abrir planos e página oficial (nova janela)',
164        sidebar_status_checking: 'A verificar…',
165
166        hero_tagline: 'Histórico de 7 dias, hub de latência e relatos da comunidade.',
167        /** {p} = js_comm_period_* (janela do ranking de relatos na sidebar) */
168        hero_tagline_tpl: 'Relatos — {p}: hub de latência e ranking da comunidade.',
169
170        lbl_category: 'Categoria',
171        lbl_category_aria: 'Filtrar por categoria',
172        lbl_ip_stack: 'Stack IP',
173        lbl_ip_stack_aria: 'Filtrar por IPv4 ou IPv6 (DNS)',
174        ip_all: 'Todas (IP)',
175        ip_v4: 'Só IPv4',
176        ip_dual: 'IPv4 + IPv6',
177        ip_v6: 'Só IPv6',
178        lbl_rank: 'Ordenação',
179        lbl_rank_aria: 'Ordenação dos cartões',
180        lbl_view: 'Visualização',
181        view_row_title: 'Carrossel',
182        view_grid_title: 'Grade',
183        view_list_title: 'Lista',
184        probe_badge_label: 'Rede',
185        lbl_refresh_group: 'Atualização',
186        lbl_refresh_interval: 'Intervalo de atualização automática',
187        lbl_refresh_interval_title: 'Com que frequência recarregar catálogo e rankings',
188        refresh_now_title: 'Atualizar agora',
189        refresh_now_aria: 'Atualizar agora',
190        refresh_countdown_title: 'Próxima atualização em {t}',
191        refresh_countdown_loading: 'A atualizar…',
192
193        loading_banner: 'Carregando catálogo…',
194        catalog_sync_hint: 'Sincronizando dados em segundo plano…',
195        catalog_home_title: 'Vista inicial: repor filtros e Top 10 em cartões',
196        catalog_home_aria: 'Catálogo: repor filtros e mostrar Top 10 global',
197        catalog_heading: 'Catálogo',
198        catalog_search_lbl: 'Buscar no catálogo',
199        catalog_search_placeholder: 'Buscar serviço, domínio ou ID…',
200        catalog_search_aria: 'Buscar no catálogo',
201        catalog_search_enter_hint:
202            'Prima Enter para abrir os resultados num painel com todos os serviços do catálogo que coincidem.',
203        catalog_view_toggle_cards_txt: 'Cartões',
204        catalog_view_toggle_cards_title: 'Ver catálogo em cartões (grade)',
205        catalog_view_toggle_cards_aria: 'Alternar para vista em cartões',
206        catalog_view_toggle_list_txt: 'Linhas',
207        catalog_view_toggle_list_title: 'Ver catálogo em linhas (lista)',
208        catalog_view_toggle_list_aria: 'Alternar para vista em linhas',
209
210        main_complaints_heading: 'Top 10 · mais reclamações (comunidade)',
211        main_complaints_sub_loading: 'Carregando ranking…',
212        main_complaints_aria: 'Dez serviços com mais relatos verificados',
213
214        dash_metrics_main: 'Resumo numérico',
215        dash_metrics_hint: 'destinos, OK, latência média…',
216        dash_metrics_aria: 'Resumo numérico',
217        metric_destinations: 'destinos',
218        metric_destinations_title: 'Entradas únicas no catálogo (d
218omínios/serviços monitorados)',
219        metric_ok: 'OK',
220        metric_ok_title: 'Última sondagem HTTPS bem-sucedida',
221        metric_fail: 'falha',
222        metric_fail_title: 'Sondagem falhou (timeout/erro)',
223        metric_unknown: 'sem dado',
224        metric_unknown_title: 'Ainda sem medição ou estado desconhecido',
225        metric_urls: 'URLs sondadas',
226        metric_urls_title: 'Soma de destinos HTTPS por serviço (multi-target)',
227        metric_statuspage: 'Statuspage',
228        metric_statuspage_title: 'Serviços com página Statuspage.io no catálogo',
229        metric_incident: 'c/ incidente',
230        metric_incident_title: 'APIs públicas status.* com indicador de incidente (severidade ≥ minor)',
231        metric_games: 'jogos alerta',
232        metric_games_title: 'Plataformas de jogos no resumo com alerta',
233        metric_trends: 'tendências',
234        metric_trends_title: 'Indicadores do ecossistema (amostra)',
235        metric_probe_suffix: 's sondagem',
236        metric_probe_title: 'Intervalo configurado no servidor',
237        metric_lat_avg: 'ms média',
238        metric_lat_avg_title: 'Média das latências OK no conjunto filtrado',
239
240        dash_obs_main: 'Hub mundial · pontos de observação',
241        dash_obs_hint: 'POPs e sondas',
242        dash_obs_hub_aria: 'Pontos de observação de latência',
243
244        dash_prob_main: 'Problemas & top por categoria',
245        dash_prob_hint: 'Top 10 geral + uma lista por categoria',
246        prob_catalog_sr: 'Catálogo de problemas',
247        prob_catalog_global_title: 'Top 10 · problemas (geral)',
248
249        dash_rank_main: 'Rankings rápidos',
250        dash_rank_hint: 'Comunidade em 1.º · depois top 5 por tipo',
251        rank_mood_label: 'Vista',
252        rank_mood_aria: 'Alternar rankings bons ou ruins',
253        rank_mood_bad: 'Ruins',
254        rank_mood_good: 'Bons',
255        rank_mood_toggle_title: 'Alternar vista',
256        rank_mood_toggle_sr: 'Alternar entre vista de desempenho positivo e vista de incidentes',
257        rank_col_community: 'Top 5 · comunidade',
258        rank_col_community_sub: 'Relatos anônimos; não é estado oficial.',
259        rank_col_lat_fast: 'Top 5 · latência baixa',
260        rank_col_lat_fast_sub: 'Última sondagem OK (filtro atual).',
261        rank_col_lat_slow: 'Top 5 · latência alta',
262        rank_col_lat_slow_sub: 'Entre os que responderam OK.',
263        rank_col_incidents: 'Top 5 · incidentes',
264        rank_col_incidents_sub: 'APIs públicas Statuspage.',
265        rank_col_trends: 'Top 5 · tendências',
266        rank_col_trends_sub: 'Amostra agregada de serviços em destaque.',
267        rank_col_games: 'Top 5 · jogos',
268        rank_col_games_sub: 'Plataformas (resumo agregado).',
269        rank_more_full: '+ Ver ranking completo',
270        rank_more_compact: 'Mostrar só top 5',
271
272        dash_dd_main: 'Tendências',
273        dash_dd_hint: 'amostra agregada',
274        dd_scroll_hint_title: 'Deslize para o lado — há mais itens',
275
276        footer_contact_title: 'Enviar mensagem à Catellix',
277        footer_contact_intro:
278            'Use o formulário para falar conosco: parcerias, índices e monitoramento no Detector, dúvidas ou problemas com o serviço. O pedido vai para o suporte Catellix com referência; no e-mail interno fica indicada a origem Catellix Detector.',
279        footer_contact_btn: 'Abrir formulário — mensagem à Catellix',
280        footer_support_label: 'Suporte:',
281        footer_support_after:
282            ' confirmação e resposta no e-mail que indicar no formulário.',
283        footer_about: 'Quem somos?',
284        footer_social_nav: 'Redes sociais Catellix',
285        footer_social_label: 'Redes sociais',
286        footer_meta_suffix: 'Soluções em rede',
287        footer_privacy: 'Política de Privacidade',
288        footer_copy: 'Catellix © 2026',
289        foot_note_prefix:
290            'Atualização automática a cada 5 min · gráficos por serviço até 7 dias · ',
291
292        contact_modal_title: 'Mensagem à Catellix',
293        contact_modal_intro:
294            'O envio é encaminhado para a equipe de suporte da Catellix (ex.: [email protected]). Fica registrado que o contato veio da página Catellix Detector. Você receberá confirmação com referência no e-mail que preencher abaixo.',
295        contact_name: 'Nome',
296        contact_name_ph: 'Seu nome',
297        contact_email: 'E-mail *',
298        contact_email_ph: '[email protected]',
299        contact_reason: 'Motivo da mensagem *',
300        contact_reason_empty: '— Selecione —',
301        contact_reason_partner: 'Quero ser parceiro / melhorar índices de monitoramento',
302        contact_reason_problem: 'Problema ou dúvida sobre o Detector',
303        contact_reason_other: 'Outro assunto',
304        contact_company: 'Empresa ou projeto (opcional)',
305        contact_company_ph: 'Ex.: ISP, equipe de NOC…',
306        contact_subject: 'Assunto curto (opcional)',
307        contact_subject_ph: 'Resumo em uma linha',
308        contact_message: 'Mensagem *',
309        contact_message_ph: 'Escreva para a Catellix: parceria, índices no Detector, dúvida ou problema…',
310        contact_cancel: 'Cancelar',
311        contact_send: 'Enviar à Catellix',
312
313        modal_close: 'Fechar',
314        chart_period_label: 'Período',
315        chart_period_aria: 'Intervalo de tempo do histórico',
316        chart_target_label: 'Destino',
317        chart_target_aria: 'Escolher destino para o gráfico',
318        chart_multi_label: 'Todas as sondas no mesmo gráfico',
319        chart_block_aria: 'Histórico de latência',
320        chart_canvas_aria: 'Histórico de latência',
321        targets_table_aria: 'Destinos e latência',
322        th_destination: 'Destino',
323        th_latency: 'Latência',
324        th_ips: 'IPs (DNS)',
325
326        chart_range_1: 'Última hora',
327        chart_range_3: 'Últimas 3 horas',
328        chart_range_5: 'Últimas 5 horas',
329        chart_range_8: 'Últimas 8 horas',
330        chart_range_12: 'Últimas 12 horas',
331        chart_range_24: 'Último dia',
332        chart_range_72: 'Últimos 3 dias',
333        chart_range_120: 'Últimos 5 dias',
334        chart_range_168: 'Últimos 7 dias',
335        chart_range_360: 'Últimos 15 dias',
336        chart_range_720: 'Últimos 30 dias',
337
338        cs_title: 'Reclamações da comunidade',
339        cs_total: 'Total (30d)',
340        cs_anon: 'Anônimas',
341        cs_reg: 'Com cadastro',
342        cs_feedback_title: 'Comentários públicos',
343        cs_loading: 'Carregando…',
344
345        star_title: 'Avaliar serviço',
346        star_picker_aria: 'Avaliação de 1 a 5 estrelas',
347        star_n1: '1 estrela',
348        star_n2: '2 estrelas',
349        star_n3: '3 estrelas',
350        star_n4: '4 estrelas',
351        star_n5: '5 estrelas',
352        star_tap: 'Toque em uma estrela',
353        star_auth_lead: 'Para registrar a avaliação, confirme sua identidade:',
354        star_or: 'ou',
355        star_send_code: 'Enviar código',
356        star_confirm: 'Confirmar',
357
358        report_picker_title: 'Reportar problema',
359        report_picker_lead:
360            'Escolha o serviço no catálogo. Use a busca para filtrar pelo nome, domínio ou ID.',
361        report_picker_search_lbl: 'Filtrar serviços',
362        report_picker_placeholder: 'Filtrar por nome, domínio ou ID…',
363        report_picker_empty: 'Nenhum serviço corresponde à busca.',
364        report_picker_row_report: 'Reportar',
365
366        cr_title: 'Relato da comunidade',
367        cr_question:
368            'Registre o tipo de problema, um comentário se quiser, e confirme sua identidade por e-mail ou Google.',
369        cr_question_main:
370            'Indique o motivo, comente se quiser e confirme quem é. Para saber o que o mapa mostra, abra',
371        cr_explainer_fab_link: 'Como funciona',
372        cr_yes: 'Começar relato',
373        cr_no: 'Cancelar',
374        cr_reason_aria: 'Motivo do relato',
375        cr_reason_lead: 'Motivo principal',
376        cr_required: '(obrigatório)',
377        cr_comment: 'Comentário',
378        cr_optional: '(opcional)',
379        cr_reason_line: 'Motivo principal (obrigatório)',
380        cr_comment_line: 'Comentário (opcional)',
381        star_label_default: 'Toque em uma estrela',
382        cr_comment_ph: 'Detalhe o que observou.',
383        cr_public: 'Tornar comentário público no painel deste serviço',
384        cr_anon: 'Publicar como anônimo (se público)',
385        cr_broadcast: 'Notificar na página global em tempo real',
386        cr_broadcast_name: 'Mostrar meu nome na notificação (senão aparece anônimo)',
387        cr_display_name: 'Nome a exibir',
388        cr_display_name_ph: 'Ex.: João P.',
389        cr_continue_verify: 'Continuar — verificação',
390        cr_verify_lead:
391            'Confirme sua identidade por e-mail (código de 4 dígitos) ou faça login com Google (na hora). O contato não é armazenado em texto claro.',
392        cr_verify_lead_main: 'Confirme com e-mail ou Google (menu abaixo).',
393        cr_channel_lbl: 'Verificar com',
394        cr_channel_aria: 'E-mail ou Google',
395        cr_opt_email: 'E-mail (código)',
396        cr_opt_google: 'Google (imediato)',
397        cr_email_lbl: 'E-mail',
398        cr_google_hint: 'Use «Continuar com Google» abaixo.',
399        cr_send_code: 'Enviar código',
400        cr_code_lbl: 'Código de 4 dígitos',
401        cr_confirm: 'Confirmar relato',
402
403        cat_filter_all: 'Top 10 & destaques — todas as categorias',
404        cat_filter_todos: 'Todos',
405        /** Prateleira quando várias categorias tinham só 1 serviço cada (agrupados). */
406        shelf_orphans_title: 'Demais serviços',
407
408        rank_sort_live_problems: 'Problemas agora · piores primeiro (comunidade + falhas + incidentes)',
409        rank_sort_latency_desc: 'Latência · maior primeiro',
410        rank_sort_latency_asc: 'Latência · menor primeiro',
411        rank_sort_rank_global: 'Ranking global (# medidos)',
412        rank_sort_fail_first: 'Erros no fim; entre iguais, latência',
413        rank_sort_incident_first: 'Incidente Statuspage primeiro',
414        rank_sort_name: 'Nome A → Z',
415        rank_sort_name_desc: 'Nome Z → A',
416
417        toast_title: 'Reclamação em tempo real',
418        toast_by: 'por',
419
420        foot_link_panel: 'Painel',
421        foot_link_site: 'Site',
422
423        /* UI dinâmica (detector.js) */
424        js_tile_report: 'Relatar problema',
425        js_tile_report_title: 'Relatar problema (+1 na comunidade, regras anti-abuso)',
426        js_list_report: 'Reportar',
427        js_list_report_aria: 'Reportar problema',
428        js_rank_more_full: '+ Ver ranking completo',
429        js_rank_more_top5: 'Mostrar só top 5',
430        js_badge_no_data: 'Sem dados',
431        js_pill_no_data: 'Sem dado',
432        js_lat_no_class: 'Sem classificação.',
433        js_primary_no_measure: 'Sem medição neste ciclo',
434        js_icmp_ok: 'Responde a ping (ICMP)',
435        js_icmp_no: 'Sem echo ICMP (bloqueado ou filtrado)',
436        js_icmp_wait: 'A aguardar amostra ICMP…',
437        js_probe_icmp: 'ICMP (ping)',
438        js_prob_hint_tls: '',
439        js_report_picker_loading: 'Carregando catálogo…',
440        js_comm_loading_window: 'Carregando dados da comunidade (janela:',
441        js_comm_sub_loading_tpl: 'Carregando dados da comunidade (janela: {d})…',
442        js_comm_sub_err_tpl: 'Não foi possível obter o ranking (janela: {d}).',
443        js_comm_sub_ready_tpl: 'Relatos verificados — {p} — clique num serviço para ver detalhe e gráficos.',
444        js_comm_period_24h: 'hoje desde 0h (horário de Brasília, UTC−3)',
445        js_comm_period_7d: 'últimos 7 dias (calendário Brasília)',
446        js_comm_period_15d: 'últimos 15 dias (calendário Brasília)',
447        js_comm_period_30d: 'últimos 30 dias (calendário Brasília)',
448        js_comm_rank_loading: 'Carregando o ranking da comunidade…',
449        js_comm_could_not: 'Não foi possível obter o ranking (janela:',
450        js_comm_rank_err_li: 'Ranking indisponível. Atualize a página.',
451        js_comm_ol_unavail: 'Ranking indisponível.',
452        js_comm_ol_empty: 'Ainda sem relatos na comunidade.',
453        js_open_service_aria: 'Abrir',
454        js_sidebar_meta_reports: 'relatos na janela',
455        js_sidebar_meta_simple: '+{n}',
456        js_sidebar_meta_mixed: '+{n} relatos',
457        js_sidebar_rank_up: 'Subiu no ranking (em relação à última atualização)',
458        js_sidebar_rank_down: 'Desceu no ranking (em relação à última atualização)',
459        js_vol_trend_up_title:
460            'Volume recente: mais relatos nos últimos 30 min do que nos 30 min anteriores ({cur} vs {prev})',
461        js_vol_trend_down_title:
462            'Volume recente: menos relatos nos últimos 30 min do que nos 30 min anteriores ({cur} vs {prev})',
463        js_top30_btn: 'Relatório Top 30',
464        js_top30_modal_title: 'Top 30 · comunidade',
465        js_top30_embed_title: 'Top 30 — comunidade',
466        js_top10_trends_embed_title: 'Top 10 — tendências agregadas',
467        js_top10_trends_embed_lead:
468            'Primeiros 10 no ranking; estado e ritmo em tempo real. O relatório Top 30 (PDF e compartilhamento) abre no botão abaixo.',
469        js_top30_mobile_cta: 'Top 30 — relatório',
470        js_top30_mobile_cta_aria: 'Abre o relatório Top 30 com impressão/PDF e compartilhamento',
471        js_top30_modal_lead: 'Serviços com mais relatos na janela selecionada; estado e ritmo vêm dos mesmos dados do ranking lateral.',
472        js_top30_fallback_note:
473            'Sem relatos na comunidade nesta janela — lista provisória do agregador externo de feeds.',
474        js_top30_empty: 'Ainda sem dados. O ranking atualiza em breve.',
475        js_top30_err: 'Não foi possível carregar o ranking.',
476        js_vol_trend_stable_title:
477            'Volume estável: {cur} relatos nos últimos 30 min (igual ao período anterior, {prev}).',
478        js_rank_trend_stable_title: 'Posição estável em relação à última atualização do ranking.',
479        js_rank_trend_baseline_title:
480            'Primeira posição nesta sessão — ainda sem histórico de subida ou descida.',
481        js_top30_trend_up: 'Relatos em alta',
482        js_top30_trend_down: 'Queda detectada',
483        js_top30_trend_stable: 'Estável',
484        js_top30_sources_tpl: '{n} fontes',
485        js_top30_status_ok: 'ok',
486        js_top30_status_unstable: 'instável',
487        js_top30_status_down: 'em incidente',
488        js_rank_share_btn: 'Relatório enterprise',
489        js_rank_share_btn_short: 'Relatório',
490        js_rank_share_aria_top10: 'Relatório formal só com Top 10 (tabela, PDF e compartilhamento)',
491        js_rank_share_btn_top10: 'Relatório executivo Top 10 (PDF, WhatsApp, e-mail)',
492        js_rank_share_aria_top20: 'Gerar relatório formal do Top 20',
493        js_rank_share_aria_top30: 'Gerar relatório formal do Top 30 de tendências',
494        js_top20_open_btn: 'Top 20 estúdio',
495        js_top20_open_aria: 'Abrir vista premium Top 20 com compartilhamento de relatório',
496        js_top20_modal_title: 'Top 20 · estúdio Catellix',
497        js_top20_modal_lead:
498            'Ranking da comunidade com maior densidade visual, pronto para apresentações e exportação enterprise.',
499        js_top20_empty: 'Ainda sem dados suficientes para o Top 20 nesta janela.',
500        js_report_modal_title: 'Relatório Catellix Detector',
501        js_report_btn_print: 'Imprimir / PDF do sistema',
502        js_report_btn_wa: 'WhatsApp',
503        js_report_btn_email: 'E-mail',
504        js_report_btn_native: 'Compartilhar…',
505        js_report_title_top10: 'Relatório executivo · Top 10 reclamações (comunidade)',
506        js_report_title_top20: 'Relatório executivo · Top 20 reclamações (comunidade)',
507        js_report_title_top30: 'Relatório executivo · Top 30 tendências agregadas',
508        js_report_subtitle_enterprise:
509            'Documento gerado pelo Catellix Monitoring — indicadores operacionais e composição do catálogo.',
510        js_report_generated: 'Gerado em',
511        js_report_sec_ranking: 'Quadro de ranking',
512        js_report_sec_mix_cat: 'Composição do ecossistema (categorias no catálogo)',
513        js_report_mix_cat_note:
514            'Distribuição percentual dos serviços monitorados por categoria — visão macro do universo amostrado.',
515        js_report_sec_mix_ip: 'Perfil de conectividade (stack IP)',
516        js_report_mix_ip_note:
517            'Distribuição IPv4 / IPv6 no catálogo; métrica técnica da amostra, não dados demográficos pessoais.',
518        js_report_ip_other: 'Outros / desconhecido',
519        js_report_footer:
520            'Confidencialidade: o relatório resume dados públicos do Detector. Reprodução com atribuição à Catellix.',
521        js_report_th_service: 'Serviço',
522        js_report_th_status: 'Estado',
523        js_report_th_trend: 'Tendência',
524        js_report_th_sources: 'Fontes',
525        js_report_th_signal: 'Sinal',
526        js_report_th_context: 'Contexto',
527        js_report_share_line: 'Sumário executivo do Detector',
528        js_report_share_site_line: 'Monitoramento e ferramentas: https://catellix.com',
529        js_report_share_no_rank_lines: '(Sem linhas de ranking neste relatório.)',
530        js_report_site_tagline: 'Catellix Monitoring — Detector',
531        js_t10_actions_aria: 'Relatório e cartão para redes do Top 10',
532        js_t10_social_btn: 'Criar cartão para Instagram / redes',
533        js_t10_social_btn_short: 'Compartilhar',
534        js_t10_social_aria: 'Gerar imagem e legenda do Top 10 para compartilhar nas redes',
535        js_t10_social_lead: 'Use a legenda nos stories ou posts. A imagem inclui o logo Catellix e catellix.com.',
536        js_t10_social_no_data: 'Ainda não há Top 10 de relatos nesta janela para compartilhar.',
537        js_t10_social_caption_intro:
538            'Ranking de instabilidades na Internet (Top 10) no Catellix Detector — compartilhe com quem precise de visibilidade:',
539        js_t10_social_card_kicker: 'Ranking de instabilidades na Internet',
540        js_t10_social_enterprise_hint: 'Logo · score /100 · estrelas Catellix',
541        js_t10_social_card_footer: 'Catellix Detector · dados em tempo real',
542        js_t10_social_share_title: 'Ranking de instabilidades — Catellix Detector',
543        js_t10_social_modal_title: 'Cartão · ranking de instabilidades',
544        js_t10_social_act_copy: 'Copiar legenda',
545        js_t10_social_act_wa: 'WhatsApp',
546        js_t10_social_act_save: 'Salvar PNG',
547        js_t10_social_act_native: 'Compartilhar…',
548        js_t10_social_ig_copied: 'Imagem copiada! Cole no Instagram para publicar.',
549        js_t10_social_preview_alt: 'Pré-visualização do cartão Top 10 para compartilhar nas redes',
550        js_t10_social_preparing: 'Preparando o cartão para você…',
551        js_t10_social_icons_loading: 'Carregando logotipos no cartão…',
552        js_t10_social_card_failed: 'Não foi possível gerar a imagem. Tente fechar e abrir de novo.',
553        js_report_email_subj: 'Relatório Catellix Detector',
554        js_m_top10_comm_title: 'Ranking de instabilidades · Top 10',
555        js_m_top10_comm_sub: 'Relatos e sinais na janela · toque num serviço para detalhes',
556        js_m_top10_comm_loading: 'Carregando ranking da comunidade…',
557        js_top10_complaints_mixed: '+{n} relatos',
558        js_tile_comm_break_tpl: '+{n} relatos no período',
559        js_sidebar_empty_comm: 'Ainda sem relatos da comunidade nesta janela.',
560        js_relato_prefix: 'Relato:',
561        js_filter_banner_label:
562            'Filtro ativo · grade e 1ª prateleira seguem a busca; painel Top 5 e prateleiras latência/nota = catálogo completo',
563        js_top10_worst_lat: 'Top 10 · pior latência',
564        js_top10_problems: 'Top 10 · problemas',
565        js_rank_list_empty: 'Sem dados para listar.',
566        js_rank_no_data: 'Sem dados.',
567        js_rank_no_ok: 'Sem medições OK neste filtro.',
568        js_top10_empty_shelf: 'Sem dados suficientes',
569        js_complaints_loading_1d: 'Carregando ranking (1 dia)…',
570        js_complaints_loading_7d: 'Carregando ranking (7 dias)…',
571        js_complaints_loading: 'Carregando ranking…',
572        js_complaints_empty_24h: 'Sem relatos verificados hoje (desde 0h, horário de Brasília).',
573        js_complaints_empty_7d: 'Sem relatos verificados nos últimos 7 dias.',
574        js_complaints_filter_hint:
575            'Há relatos nesta janela, mas os serviços do ranking não entram no filtro atual (categoria, busca ou IP). Limpe o filtro para os ver aqui.',
576        js_cards_loading_rank: 'Carregando ranking',
577        js_cards_empty_filter:
578            'Há relatos na janela, mas o ranking não coincide com o filtro atual. Limpe categoria, busca ou IP.',
579        js_cards_empty_24h: 'Sem relatos hoje (Brasília) neste filtro.',
580        js_cards_empty_7d: 'Sem relatos nos últimos 7 dias neste filtro.',
581        js_cards_no_top10:
582            'Sem cartões Top 10 para este filtro. Limpe categoria, texto ou IP — ou mude a ordenação.',
583        js_more_complaints: 'Mais reclamações',
584        js_more_latency: 'Maior latência',
585        js_worst_rating: 'Pior avaliação',
586        js_best_rating: 'Melhor avaliação',
587        js_less_latency: 'Melhor latência',
588        js_sub_last_measure: 'última medição · catálogo completo · empates: grandes marcas primeiro',
589        js_sub_stars_catalog: 'nota + estrelas · catálogo completo',
590        js_sub_stars_telecom: 'nota + estrelas + latência + perda + jitter + uptime + relatos · telecom',
591        js_sub_stars_telecom_worst:
592            'nota + estrelas + latência + perda + jitter + uptime + relatos · telecom · empates: menores marcas primeiro; entre iguais, ordem variável',
593        js_sub_stars_telecom_best:
594            'nota + estrelas + latência + perda + jitter + uptime + relatos · telecom · empates: maiores marcas primeiro; entre iguais, ordem variável',
595        js_rating_board_info_title: 'Como funciona este ranking?',
596        js_rating_board_info_body:
597            'A posição é definida por um score composto que considera:\n\n' +
598            '• Nota de confiança (trust score) — baseada em relatos da comunidade\n' +
599            '• Estrelas — média das avaliações dos usuários\n' +
600            '• Latência média — tempo de resposta medido automaticamente\n' +
601            '• Perda de pacotes — qualidade da conexão\n' +
602            '• Jitter — estabilidade da conexão\n' +
603            '• Uptime — se o serviço está online no momento\n' +
604            '• Volume de relatos negativos\n\n' +
605            'Quando nota e estrelas são iguais, o desempate usa a qualidade técnica: latência, perda de pacotes, jitter e uptime. Todas as marcas são avalia
605das com os mesmos critérios.',
606        js_t10_info_btn_aria: 'Informação sobre este quadro',
607        js_latency_rank_info_title: 'Sobre este ranking de latência',
608        js_latency_rank_worst_body:
609            'Última medição · catálogo completo · empates: grandes marcas primeiro.\n\n' +
610            'Ordenação: maior latência (sondagens OK); empates — relevância global (domínio + sinais do catálogo).',
611        js_latency_rank_best_body:
612            'Mais rápidos · catálogo completo · empates: grandes marcas primeiro.\n\n' +
613            'Só entram destinos com latência medida; se o ICMP não responde, o serviço ainda pode aparecer quando há sinal de que o destino está ok.',
614        js_sub_fastest: 'mais rápidos · catálogo completo · empates: grandes marcas primeiro',
615        js_prob_sort_latency:
616            'Ordenação: maior latência (sondagens OK); empates — relevância global (domínio + sinais do catálogo).',
617        js_relato_word: 'relato',
618        js_relato_plural: 'relatos',
619        js_window_label: 'Janela',
620        js_window_aria: 'Janela do ranking de reclamações',
621        js_sidebar_hourly_modal_title: 'Relatos por hora',
622        js_sidebar_hourly_modal_lead:
623            'Distribuição horária na janela selecionada (relatos verificados + sinais agregados).',
624        js_sidebar_hourly_chart_lead: 'relatos por hora',
625        js_sidebar_hourly_loading: 'Carregando gráfico…',
626        js_sidebar_hourly_err: 'Não foi possível carregar o gráfico.',
627        js_sidebar_hourly_err_timeout:
628            'O servidor não respondeu a tempo. Verifique a rede ou tente de novo dentro de momentos.',
629        js_sidebar_hourly_err_429:
630            'Servidor limitou pedidos (429). Aguarde um minuto e abra o gráfico de novo.',
631        js_sidebar_hourly_chart_hint: 'Contagem de relatos agregada por hora (UTC).',
632        js_sidebar_hourly_chart_aria: 'Gráfico de relatos por hora',
633        js_sidebar_hourly_foot_tpl: '+{n}',
634        js_sidebar_hourly_no_data: 'Sem dados de relatos nesta janela.',
635        js_rank_pill_label: 'Pulso',
636        js_t10_btn_report: 'Reportar',
637        js_t10_report_now_line: 'Reportar agora!',
638        js_t10_report_flow_btn: 'Relatar',
639        js_t10_report_flow_aria_tpl: 'Abrir relato para {name}',
640        js_sidebar_avg_pill_title_tpl:
641            'Pulso {avg} relatos/h · total {total} na janela. Clique para ver o gráfico por hora.',
642        js_sidebar_avg_pill_title_spike_tpl:
643            'Pico nas últimas {uh} h: {short} relatos/h (vs média da janela {avg}/h). Total {total}. Clique para o gráfico por hora.',
644        js_sidebar_avg_pill_title_down: 'Serviço fora do ar (sonda técnica falhou). Clique para detalhes.',
645        js_sidebar_pill_down: 'FORA',
646        js_sidebar_meta_probe_down: 'sonda caiu',
647        js_sidebar_meta_accel: 'acelerando',
648        js_sidebar_meta_anomaly: 'anomalia',
649        js_sidebar_meta_anomaly_detail: 'Z-score {z} (acima do normal para este serviço)',
650        js_tile_comm_avg_hint_tpl:
651            'Média {avg} relatos/hora na janela; total {total} relatos — clique para detalhes da comunidade',
652        js_window_1d: '1 dia',
653        js_window_7d: '7 dias',
654        js_window_15d: '15 dias',
655        js_window_30d: '30 dias',
656        js_complaints_sub_7d: 'últimos 7 dias',
657        js_complaints_sub_24h: 'hoje (Brasília, desde 0h)',
658        js_complaints_empty_generic: 'Nenhum relato na janela ({d} dia(s) civis, horário de Brasília).',
659        js_cards_sub_7d: '7 dias',
660        js_cards_sub_1d: '1 dia (padrão)',
661        js_star_badge_title: 'estrelas',
662        js_star_badge_votes: 'voto',
663        js_star_badge_votes_plural: 'votos',
664        js_icmp_empty_ping: 'Ainda não há resultado de ping neste painel. Volte daqui a cerca de um minuto.',
665        js_icmp_empty_filter:
666            'Com o filtro atual não há aqui serviços em que o site responde bem mas o ping não. Se um serviço estiver fora do ar, aparece nos cartões normais como erro — não nesta lista.',
667        js_icmp_title: 'Site ok · sem ping (ICMP)',
668        js_icmp_aria: 'Site ok, sem ping ICMP',
669        js_icmp_p1:
670            'Estes serviços não respondem a ping (ICMP). Isso é normal em muitos sites e apps na internet. Mesmo assim respondem a outros testes: em geral HTTPS (conexão web segura, porta 443) e, em alguns cartões, HTTP ou outras portas TCP (por exemplo 80 ou 443).',
671        js_icmp_p2:
672            'O tempo em ms em destaque em cada cartão vem sobretudo da verificação HTTPS/TLS. Quando vê números ao lado das portas no cartão, é a latência medida por TCP nessa porta. Serviços indisponíveis aparecem no catálogo geral em erro, não aqui.',
673        js_icmp_showing: 'Mostrando',
674        js_icmp_refine: 'Refine a busca para encontrar mais.',
675        js_google_not_config: 'Google não configurado.',
676        js_google_load_err: 'Erro ao carregar Google.',
677        js_google_btn_err: 'Não foi possível carregar o botão Google.',
678        js_cs_loading: 'Carregando…',
679        js_cs_err_load: 'Erro ao carregar dados.',
680        js_cs_err_net: 'Erro de rede.',
681        js_cs_no_comments: 'Nenhum comentário público ainda para este serviço.',
682        js_comments_app_title: 'Comentários públicos (app)',
683        js_feedback_reply: 'Responder',
684        js_feedback_reply_aria: 'Responder a este comentário público',
685        js_cr_reply_need_text: 'Escreva a resposta antes de continuar.',
686        js_cr_mod_analyzing: 'A analisar o texto em relação às regras da comunidade…',
687        cr_reply_step_question:
688            'Escreva a resposta e confirme identidade (a resposta fica visível publicamente sob o comentário).',
689        cr_reply_comment_label: 'Resposta (obrigatório)',
690        js_sending: 'A enviar…',
691        js_star_label_default: 'Toque em uma estrela',
692        js_score_pill: 'Score',
693        js_unavailable: 'Indisponível',
694        js_chart_comp_loading: 'Carregando gráfico comparativo…',
695        js_chart_area_bad: 'Área do gráfico indisponível na página.',
696        js_chart_429: 'Servidor limitou pedidos (429). Aguarde e tente de novo.',
697        js_chart_comp_unavail: 'Gráfico comparativo indisponível.',
698        js_chart_loading: 'Carregando gráfico…',
699        js_chart_loading_overlay_sub: 'Carregando dados…',
700        js_svc_not_in_catalog: 'Serviço não encontrado no catálogo — atualize a página.',
701        js_chart_unavail: 'Gráfico indisponível.',
702        js_chart_dest_unavail: 'Gráfico indisponível para este destino (rede ou servidor).',
703        js_hub_loading: 'Carregando resumo…',
704        js_no_recent: 'Sem valor recente',
705        js_plan_loading: 'Carregando plano de 7 dias…',
706        js_no_points_svc: 'Sem pontos na base para este serviço neste período. Aguarde o worker de sondas.',
707        js_no_points_dest:
708            'Sem pontos de latência na base para este destino neste período. Aguarde o worker de sondas ou escolha outro intervalo.',
709        js_err_detector_load: 'Não foi possível carregar o Detector.',
710        js_try_again: 'Tente de novo.',
711        js_ui_partial_err: 'Parte da página não atualizou. Recarregue ou limpe o filtro.',
712        js_choose_reason: 'Escolha um motivo.',
713        js_use_google_above: 'Utilize o botão Google acima para concluir.',
714        js_err_net_retry: 'Erro de rede. Tente de novo.',
715        js_send_code_first: 'Peça primeiro o código (Enviar código).',
716        js_enter_4_digits: 'Introduza os 4 dígitos.',
717        js_anonymous: 'Anônimo',
718        js_chart_legend_hint: '',
719        js_star_vote_hint: '',
720        js_star_vote_one_tpl: '1 voto · {avg} ★',
721        js_star_votes_hint_tpl: '{n} votos · {avg} ★',
722        js_modal_star_vote_n: 'Votar com {n} de 5 estrelas',
723        js_modal_stars_group_hint: 'Toque numa estrela para votar (confirmação por e-mail ou Google).',
724        js_modal_stars_aria_votes: 'Média de votos da comunidade.',
725        js_modal_stars_aria_trust: 'Referência visual ligada à nota de confiança.',
726        trust_score_help_title: 'Como funciona a nota (0–100)',
727        trust_score_help_p1:
728            'Cada serviço começa em 100 pontos. A nota resume relatos da comunidade já verificados (não substitui o estado oficial da marca nem as sondas técnicas).',
729        trust_score_help_p2:
730            'A nota desce quando há relatos verificados. O tipo de motivo importa: falhas técnicas gerais pesam mais; questões pessoais (loja, fatura, suporte) pesam menos. A conta usa retornos decrescentes — um único relato costuma ter impacto moderado.',
731        trust_score_help_p3: 'Relatos mais antigos passam a contar cada vez menos (decaimento ao longo das semanas).',
732        trust_score_help_p4:
733            'Além disso, para cada dia de calendário após o último relato considerado, a nota recupera até +1 ponto em direção a 100 (sem passar desse teto), para refletir períodos sem novas queixas.',
734        trust_score_help_p5:
735            'As estrelas (1 a 5) são uma avaliação à parte (média da comunidade). Votar em estrelas não substitui a nota numérica; serve como feedback qualitativo.',
736        js_modal_link_site: 'Site',
737        js_modal_link_status: 'Estado oficial',
738        js_modal_link_validate: 'Validação',
739        js_hub_card_title: 'Latência',
740        js_hub_hero_kicker: 'Melhor medição',
741        js_hub_tier_lbl: 'Nível',
742        js_hub_best_tpl: 'Menor entre fontes: {ms} ms',
743        js_hub_metric_current: 'Atual',
744        js_hub_metric_avg: 'Média',
745        js_hub_metric_max: 'Pico',
746        js_hub_metric_jitter: 'Jitter',
747        js_hub_metric_loss: 'Perda',
748        js_hub_metrics_aria: 'Métricas de latência',
749        js_hub_empty_hint: 'Próxima medição em breve.',
750        js_svc_ap_title: 'Disponibilidade (7 dias)',
751        js_svc_ap_sub: 'Dia OK = sem falhas neste destino.',
752        js_svc_ap_score: 'Pontuação',
753        js_enrich_statuspage_title: 'Estado público',
754        js_enrich_components_tpl: '{n} de {t} componentes com alerta',
755        js_enrich_open_status: 'Abrir página de estado',
756        js_status_ok: 'OK',
757        js_status_fail: 'Falha',
758        js_status_no_data: 'Sem dados',
759        js_dd_empty: 'Top Detector indisponível no momento.',
760        js_rank_mood_hint_bad:
761            'Incidentes, latência alta, tendências agregadas e relatos da comunidade em destaque.',
762        js_rank_mood_hint_good:
763            'Destaque em latência baixa e plataformas de jogos estáveis (operacionais primeiro).',
764        js_comm_disclaimer_short: 'Relatos anônimos; não é estado oficial.',
765        js_metrics_catalog_full_tpl: 'No catálogo completo: {n} · Visíveis com filtro: {v}',
766        js_metrics_catalog_entries: 'Entradas no catálogo',
767        js_rank_incidents_none: 'Nenhum incidente reportado nas APIs agora.',
768        js_rank_trend_badge: 'Tendência',
769        js_rank_active_count: 'ativos',
770        js_game_state_ok: 'Operacional',
771        js_game_state_bad: 'Incidente',
772        js_game_state_warn: 'Atenção',
773        js_rank_mood_game_sub_good: 'Operacionais primeiro (resumo agregado).',
774        js_rank_mood_game_sub_bad: 'Alertas e incidentes primeiro (resumo agregado).',
775        js_tile_rate_title: 'Avaliar este serviço',
776        js_tile_rate_cta: 'Avaliar',
777        js_tile_trust_title: 'Nota comunidade (relatos verificados; inicia em 100)',
778        js_tile_comm_title_tpl: '{n} {w} — clique para ver detalhes',
779        js_tile_complaints_trend_title:
780            'Relatos registrados por hora (últimas 72 h). Só aparece no Top 10 comunidade; atualiza com o ranking (~20 min).',
781        js_tile_complaints_trend_label: 'Relatos · hora',
782        js_tile_aria_hub: ' — toque para gráfico e hub de latência',
783        js_tile_service_fallback: 'Serviço',
784        js_tile_lat_error: 'erro',
785        js_tcp_title: 'Portas TCP',
786        js_tcp_legend_open: '',
787        js_tcp_legend_closed: '',
788        js_tcp_legend_wait: '',
789        js_tcp_legend_suffix: '',
790        js_tcp_cell_open: 'Aberta',
791        js_tcp_cell_closed: 'Fechada',
792        js_tcp_cell_wait: 'Aguardando',
793        js_tcp_port_title_tpl: 'Porta {p} · {svc} — {st}',
794        js_tcp_group_aria: 'Portas TCP (diagnóstico)',
795        js_tcp_disabled_note: 'Diagnóstico TCP desativado no servidor ou lista de portas vazia.',
796        js_tcp_pill_open_tpl: 'Porta {p} ({svc}) — TCP aberta',
797        js_tcp_pill_closed_tpl: 'Porta {p} ({svc}) — fechada ou filtrada',
798        js_tcp_pill_wait_tpl: 'Porta {p} ({svc}) — aguardando amostra (~1 min)',
799        js_probe_layers_title: 'Sondas',
800        js_probe_main_key: 'Sonda principal · {key}',
801        js_probe_operational_ms: 'Operacional · {ms} ms',
802        js_probe_operational: 'Operacional',
803        js_probe_main_timeout: 'Indisponível / timeout na sonda principal',
804        js_probe_disabled: 'Desativado no servidor',
805        js_probe_icmp_sub: 'Paralelo à sonda principal',
806        js_probe_icmp_loss: ' · perda {pct}%',
807        js_probe_tcp_vs: 'TCP vs cartão:',
808        js_probe_line_80: '80 HTTP → {state}',
809        js_probe_line_443: '443 HTTPS → {state}',
810        js_tcp_state_open: 'aberta',
811        js_tcp_state_closed: 'fechada',
812        js_tcp_state_wait: 'aguardando amostra',
813        js_lat_tier_fail_hint: 'Última sondagem falhou (timeout ou erro).',
814        js_lat_tier_unk_hint: 'Ainda sem medição de latência para este cartão.',
815        js_lat_rules_label: 'Regras:',
816        js_lat_tier_fallback_hint: 'Classificação de latência (global).',
817        js_lat_tier_client_hint: 'Classificação estimada no cliente.',
818        js_ip_tag_v4_title: 'DNS A (IPv4) no hostname do destino sondado',
819        js_ip_tag_v6_title: 'DNS AAAA (IPv6) no hostname do destino sondado',
820        js_ip_stack_aria: 'Stack IP (DNS)',
821        js_cr_invalid_email: 'Informe um e-mail válido.',
822        js_cr_code_sent: 'Código enviado.',
823        js_cr_send_fail: 'Não foi possível enviar.',
824        js_cr_require_google_suffix:
825            ' Selecione «Google (imediato)» e use o botão de login.',
826        js_cr_confirmed: 'Confirmado.',
827        js_cr_confirm_fail: 'Não foi possível confirmar.',
828        js_catalog_full_short: 'catálogo completo',
829        js_label_top: 'Top',
830        js_t10_shelf_ctx_top_tpl: '{ctx} · {top} {n}',
831        js_t10_complaints_window_top_tpl: '{w} · {top} {n}',
832        js_t10_complaints_comm_title: 'Top 10 · mais reclamações (comunidade)',
833        js_t10_games_title: 'Top 10 games · instabilidade',
834        js_t10_games_sub:
835            'Ranking ao vivo — relatos e sinais de instabilidade em jogos.',
836        js_t10_games_sub_lat:
837            'Fallback latência: dados de relatos ainda carregando. Pior HTTPS primeiro.',
838        js_games_rank_meta: 'HTTPS · última medição',
839        js_games_lat_rail_lbl: 'Latência',
840        js_games_lat_rail_https: 'HTTPS',
841        js_games_lat_rail_aria_tpl: 'Latência {ms}. Abrir serviço.',
842        js_t10_games_social_no_data:
843            'Ainda não há serviços de jogos com medição de latência suficiente para montar o Top 10. Aguarde as sondas ou alargue o catálogo.',
844        js_t10_games_social_lead:
845            'Cartão com os 10 jogos/plataformas com maior latência HTTPS medida. Use a legenda nas redes; a imagem inclui o logo Catellix e catellix.com.',
846        js_t10_games_social_card_kicker: 'Top 10 jogos · latência HTTPS',
847        js_t10_games_social_card_sub: 'Última medição · Catellix Detector',
848        js_t10_games_social_share_title: 'Top 10 jogos (latência) — Catellix Detector',
849        js_t10_games_social_modal_title: 'Cartão · Top 10 jogos (latência)',
850        js_t10_games_share_aria: 'Compartilhar Top 10 jogos',
851        js_t10_social_caption_intro_games:
852            'Top 10 de jogos e plataformas com maior latência HTTPS no Catellix Detector — partilhe com a comunidade gamer:',
853        js_t10_search_results_title: 'Resultados da busca',
854        js_t10_search_results_sub_tpl: '{n} serviços · «{q}»',
855        js_t10_search_no_results:
856            'Nenhum serviço coincide com a busca neste contexto (categoria e stack IP continuam valendo).',
857        js_t10_filter_empty_title: 'Sem cartões Top 10 para este filtro.',
858        js_t10_filter_empty_p:
859            'Ajuste categoria, IP ou busca — ou toque no ícone ao lado de «Catálogo» para restaurar a vista inicial e voltar aos destaques globais.',
860    });
861
862    /* Category labels + blurbs: keys cat_* and blurb_* */
863    merge(PACKS.pt, {
864        cat_saas_cloud: 'Cloud, estado & CDN',
865        cat_gaming: 'Jogos & plataformas',
866        cat_streaming: 'Notícias, streaming & mídia',
867        cat_social: 'Social & mensagens',
868        cat_commerce: 'Comércio & viagens',
869        cat_finance: 'Finanças & pagamentos',
870        cat_cloud: 'Infra & CDN',
871        cat_dev: 'Código, APIs & segurança',
872        cat_enterprise: 'Enterprise & CRM',
873        cat_productivity: 'Trabalho & produtividade',
874        cat_security: 'Segurança',
875        cat_reference: 'Referência, governo & educação',
876        cat_news: 'Notícias',
877        cat_travel: 'Viagens & mobilidade',
878        cat_nonprofit: 'Sem fins lucrativos',
879        cat_core: 'Busca & contas base',
880        cat_betting: 'Bets & apostas',
881        cat_adult: 'Adulto & entretenimento 18+',
882        cat_telecom: 'Telecom — redes, operadoras e equipamento',
883        cat_ai: 'Inteligência Artificial',
884        cat_education: 'Educação & universidades',
885        cat_jobs: 'Emprego & carreiras',
886        cat_communities: 'Clubes & comunidades',
887        blurb_communities:
888            'Clubes de futebol brasileiros, comunidades esportivas e fan sites. Sondagem HTTPS do site oficial.',
889        blurb_education:
890            'Universidades, vestibulares, ENEM, SISU, concursos e plataformas de ensino online.',
891        blurb_jobs:
892            'Portais de emprego, recrutamento e carreiras para o mercado brasileiro e global.',
893        blurb_ai:
894            'Chatbots, APIs e plataformas de IA generativa — ChatGPT, Claude, Gemini, DeepSeek, Copilot e outros. Latência reflete o endpoint HTTPS público; incidentes vêm de Statuspage quando disponível.',
895        blurb_saas_cloud:
896            'Páginas públicas de estado (Statuspage), cloud gerida e CDN/infra medidas por HTTPS.',
897        blurb_gaming: 'Plataformas de jogos e lojas digitais; a latência reflete o destino HTTPS sondado.',
898        blurb_streaming:
899            'Sites de notícias, rádio/TV online e streaming; o valor é do endpoint medido, não da qualidade do vídeo.',
900        blurb_social: 'Redes sociais, fóruns e mensagens; estado operacional via sondagem HTTPS.',
901        blurb_commerce: 'Lojas, marketplaces, marcas e reservas de viagem ou mobilidade.',
902        blurb_finance:
903            'Bancos, pagamentos e fintechs — medição técnica, não substitui o estado do seu banco.',
904        blurb_cloud: 'CDN, DNS e infraestrutura global.',
905        blurb_dev: 'Repositórios, CI/CD, APIs, observabilidade e ferramentas de segurança para equipes técnicas.',
906        blurb_enterprise: 'CRM, ERP e suites empresariais.',
907        blurb_productivity: 'Suites de trabalho, CRM, suporte ao cliente e colaboração em equipe.',
908        blurb_security: 'Gestão de passwords, identidade e segurança.',
909        blurb_reference: 'Governo, dados públicos, educação, ONGs e conteúdo de referência.',
910        blurb_news: 'Notícias e media online.',
911        blurb_travel: 'Reservas, mobilidade e turismo.',
912        blurb_nonprofit: 'Organizações e conteúdo sem fins lucrativos.',
913        blurb_core: 'Motores de busca, contas Microsoft e registros DNS nacionais.',
914        blurb_betting:
915            'Plataformas de apostas e betting regulamentadas ou amplamente usadas; a medição reflete disponibilidade técnica do endpoint HTTPS.',
916        blurb_adult:
917            'Serviços adultos e plataformas 18+ monitorados pela disponibilidade técnica do endpoint HTTPS público.',
918        blurb_telecom:
919            'Operadoras e provedores, infraestrutura e fabricantes. Sondamos dois de
919stinos HTTPS quando há mirror/edge público e usamos a melhor latência; no servidor, até vários IPs por hostname em paralelo. Não reflete cobertura rádio nem throughput real.',
920        desc_fallback: 'Serviço monitorado pelo Catellix Detector com sondas HTTPS periódicas.',
921    });
922
923    /* English pack — mirror keys */
924    merge(PACKS.en, {
925        meta_description: '7-day history of major worldwide services — Catellix Detector.',
926        page_title: 'Catellix Detector — 7-day history',
927
928        nav_quick_actions: 'Detector quick actions',
929        nav_mascote_aria: 'Play Catellix mascot video',
930        nav_report: 'Click here to report',
931        locale_switch_aria: 'Language: Portuguese or English',
932        theme_goto_dark: 'Use dark theme',
933        theme_goto_light: 'Use light theme',
934
935        back_home: '← Back to home',
936        back_home_aria: 'Back to Catellix home (catellix.com)',
937
938        sidebar_complaints_title: 'Top 10 complaints',
939        sidebar_complaints_window: 'Window',
940        sidebar_rank_live: 'Live',
941        sidebar_rank_live_title:
942            'Auto-refresh: the ranking refetches from the server about every 75s (reports + aggregated signals).',
943        sidebar_complaints_loading: 'Loading…',
944        sidebar_complaints_aria: 'Services with the most community reports',
945        sidebar_ad_slots_title: 'Support the Project',
946        sidebar_ad_slots_lead:
947            'Contribute to Catellix Detector and get your logo featured with a direct link on our main page.',
948        ad_right_mobile_badge:
949            'Premium strip — on mobile this is the ONLY ad that appears, pinned at the top and scrolling continuously!',
950        sidebar_ad_slots_scroll_hint: 'Hover the strip to pause the animation.',
951        sidebar_ad_slots_reduced_hint: 'Static slots (reduced motion enabled in your system).',
952        sidebar_ad_slots_carousel_aria: 'Catellix Detector supporters logo strip',
953        sidebar_ad_slots_count_tpl: '{avail}/{total} spaces available',
954        sidebar_ad_slots_count_caption: 'Featured strip slots',
955        sidebar_ad_slots_count_hint_tpl: '{avail} free · {total} total slots',
956        sidebar_ad_slots_count_sr_tpl: '{avail} free spaces out of {total} on the featured strip.',
957        sidebar_ad_slots_micro_add_aria: 'Open contribution to publish your logo',
958        sidebar_spotlight_campaign_badge_tpl: '{n}d',
959        det_local_ad_img_alt: 'Supporter logo',
960        det_local_ad_cta: 'Visit the project',
961        det_local_ad_close_aria: 'Close',
962        det_local_ad_countdown_tpl: 'Closing in {s}s',
963        det_support_3d_title: 'Want to support us?',
964        det_support_3d_sub: 'Community-first project — contribute and publish your logo.',
965        det_support_3d_cta: 'Contribute / Publish logo',
966        det_topbar_dismiss_aria: 'Dismiss ad',
967        ad_pack_kicker: 'Catellix Detector · Supporters',
968        ad_pack_headline: 'Contribute to the project and get your logo published here!',
969        ad_pack_base_note_tpl:
970            'This premium strip: {dayrate} per day. Gradual discount: the more days, the bigger the discount (up to −20% at {days} days). E.g.: {days} days from {full30} for {final30}.',
971        ad_pack_left_strip_notice:
972            'Tip: the left strip has ads from R$ 10/day. This flow is for the premium strip on the right (R$ 20/day).',
973        ad_pack_right_strip_notice:
974            'Tip: the premium right strip has positions at R$ 20/day. This flow is for the left strip (R$ 10/day).',
975        ad_pack_table_title: 'Reference amounts',
976        ad_pack_th_days: 'Days',
977        ad_pack_th_price: 'Contribution',
978        ad_pack_days_label: 'Days featured',
979        ad_pack_email_label: 'Email (report at end of period)',
980        ad_pack_foot_lead:
981            'Your contribution strengthens probes, application monitoring, and the open Detector for the community. Full story and transparency on the website.',
982        ad_pack_quem_somos_btn: 'About us — full story',
983        ad_pack_quem_somos_aria: 'About us — open full page on Catellix website (new tab)',
984        ad_pack_price_promo_badge: 'Special discount -20%',
985        ad_pack_cancel: 'Close',
986        ad_pack_pay_mp: 'Mercado Pago (card or PIX on their site)',
987        ad_pack_pay_pix: 'PIX on this page',
988        ad_pack_pix_intro:
989            'Copy the code or scan the QR code. You can also open the payment in the Mercado Pago app or website. After confirmation, we activate your space and send the report at the end of the cycle.',
990        ad_pack_pix_code_lbl: 'PIX copy-and-paste code',
991        ad_pack_pix_copy: 'Copy code',
992        ad_pack_pix_open_mp: 'Open PIX in Mercado Pago',
993        ad_pack_pix_pending: 'Waiting for confirmation…',
994        ad_pack_pix_approved:
995            'Contribution confirmed! We also sent a demo report email (sample metrics). The full report arrives at the end of the cycle. Upload your logo below.',
996        ad_pack_pix_paid_btn: 'I have already paid',
997        ad_pack_redirecting: 'Opening secure checkout…',
998        ad_pack_err_network: 'Could not reach the server. Try again.',
999        ad_pack_err_checkout: 'Could not start payment.',
1000        ad_pack_close_aria: 'Close',
1001        ad_pack_estimate_tpl: 'Total contribution: {price} ({days} day(s)).',
1002        ad_pack_success:
1003            'Request received! Our team will contact you shortly to confirm and activate your space.',
1004        ad_pack_err_days_tpl: 'Enter between 1 and {max} days.',
1005        ad_pack_err_email: 'Enter a valid email address.',
1006        ad_pack_slot_aria_tpl: 'Support Catellix — space {n}',
1007        ad_pack_slots_tpl: 'Spaces available {avail}/{total}',
1008        top_bar_local_spin_region_aria: 'Featured supporters — auto-rotating strip',
1009        top_bar_local_spin_link_aria: 'Catellix supporter — visit site (new tab)',
1010        ad_pack_pre_notice_title: 'Before contributing',
1011        ad_pack_pre_notice_body:
1012            'After confirmation, you can upload your logo once in this flow. To replace the logo, update the link, or fix a submission, open a support ticket — handled in order of arrival.',
1013        ad_pack_open_support: 'Contact support',
1014        ad_pack_spotlight_5s: '',
1015        ad_pack_spotlight_fair: '',
1016        ad_pack_report_note: '',
1017        ad_pack_post_pay_title: 'Contribution confirmed! 🎉',
1018        ad_pack_post_pay_lead:
1019            'The logo and link you chose above will be sent to our team. Confirm with the button below. For changes after submission, use support.',
1020        ad_pack_creative_label: 'Your logo',
1021        ad_pack_creative_hint: 'PNG, JPEG, or WebP · up to 4 MB · square recommended.',
1022        ad_pack_creative_submit: 'Send logo to Catellix',
1023        ad_pack_creative_ok: 'Logo received! Our team has been notified and will activate your space shortly.',
1024        ad_pack_creative_err: 'Could not upload. Try again or contact support.',
1025        ad_pack_demo_report_err: 'Demo report email could not be sent (check server SMTP).',
1026        ad_pack_creative_need_file: 'Choose a logo image (PNG, JPEG, or WebP) before sending.',
1027        ad_pack_creative_url_label: 'Your website or project URL',
1028        ad_pack_creative_url_hint: 'Destination when someone clicks your logo (https://…).',
1029        ad_pack_creative_err_url: 'Enter a valid URL starting with https:// or http://.',
1030        ad_pack_ticket_top: 'Open ticket',
1031        ad_pack_story_heading: 'Brazil · Enterprise',
1032        ad_pack_story_p1:
1033            'Open Detector for the community: latency, incidents, and service health — with transparency.',
1034        ad_pack_story_p2:
1035            'Two featured strips: 25 slots on the left (R$ 10/day) and 15 premium on the right (R$ 20/day). Three fixed logos (Catellix, Kids and Hoje+) are always present. Contributions strengthen probes and the open Detector.',
1036        ad_pack_mobile_premium_seal: 'The 15 slots in this strip are displayed prominently at the top of the mobile version — the ONLY ad visible on mobile, scrolling in a continuous golden-framed carousel.',
1037        ad_pack_report_title: 'Example of the daily report you receive by email',
1038        ad_pack_report_th_metric: 'Metric',
1039        ad_pack_report_th_value: 'Value',
1040        ad_pack_report_row_impressions: 'Impressions (views)',
1041        ad_pack_report_row_clicks: 'Real clicks',
1042        ad_pack_report_row_ctr: 'CTR (click-through rate)',
1043        ad_pack_report_row_day: 'Campaign day',
1044        ad_pack_report_row_remaining: 'Days remaining',
1045        ad_pack_report_row_strip: 'Strip',
1046        ad_pack_report_footer: 'Sent daily at 06:00 AM · real server data · includes 24h pre-expiry warning',
1047        ad_pack_report_strip_left: 'Left (R$ 10/day)',
1048        ad_pack_report_strip_right: 'Premium right (R$ 20/day)',
1049        ad_pack_pixel_rec: '📐 Recommended: 400×400 px (square) · PNG or WebP transparent · max 512 KB',
1050        ad_pack_enterprise_badge: 'Enterprise',
1051        ad_pack_enterprise_title: 'Upload your logo and link, preview, then pay.',
1052        ad_pack_enterprise_back_kicker: 'Community spotlight',
1053        ad_pack_enterprise_back_title: 'Your project in the spotlight',
1054        ad_pack_enterprise_back_lead:
1055            'Your logo on the Detector strip with a direct link, fair rotation among supporters, and a visibility report at the end of the cycle.',
1056        ad_pack_enterprise_back_li1: 'Technical reach: Catellix users see your brand next to live service health.',
1057        ad_pack_enterprise_back_li2: 'Transparency: contributions fund probes and open monitoring for the community.',
1058        ad_pack_enterprise_back_hint: 'Click and drag the card (out
1058side buttons) to view it in 3D.',
1059        ad_pack_preview_placeholder: 'Upload your logo to see the preview.',
1060        ad_pack_pick_image: 'Upload image',
1061        ad_pack_err_creative_before_pay:
1062            'Upload your logo and enter a valid URL (https:// or http://) before continuing to payment.',
1063        sidebar_catellix_products_aria: 'Catellix product status',
1064        sidebar_mon_aria: 'Catellix Monitoring — open official page (new tab)',
1065        sidebar_kids_aria: 'Catellix Kids — open plans and official page (new tab)',
1066        sidebar_status_checking: 'Checking…',
1067
1068        hero_tagline: '7-day history, latency hub, and community reports.',
1069        hero_tagline_tpl: 'Reports — {p}: latency hub and community ranking.',
1070
1071        lbl_category: 'Category',
1072        lbl_category_aria: 'Filter by category',
1073        lbl_ip_stack: 'IP stack',
1074        lbl_ip_stack_aria: 'Filter by IPv4 or IPv6 (DNS)',
1075        ip_all: 'All (IP)',
1076        ip_v4: 'IPv4 only',
1077        ip_dual: 'IPv4 + IPv6',
1078        ip_v6: 'IPv6 only',
1079        lbl_rank: 'Sort',
1080        lbl_rank_aria: 'Card sort order',
1081        lbl_view: 'Layout',
1082        view_row_title: 'Carousel',
1083        view_grid_title: 'Grid',
1084        view_list_title: 'List',
1085        probe_badge_label: 'Network',
1086        lbl_refresh_group: 'Refresh',
1087        lbl_refresh_interval: 'Auto-refresh interval',
1088        lbl_refresh_interval_title: 'How often to reload catalog and rankings',
1089        refresh_now_title: 'Refresh now',
1090        refresh_now_aria: 'Refresh now',
1091        refresh_countdown_title: 'Next refresh in {t}',
1092        refresh_countdown_loading: 'Updating…',
1093
1094        loading_banner: 'Loading catalog…',
1095        catalog_sync_hint: 'Syncing live data in the background…',
1096        catalog_home_title: 'Home view: reset filters and Top 10 cards',
1097        catalog_home_aria: 'Catalog: reset filters and show global Top 10',
1098        catalog_heading: 'Catalog',
1099        catalog_search_lbl: 'Search catalog',
1100        catalog_search_placeholder: 'Search service, domain, or ID…',
1101        catalog_search_aria: 'Search catalog',
1102        catalog_search_enter_hint:
1103            'Press Enter to open results in a panel with all matching catalog services.',
1104        catalog_view_toggle_cards_txt: 'Cards',
1105        catalog_view_toggle_cards_title: 'Show catalog as cards (grid)',
1106        catalog_view_toggle_cards_aria: 'Switch to card grid view',
1107        catalog_view_toggle_list_txt: 'Rows',
1108        catalog_view_toggle_list_title: 'Show catalog as rows (list)',
1109        catalog_view_toggle_list_aria: 'Switch to row list view',
1110
1111        main_complaints_heading: 'Top 10 · most complaints (community)',
1112        main_complaints_sub_loading: 'Loading ranking…',
1113        main_complaints_aria: 'Ten services with the most verified reports',
1114
1115        dash_metrics_main: 'Numeric summary',
1116        dash_metrics_hint: 'targets, OK, average latency…',
1117        dash_metrics_aria: 'Numeric summary',
1118        metric_destinations: 'targets',
1119        metric_destinations_title: 'Unique catalog entries (domains/services monitored)',
1120        metric_ok: 'OK',
1121        metric_ok_title: 'Last HTTPS probe succeeded',
1122        metric_fail: 'fail',
1123        metric_fail_title: 'Probe failed (timeout/error)',
1124        metric_unknown: 'no data',
1125        metric_unknown_title: 'No measurement yet or unknown state',
1126        metric_urls: 'URLs probed',
1127        metric_urls_title: 'Sum of HTTPS targets per service (multi-target)',
1128        metric_statuspage: 'Statuspage',
1129        metric_statuspage_title: 'Services with a Statuspage.io page in the catalog',
1130        metric_incident: 'w/ incident',
1131        metric_incident_title: 'Public status APIs with an incident flag (severity ≥ minor)',
1132        metric_games: 'games alert',
1133        metric_games_title: 'Gaming platforms with an alert in the summary',
1134        metric_trends: 'trends',
1135        metric_trends_title: 'Ecosystem indicators (sample)',
1136        metric_probe_suffix: 's probe',
1137        metric_probe_title: 'Interval configured on the server',
1138        metric_lat_avg: 'avg ms',
1139        metric_lat_avg_title: 'Average latency of OK probes in the filtered set',
1140
1141        dash_obs_main: 'Global hub · observation points',
1142        dash_obs_hint: 'POPs and probes',
1143        dash_obs_hub_aria: 'Latency observation points',
1144
1145        dash_prob_main: 'Issues & top by category',
1146        dash_prob_hint: 'Global Top 10 + one list per category',
1147        prob_catalog_sr: 'Issue catalog',
1148        prob_catalog_global_title: 'Top 10 · issues (global)',
1149
1150        dash_rank_main: 'Quick rankings',
1151        dash_rank_hint: 'Community first · then top 5 by type',
1152        rank_mood_label: 'View',
1153        rank_mood_aria: 'Toggle good vs bad rankings',
1154        rank_mood_bad: 'Bad',
1155        rank_mood_good: 'Good',
1156        rank_mood_toggle_title: 'Toggle view',
1157        rank_mood_toggle_sr: 'Toggle between positive performance and incidents view',
1158        rank_col_community: 'Top 5 · community',
1159        rank_col_community_sub: 'Anonymous reports; not official status.',
1160        rank_col_lat_fast: 'Top 5 · low latency',
1161        rank_col_lat_fast_sub: 'Last probe OK (current filter).',
1162        rank_col_lat_slow: 'Top 5 · high latency',
1163        rank_col_lat_slow_sub: 'Among those that responded OK.',
1164        rank_col_incidents: 'Top 5 · incidents',
1165        rank_col_incidents_sub: 'Public Statuspage APIs.',
1166        rank_col_trends: 'Top 5 · trends',
1167        rank_col_trends_sub: 'Aggregated sample of highlighted services.',
1168        rank_col_games: 'Top 5 · games',
1169        rank_col_games_sub: 'Platforms (aggregated summary).',
1170        rank_more_full: '+ Show full ranking',
1171        rank_more_compact: 'Show top 5 only',
1172
1173        dash_dd_main: 'Trends',
1174        dash_dd_hint: 'aggregated sample',
1175        dd_scroll_hint_title: 'Swipe sideways — more items',
1176
1177        footer_contact_title: 'Message Catellix',
1178        footer_contact_intro:
1179            'Use the form to reach us: partnerships, Detector listings and monitoring, questions, or service issues. The request goes to Catellix support with a reference; the internal email notes the source as Catellix Detector.',
1180        footer_contact_btn: 'Open form — message Catellix',
1181        footer_support_label: 'Support:',
1182        footer_support_after: ' confirmation and reply to the email you provide in the form.',
1183        footer_about: 'About us?',
1184        footer_social_nav: 'Catellix social links',
1185        footer_social_label: 'Social',
1186        footer_meta_suffix: 'Network solutions',
1187        footer_privacy: 'Privacy policy',
1188        footer_copy: 'Catellix © 2026',
1189        foot_note_prefix: 'Auto-refresh every 5 min · per-service charts up to 7 days · ',
1190
1191        contact_modal_title: 'Message to Catellix',
1192        contact_modal_intro:
1193            'Your submission is forwarded to Catellix support (e.g. [email protected]). It is recorded that the contact c
1193ame from the Catellix Detector page. You will receive a confirmation with a reference at the email you enter below.',
1194        contact_name: 'Name',
1195        contact_name_ph: 'Your name',
1196        contact_email: 'Email *',
1197        contact_email_ph: '[email protected]',
1198        contact_reason: 'Reason for message *',
1199        contact_reason_empty: '— Select —',
1200        contact_reason_partner: 'Partnership / improve monitoring listings',
1201        contact_reason_problem: 'Issue or question about the Detector',
1202        contact_reason_other: 'Other',
1203        contact_company: 'Company or project (optional)',
1204        contact_company_ph: 'E.g. ISP, NOC team…',
1205        contact_subject: 'Short subject (optional)',
1206        contact_subject_ph: 'One-line summary',
1207        contact_message: 'Message *',
1208        contact_message_ph: 'Write to Catellix: partnership, Detector listing, question, or issue…',
1209        contact_cancel: 'Cancel',
1210        contact_send: 'Send to Catellix',
1211
1212        modal_close: 'Close',
1213        chart_period_label: 'Range',
1214        chart_period_aria: 'History time range',
1215        chart_target_label: 'Target',
1216        chart_target_aria: 'Choose target for chart',
1217        chart_multi_label: 'All probes on one chart',
1218        chart_block_aria: 'Latency history',
1219        chart_canvas_aria: 'Latency history',
1220        targets_table_aria: 'Targets and latency',
1221        th_destination: 'Target',
1222        th_latency: 'Latency',
1223        th_ips: 'IPs (DNS)',
1224
1225        chart_range_1: 'Last hour',
1226        chart_range_3: 'Last 3 hours',
1227        chart_range_5: 'Last 5 hours',
1228        chart_range_8: 'Last 8 hours',
1229        chart_range_12: 'Last 12 hours',
1230        chart_range_24: 'Last day',
1231        chart_range_72: 'Last 3 days',
1232        chart_range_120: 'Last 5 days',
1233        chart_range_168: 'Last 7 days',
1234        chart_range_360: 'Last 15 days',
1235        chart_range_720: 'Last 30 days',
1236
1237        cs_title: 'Community complaints',
1238        cs_total: 'Total (30d)',
1239        cs_anon: 'Anonymous',
1240        cs_reg: 'Verified',
1241        cs_feedback_title: 'Public comments',
1242        cs_loading: 'Loading…',
1243
1244        star_title: 'Rate service',
1245        star_picker_aria: '1 to 5 star rating',
1246        star_n1: '1 star',
1247        star_n2: '2 stars',
1248        star_n3: '3 stars',
1249        star_n4: '4 stars',
1250        star_n5: '5 stars',
1251        star_tap: 'Tap a star',
1252        star_auth_lead: 'To save your rating, confirm your identity:',
1253        star_or: 'or',
1254        star_send_code: 'Send code',
1255        star_confirm: 'Confirm',
1256
1257        report_picker_title: 'Report an issue',
1258        report_picker_lead: 'Pick a catalog service. Use search to filter by name, domain, or ID.',
1259        report_picker_search_lbl: 'Filter services',
1260        report_picker_placeholder: 'Filter by name, domain, or ID…',
1261        report_picker_empty: 'No services match your search.',
1262        report_picker_row_report: 'Report',
1263
1264        cr_title: 'Community report',
1265        cr_question:
1266            'Choose the issue type, optionally a comment, and confirm identity via email or Google.',
1267        cr_question_main:
1268            'Pick a reason, add an optional comment, then confirm who you are. To see what the map shows, open',
1269        cr_explainer_fab_link: 'How it works',
1270        cr_yes: 'Start report',
1271        cr_no: 'Cancel',
1272        cr_reason_aria: 'Report reason',
1273        cr_reason_lead: 'Main reason',
1274        cr_required: '(required)',
1275        cr_comment: 'Comment',
1276        cr_optional: '(optional)',
1277        cr_reason_line: 'Main reason (required)',
1278        cr_comment_line: 'Comment (optional)',
1279        star_label_default: 'Tap a star',
1280        cr_comment_ph: 'Describe what you observed.',
1281        cr_public: 'Make comment public on this service panel',
1282        cr_anon: 'Publish as anonymous (if public)',
1283        cr_broadcast: 'Notify on the global page in real time',
1284        cr_broadcast_name: 'Show my name on the notification (else anonymous)',
1285        cr_display_name: 'Display name',
1286        cr_display_name_ph: 'E.g. John D.',
1287        cr_continue_verify: 'Continue — verification',
1288        cr_verify_lead:
1289            'Confirm identity via email (4-digit code) or Google sign-in (instant). Contact is not stored in plain text.',
1290        cr_verify_lead_main: 'Confirm with email or Google (menu below).',
1291        cr_channel_lbl: 'Verify with',
1292        cr_channel_aria: 'Email or Google',
1293        cr_opt_email: 'Email (code)',
1294        cr_opt_google: 'Google (instant)',
1295        cr_email_lbl: 'Email',
1296        cr_google_hint: 'Use “Continue with Google” below.',
1297        cr_send_code: 'Send code',
1298        cr_code_lbl: '4-digit code',
1299        cr_confirm: 'Confirm report',
1300
1301        cat_filter_all: 'Top 10 & highlights — all categories',
1302        cat_filter_todos: 'All',
1303        shelf_orphans_title: 'More services',
1304
1305        rank_sort_live_problems: 'Issues now · worst first (community + failures + incidents)',
1306        rank_sort_latency_desc: 'Latency · highest first',
1307        rank_sort_latency_asc: 'Latency · lowest first',
1308        rank_sort_rank_global: 'Global ranking (# measured)',
1309        rank_sort_fail_first: 'Errors last; then latency among equals',
1310        rank_sort_incident_first: 'Statuspage incident first',
1311        rank_sort_name: 'Name A → Z',
1312        rank_sort_name_desc: 'Name Z → A',
1313
1314        toast_title: 'Real-time complaint',
1315        toast_by: 'by',
1316
1317        foot_link_panel: 'Panel',
1318        foot_link_site: 'Site',
1319
1320        js_tile_report: 'Report issue',
1321        js_tile_report_title: 'Report issue (+1 community, anti-abuse rules)',
1322        js_list_report: 'Report',
1323        js_list_report_aria: 'Report issue',
1324        js_rank_more_full: '+ Show full ranking',
1325        js_rank_more_top5: 'Show top 5 only',
1326        js_badge_no_data: 'No data',
1327        js_pill_no_data: 'No data',
1328        js_lat_no_class: 'No classification.',
1329        js_primary_no_measure: 'No measurement this cycle',
1330        js_icmp_ok: 'Responds to ping (ICMP)',
1331        js_icmp_no: 'No ICMP echo (blocked or filtered)',
1332        js_icmp_wait: 'Waiting for ICMP sample…',
1333        js_probe_icmp: 'ICMP (ping)',
1334        js_prob_hint_tls: '',
1335        js_report_picker_loading: 'Loading catalog…',
1336        js_comm_loading_window: 'Loading community data (window:',
1337        js_comm_sub_loading_tpl: 'Loading community data (window: {d})…',
1338        js_comm_sub_err_tpl: 'Could not load ranking (window: {d}).',
1339        js_comm_sub_ready_tpl: 'Verified reports — {p} — click a service for details and charts.',
1340        js_comm_period_24h: 'today since midnight (Brasília time, UTC−3)',
1341        js_comm_period_7d: 'last 7 calendar days (Brasília)',
1342        js_comm_period_15d: 'last 15 calendar days (Brasília)',
1343        js_comm_period_30d: 'last 30 calendar days (Brasília)',
1344        js_comm_rank_loading: 'Loading community ranking…',
1345        js_comm_could_not: 'Could not load ranking (window:',
1346        js_comm_rank_err_li: 'Ranking unavailable. Refresh the page.',
1347        js_comm_ol_unavail: 'Ranking unavailable.',
1348        js_comm_ol_empty: 'No community reports yet.',
1349        js_open_service_aria: 'Open',
1350        js_sidebar_meta_reports: 'reports in window',
1351        js_sidebar_meta_simple: '+{n}',
1352        js_sidebar_meta_mixed: '+{n} reports',
1353        js_sidebar_rank_up: 'Moved up in the ranking (since last refresh)',
1354        js_sidebar_rank_down: 'Moved down in the ranking (since last refresh)',
1355        js_vol_trend_up_title:
1356            'Recent volume: more reports in the last 30 min than in the previous 30 min ({cur} vs {prev})',
1357        js_vol_trend_down_title:
1358            'Recent volume: fewer reports in the last 30 min than in the previous 30 min ({cur} vs {prev})',
1359        js_top30_btn: 'Top 30 report',
1360        js_top30_modal_title: 'Top 30 · community',
1361        js_top30_embed_title: 'Top 30 — community',
1362        js_top10_trends_embed_title: 'Top 10 — aggregated trends',
1363        js_top10_trends_embed_lead:
1364            'Top 10 preview in real time. The Top 30 report (PDF and sharing) opens via the button below.',
1365        js_top30_mobile_cta: 'Top 30 — report',
1366        js_top30_mobile_cta_aria: 'Opens the Top 30 report with print/PDF and sharing',
1367        js_top30_modal_lead: 'Services with the most reports in the selected window; status and pace match the sidebar ranking data.',
1368        js_top30_fallback_note:
1369            'No community reports in this window — provisional list from the external feed aggregator.',
1370        js_top30_empty: 'No data yet. The ranking will update shortly.',
1371        js_top30_err: 'Could not load the ranking.',
1372        js_vol_trend_stable_title:
1373            'Stable volume: {cur} reports in the last 30 min (same as the previous window, {prev}).',
1374        js_rank_trend_stable_title: 'Stable position since the last ranking refresh.',
1375        js_rank_trend_baseline_title:
1376            'First position in this session — no up/down history yet.',
1377        js_top30_trend_up: 'Rising activity',
1378        js_top30_trend_down: 'Drop detected',
1379        js_top30_trend_stable: 'Stable',
1380        js_top30_sources_tpl: '{n} sources',
1381        js_top30_status_ok: 'ok',
1382        js_top30_status_unstable: 'unstable',
1383        js_top30_status_down: 'incident',
1384        js_rank_share_btn: 'Enterprise report',
1385        js_rank_share_btn_short: 'Report',
1386        js_rank_share_aria_top10: 'Formal report with Top 10 only (table, PDF and share)',
1387        js_rank_share_btn_top10: 'Top 10 executive report (PDF, WhatsApp, email)',
1388        js_rank_share_aria_top20: 'Generate formal Top 20 report',
1389        js_rank_share_aria_top30: 'Generate formal Top 30 trends report',
1390        js_top20_open_btn: 'Top 20 studio',
1391        js_top20_open_aria: 'Open premium Top 20 view with report sharing',
1392        js_top20_modal_title: 'Top 20 · Catellix studio',
1393        js_top20_modal_lead:
1394            'Community ranking with a presentation-ready layout and enterprise export.',
1395        js_top20_empty: 'Not enough data for Top 20 in this window yet.',
1396        js_report_modal_title: 'Catellix Detector report',
1397        js_report_btn_print: 'Print / Save as PDF',
1398        js_report_btn_wa: 'WhatsApp',
1399        js_report_btn_email: 'Email',
1400        js_report_btn_native: 'Share…',
1401        js_report_title_top10: 'Executive report · Top 10 complaints (community)',
1402        js_report_title_top20: 'Executive report · Top 20 complaints (community)',
1403        js_report_title_top30: 'Executive report · Top 30 aggregated trends',
1404        js_report_subtitle_enterprise:
1405            'Generated by Catellix Monitoring — operational indicators and catalog composition.',
1406        js_report_generated: 'Generated at',
1407        js_report_sec_ranking: 'Ranking table',
1408        js_report_sec_mix_cat: 'Ecosystem mix (catalog categories)',
1409        js_report_mix_cat_note:
1410            'Percentage of monitored services by category — macro view of the sampled universe.',
1411        js_report_sec_mix_ip: 'Connectivity profile (IP stack)',
1412        js_report_mix_ip_note:
1413            'IPv4 / IPv6 share in the catalog; a technical sample metric, not personal demographics.',
1414        js_report_ip_other: 'Other / unknown',
1415        js_report_footer:
1416            'The report summarizes public Detector data. Reproduction with attribution to Catellix.',
1417        js_report_th_service: 'Service',
1418        js_report_th_status: 'Status',
1419        js_report_th_trend: 'Trend',
1420        js_report_th_sources: 'Sources',
1421        js_report_th_signal: 'Signal',
1422        js_report_th_context: 'Context',
1423        js_report_share_line: 'Detector executive summary',
1424        js_report_share_site_line: 'Monitoring & tools: https://catellix.com',
1425        js_report_share_no_rank_lines: '(No ranking lines in this report.)',
1426        js_report_site_tagline: 'Catellix Monitoring — Detector',
1427        js_t10_actions_aria: 'Top 10 report and social card',
1428        js_t10_social_btn: 'Create card for Instagram / social',
1429        js_t10_social_btn_short: 'Share',
1430        js_t10_social_aria: 'Generate Top 10 image and caption for social media',
1431        js_t10_social_lead: 'Use the caption in stories or posts. The image includes the Catellix logo and catellix.com.',
1432        js_t10_social_no_data: 'No Top 10 community data in this window to share yet.',
1433        js_t10_social_caption_intro:
1434            'Internet instability ranking (Top 10) on Catellix Detector — share with anyone who needs visibility:',
1435        js_t10_social_card_kicker: 'Internet instability ranking',
1436        js_t10_social_enterprise_hint: 'Logo · score /100 · Catellix stars',
1437        js_t10_social_card_footer: 'Catellix Detector · live data',
1438        js_t10_social_share_title: 'Internet instability ranking — Catellix Detector',
1439        js_t10_social_modal_title: 'Social card · instability ranking',
1440        js_t10_social_act_copy: 'Copy caption',
1441        js_t10_social_act_wa: 'WhatsApp',
1442        js_t10_social_act_save: 'Save PNG',
1443        js_t10_social_act_native: 'Share…',
1444        js_t10_social_ig_copied: 'Image copied! Paste it on Instagram to post.',
1445        js_t10_social_preview_alt: 'Preview of the Top 10 card for social sharing',
1446        js_t10_social_preparing: 'Preparing your card…',
1447        js_t10_social_icons_loading: 'Loading logos on the card…',
1448        js_t10_social_card_failed: 'Could not generate the image. Try closing and opening again.',
1449        js_report_email_subj: 'Catellix Detector report',
1450        js_m_top10_comm_title: 'Instability ranking · Top 10',
1451        js_m_top10_comm_sub: 'Reports and signals in the window · tap a service for details',
1452        js_m_top10_comm_loading: 'Loading community ranking…',
1453        js_top10_complaints_mixed: '+{n} reports',
1454        js_tile_comm_break_tpl: '+{n} reports in period',
1455        js_sidebar_empty_comm: 'No community reports in this window yet.',
1456        js_relato_prefix: 'Report:',
1457        js_filter_banner_label:
1458            'Filter active · grid and first shelf follow search; Top 5 panel and latency/rating shelves = full catalog',
1459        js_top10_worst_lat: 'Top 10 · worst latency',
1460        js_top10_problems: 'Top 10 · issues',
1461        js_rank_list_empty: 'Nothing to list.',
1462        js_rank_no_data: 'No data.',
1463        js_rank_no_ok: 'No OK measurements with this filter.',
1464        js_top10_empty_shelf: 'Not enough data',
1465        js_complaints_loading_1d: 'Loading ranking (1 day)…',
1466        js_complaints_loading_7d: 'Loading ranking (7 days)…',
1467        js_complaints_loading: 'Loading ranking…',
1468        js_complaints_empty_24h: 'No verified reports today (since midnight, Brasília time).',
1469        js_complaints_empty_7d: 'No verified reports in the last 7 days.',
1470        js_complaints_filter_hint:
1471            'There are reports in this window, but ranking services do not match the current filter (category, search, or IP). Clear the filter to see them here.',
1472        js_cards_loading_rank: 'Loading ranking',
1473        js_cards_empty_filter:
1474            'There are reports in the window, but the ranking does not match the current filter. Clear category, search, or IP.',
1475        js_cards_empty_24h: 'No reports today (Brasília) with this filter.',
1476        js_cards_empty_7d: 'No reports in the last 7 days with this filter.',
1477        js_cards_no_top10:
1478            'No Top 10 cards for this filter. Clear category, text, or IP — or change sort order.',
1479        js_more_complaints: 'Most complaints',
1480        js_more_latency: 'Highest latency',
1481        js_worst_rating: 'Worst rating',
1482        js_best_rating: 'Best rating',
1483        js_less_latency: 'Best latency',
1484        js_sub_last_measure: 'last probe · full catalog · ties: major brands first',
1485        js_sub_stars_catalog: 'score + stars · full catalog',
1486        js_sub_stars_telecom: 'score + stars + latency + loss + jitter + uptime + reports · telecom',
1487        js_sub_stars_telecom_worst:
1488            'score + stars + latency + loss + jitter + uptime + reports · telecom · ties: smaller brands first; if still tied, order varies',
1489        js_sub_stars_telecom_best:
1490            'score + stars + latency + loss + jitter + uptime + reports · telecom · ties: larger brands first; if still tied, order varies',
1491        js_rating_board_info_title: 'How does this ranking work?',
1492        js_rating_board_info_body:
1493            'Position is determined by a composite score that considers:\n\n' +
1494            '• Trust score — based on community reports\n' +
1495            '• Stars — average user ratings\n' +
1496            '• Average latency — automatically measured response time\n' +
1497            '• Packet loss — connection quality\n' +
1498            '• Jitter — connection stability\n' +
1499            '• Uptime — whether the service is currently online\n' +
1500            '• Volume of negative reports\n\n' +
1501            'When score and stars are tied, the tiebreaker uses technical qual
1501ity: latency, packet loss, jitter, and uptime. All brands are evaluated with the same criteria.',
1502        js_t10_info_btn_aria: 'Information about this panel',
1503        js_latency_rank_info_title: 'About this latency ranking',
1504        js_latency_rank_worst_body:
1505            'Last probe · full catalog · ties: major brands first.\n\n' +
1506            'Sort: highest latency (OK probes); ties — global prominence (domain + catalog signals).',
1507        js_latency_rank_best_body:
1508            'Fastest · full catalog · ties: major brands first.\n\n' +
1509            'Only destinations with a measured latency are listed; if ICMP does not reply, a service may still appear when there is a signal that the destination is OK.',
1510        js_sub_fastest: 'fastest · full catalog · ties: major brands first',
1511        js_prob_sort_latency:
1512            'Sort: highest latency (OK probes); ties — global prominence (domain + catalog signals).',
1513        js_relato_word: 'report',
1514        js_relato_plural: 'reports',
1515        js_window_label: 'Window',
1516        js_window_aria: 'Complaints ranking window',
1517        js_sidebar_hourly_modal_title: 'Reports by hour',
1518        js_sidebar_hourly_modal_lead:
1519            'Hourly distribution in the selected window (verified reports + aggregated signals).',
1520        js_sidebar_hourly_chart_lead: 'reports by hour',
1521        js_sidebar_hourly_loading: 'Loading chart…',
1522        js_sidebar_hourly_err: 'Could not load the chart.',
1523        js_sidebar_hourly_err_timeout:
1524            'The server did not respond in time. Check your connection or try again shortly.',
1525        js_sidebar_hourly_err_429:
1526            'Server rate-limited (429). Wait a minute and open the chart again.',
1527        js_sidebar_hourly_chart_hint: 'Report count aggregated per hour (UTC).',
1528        js_sidebar_hourly_chart_aria: 'Reports-by-hour chart',
1529        js_sidebar_hourly_foot_tpl: '+{n}',
1530        js_sidebar_hourly_no_data: 'No report data in this window.',
1531        js_rank_pill_label: 'Pulse',
1532        js_t10_btn_report: 'Report',
1533        js_t10_report_now_line: 'Report now!',
1534        js_t10_report_flow_btn: 'Report',
1535        js_t10_report_flow_aria_tpl: 'Open report for {name}',
1536        js_sidebar_avg_pill_title_tpl:
1537            'Pulse {avg} reports/h · {total} total in window. Click for hourly chart.',
1538        js_sidebar_avg_pill_title_spike_tpl:
1539            'Spike in last {uh} h: {short} reports/h (vs window avg {avg}/h). Total {total}. Click for hourly chart.',
1540        js_sidebar_avg_pill_title_down: 'Service down (technical probe failed). Click for details.',
1541        js_sidebar_pill_down: 'DOWN',
1542        js_sidebar_meta_probe_down: 'probe down',
1543        js_sidebar_meta_accel: 'accelerating',
1544        js_sidebar_meta_anomaly: 'anomaly',
1545        js_sidebar_meta_anomaly_detail: 'Z-score {z} (above baseline for this service)',
1546        js_tile_comm_avg_hint_tpl:
1547            'Average {avg} reports/hour in window; {total} reports total — click for community details',
1548        js_window_1d: '1 day',
1549        js_window_7d: '7 days',
1550        js_window_15d: '15 days',
1551        js_window_30d: '30 days',
1552        js_complaints_sub_7d: 'last 7 days',
1553        js_complaints_sub_24h: 'today (Brasília, since midnight)',
1554        js_complaints_empty_generic: 'No reports in this window ({d} calendar day(s), Brasília time).',
1555        js_cards_sub_7d: '7 days',
1556        js_cards_sub_1d: '1 day (default)',
1557        js_star_badge_title: 'stars',
1558        js_star_badge_votes: 'vote',
1559        js_star_badge_votes_plural: 'votes',
1560        js_icmp_empty_ping: 'No ping results on this panel yet. Check back in about a minute.',
1561        js_icmp_empty_filter:
1562            'With the current filter there are no services where the site responds OK but ping does not. If a service is down, it appears as error on normal cards — not here.',
1563        js_icmp_title: 'Site OK · no ping (ICMP)',
1564        js_icmp_aria: 'Site OK, no ICMP ping',
1565        js_icmp_p1:
1566            'These services do not respond to ping (ICMP). That is normal for many sites and apps. They still respond to other checks: usually HTTPS (secure web, port 443) and, on some cards, HTTP or other TCP ports (e.g. 80 or 443).',
1567        js_icmp_p2:
1568            'The highlighted ms time mainly comes from the HTTPS/TLS check. When you see numbers next to ports on the card, that is TCP latency on that port. Unavailable services appear as error in the general catalog, not here.',
1569        js_icmp_showing: 'Showing',
1570        js_icmp_refine: 'Narrow your search to see more.',
1571        js_google_not_config: 'Google is not configured.',
1572        js_google_load_err: 'Error loading Google.',
1573        js_google_btn_err: 'Could not load Google button.',
1574        js_cs_loading: 'Loading…',
1575        js_cs_err_load: 'Error loading data.',
1576        js_cs_err_net: 'Network error.',
1577        js_cs_no_comments: 'No public comments for this service yet.',
1578        js_comments_app_title: 'Public comments (app)',
1579        js_feedback_reply: 'Reply',
1580        js_feedback_reply_aria: 'Reply to this public comment',
1581        js_cr_reply_need_text: 'Write your reply before continuing.',
1582        js_cr_mod_analyzing: 'Checking your text against community rules…',
1583        cr_reply_step_question:
1584            'Write your reply and verify your identity (it will appear publicly under the comment).',
1585        cr_reply_comment_label: 'Reply (required)',
1586        js_sending: 'Sending…',
1587        js_star_label_default: 'Tap a star',
1588        js_score_pill: 'Score',
1589        js_unavailable: 'Unavailable',
1590        js_chart_comp_loading: 'Loading comparison chart…',
1591        js_chart_area_bad: 'Chart area unavailable on the page.',
1592        js_chart_429: 'Server rate-limited (429). Wait and try again.',
1593        js_chart_comp_unavail: 'Comparison chart unavailable.',
1594        js_chart_loading: 'Loading chart…',
1595        js_chart_loading_overlay_sub: 'Loading data…',
1596        js_svc_not_in_catalog: 'Service not found in catalog — refresh the page.',
1597        js_chart_unavail: 'Chart unavailable.',
1598        js_chart_dest_unavail: 'Chart unavailable for this target (network or server).',
1599        js_hub_loading: 'Loading summary…',
1600        js_no_recent: 'No recent value',
1601        js_plan_loading: 'Loading 7-day plan…',
1602        js_no_points_svc: 'No data points for this service in this period. Wait for the probe worker.',
1603        js_no_points_dest:
1604            'No latency points for this target in this period. Wait for the probe worker or pick another range.',
1605        js_err_detector_load: 'Could not load the Detector.',
1606        js_try_again: 'Try again.',
1607        js_ui_partial_err: 'Part of the page did not update. Reload or clear the filter.',
1608        js_choose_reason: 'Choose a reason.',
1609        js_use_google_above: 'Use the Google button above to finish.',
1610        js_err_net_retry: 'Network error. Try again.',
1611        js_send_code_first: 'Request the code first (Send code).',
1612        js_enter_4_digits: 'Enter the 4 digits.',
1613        js_live_toast_title: 'Real-time complaint',
1614        js_live_toast_by: 'by',
1615        js_anonymous: 'Anonymous',
1616        js_chart_legend_hint: '',
1617        js_star_vote_hint: '',
1618        js_star_vote_one_tpl: '1 vote · {avg} ★',
1619        js_star_votes_hint_tpl: '{n} votes · {avg} ★',
1620        js_modal_star_vote_n: 'Rate {n} of 5 stars',
1621        js_modal_stars_group_hint: 'Tap a star to vote (email or Google verification).',
1622        js_modal_stars_aria_votes: 'Community vote average.',
1623        js_modal_stars_aria_trust: 'Visual reference tied to the trust score.',
1624        trust_score_help_title: 'How the score works (0–100)',
1625        trust_score_help_p1:
1626            'Each service starts at 100. The score summarizes verified community reports (it does not replace the vendor’s official status or automated probes).',
1627        trust_score_help_p2:
1628            'The score drops when verified reports arrive. Report type matters: broad technical outages weigh more; personal issues (store, billing, support) weigh less. The curve uses diminishing returns — a single report usually has a moderate impact.',
1629        trust_score_help_p3: 'Older reports count less over time (week-scale decay).',
1630        trust_score_help_p4:
1631            'Also, for each calendar day after the latest report in the model, the score recovers up to +1 point toward 100 (never above that cap), reflecting quiet periods without new complaints.',
1632        trust_score_help_p5:
1633            'Star ratings (1–5) are separate (community average). Stars do not replace the numeric score; they add qualitative feedback.',
1634        js_modal_link_site: 'Website',
1635        js_modal_link_status: 'Official status',
1636        js_modal_link_validate: 'Validation',
1637        js_hub_card_title: 'Latency',
1638        js_hub_hero_kicker: 'Best reading',
1639        js_hub_tier_lbl: 'Tier',
1640        js_hub_best_tpl: 'Lowest across sources: {ms} ms',
1641        js_hub_metric_current: 'Now',
1642        js_hub_metric_avg: 'Avg',
1643        js_hub_metric_max: 'Peak',
1644        js_hub_metric_jitter: 'Jitter',
1645        js_hub_metric_loss: 'Loss',
1646        js_hub_metrics_aria: 'Latency metrics',
1647        js_hub_empty_hint: 'Next sample soon.',
1648        js_svc_ap_title: 'Availability (7 days)',
1649        js_svc_ap_sub: 'OK day = no probe failures on this target.',
1650        js_svc_ap_score: 'Score',
1651        js_enrich_statuspage_title: 'Public status',
1652        js_enrich_components_tpl: '{n} of {t} components alerting',
1653        js_enrich_open_status: 'Open status page',
1654        js_status_ok: 'OK',
1655        js_status_fail: 'Fail',
1656        js_status_no_data: 'No data',
1657        js_dd_empty: 'Top Detector unavailable right now.',
1658        js_rank_mood_hint_bad: 'Incidents, high latency, aggregated trends, and community reports.',
1659        js_rank_mood_hint_good: 'Low latency and stable gaming platforms highlighted (operational first).',
1660        js_comm_disclaimer_short: 'Anonymous reports; not official status.',
1661        js_metrics_catalog_full_tpl: 'Full catalog: {n} · Visible with filter: {v}',
1662        js_metrics_catalog_entries: 'Catalog entries',
1663        js_rank_incidents_none: 'No incidents reported by the APIs right now.',
1664        js_rank_trend_badge: 'Trending',
1665        js_rank_active_count: 'active',
1666        js_game_state_ok: 'Operational',
1667        js_game_state_bad: 'Incident',
1668        js_game_state_warn: 'Attention',
1669        js_rank_mood_game_sub_good: 'Operational first (aggregate summary).',
1670        js_rank_mood_game_sub_bad: 'Alerts and incidents first (aggregate summary).',
1671        js_tile_rate_title: 'Rate this service',
1672        js_tile_rate_cta: 'Rate',
1673        js_tile_trust_title: 'Community score (verified reports; starts at 100)',
1674        js_tile_comm_title_tpl: '{n} {w} — click for details',
1675        js_tile_complaints_trend_title:
1676            'Reports logged per hour (last 72 h). Shown only in community Top 10; refreshes with ranking (~20 min).',
1677        js_tile_complaints_trend_label: 'Reports · hourly',
1678        js_tile_aria_hub: ' — open chart and latency hub',
1679        js_tile_service_fallback: 'Service',
1680        js_tile_lat_error: 'error',
1681        js_tcp_title: 'TCP ports',
1682        js_tcp_legend_open: '',
1683        js_tcp_legend_closed: '',
1684        js_tcp_legend_wait: '',
1685        js_tcp_legend_suffix: '',
1686        js_tcp_cell_open: 'Open',
1687        js_tcp_cell_closed: 'Closed',
1688        js_tcp_cell_wait: 'Waiting',
1689        js_tcp_port_title_tpl: 'Port {p} · {svc} — {st}',
1690        js_tcp_group_aria: 'TCP ports (diagnostics)',
1691        js_tcp_disabled_note: 'TCP diagnostics disabled on server or empty port list.',
1692        js_tcp_pill_open_tpl: 'Port {p} ({svc}) — TCP open',
1693        js_tcp_pill_closed_tpl: 'Port {p} ({svc}) — closed or filtered',
1694        js_tcp_pill_wait_tpl: 'Port {p} ({svc}) — waiting for sample (~1 min)',
1695        js_probe_layers_title: 'Probes',
1696        js_probe_main_key: 'Primary probe · {key}',
1697        js_probe_operational_ms: 'Operational · {ms} ms',
1698        js_probe_operational: 'Operational',
1699        js_probe_main_timeout: 'Unavailable / timeout on primary probe',
1700        js_probe_disabled: 'Disabled on server',
1701        js_probe_icmp_sub: 'Alongside primary probe',
1702        js_probe_icmp_loss: ' · loss {pct}%',
1703        js_probe_tcp_vs: 'TCP vs card:',
1704        js_probe_line_80: '80 HTTP → {state}',
1705        js_probe_line_443: '443 HTTPS → {state}',
1706        js_tcp_state_open: 'open',
1707        js_tcp_state_closed: 'closed',
1708        js_tcp_state_wait: 'waiting for sample',
1709        js_lat_tier_fail_hint: 'Last probe failed (timeout or error).',
1710        js_lat_tier_unk_hint: 'No latency measurement for this card yet.',
1711        js_lat_rules_label: 'Rules:',
1712        js_lat_tier_fallback_hint: 'Latency classification (global).',
1713        js_lat_tier_client_hint: 'Estimated classification on the client.',
1714        js_ip_tag_v4_title: 'DNS A (IPv4) on the probed target hostname',
1715        js_ip_tag_v6_title: 'DNS AAAA (IPv6) on the probed target hostname',
1716        js_ip_stack_aria: 'IP stack (DNS)',
1717        js_cr_invalid_email: 'Enter a valid email address.',
1718        js_cr_code_sent: 'Code sent.',
1719        js_cr_send_fail: 'Could not send.',
1720        js_cr_require_google_suffix: ' Select “Google (instant)” and use the sign-in button.',
1721        js_cr_confirmed: 'Confirmed.',
1722        js_cr_confirm_fail: 'Could not confirm.',
1723        js_catalog_full_short: 'full catalog',
1724        js_label_top: 'Top',
1725        js_t10_shelf_ctx_top_tpl: '{ctx} · {top} {n}',
1726        js_t10_complaints_window_top_tpl: '{w} · {top} {n}',
1727        js_t10_complaints_comm_title: 'Top 10 · most complaints (community)',
1728        js_t10_games_title: 'Top 10 games · instability',
1729        js_t10_games_sub:
1730            'Live ranking — reports and instability signals in games.',
1731        js_t10_games_sub_lat:
1732            'Latency fallback: community reports still loading. Worst HTTPS first.',
1733        js_games_rank_meta: 'HTTPS · latest probe',
1734        js_games_lat_rail_lbl: 'Latency',
1735        js_games_lat_rail_https: 'HTTPS',
1736        js_games_lat_rail_aria_tpl: 'Latency {ms}. Open service.',
1737        js_t10_games_social_no_data:
1738            'Not enough gaming services with latency samples yet to build the Top 10. Wait for probes or expand the catalog.',
1739        js_t10_games_social_lead:
1740            'Card with the 10 games/platforms showing the highest measured HTTPS latency. Use the caption on social; the image includes the Catellix logo and catellix.com.',
1741        js_t10_games_social_card_kicker: 'Top 10 games · HTTPS latency',
1742        js_t10_games_social_card_sub: 'Latest measurement · Catellix Detector',
1743        js_t10_games_social_share_title: 'Top 10 games (latency) — Catellix Detector',
1744        js_t10_games_social_modal_title: 'Card · Top 10 games (latency)',
1745        js_t10_games_share_aria: 'Share Top 10 games',
1746        js_t10_social_caption_intro_games:
1747            'Top 10 games and platforms with the highest HTTPS latency on Catellix Detector — share with the gaming community:',
1748        js_t10_search_results_title: 'Search results',
1749        js_t10_search_results_sub_tpl: '{n} services · “{q}”',
1750        js_t10_search_no_results:
1751            'No services match your search in this scope (category and IP stack still apply).',
1752        js_t10_filter_empty_title: 'No Top 10 cards for this filter.',
1753        js_t10_filter_empty_p:
1754            'Adjust category, IP, or search — or tap the home icon next to “Catalog” to reset the view and return to global highlights.',
1755    });
1756
1757    merge(PACKS.en, {
1758        cat_saas_cloud: 'Cloud, status & CDN',
1759        cat_gaming: 'Games & platforms',
1760        cat_streaming: 'News, streaming & media',
1761        cat_social: 'Social & messaging',
1762        cat_commerce: 'Commerce & travel',
1763        cat_finance: 'Finance & payments',
1764        cat_cloud: 'Infra & CDN',
1765        cat_dev: 'Code, APIs & security',
1766        cat_enterprise: 'Enterprise & CRM',
1767        cat_productivity: 'Work & productivity',
1768        cat_security: 'Security',
1769        cat_reference: 'Reference, government & education',
1770        cat_news: 'News',
1771        cat_travel: 'Travel & mobility',
1772        cat_nonprofit: 'Non-profit',
1773        cat_core: 'Search & core accounts',
1774        cat_betting: 'Betting & sportsbooks',
1775        cat_adult: 'Adult & 18+ entertainment',
1776        cat_telecom: 'Telecom — networks, carriers & equipment',
1777        cat_ai: 'Artificial Intelligence',
1778        cat_education: 'Education & universities',
1779        cat_jobs: 'Jobs & careers',
1780        cat_communities: 'Clubs & communities',
1781        blurb_communities:
1782            'Brazilian football clubs, sports communities, and fan sites. HTTPS probe of the official website.',
1783        blurb_education:
1784            'Universities, entrance exams, ENEM, SISU, civil service prep and online learning platforms.',
1785        blurb_jobs:
1786            'Job boards, recruitment platforms and career services for the Brazilian and global market.',
1787        blurb_ai:
1788            'Chatbots, APIs, and generative AI platforms — ChatGPT, Claude, Gemini, DeepSeek, Copilot, and more. Latency reflects the public HTTPS endpoint; incidents come from Statuspage when available.',
1789        blurb_saas_cloud:
1790            'Public status pages (Statuspage), managed cloud, and CDN/infra endpoints probed over HTTPS.',
1791        blurb_gaming: 'Gaming platforms and stores; latency reflects the probed HTTPS endpoint.',
1792        blurb_streaming:
1793            'News sites, online radio/TV, and streaming; values are from the measured endpoint, not video quality.',
1794        blurb_social: 'Social networks, forums, and messaging; operational state via HTTPS probe.',
1795        blurb_commerce: 'Stores, marketplaces, brands, and travel or mobility bookings.',
1796        blurb_finance: 'Banks, payments, fintech — technical measurement, not your bank’s official status.',
1797        blurb_cloud: 'CDN, DNS, and global infrastructure.',
1798        blurb_dev: 'Repos, CI/CD, APIs, observability, and security tools for technical teams.',
1799        blurb_enterprise: 'CRM, ERP, and enterprise suites.',
1800        blurb_productivity: 'Work suites, CRM, support tools, and team collaboration.',
1801        blurb_security: 'Password managers, identity, and security.',
1802        blurb_reference: 'Government, public data, education, NGOs, and reference content.',
1803        blurb_news: 'News and online media.',
1804        blurb_travel: 'Bookings, mobility, and travel.',
1805        blurb_nonprofit: 'Organizations and non-profit content.',
1806        blurb_core: 'Search engines, Microsoft account endpoints, and national DNS registries.',
1807        blurb_betting:
1808            'Betting and sportsbook platforms monitored by HTTPS reach
1808ability and latency, reflecting technical endpoint availability.',
1809        blurb_adult:
1810            'Adult and 18+ platforms monitored by HTTPS reachability and public endpoint latency.',
1811        blurb_telecom:
1812            'Carriers, ISPs, infrastructure, and equipment vendors. We probe two HTTPS endpoints when a public edge/mirror exists and keep the best latency; the server may try several resolved IPs per host in parallel. Not RF coverage or real throughput.',
1813        desc_fallback: 'Service monitored by Catellix Detector with periodic HTTPS probes.',
1814    });
1815
1816    function normalizeLocale(x) {
1817        var s = (x || 'pt').toLowerCase();
1818        if (s.indexOf('en') === 0) return 'en';
1819        return 'pt';
1820    }
1821
1822    function getLocale() {
1823        try {
1824            var raw = localStorage.getItem(STORAGE_KEY);
1825            if (raw && ALLOWED[normalizeLocale(raw)]) return normalizeLocale(raw);
1826        } catch (e) { /* ignore */ }
1827        return 'pt';
1828    }
1829
1830    function setLocale(lang) {
1831        var L = normalizeLocale(lang);
1832        try {
1833            localStorage.setItem(STORAGE_KEY, L);
1834        } catch (e) { /* ignore */ }
1835        applyDocumentLang(L);
1836        return L;
1837    }
1838
1839    function applyDocumentLang(L) {
1840        if (typeof document === 'undefined') return;
1841        var html = document.documentElement;
1842        if (!html) return;
1843        html.lang = L === 'en' ? 'en' : 'pt-BR';
1844    }
1845
1846    function t(key) {
1847        var loc = getLocale();
1848        var pack = PACKS[loc] || PACKS.pt;
1849        if (pack[key] != null && pack[key] !== '') return pack[key];
1850        if (PACKS.pt[key] != null) return PACKS.pt[key];
1851        return key;
1852    }
1853
1854    function setText(el, key) {
1855        if (!el) return;
1856        el.textContent = t(key);
1857    }
1858
1859    function setAttr(el, attr, key) {
1860        if (!el) return;
1861        el.setAttribute(attr, t(key));
1862    }
1863
1864    /** Botão superior "reportar": frases rotativas (CTR). Fallback: nav_report. */
1865    var REPORT_CTA_ROTATE_MS = 11000;
1866    var reportCtaRotateTimer = null;
1867    var reportCtaLastIdx = -1;
1868
1869    var REPORT_CTA_PHRASES_PT = [
1870        'Instagram fora do ar agora? Clique e reporte',
1871        'WhatsApp caiu hoje? Reporte em tempo real',
1872        'YouTube não abre? Avise a comunidade aqui',
1873        'Facebook instável? Confirme o problema agora',
1874        'Netflix fora do ar? Clique para reportar',
1875        'Problemas agora? Reporte em tempo real',
1876        'Instabilidade ao vivo — outros usuários também veem',
1877        'Serviço lento ou offline? Clique para avisar',
1878        'Queda neste momento? Reporte e veja o mapa',
1879        'Seu app falhou? Confirme aqui em 1 clique',
1880        'Discord ou TikTok ruim? Relate agora',
1881        'Google com lentidão? Participe do relatório',
1882        'Detectamos instabilidade — confirme se é aí também',
1883        'Outros estão a reportar — você também vê falha?',
1884    ];
1885
1886    var REPORT_CTA_PHRASES_EN = [
1887        'Instagram down now? Tap to report',
1888        'WhatsApp not working today? Report live',
1889        "YouTube won't load? Tell the community here",
1890        'Facebook unstable? Confirm the issue now',
1891        'Netflix offline? Click to report',
1892        'Issues right now? Report in real time',
1893        'Live instability — other users see it too',
1894        'Slow or down? Click to notify everyone',
1895        'Outage right now? Report and see the heatmap',
1896        'App failed? Confirm here in one click',
1897        'Discord or TikTok bad? Report now',
1898        'Google slow? Join the community report',
1899        'We see instability — confirm if it matches you',
1900        'Others are reporting — do you see an issue too?',
1901    ];
1902
1903    function reportCtaPhraseList() {
1904        return getLocale() === 'en' ? REPORT_CTA_PHRASES_EN : REPORT_CTA_PHRASES_PT;
1905    }
1906
1907    function nextReportCtaIdx(n) {
1908        if (n <= 1) return 0;
1909        var i = 0;
1910        var guard = 0;
1911        do {
1912            i = Math.floor(Math.random() * n);
1913            guard++;
1914        } while (i === reportCtaLastIdx && guard < 10);
1915        reportCtaLastIdx = i;
1916        return i;
1917    }
1918
1919    function applyReportCtaButtonPhrase() {
1920        var dhb = document.getElementById('detBarReportBtn');
1921        if (!dhb) return;
1922        var tx = dhb.querySelector('.det-bar-report-cta__text');
1923        if (!tx) return;
1924        var list = reportCtaPhraseList();
1925        var phrase = !list || !list.length ? t('nav_report') : list[nextReportCtaIdx(list.length)];
1926        tx.textContent = phrase;
1927        dhb.setAttribute('title', phrase);
1928        dhb.setAttribute('aria-label', phrase);
1929    }
1930
1931    function startReportCtaPhraseRotation() {
1932        if (reportCtaRotateTimer) {
1933            clearInterval(reportCtaRotateTimer);
1934            reportCtaRotateTimer = null;
1935        }
1936        applyReportCtaButtonPhrase();
1937        reportCtaRotateTimer = setInterval(applyReportCtaButtonPhrase, REPORT_CTA_ROTATE_MS);
1938    }
1939
1940    /** Textos estáticos por id (evita marcar todo o HTML). */
1941    var STATIC_BY_ID = [
1942        ['det-sidebar-complaints-title', 'sidebar_complaints_title'],
1943        ['detSidebarComplaintsWindowLbl', 'sidebar_complaints_window'],
1944        ['detComplaintsSyncHint', 'sidebar_rank_live'],
1945        ['detComplaintsTop10Sub', 'sidebar_complaints_loading'],
1946        ['det-sidebar-ad-slots-title', 'sidebar_ad_slots_title'],
1947        ['det-right-ad-slots-title', 'sidebar_ad_slots_title'],
1948        ['detAdRightMobileBadgeText', 'ad_right_mobile_badge'],
1949        ['detAdSlotsCountCaption', 'sidebar_ad_slots_count_caption'],
1950        ['detAdSlotsCountCaptionR', 'sidebar_ad_slots_count_caption'],
1951        ['detAdPackKicker', 'ad_pack_kicker'],
1952        ['detAdPackHeadline', 'ad_pack_headline'],
1953        ['detAdPackTableTitle', 'ad_pack_table_title'],
1954        ['detAdPackThDays', 'ad_pack_th_days'],
1955        ['detAdPackThPrice', 'ad_pack_th_price'],
1956        ['detAdPackDaysLabel', 'ad_pack_days_label'],
1957        ['detAdPackEmailLabel', 'ad_pack_email_label'],
1958        ['detAdPackFootLead', 'ad_pack_foot_lead'],
1959        ['detAdPackQuemSomosBtn', 'ad_pack_quem_somos_btn'],
1960        ['detAdPackFootEnterprise', 'ad_pack_enterprise_badge'],
1961        ['detAdPackPostPayTitle', 'ad_pack_post_pay_title'],
1962        ['detAdPackPostPayLead', 'ad_pack_post_pay_lead'],
1963        ['detAdPackTicketTop', 'ad_pack_ticket_top'],
1964        ['detAdPackStoryHeading', 'ad_pack_story_heading'],
1965        ['detAdPackStoryP1', 'ad_pack_story_p1'],
1966        ['detAdPackStoryP2', 'ad_pack_story_p2'],
1967        ['detAdPackLeftStripNotice', 'ad_pack_left_strip_notice'],
1968        ['detAdPackPixelRec', 'ad_pack_pixel_rec'],
1969        ['detAdPackEnterpriseBadge', 'ad_pack_enterprise_badge'],
1970        ['detAdPackEnterpriseBackBadge', 'ad_pack_enterprise_badge'],
1971        ['detAdPackEnterpriseTitle', 'ad_pack_enterprise_title'],
1972        ['detAdPackEnterpriseBackKicker', 'ad_pack_enterprise_back_kicker'],
1973        ['detAdPackEnterpriseBackTitle', 'ad_pack_enterprise_back_title'],
1974        ['detAdPackEnterpriseBackLead', 'ad_pack_enterprise_back_lead'],
1975        ['detAdPackEnterpriseBackLi1', 'ad_pack_enterprise_back_li1'],
1976        ['detAdPackEnterpriseBackLi2', 'ad_pack_enterprise_back_li2'],
1977        ['detAdPackEnterpriseBackHint', 'ad_pack_enterprise_back_hint'],
1978        ['detAdPackPreviewPlaceholder', 'ad_pack_preview_placeholder'],
1979        ['detAdPackPickImageLabel', 'ad_pack_pick_image'],
1980        ['detAdPackCreativeHint', 'ad_pack_creative_hint'],
1981        ['detAdPackCreativeUrlLabel', 'ad_pack_creative_url_label'],
1982        ['detAdPackCreativeUrlHint', 'ad_pack_creative_url_hint'],
1983        ['detAdPackCreativeSubmit', 'ad_pack_creative_submit'],
1984        ['detAdPackBtnCancel', 'ad_pack_cancel'],
1985        ['detAdPackBtnMp', 'ad_pack_pay_mp'],
1986        ['detAdPackBtnPix', 'ad_pack_pay_pix'],
1987        ['detAdPackPixIntro', 'ad_pack_pix_intro'],
1988        ['detAdPackPixCodeLbl', 'ad_pack_pix_code_lbl'],
1989        ['detAdPackPixCopyBtn', 'ad_pack_pix_copy'],
1990        ['detAdPackPixTicket', 'ad_pack_pix_open_mp'],
1991        ['detAdPackPixPaidBtn', 'ad_pack_pix_paid_btn'],
1992        ['detComplaintsHourlyTitle', 'js_sidebar_hourly_modal_title'],
1993        ['detComplaintsHourlyLead', 'js_sidebar_hourly_modal_lead'],
1994        ['catProdMonitoringStatus', 'sidebar_status_checking'],
1995        ['catProdKidsStatus', 'sidebar_status_checking'],
1996        ['detectorLoadingLabel', 'loading_banner'],
1997        ['probCatalogGlobalTitle', 'prob_catalog_global_title'],
1998        ['probCatalogHeadingText', 'prob_catalog_sr'],
1999        ['catalogHeadingText', 'catalog_heading'],
2000        ['det-footer-contact-title', 'footer_contact_title'],
2001        ['det-footer-contact-intro', 'footer_contact_intro'],
2002        ['det-btn-open-contact', 'footer_contact_btn'],
2003        ['detFooterSupportLabel', 'footer_support_label'],
2004        ['detFooterSupportAfter', 'footer_support_after'],
2005        ['det-footer-about-text', 'footer_about'],
2006        ['det-footer-social-label', 'footer_social_label'],
2007        ['det-footer-meta-suffix', 'footer_meta_suffix'],
2008        ['det-footer-meta-privacy', 'footer_privacy'],
2009        ['det-footer-meta-copy', 'footer_copy'],
2010        ['det-contact-modal-title', 'contact_modal_title'],
2011        ['det-contact-modal-intro', 'contact_modal_intro'],
2012        ['det-contact-cancel', 'contact_cancel'],
2013        ['det-contact-submit', 'contact_send'],
2014        ['detReportPickerTitle', 'report_picker_title'],
2015        ['detReportPickerLead', 'report_picker_lead'],
2016        ['detReportPickerEmpty', 'report_picker_empty'],
2017        ['csTitle', 'cs_title'],
2018        ['csFeedbackTitle', 'cs_feedback_title'],
2019        ['starTitle', 'star_title'],
2020        ['starLabel', 'star_label_default'],
2021        ['starAuthLead', 'star_auth_lead'],
2022        ['starOr', 'star_or'],
2023        ['starSendEmail', 'star_send_code'],
2024        ['starConfirmCode', 'star_confirm'],
2025        ['crTitle', 'cr_title'],
2026        ['crYes', 'cr_yes'],
2027        ['crNo', 'cr_no'],
2028        ['crMetaReasonLead', 'cr_reason_line'],
2029        ['crMetaCommentLabel', 'cr_comment_line'],
2030        ['crToVerify', 'cr_continue_verify'],
2031        ['crChannelLbl', 'cr_channel_lbl'],
2032        ['crEmailLbl', 'cr_email_lbl'],
2033        ['crGoogleHint', 'cr_google_hint'],
2034        ['crSendCode', 'cr_send_code'],
2035        ['crCodeLbl', 'cr_code_lbl'],
2036        ['crConfirmCode', 'cr_confirm'],
2037        ['rankMoodLabelBad', 'rank_mood_bad'],
2038        ['rankMoodLabelGood', 'rank_mood_good'],
2039        ['rankColCommunity', 'rank_col_community'],
2040        ['rankCommunityDisclaimer', 'rank_col_community_sub'],
2041        ['rankColLatFast', 'rank_col_lat_fast'],
2042        ['rankColLatFastSub', 'rank_col_lat_fast_sub'],
2043        ['rankColLatSlow', 'rank_col_lat_slow'],
2044        ['rankColLatSlowSub', 'rank_col_lat_slow_sub'],
2045        ['rankColIncidents', 'rank_col_incidents'],
2046        ['rankColIncidentsSub', 'rank_col_incidents_sub'],
2047        ['rankColTrends', 'rank_col_trends'],
2048        ['rankColTrendsSub', 'rank_col_trends_sub'],
2049        ['rankColGames', 'rank_col_games'],
2050        ['rankColGamesSub', 'rank_col_games_sub'],
2051        ['dashMetricsMain', 'dash_metrics_main'],
2052        ['dashMetricsHint', 'dash_metrics_hint'],
2053        ['dashObsMain', 'dash_obs_main'],
2054        ['dashObsHint', 'dash_obs_hint'],
2055        ['dashProbMain', 'dash_prob_main'],
2056        ['dashProbHint', 'dash_prob_hint'],
2057        ['dashRankMain', 'dash_rank_main'],
2058        ['dashRankHint', 'dash_rank_hint'],
2059        ['dashDdMain', 'dash_dd_main'],
2060        ['dashDdHint', 'dash_dd_hint'],
2061        ['rankMoodLabelStatic', 'rank_mood_label'],
2062        ['footNoteStatic', 'foot_note_prefix'],
2063        ['metricSufDest', 'metric_destinations'],
2064        ['metricSufOk', 'metric_ok'],
2065        ['metricSufFail', 'metric_fail'],
2066        ['metricSufUnk', 'metric_unknown'],
2067        ['metricSufUrls', 'metric_urls'],
2068        ['metricSufSp', 'metric_statuspage'],
2069        ['metricSufSaas', 'metric_incident'],
2070        ['metricSufGames', 'metric_games'],
2071        ['metricSufDd', 'metric_trends'],
2072        ['metricSufProbe', 'metric_probe_suffix'],
2073        ['metricSufLat', 'metric_lat_avg'],
2074    ];
2075
2076    var METRIC_BIT_TITLES = [
2077        ['mBitTotal', 'metric_destinations_title'],
2078        ['mBitReach', 'metric_ok_title'],
2079        ['mBitFail', 'metric_fail_title'],
2080        ['mBitUnk', 'metric_unknown_title'],
2081        ['mBitUrls', 'metric_urls_title'],
2082        ['mBitSp', 'metric_statuspage_title'],
2083        ['mBitSaas', 'metric_incident_title'],
2084        ['mBitGames', 'metric_games_title'],
2085        ['mBitDd', 'metric_trends_title'],
2086        ['mBitProbe', 'metric_probe_title'],
2087        ['mBitLat', 'metric_lat_avg_title'],
2088    ];
2089
2090    function applyStaticById() {
2091        for (var i = 0; i < STATIC_BY_ID.length; i++) {
2092            var id = STATIC_BY_ID[i][0];
2093            var key = STATIC_BY_ID[i][1];
2094            var el = document.getElementById(id);
2095            if (el) el.textContent = t(key);
2096        }
2097        var footA = document.getElementById('detFootLinkPanel');
2098        if (footA) footA.textContent = t('foot_link_panel');
2099        var footB = document.getElementById('detFootLinkSite');
2100        if (footB) footB.textContent = t('foot_link_site');
2101        for (var m = 0; m < METRIC_BIT_TITLES.length; m++) {
2102            var bit = document.getElementById(METRIC_BIT_TITLES[m][0]);
2103            if (bit) bit.setAttribute('title', t(METRIC_BIT_TITLES[m][1]));
2104        }
2105        var mb = document.getElementById('metricsBar');
2106        if (mb) mb.setAttribute('aria-label', t('dash_metrics_aria'));
2107        var csh = document.getElementById('catalogSearchEnterHint');
2108        if (csh) csh.textContent = t('catalog_search_enter_hint');
2109
2110        function labelFor(id, textKey) {
2111            var L = document.querySelector('label[for="' + id + '"]');
2112            if (L && textKey) L.textContent = t(textKey);
2113        }
2114        function aria(id, key) {
2115            var el = document.getElementById(id);
2116            if (el && key) el.setAttribute('aria-label', t(key));
2117        }
2118        labelFor('selCategory', 'lbl_category');
2119        aria('selCategory', 'lbl_category_aria');
2120        labelFor('selIpStack', 'lbl_ip_stack');
2121        aria('selIpStack', 'lbl_ip_stack_aria');
2122        labelFor('selRank', 'lbl_rank');
2123        aria('selRank', 'lbl_rank_aria');
2124        labelFor('selRefreshInterval', 'lbl_refresh_interval');
2125        aria('selRefreshInterval', 'lbl_refresh_interval_title');
2126        var seg = document.querySelector('#toolbarCompact .seg-view');
2127        if (seg) seg.setAttribute('aria-label', t('lbl_view'));
2128        var rgb = document.querySelector('.toolbar-refresh-group');
2129        if (rgb) rgb.setAttribute('aria-label', t('lbl_refresh_group'));
2130        var br = document.getElementById('btnRefresh');
2131        if (br) {
2132            br.setAttribute('title', t('refresh_now_title'));
2133            br.setAttribute('aria-label', t('refresh_now_aria'));
2134        }
2135        var bch = document.getElementById('btnCatalogHome');
2136        if (bch) {
2137            bch.setAttribute('title', t('catalog_home_title'));
2138            bch.setAttribute('aria-label', t('catalog_home_aria'));
2139        }
2140        labelFor('catalogSearchInput', 'catalog_search_lbl');
2141        aria('catalogSearchInput', 'catalog_search_aria');
2142        if (typeof global.detectorUpdateCatalogViewToggleI18n === 'function') {
2143            global.detectorUpdateCatalogViewToggleI18n();
2144        }
2145        aria('detAdSlotsCarousel', 'sidebar_ad_slots_carousel_aria');
2146        aria('detAdSlotsCarouselR', 'sidebar_ad_slots_carousel_aria');
2147        aria('detTopBarLocalSpin', 'top_bar_local_spin_region_aria');
2148        var adPackCloseBtn = document.getElementById('detAdPackModalClose');
2149        if (adPackCloseBtn) adPackCloseBtn.setAttribute('aria-label', t('ad_pack_close_aria'));
2150        aria('detAdPackQuemSomosBtn', 'ad_pack_quem_somos_aria');
2151        aria('detAdPackLogoKidsLink', 'sidebar_kids_aria');
2152        aria('detAdPackLogoMonitoringLink', 'sidebar_mon_aria');
2153        aria('detComplaintsHourlyChartHost', 'js_sidebar_hourly_chart_aria');
2154        var pbl = document.getElementById('probePopBadgeLabel');
2155        if (pbl) pbl.textContent = t('probe_badge_label');
2156        var segBtns = document.querySelectorAll('#toolbarCompact .seg-view button[data-view]');
2157        for (var sb = 0; sb < segBtns.length; sb++) {
2158            var b = segBtns[sb];
2159            var v = b.getAttribute('data-view');
2160            if (v === 'row') b.setAttribute('title', t('view_row_title'));
2161            if (v === 'grid') b.setAttribute('title', t('view_grid_title'));
2162            if (v === 'list') b.setAttribute('title', t('view_list_title'));
2163        }
2164        var navBar = document.querySelector('.det-top-action-bar');
2165        if (navBar) navBar.setAttribute('aria-label', t('nav_quick_actions'));
2166        var detLocSw = document.getElementById('detLocaleSwitch');
2167        if (detLocSw) detLocSw.setAttribute('aria-label', t('locale_switch_aria'));
2168        if (typeof global.detectorRefreshThemeToggleI18n === 'function') {
2169            global.detectorRefreshThemeToggleI18n();
2170        }
2171        var msq = document.getElementById('aurix-carnaval-mask');
2172        if (msq) msq.setAttribute('aria-label', t('nav_mascote_aria'));
2173        startReportCtaPhraseRotation();
2174        var dh = document.querySelector('.det-back-home');
2175        if (dh) {
2176            dh.textContent = t('back_home');
2177            dh.setAttribute('aria-label', t('back_home_aria'));
2178        }
2179        var detTopHome = document.getElementById('detTopBarHome');
2180        if (detTopHome) {
2181            detTopHome.setAttribute('aria-label', t('back_home_aria'));
2182            detTopHome.setAttribute('title', t('back_home_aria'));
2183        }
2184        var svcClose = document.getElementById('svcModalClose');
2185        if (svcClose) svcClose.setAttribute('aria-label', t('modal_close'));
2186        var chartLbl = document.querySelector('label[for="svcChartRange"]');
2187        if (chartLbl) chartLbl.textContent = t('chart_period_label');
2188        aria('svcChartRange', 'chart_period_aria');
2189        var chartTgt = document.querySelector('label[for="svcChartTarget"]');
2190        if (chartTgt) chartTgt.textContent = t('chart_target_label');
2191        aria('svcChartTarget', 'chart_target_aria');
2192        var chartMulti = document.querySelector('label[for="svcChartMulti"] span');
2193        if (chartMulti) chartMulti.textContent = t('chart_multi_label');
2194        var chartBlock = document.querySelector('#svcModal .modal-chart-block');
2195        if (chartBlock) chartBlock.setAttribute('aria-label', t('chart_block_aria'));
2196        var svcCanvas = document.getElementById('svcLatencyChart');
2197        if (svcCanvas) svcCanvas.setAttribute('aria-label', t('chart_canvas_aria'));
2198        var targetsTable = document.getElementById('svcTargetsTable');
2199        if (targetsTable) targetsTable.setAttribute('aria-label', t('targets_table_aria'));
2200        var ths = document.querySelectorAll('#svcTargetsTable thead th');
2201        if (ths.length >= 3) {
2202            ths[0].textContent = t('th_destination');
2203            ths[1].textContent = t('th_latency');
2204            ths[2].textContent = t('th_ips');
2205        }
2206        [
2207            ['csClose', 'modal_close'],
2208            ['starClose', 'modal_close'],
2209            ['detReportPickerClose', 'modal_close'],
2210            ['crClose', 'modal_close'],
2211        ].forEach(function (x) {
2212            var b = document.getElementById(x[0]);
2213            if (b) b.setAttribute('aria-label', t(x[1]));
2214        });
2215        aria('starPicker', 'star_picker_aria');
2216        var s1 = document.querySelector('#starPicker button[data-star="1"]');
2217        if (s1) s1.setAttribute('aria-label', t('star_n1'));
2218        var s2 = document.querySelector('#starPicker button[data-star="2"]');
2219        if (s2) s2.setAttribute('aria-label', t('star_n2'));
2220        var s3 = document.querySelector('#starPicker button[data-star="3"]');
2221        if (s3) s3.setAttribute('aria-label', t('star_n3'));
2222        var s4 = document.querySelector('#starPicker button[data-star="4"]');
2223        if (s4) s4.setAttribute('aria-label', t('star_n4'));
2224        var s5 = document.querySelector('#starPicker button[data-star="5"]');
2225        if (s5) s5.setAttribute('aria-label', t('star_n5'));
2226        aria('crChannel', 'cr_channel_aria');
2227        aria('crReasonList', 'cr_reason_aria');
2228        var detObs = document.getElementById('detObservationHub');
2229        if (detObs) detObs.setAttribute('aria-label', t('dash_obs_hub_aria'));
2230        var strip = document.getElementById('catellixProductsStrip');
2231        if (strip) strip.setAttribute('aria-label', t('sidebar_catellix_products_aria'));
2232        var am = document.querySelector('.cat-prod-name[href*="welcome"]');
2233        if (am) am.setAttribute('aria-label', t('sidebar_mon_aria'));
2234        var ak = document.querySelector('.cat-prod-name[href*="planos-mobile"]');
2235        if (ak) ak.setAttribute('aria-label', t('sidebar_kids_aria'));
2236        var socNav = document.querySelector('.det-footer-social');
2237        if (socNav) socNav.setAttribute('aria-label', t('footer_social_nav'));
2238        var rmt = document.getElementById('btnRankMoodToggle');
2239        if (rmt) rmt.setAttribute('title', t('rank_mood_toggle_title'));
2240        var rmtSr = rmt && rmt.querySelector('.sr-only');
2241        if (rmtSr) rmtSr.textContent = t('rank_mood_toggle_sr');
2242        var rmg = document.querySelector('#detDashRank .rank-mood-toggle-wrap');
2243        if (rmg) rmg.setAttribute('aria-label', t('rank_mood_aria'));
2244    }
2245
2246    function applyDom(root) {
2247        root = root || document;
2248        if (!root || !root.querySelectorAll) return;
2249
2250        applyStaticById();
2251
2252        root.querySelectorAll('[data-i18n]').forEach(function (el) {
2253            var key = el.getAttribute('data-i18n');
2254            if (!key) return;
2255            var attr = el.getAttribute('data-i18n-attr');
2256            if (attr) el.setAttribute(attr, t(key));
2257            else el.textContent = t(key);
2258        });
2259
2260        root.querySelectorAll('[data-i18n-placeholder]').forEach(function (el) {
2261            var key = el.getAttribute('data-i18n-placeholder');
2262            if (key) el.setAttribute('placeholder', t(key));
2263        });
2264
2265        root.querySelectorAll('[data-i18n-title]').forEach(function (el) {
2266            var key = el.getAttribute('data-i18n-title');
2267            if (key) el.setAttribute('title', t(key));
2268        });
2269
2270        root.querySelectorAll('[data-i18n-aria]').forEach(function (el) {
2271            var key = el.getAttribute('data-i18n-aria');
2272            if (key) el.setAttribute('aria-label', t(key));
2273        });
2274
2275        var metaDesc = document.querySelector('meta[name="description"]');
2276        if (metaDesc) metaDesc.setAttribute('content', t('meta_description'));
2277        if (document.title !== undefined) document.title = t('page_title');
2278
2279        refreshSelectOptions();
2280        updateLocaleToggleUi();
2281    }
2282
2283    function refreshSelectOptions() {
2284        var ip = document.getElementById('selIpStack');
2285        if (ip) {
2286            mapOpt(ip, 'all', 'ip_all');
2287            mapOpt(ip, 'v4', 'ip_v4');
2288            mapOpt(ip, 'dual', 'ip_dual');
2289            mapOpt(ip, 'v6', 'ip_v6');
2290        }
2291        var crCh = document.getElementById('crChannel');
2292        if (crCh) {
2293            mapOpt(crCh, 'email', 'cr_opt_email');
2294            mapOpt(crCh, 'google', 'cr_opt_google');
2295        }
2296        var chartR = document.getElementById('svcChartRange');
2297        if (chartR) {
2298            mapOpt(chartR, '1', 'chart_range_1');
2299            mapOpt(chartR, '3', 'chart_range_3');
2300            mapOpt(chartR, '5', 'chart_range_5');
2301            mapOpt(chartR, '8', 'chart_range_8');
2302            mapOpt(chartR, '12', 'chart_range_12');
2303            mapOpt(chartR, '24', 'chart_range_24');
2304            mapOpt(chartR, '72', 'chart_range_72');
2305            mapOpt(chartR, '120', 'chart_range_120');
2306            mapOpt(chartR, '168', 'chart_range_168');
2307            mapOpt(chartR, '360', 'chart_range_360');
2308            mapOpt(chartR, '720', 'chart_range_720');
2309        }
2310        var ct = document.getElementById('det-contact-tipo');
2311        if (ct) {
2312            mapOpt(ct, 'parceria', 'contact_reason_partner');
2313            mapOpt(ct, 'problema', 'contact_reason_problem');
2314            mapOpt(ct, 'outro', 'contact_reason_other');
2315            var empty = ct.querySelector('option[value=""]');
2316            if (empty) empty.textContent = t('contact_reason_empty');
2317        }
2318    }
2319
2320    function mapOpt(sel, value, key) {
2321        var o = sel.querySelector('option[value="' + value + '"]');
2322        if (o) o.textContent = t(key);
2323    }
2324
2325    function wireLocaleToggle() {
2326        var wrap = document.getElementById('detLocaleSwitch');
2327        if (!wrap || wrap.dataset.wired === '1') return;
2328        wrap.dataset.wired = '1';
2329        wrap.querySelectorAll('button[data-det-locale]').forEach(function (btn) {
2330            btn.addEventListener('click', function () {
2331                var L = btn.getAttribute('data-det-locale');
2332                setLocale(L);
2333                applyDom(document);
2334                if (typeof global.detectorOnLocaleChange === 'function') {
2335                    global.detectorOnLocaleChange(L);
2336                }
2337            });
2338        });
2339        updateLocaleToggleUi();
2340    }
2341
2342    function updateLocaleToggleUi() {
2343        var loc = getLocale();
2344        var wrap = document.getElementById('detLocaleSwitch');
2345        if (!wrap) return;
2346        wrap.querySelectorAll('button[data-det-locale]').forEach(function (btn) {
2347            var L = btn.getAttribute('data-det-locale');
2348            var on = L === loc;
2349            btn.classList.toggle('is-active', on);
2350            btn.setAttribute('aria-pressed', on ? 'true' : 'false');
2351        });
2352    }
2353
2354    global.detectorGetLocale = getLocale;
2355    global.detectorSetLocale = setLocale;
2356    global.detectorT = t;
2357    global.detectorApplyDomI18n = applyDom;
2358    global.detectorWireLocaleToggle = wireLocaleToggle;
2359    global.detectorRestartReportCtaRotation = startReportCtaPhraseRotation;
2360
2361    if (typeof document !== 'undefined') {
2362        applyDocumentLang(getLocale());
2363    }
2364})(typeof window !== 'undefined' ? window : this);
2365
2366

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.