/* global React */
/* =========================================================================
   i18n — 14 languages, RTL-aware, context provider + useT hook + LangPicker

   NOTE (deprecated): Governance sub-tab labels are now translatable via gov.tab.* keys (was kept in Spanish, fixed 2026-04-25). Original comment kept for context.
   Democracia / Comité Técnico) are intentionally kept in Spanish across
   ALL locales — they are proper names of the SORA on-chain governance
   structure, not translatable UI chrome.
   ========================================================================= */
const { createContext, useContext, useState, useEffect, useMemo, useRef, useCallback } = React;

const LANGS = [
  { code: 'es', native: 'Español',     flag: '🇪🇸', rtl: false },
  { code: 'en', native: 'English',     flag: '🇬🇧', rtl: false },
  { code: 'fr', native: 'Français',    flag: '🇫🇷', rtl: false },
  { code: 'de', native: 'Deutsch',     flag: '🇩🇪', rtl: false },
  { code: 'it', native: 'Italiano',    flag: '🇮🇹', rtl: false },
  { code: 'pt', native: 'Português',   flag: '🇵🇹', rtl: false },
  { code: 'ru', native: 'Русский',     flag: '🇷🇺', rtl: false },
  { code: 'zh', native: '中文',         flag: '🇨🇳', rtl: false },
  { code: 'ja', native: '日本語',       flag: '🇯🇵', rtl: false },
  { code: 'ko', native: '한국어',        flag: '🇰🇷', rtl: false },
  { code: 'ar', native: 'العربية',     flag: '🇸🇦', rtl: true  },
  { code: 'he', native: 'עברית',       flag: '🇮🇱', rtl: true  },
  { code: 'ur', native: 'اردو',        flag: '🇵🇰', rtl: true  },
  { code: 'hi', native: 'हिन्दी',        flag: '🇮🇳', rtl: false },
];

const LANG_BY_CODE = Object.fromEntries(LANGS.map(l => [l.code, l]));

/* ---------- Translation dictionary ---------------------------------------
   Structure: DICT[key][lang] = string
   Key convention: dot-separated. Missing → English → key itself.
--------------------------------------------------------------------------- */
const DICT = {
  /* ===== Nav groups ===== */
  'nav.featured':    { en:'Featured',   es:'Destacados', fr:'En vedette', de:'Empfohlen', it:'In evidenza', pt:'Destaques',  ru:'Избранное', zh:'精选',    ja:'注目',     ko:'추천',       ar:'مميز',        he:'מומלצים',    ur:'نمایاں',      hi:'विशेष' },
  'nav.network':     { en:'Network',    es:'Red',        fr:'Réseau',     de:'Netzwerk',  it:'Rete',        pt:'Rede',       ru:'Сеть',      zh:'网络',    ja:'ネットワーク', ko:'네트워크',     ar:'الشبكة',      he:'רשת',        ur:'نیٹ ورک',     hi:'नेटवर्क' },
  'nav.my':          { en:'My',         es:'Mi',         fr:'Mon',        de:'Mein',      it:'Mio',         pt:'Meu',        ru:'Моё',       zh:'我的',    ja:'マイ',      ko:'내',         ar:'خاصتي',       he:'שלי',        ur:'میرا',        hi:'मेरा' },

  /* ===== Nav items ===== */
  'nav.burnTracker': { en:'Burn Tracker',   es:'Rastreador de Quemas', fr:'Suivi des burns',     de:'Burn-Tracker',      it:'Tracker di burn',      pt:'Rastreador de queimas', ru:'Трекер сжиганий',    zh:'销毁追踪',  ja:'バーントラッカー', ko:'소각 추적',    ar:'متتبع الحرق',      he:'מעקב שריפה',  ur:'برن ٹریکر',       hi:'बर्न ट्रैकर' },
  'nav.xorMigration':{ en:'XOR migration',  es:'Migración XOR',        fr:'Migration XOR',       de:'XOR-Migration',     it:'Migrazione XOR',       pt:'Migração XOR',          ru:'Миграция XOR',       zh:'XOR迁移',   ja:'XOR 移行',       ko:'XOR 마이그레이션', ar:'هجرة XOR',      he:'הגירת XOR',  ur:'XOR منتقلی',      hi:'XOR माइग्रेशन' },
  'nav.pulse':       { en:'Network Pulse',  es:'Pulso de la Red',      fr:'Pouls du réseau',     de:'Netzwerk-Puls',     it:'Pulso di rete',        pt:'Pulso da rede',         ru:'Пульс сети',         zh:'网络脉动',  ja:'ネットワーク鼓動', ko:'네트워크 맥박', ar:'نبض الشبكة',       he:'דופק הרשת',   ur:'نیٹ ورک پلس',      hi:'नेटवर्क पल्स' },
  'nav.intelligence':{ en:'Intelligence',   es:'Inteligencia',         fr:'Intelligence',        de:'Analyse',           it:'Intelligence',         pt:'Inteligência',          ru:'Аналитика',          zh:'情报',      ja:'インテリジェンス', ko:'인텔리전스',   ar:'استخبارات',        he:'מודיעין',    ur:'انٹیلیجنس',        hi:'इंटेलिजेंस' },
  'nav.studio':      { en:'Studio',         es:'Estudio',              fr:'Studio',              de:'Studio',            it:'Studio',               pt:'Estúdio',               ru:'Студия',             zh:'工作室',    ja:'スタジオ',        ko:'스튜디오',     ar:'استوديو',          he:'אולפן',       ur:'اسٹوڈیو',          hi:'स्टूडियो' },
  'nav.news':        { en:'Sora News',      es:'Sora News',            fr:'Sora News',           de:'Sora News',         it:'Sora News',            pt:'Sora News',             ru:'Sora News',          zh:'Sora News',ja:'Sora News',       ko:'Sora News',    ar:'Sora News',        he:'Sora News',  ur:'Sora News',        hi:'Sora News' },
  'news.subtitle':   { en:'Podcast episodes on the SORA ecosystem.', es:'Episodios podcast del ecosistema SORA.', fr:'Épisodes podcast de l\'écosystème SORA.', de:'Podcast-Episoden über das SORA-Ökosystem.', it:'Episodi podcast sull\'ecosistema SORA.', pt:'Episódios de podcast sobre o ecossistema SORA.', ru:'Подкаст-эпизоды об экосистеме SORA.', zh:'关于SORA生态系统的播客节目。', ja:'SORAエコシステムのポッドキャスト。', ko:'SORA 생태계 팟캐스트 에피소드.', ar:'حلقات بودكاست عن نظام SORA البيئي.', he:'פרקי פודקאסט על מערכת SORA.', ur:'سورا ایکوسسٹم پر پوڈکاسٹ ایپیسوڈ۔', hi:'SORA पारिस्थितिकी तंत्र पर पॉडकास्ट एपिसोड।' },
  'news.episodes':   { en:'Episodes',       es:'Episodios',            fr:'Épisodes',            de:'Episoden',          it:'Episodi',              pt:'Episódios',             ru:'Эпизоды',            zh:'节目',      ja:'エピソード',     ko:'에피소드',     ar:'الحلقات',          he:'פרקים',      ur:'ایپیسوڈز',         hi:'एपिसोड' },
  'news.nowPlaying': { en:'Now playing',    es:'Reproduciendo',        fr:'Lecture en cours',    de:'Wird abgespielt',   it:'In riproduzione',      pt:'Tocando agora',         ru:'Сейчас играет',      zh:'正在播放',  ja:'再生中',         ko:'재생 중',      ar:'يُشغَّل الآن',     he:'מתנגן עכשיו', ur:'ابھی چل رہا ہے',  hi:'अभी चल रहा है' },
  'nav.swaps':       { en:'Swaps',          es:'Intercambios',         fr:'Swaps',               de:'Tausch',            it:'Swap',                 pt:'Swaps',                 ru:'Обмены',             zh:'兑换',      ja:'スワップ',      ko:'스왑',         ar:'المبادلات',        he:'החלפות',     ur:'سواپس',           hi:'स्वैप' },
  'nav.extrinsics':  { en:'Extrinsics',     es:'Extrínsecos',          fr:'Extrinsèques',        de:'Extrinsics',        it:'Extrinsic',            pt:'Extrínsecos',           ru:'Экстринсики',        zh:'外部交易',  ja:'エクストリンシック', ko:'익스트린식',    ar:'المعاملات',        he:'אקסטרינסיקים', ur:'ایکسٹرنسکس',       hi:'एक्सट्रिंसिक्स' },
  'nav.transfers':   { en:'Transfers',      es:'Transferencias',       fr:'Transferts',          de:'Überweisungen',     it:'Trasferimenti',        pt:'Transferências',        ru:'Переводы',           zh:'转账',      ja:'送金',          ko:'전송',         ar:'التحويلات',        he:'העברות',     ur:'منتقلیاں',         hi:'स्थानांतरण' },
  'nav.bridges':     { en:'Bridges',        es:'Puentes',              fr:'Ponts',               de:'Brücken',           it:'Ponti',                pt:'Pontes',                ru:'Мосты',              zh:'跨链桥',    ja:'ブリッジ',      ko:'브릿지',       ar:'الجسور',           he:'גשרים',      ur:'پل',               hi:'ब्रिज' },
  'nav.orderBook':   { en:'Order Book',     es:'Libro de Órdenes',     fr:'Carnet d\'ordres',    de:'Orderbuch',         it:'Libro ordini',         pt:'Livro de ordens',       ru:'Стакан заявок',      zh:'订单簿',    ja:'オーダーブック',  ko:'오더북',       ar:'دفتر الأوامر',     he:'ספר הזמנות',  ur:'آرڈر بک',         hi:'ऑर्डर बुक' },
  'nav.pools':       { en:'Pools',          es:'Pools',                fr:'Pools',               de:'Pools',             it:'Pool',                 pt:'Pools',                 ru:'Пулы',               zh:'流动性池',  ja:'プール',        ko:'풀',           ar:'المجمعات',         he:'בריכות',     ur:'پولز',            hi:'पूल' },
  'nav.tokens':      { en:'Tokens',         es:'Tokens',               fr:'Jetons',              de:'Tokens',            it:'Token',                pt:'Tokens',                ru:'Токены',             zh:'代币',      ja:'トークン',      ko:'토큰',         ar:'العملات',          he:'אסימונים',   ur:'ٹوکنز',           hi:'टोकन' },
  'nav.holders':     { en:'Holders',        es:'Titulares',            fr:'Détenteurs',          de:'Halter',            it:'Detentori',            pt:'Detentores',            ru:'Держатели',          zh:'持有者',    ja:'保有者',        ko:'보유자',       ar:'الحائزون',         he:'מחזיקים',    ur:'ہولڈرز',           hi:'धारक' },
  'nav.staking':     { en:'Staking',        es:'Staking',              fr:'Staking',             de:'Staking',           it:'Staking',              pt:'Staking',               ru:'Стейкинг',           zh:'质押',      ja:'ステーキング',  ko:'스테이킹',     ar:'الرهن',            he:'נעילה',      ur:'اسٹیکنگ',          hi:'स्टेकिंग' },
  'nav.governance':  { en:'Governance',     es:'Gobernanza',           fr:'Gouvernance',         de:'Governance',        it:'Governance',           pt:'Governança',            ru:'Управление',         zh:'治理',      ja:'ガバナンス',    ko:'거버넌스',     ar:'الحوكمة',          he:'ממשל',       ur:'گورننس',          hi:'शासन' },
  'nav.predict':     { en:'Polkamarkt', es:'Polkamarkt', fr:'Polkamarkt', de:'Polkamarkt', it:'Polkamarkt', pt:'Polkamarkt', ru:'Polkamarkt', zh:'Polkamarkt', ja:'Polkamarkt', ko:'Polkamarkt', ar:'Polkamarkt', he:'Polkamarkt', ur:'Polkamarkt', hi:'Polkamarkt' },
  'nav.toolsGroup':  { en:'Tools',          es:'Herramientas',         fr:'Outils',              de:'Werkzeuge',         it:'Strumenti',            pt:'Ferramentas',           ru:'Инструменты',        zh:'工具',      ja:'ツール',       ko:'도구',         ar:'الأدوات',          he:'כלים',       ur:'اوزار',           hi:'उपकरण' },
  'nav.tools':       { en:'Tools',          es:'Herramientas',         fr:'Outils',              de:'Werkzeuge',         it:'Strumenti',            pt:'Ferramentas',           ru:'Инструменты',        zh:'工具',      ja:'ツール',       ko:'도구',         ar:'الأدوات',          he:'כלים',       ur:'اوزار',           hi:'उपकरण' },
  'nav.metrics':     { en:'Metrics',        es:'Métricas',             fr:'Métriques',           de:'Metriken',          it:'Metriche',             pt:'Métricas',              ru:'Метрики',            zh:'指标',      ja:'メトリクス',   ko:'지표',         ar:'المقاييس',         he:'מדדים',      ur:'میٹرکس',          hi:'मेट्रिक्स' },
  'nav.portfolio':   { en:'Portfolio',      es:'Cartera',              fr:'Portefeuille',        de:'Portfolio',         it:'Portafoglio',          pt:'Carteira',              ru:'Портфель',           zh:'投资组合',  ja:'ポートフォリオ', ko:'포트폴리오',   ar:'المحفظة',          he:'תיק',        ur:'پورٹ فولیو',      hi:'पोर्टफ़ोलियो' },
  'nav.balance':     { en:'Activity',       es:'Actividad',            fr:'Activité',            de:'Aktivität',         it:'Attività',             pt:'Atividade',             ru:'Активность',         zh:'活动',      ja:'アクティビティ', ko:'활동',         ar:'النشاط',           he:'פעילות',     ur:'سرگرمی',          hi:'गतिविधि' },

  /* ===== Common ===== */
  'common.search':     { en:'Search wallet, tx hash, block, extrinsic…',  es:'Buscar cartera, hash, bloque, extrínseco…', fr:'Rechercher wallet, hash, bloc, extrinsèque…', de:'Wallet, Hash, Block, Extrinsic suchen…',  it:'Cerca wallet, hash, blocco, extrinsic…',  pt:'Buscar carteira, hash, bloco, extrínseco…',  ru:'Поиск кошелька, хэша, блока…',  zh:'搜索钱包、哈希、区块、外部交易…',  ja:'ウォレット・ハッシュ・ブロック…',  ko:'지갑, 해시, 블록, 익스트린식 검색…',  ar:'ابحث في المحافظ والكتل والمعاملات…',  he:'חיפוש ארנק, האש, בלוק…',  ur:'والیٹ، ہیش، بلاک تلاش کریں…',  hi:'वॉलेट, हैश, ब्लॉक खोजें…' },
  'common.live':       { en:'LIVE',         es:'EN VIVO',      fr:'EN DIRECT',    de:'LIVE',      it:'IN DIRETTA',  pt:'AO VIVO',    ru:'В ЭФИРЕ',      zh:'实时',     ja:'ライブ',      ko:'실시간',       ar:'مباشر',       he:'חי',          ur:'براہ راست',    hi:'लाइव' },
  'common.connected':  { en:'connected',    es:'conectado',    fr:'connecté',     de:'verbunden', it:'connesso',    pt:'conectado',  ru:'подключено',   zh:'已连接',   ja:'接続済み',    ko:'연결됨',       ar:'متصل',        he:'מחובר',       ur:'منسلک',        hi:'जुड़ा हुआ' },
  'common.pause':      { en:'Pause',        es:'Pausar',       fr:'Pause',        de:'Pause',     it:'Pausa',       pt:'Pausar',     ru:'Пауза',        zh:'暂停',     ja:'一時停止',    ko:'일시정지',     ar:'إيقاف',       he:'השהה',        ur:'روکیں',        hi:'रोकें' },
  'common.resume':     { en:'Resume',       es:'Reanudar',     fr:'Reprendre',    de:'Fortsetzen',it:'Riprendi',    pt:'Retomar',    ru:'Продолжить',   zh:'继续',     ja:'再開',        ko:'재개',         ar:'استئناف',     he:'המשך',        ur:'جاری رکھیں',   hi:'जारी रखें' },
  'common.copy':       { en:'Copy',         es:'Copiar',       fr:'Copier',       de:'Kopieren',  it:'Copia',       pt:'Copiar',     ru:'Копировать',   zh:'复制',     ja:'コピー',      ko:'복사',         ar:'نسخ',         he:'העתק',        ur:'کاپی',         hi:'कॉपी' },
  'common.copied':     { en:'Copied',       es:'Copiado',      fr:'Copié',        de:'Kopiert',   it:'Copiato',     pt:'Copiado',    ru:'Скопировано',  zh:'已复制',   ja:'コピー済み',  ko:'복사됨',       ar:'تم النسخ',    he:'הועתק',       ur:'کاپی ہو گیا',  hi:'कॉपी किया' },
  'common.close':      { en:'Close',        es:'Cerrar',       fr:'Fermer',       de:'Schließen', it:'Chiudi',      pt:'Fechar',     ru:'Закрыть',      zh:'关闭',     ja:'閉じる',      ko:'닫기',         ar:'إغلاق',       he:'סגור',        ur:'بند کریں',     hi:'बंद' },
  'common.language':   { en:'Language',     es:'Idioma',       fr:'Langue',       de:'Sprache',   it:'Lingua',      pt:'Idioma',     ru:'Язык',         zh:'语言',     ja:'言語',        ko:'언어',         ar:'اللغة',       he:'שפה',         ur:'زبان',         hi:'भाषा' },

  /* ===== Top bar ===== */
  'topbar.block':    { en:'Block',        es:'Bloque',       fr:'Bloc',         de:'Block',     it:'Blocco',      pt:'Bloco',      ru:'Блок',         zh:'区块',     ja:'ブロック',    ko:'블록',         ar:'كتلة',        he:'בלוק',        ur:'بلاک',         hi:'ब्लॉक' },
  'topbar.eraEpoch': { en:'Era · Epoch',  es:'Era · Época',  fr:'Ère · Époque', de:'Ära · Epoche', it:'Era · Epoca', pt:'Era · Época', ru:'Эра · Эпоха', zh:'纪元·周期', ja:'エラ・エポック', ko:'시대·에포크', ar:'حقبة · عصر', he:'עידן · אפוקה', ur:'دور · عہد',   hi:'युग · एपॉक' },

  /* ===== Burn Tracker ===== */
  'burn.title':    { en:'Burn Tracker',                                      es:'Rastreador de Quemas',                                fr:'Suivi des burns',                                   de:'Burn-Tracker',                                    it:'Tracker di burn',                                 pt:'Rastreador de queimas',                             ru:'Трекер сжиганий',                                  zh:'销毁追踪',                                ja:'バーントラッカー',                             ko:'소각 추적기',                             ar:'متتبع الحرق',                                       he:'מעקב שריפה',                                  ur:'برن ٹریکر',                                 hi:'बर्न ट्रैकर' },
  'burn.sub':      { en:'Real-time burn economics across all SORA assets.', es:'Economía de quemas en tiempo real para todos los activos SORA.', fr:'Économie des burns en temps réel sur tous les actifs SORA.', de:'Burn-Ökonomie in Echtzeit für alle SORA-Assets.', it:'Economia dei burn in tempo reale per tutti gli asset SORA.', pt:'Economia de queimas em tempo real para todos os ativos SORA.', ru:'Экономика сжиганий всех активов SORA в реальном времени.', zh:'实时追踪所有 SORA 资产的销毁经济。', ja:'すべての SORA 資産のバーン経済をリアルタイム表示。', ko:'모든 SORA 자산의 실시간 소각 경제.',    ar:'اقتصاديات الحرق الفورية لجميع أصول SORA.',          he:'כלכלת שריפה בזמן אמת לכל נכסי SORA.',           ur:'تمام SORA اثاثوں کی حقیقی وقت میں برن اکنامکس۔', hi:'सभी SORA परिसंपत्तियों की रीयल-टाइम बर्न इकोनॉमिक्स।' },

  /* ===== Pulse ===== */
  "pulse.search.blockPlaceholder": { en:"block #",   es:"bloque #",        fr:"bloc #",         de:"Block #",        it:"blocco #",       pt:"bloco #",        ru:"блок #",         zh:"区块 #",       ja:"ブロック#",      ko:"블록 #",          ar:"كتلة #",        he:"בלוק #",       ur:"بلاک #",        hi:"ब्लॉक #" },
  "pulse.search.go":               { en:"Go",        es:"Ir",              fr:"OK",             de:"Los",            it:"Vai",            pt:"Ir",             ru:"OK",             zh:"前往",          ja:"移動",           ko:"이동",            ar:"اذهب",         he:"לך",            ur:"جائیں",         hi:"जाएँ" },
  'pulse.title':   { en:'Network Pulse',                                     es:'Pulso de la Red',                                     fr:'Pouls du réseau',                                   de:'Netzwerk-Puls',                                   it:'Pulso di rete',                                   pt:'Pulso da rede',                                     ru:'Пульс сети',                                       zh:'网络脉动',                                ja:'ネットワーク鼓動',                            ko:'네트워크 맥박',                           ar:'نبض الشبكة',                                        he:'דופק הרשת',                                   ur:'نیٹ ورک پلس',                              hi:'नेटवर्क पल्स' },
  'pulse.sub':     { en:'Live on-chain activity across blocks, swaps, and transfers.', es:'Actividad en cadena en vivo: bloques, swaps y transferencias.', fr:'Activité en chaîne en direct : blocs, swaps, transferts.', de:'On-Chain-Aktivität: Blöcke, Swaps, Transfers.', it:'Attività on-chain in diretta: blocchi, swap, trasferimenti.', pt:'Atividade on-chain em tempo real: blocos, swaps, transferências.', ru:'Ончейн-активность: блоки, свопы, переводы.', zh:'实时链上活动:区块、兑换、转账。', ja:'ライブオンチェーン活動:ブロック・スワップ・送金。', ko:'실시간 온체인 활동: 블록, 스왑, 전송.', ar:'النشاط الحي على السلسلة: الكتل والمبادلات والتحويلات.', he:'פעילות בזמן אמת בשרשרת: בלוקים, החלפות, העברות.', ur:'براہ راست آن چین سرگرمی: بلاکس، سواپس، منتقلیاں۔', hi:'लाइव ऑन-चेन गतिविधि: ब्लॉक, स्वैप, ट्रांसफ़र।' },

  /* ===== Intelligence ===== */
  'intel.title':   { en:'Intelligence',    es:'Inteligencia',   fr:'Intelligence',   de:'Analyse',       it:'Intelligence',  pt:'Inteligência',   ru:'Аналитика',    zh:'情报',     ja:'インテリジェンス', ko:'인텔리전스',  ar:'استخبارات',   he:'מודיעין',    ur:'انٹیلیجنس',   hi:'इंटेलिजेंस' },
  'intel.sub':     { en:'Curated insights from on-chain pattern analysis.', es:'Perspectivas curadas del análisis de patrones on-chain.', fr:'Analyses tirées de l\'étude des schémas on-chain.', de:'Kuratierte Erkenntnisse aus der On-Chain-Musteranalyse.', it:'Approfondimenti dall\'analisi dei pattern on-chain.', pt:'Insights curados da análise de padrões on-chain.', ru:'Аналитика на основе ончейн-паттернов.', zh:'基于链上模式分析的精选洞察。', ja:'オンチェーンパターン分析からの洞察。', ko:'온체인 패턴 분석 기반 인사이트.', ar:'رؤى مختارة من تحليل الأنماط على السلسلة.', he:'תובנות נבחרות מניתוח דפוסים בשרשרת.', ur:'آن چین پیٹرن تجزیے سے منتخب بصیرت۔', hi:'ऑन-चेन पैटर्न विश्लेषण से चुनी गई अंतर्दृष्टियाँ।' },

  /* ===== Swaps ===== */
  'swaps.title':   { en:'Swaps',   es:'Intercambios',  fr:'Swaps',   de:'Tausch',   it:'Swap',   pt:'Swaps',   ru:'Обмены',   zh:'兑换',   ja:'スワップ',   ko:'스왑',   ar:'المبادلات',   he:'החלפות',  ur:'سواپس',   hi:'स्वैप' },
  'swaps.sub':     { en:'DEX trades routed via liquidity proxy.', es:'Operaciones DEX vía liquidity proxy.', fr:'Trades DEX routés via liquidity proxy.', de:'DEX-Trades via Liquidity-Proxy.', it:'Trade DEX via liquidity proxy.', pt:'Trades DEX via liquidity proxy.', ru:'DEX-сделки через liquidity proxy.', zh:'通过流动性代理路由的 DEX 交易。', ja:'リクイディティプロキシ経由の DEX 取引。', ko:'유동성 프록시 DEX 거래.', ar:'صفقات DEX عبر بروكسي السيولة.', he:'עסקאות DEX דרך ליקווידיטי פרוקסי.', ur:'لکویڈٹی پراکسی کے ذریعے DEX ٹریڈز۔', hi:'लिक्विडिटी प्रॉक्सी के माध्यम से DEX ट्रेड।' },

  /* ===== Extrinsics ===== */
  'extrinsics.title': { en:'Extrinsics',  es:'Extrínsecos',  fr:'Extrinsèques',  de:'Extrinsics',  it:'Extrinsic',  pt:'Extrínsecos',  ru:'Экстринсики',  zh:'外部交易',  ja:'エクストリンシック',  ko:'익스트린식',  ar:'المعاملات',  he:'אקסטרינסיקים',  ur:'ایکسٹرنسکس',  hi:'एक्सट्रिंसिक्स' },
  'extrinsics.sub':   { en:'Every pallet call, signed and traced.', es:'Cada llamada a pallet, firmada y rastreada.', fr:'Chaque appel de pallet, signé et tracé.', de:'Jeder Pallet-Call, signiert und verfolgt.', it:'Ogni chiamata a pallet, firmata e tracciata.', pt:'Cada chamada de pallet, assinada e rastreada.', ru:'Каждый вызов pallet, подписан и отслежен.', zh:'每次模块调用,已签名并追踪。', ja:'すべてのパレット呼び出し、署名済み。', ko:'모든 팔레트 호출, 서명 및 추적.', ar:'كل استدعاء pallet، موقّع ومتتبع.', he:'כל קריאת pallet, חתומה ומתועדת.', ur:'ہر پیلٹ کال، دستخط شدہ اور ٹریس۔', hi:'हर पैलेट कॉल, हस्ताक्षरित और ट्रेस।' },
  'ext.feeOnExpand': { en:'Fee not available for this extrinsic', es:'Fee no disponible para este extrinsic', fr:'Frais non disponibles pour cet extrinsic', de:'Gebühr für diesen Extrinsic nicht verfügbar', it:'Commissione non disponibile per questo extrinsic', pt:'Taxa não disponível para este extrinsic', ru:'Комиссия для этого экстринзика недоступна', zh:'此 extrinsic 无可用手续费', ja:'この extrinsic の手数料は利用不可', ko:'이 익스트린식의 수수료 없음', ar:'الرسوم غير متاحة لهذا الإكسترينسيك', he:'עמלה לא זמינה ל-extrinsic זה', ur:'اس extrinsic کے لیے فیس دستیاب نہیں', hi:'इस extrinsic के लिए शुल्क उपलब्ध नहीं' },
  'ext.txFee': { en:'Transaction fee', es:'Fee de la transacción', fr:'Frais de transaction', de:'Transaktionsgebühr', it:'Commissione transazione', pt:'Taxa da transação', ru:'Комиссия транзакции', zh:'交易手续费', ja:'取引手数料', ko:'거래 수수료', ar:'رسوم المعاملة', he:'עמלת עסקה', ur:'لین دین فیس', hi:'लेनदेन शुल्क' },
  'ext.feeLoading': { en:'Loading fee…', es:'Cargando fee…', fr:'Chargement des frais…', de:'Gebühr lädt…', it:'Caricamento commissione…', pt:'Carregando taxa…', ru:'Загрузка комиссии…', zh:'加载手续费…', ja:'手数料を読み込み中…', ko:'수수료 로딩…', ar:'جار تحميل الرسوم…', he:'טוען עמלה…', ur:'فیس لوڈ ہو رہی…', hi:'शुल्क लोड हो रहा…' },
  'ext.feeNone': { en:'No fee event for this extrinsic.', es:'Sin evento de fee para este extrinsic.', fr:'Aucun événement de frais pour cet extrinsic.', de:'Kein Gebührenereignis für diesen Extrinsic.', it:'Nessun evento commissione per questo extrinsic.', pt:'Sem evento de taxa para este extrinsic.', ru:'Нет события комиссии для этого экстринзика.', zh:'此 extrinsic 无手续费事件。', ja:'この extrinsic に手数料イベントなし。', ko:'이 익스트린식에 수수료 이벤트 없음.', ar:'لا حدث رسوم لهذا الإكسترينسيك.', he:'אין אירוע עמלה ל-extrinsic זה.', ur:'اس extrinsic کے لیے کوئی فیس ایونٹ نہیں۔', hi:'इस extrinsic के लिए कोई शुल्क इवेंट नहीं।' },
  'ext.feePaid': { en:'Fee paid', es:'Fee pagada', fr:'Frais payés', de:'Gezahlte Gebühr', it:'Commissione pagata', pt:'Taxa paga', ru:'Уплаченная комиссия', zh:'已付手续费', ja:'支払手数料', ko:'지불된 수수료', ar:'الرسوم المدفوعة', he:'עמלה ששולמה', ur:'ادا شدہ فیس', hi:'भुगतान शुल्क' },
  'ext.feeNotIndexed': { en:'Fee not indexed for this block yet.', es:'Fee aún no indexada para este bloque.', fr:'Frais pas encore indexés pour ce bloc.', de:'Gebühr für diesen Block noch nicht indiziert.', it:'Commissione non ancora indicizzata per questo blocco.', pt:'Taxa ainda não indexada para este bloco.', ru:'Комиссия для этого блока ещё не проиндексирована.', zh:'该区块的手续费尚未索引。', ja:'このブロックの手数料は未インデックス。', ko:'이 블록의 수수료가 아직 색인되지 않음.', ar:'الرسوم لهذه الكتلة غير مفهرسة بعد.', he:'העמלה לבלוק זה עדיין לא מאונדקסת.', ur:'اس بلاک کی فیس ابھی انڈیکس نہیں ہوئی۔', hi:'इस ब्लॉक का शुल्क अभी इंडेक्स नहीं हुआ।' },
  'ext.feeAmbiguous': { en:'Several fee-paying txs in this block — expand for detail', es:'Varias transacciones con coste en este bloque — despliega para el detalle', fr:'Plusieurs transactions payantes dans ce bloc — développez pour le détail', de:'Mehrere gebührenpflichtige Txs in diesem Block — aufklappen für Details', it:'Più transazioni a pagamento in questo blocco — espandi per il dettaglio', pt:'Várias transações com custo neste bloco — expanda para o detalhe', ru:'Несколько платных транзакций в этом блоке — разверните для деталей', zh:'此区块有多笔付费交易 — 展开查看明细', ja:'このブロックに有料取引が複数 — 展開して詳細を確認', ko:'이 블록에 수수료 거래 여러 건 — 펼쳐서 상세 보기', ar:'عدة معاملات مدفوعة في هذه الكتلة — وسّع للتفاصيل', he:'כמה עסקאות בתשלום בבלוק זה — הרחב לפרטים', ur:'اس بلاک میں کئی فیس والی ٹرانزیکشنز — تفصیل کے لیے کھولیں', hi:'इस ब्लॉक में कई शुल्क-वाली txs — विवरण हेतु खोलें' },
  'ext.feeBlockTotal': { en:'Block total fee', es:'Fee total del bloque', fr:'Frais totaux du bloc', de:'Gesamtgebühr des Blocks', it:'Commissione totale blocco', pt:'Taxa total do bloco', ru:'Общая комиссия блока', zh:'区块总手续费', ja:'ブロック合計手数料', ko:'블록 총 수수료', ar:'إجمالي رسوم الكتلة', he:'עמלת בלוק כוללת', ur:'بلاک کی کل فیس', hi:'ब्लॉक कुल शुल्क' },
  'ext.feeBlockNote': { en:'This block had {n} fee-paying transactions.', es:'Este bloque tuvo {n} transacciones con coste.', fr:'Ce bloc a eu {n} transactions payantes.', de:'Dieser Block hatte {n} gebührenpflichtige Transaktionen.', it:'Questo blocco ha avuto {n} transazioni a pagamento.', pt:'Este bloco teve {n} transações com custo.', ru:'В этом блоке было {n} платных транзакций.', zh:'此区块有 {n} 笔付费交易。', ja:'このブロックには有料取引が {n} 件ありました。', ko:'이 블록에는 수수료 거래가 {n}건 있었습니다.', ar:'هذه الكتلة بها {n} معاملات مدفوعة.', he:'בבלוק זה היו {n} עסקאות בתשלום.', ur:'اس بلاک میں {n} فیس والی ٹرانزیکشنز تھیں۔', hi:'इस ब्लॉक में {n} शुल्क-वाली लेनदेन थीं।' },
  'ext.feeUnsigned': { en:'Unsigned extrinsic · no cost', es:'Extrinsic no firmado · sin coste', fr:'Extrinsic non signé · sans frais', de:'Unsignierter Extrinsic · kostenlos', it:'Extrinsic non firmato · senza costo', pt:'Extrinsic não assinado · sem custo', ru:'Неподписанный экстринзик · бесплатно', zh:'未签名 extrinsic · 无费用', ja:'未署名の extrinsic · 無料', ko:'서명되지 않은 익스트린식 · 무료', ar:'إكسترينسيك غير موقّع · بدون تكلفة', he:'extrinsic לא חתום · ללא עלות', ur:'غیر دستخط شدہ extrinsic · بلا قیمت', hi:'अहस्ताक्षरित extrinsic · निःशुल्क' },

  /* ===== Transfers ===== */
  'transfers.title': { en:'Transfers',  es:'Transferencias',  fr:'Transferts',  de:'Überweisungen',  it:'Trasferimenti',  pt:'Transferências',  ru:'Переводы',  zh:'转账',  ja:'送金',  ko:'전송',  ar:'التحويلات',  he:'העברות',  ur:'منتقلیاں',  hi:'स्थानांतरण' },
  'transfers.sub':   { en:'Direct balance movements, excluding DEX.', es:'Movimientos directos de saldo, excluyendo DEX.', fr:'Mouvements de solde directs, hors DEX.', de:'Direkte Saldo-Bewegungen, ohne DEX.', it:'Movimenti diretti di saldo, escluso DEX.', pt:'Movimentos diretos de saldo, excluindo DEX.', ru:'Прямые переводы, без DEX.', zh:'直接余额变动(不含 DEX)。', ja:'直接的な残高移動、DEX を除く。', ko:'DEX 제외 직접 잔액 이동.', ar:'تحركات رصيد مباشرة، باستثناء DEX.', he:'תנועות יתרה ישירות, ללא DEX.', ur:'براہ راست بیلنس منتقلی، DEX کے بغیر۔', hi:'प्रत्यक्ष बैलेंस मूवमेंट, DEX को छोड़कर।' },

  /* ===== Bridges ===== */
  'bridges.title':   { en:'Bridges',    es:'Puentes',    fr:'Ponts',    de:'Brücken',    it:'Ponti',    pt:'Pontes',    ru:'Мосты',    zh:'跨链桥',  ja:'ブリッジ',   ko:'브릿지',    ar:'الجسور',    he:'גשרים',    ur:'پل',    hi:'ब्रिज' },
  'bridges.sub':     { en:'Cross-chain transfers via HASHI.', es:'Transferencias entre cadenas vía HASHI.', fr:'Transferts cross-chain via HASHI.', de:'Cross-Chain-Transfers via HASHI.', it:'Trasferimenti cross-chain via HASHI.', pt:'Transferências cross-chain via HASHI.', ru:'Кросс-чейн переводы через HASHI.', zh:'通过 HASHI 的跨链转账。', ja:'HASHI 経由のクロスチェーン送金。', ko:'HASHI 통한 크로스체인 전송.', ar:'تحويلات عبر السلاسل بواسطة HASHI.', he:'העברות חוצות-שרשרת דרך HASHI.', ur:'HASHI کے ذریعے کراس چین منتقلی۔', hi:'HASHI के माध्यम से क्रॉस-चेन ट्रांसफ़र।' },

  /* ===== Order Book ===== */
  'orderbook.title': { en:'Order Book',  es:'Libro de Órdenes',  fr:'Carnet d\'ordres',  de:'Orderbuch',  it:'Libro ordini',  pt:'Livro de ordens',  ru:'Стакан заявок',  zh:'订单簿',  ja:'オーダーブック',  ko:'오더북',  ar:'دفتر الأوامر',  he:'ספר הזמנות',  ur:'آرڈر بک',  hi:'ऑर्डर बुक' },
  'orderbook.sub':   { en:'Native limit-order market depth.', es:'Profundidad del mercado de órdenes limitadas.', fr:'Profondeur du carnet d\'ordres limites.', de:'Markt-Tiefe für Limit-Orders.', it:'Profondità del mercato a ordini limite.', pt:'Profundidade do mercado de ordens limitadas.', ru:'Глубина рынка лимитных ордеров.', zh:'原生限价订单市场深度。', ja:'ネイティブ指値注文の市場深度。', ko:'네이티브 지정가 주문 시장 깊이.', ar:'عمق سوق أوامر الحد.', he:'עומק שוק הזמנות מגבילות.', ur:'لمٹ آرڈر مارکیٹ کی گہرائی۔', hi:'लिमिट-ऑर्डर बाज़ार गहराई।' },

  /* ===== Pools ===== */
  'pools.title':     { en:'Pools',   es:'Pools',   fr:'Pools',   de:'Pools',   it:'Pool',   pt:'Pools',   ru:'Пулы',   zh:'流动性池',  ja:'プール',   ko:'풀',   ar:'المجمعات',   he:'בריכות',   ur:'پولز',   hi:'पूल' },
  'pools.sub':       { en:'Liquidity pools ranked by TVL.', es:'Pools de liquidez ordenados por TVL.', fr:'Pools de liquidité classés par TVL.', de:'Liquiditätspools nach TVL.', it:'Pool di liquidità classificati per TVL.', pt:'Pools de liquidez classificados por TVL.', ru:'Пулы ликвидности по TVL.', zh:'按 TVL 排序的流动性池。', ja:'TVL でランク付けされた流動性プール。', ko:'TVL로 정렬된 유동성 풀.', ar:'مجمعات السيولة حسب TVL.', he:'בריכות נזילות לפי TVL.', ur:'TVL کے لحاظ سے لکویڈٹی پولز۔', hi:'TVL के अनुसार लिक्विडिटी पूल।' },

  /* ===== Tokens ===== */
  'tokens.title':    { en:'Tokens',   es:'Tokens',   fr:'Jetons',   de:'Tokens',   it:'Token',   pt:'Tokens',   ru:'Токены',   zh:'代币',   ja:'トークン',   ko:'토큰',   ar:'العملات',   he:'אסימונים',   ur:'ٹوکنز',   hi:'टोकन' },
  'tokens.sub':      { en:'All registered SORA assets.', es:'Todos los activos SORA registrados.', fr:'Tous les actifs SORA enregistrés.', de:'Alle registrierten SORA-Assets.', it:'Tutti gli asset SORA registrati.', pt:'Todos os ativos SORA registrados.', ru:'Все зарегистрированные активы SORA.', zh:'所有已注册的 SORA 资产。', ja:'登録済みの SORA 資産すべて。', ko:'등록된 모든 SORA 자산.', ar:'جميع أصول SORA المسجّلة.', he:'כל נכסי SORA הרשומים.', ur:'تمام رجسٹرڈ SORA اثاثے۔', hi:'सभी पंजीकृत SORA संपत्तियाँ।' },

  /* ===== Holders ===== */
  'holders.title':   { en:'Holders',   es:'Titulares',   fr:'Détenteurs',   de:'Halter',   it:'Detentori',   pt:'Detentores',   ru:'Держатели',   zh:'持有者',   ja:'保有者',   ko:'보유자',   ar:'الحائزون',   he:'מחזיקים',   ur:'ہولڈرز',   hi:'धारक' },
  'holders.sub':     { en:'Top addresses by XOR balance.', es:'Principales direcciones por saldo XOR.', fr:'Principales adresses par solde XOR.', de:'Top-Adressen nach XOR-Saldo.', it:'Principali indirizzi per saldo XOR.', pt:'Principais endereços por saldo XOR.', ru:'Топ-адреса по балансу XOR.', zh:'按 XOR 余额排名的地址。', ja:'XOR 残高順のトップアドレス。', ko:'XOR 잔액 상위 주소.', ar:'أعلى العناوين برصيد XOR.', he:'כתובות מובילות לפי יתרת XOR.', ur:'XOR بیلنس کے لحاظ سے ٹاپ ایڈریسز۔', hi:'XOR बैलेंस के अनुसार शीर्ष पते।' },

  /* ===== Staking ===== */
  'staking.title':   { en:'Staking',  es:'Staking',  fr:'Staking',  de:'Staking',  it:'Staking',  pt:'Staking',  ru:'Стейкинг',  zh:'质押',  ja:'ステーキング',  ko:'스테이킹',  ar:'الرهن',  he:'נעילה',  ur:'اسٹیکنگ',  hi:'स्टेकिंग' },
  'staking.sub':     { en:'Validators and network staking metrics.', es:'Validadores y métricas de staking.', fr:'Validateurs et métriques de staking.', de:'Validatoren und Staking-Metriken.', it:'Validatori e metriche di staking.', pt:'Validadores e métricas de staking.', ru:'Валидаторы и метрики стейкинга.', zh:'验证者与质押指标。', ja:'バリデーターとステーキング指標。', ko:'검증자 및 스테이킹 지표.', ar:'المدققون ومقاييس الرهن.', he:'ולידטורים ומדדי נעילה.', ur:'ویلیڈیٹرز اور اسٹیکنگ میٹرکس۔', hi:'वैलिडेटर और स्टेकिंग मेट्रिक्स।' },
  'staking.tab.validators':  { en:'Validators',   es:'Validadores',   fr:'Validateurs',  de:'Validatoren',  it:'Validatori',   pt:'Validadores',  ru:'Валидаторы',   zh:'验证者',  ja:'バリデーター',  ko:'검증자',    ar:'المدققون',   he:'ולידטורים',  ur:'ویلیڈیٹرز',  hi:'वैलिडेटर' },
  'staking.tab.network':     { en:'Network Info', es:'Info de la Red', fr:'Info réseau',  de:'Netzwerk-Info', it:'Info rete',   pt:'Info da rede', ru:'Сеть',         zh:'网络信息', ja:'ネット情報',    ko:'네트워크 정보', ar:'معلومات الشبكة', he:'מידע רשת', ur:'نیٹ ورک معلومات', hi:'नेटवर्क जानकारी' },
  'staking.tab.rewards':     { en:'Rewards', es:'Recompensas', fr:'Récompenses', de:'Belohnungen', it:'Ricompense', pt:'Recompensas', ru:'Награды', zh:'奖励', ja:'報酬', ko:'보상', ar:'المكافآت', he:'תגמולים', ur:'انعامات', hi:'पुरस्कार' },
  'staking.rewards.kpi.allTime':           { en:'VAL distributed (all-time)', es:'VAL distribuido (total)', fr:'VAL distribué (total)', de:'VAL verteilt (gesamt)', it:'VAL distribuito (totale)', pt:'VAL distribuído (total)', ru:'VAL распределено (всего)', zh:'VAL分配 (累计)', ja:'VAL分配(累計)', ko:'VAL 분배 (전체)', ar:'VAL موزع (الإجمالي)', he:'VAL חולק (סה"כ)', ur:'VAL تقسیم (کل)', hi:'VAL वितरित (कुल)' },
  'staking.rewards.kpi.last24h':           { en:'VAL distributed (24h)', es:'VAL distribuido (24h)', fr:'VAL distribué (24h)', de:'VAL verteilt (24h)', it:'VAL distribuito (24h)', pt:'VAL distribuído (24h)', ru:'VAL распределено (24ч)', zh:'VAL分配 (24h)', ja:'VAL分配(24h)', ko:'VAL 분배 (24h)', ar:'VAL موزع (24س)', he:'VAL חולק (24ש)', ur:'VAL تقسیم (24h)', hi:'VAL वितरित (24h)' },
  'staking.rewards.kpi.bucketCurrent':     { en:'Current era VAL bucket', es:'Bucket VAL era actual', fr:'Pool VAL ère actuelle', de:'VAL-Topf aktuelle Ära', it:'Pool VAL era corrente', pt:'Pool VAL era atual', ru:'VAL пул текущей эры', zh:'当前纪元VAL池', ja:'現エラVALプール', ko:'현재 에라 VAL 풀', ar:'وعاء VAL للحقبة الحالية', he:'מאגר VAL לעידן הנוכחי', ur:'موجودہ دور کا VAL پول', hi:'वर्तमान युग VAL पूल' },
  'staking.rewards.kpi.bucketUnassigned':  { en:'Unassigned bucket', es:'Bucket sin asignar', fr:'Pool non assigné', de:'Nicht zugewiesener Topf', it:'Pool non assegnato', pt:'Pool não atribuído', ru:'Нераспределённый пул', zh:'未分配池', ja:'未割当プール', ko:'미할당 풀', ar:'وعاء غير مخصص', he:'מאגר לא משויך', ur:'غیر تفویض شدہ پول', hi:'अनएसाइन्ड पूल' },
  'staking.rewards.kpi.payouts':           { en:'payouts', es:'pagos', fr:'paiements', de:'Auszahlungen', it:'pagamenti', pt:'pagamentos', ru:'выплат', zh:'支付', ja:'支払', ko:'지급', ar:'دفعات', he:'תשלומים', ur:'ادائیگیاں', hi:'भुगतान' },
  'staking.rewards.kpi.storageNotInRuntime': { en:'storage not in runtime', es:'storage no en runtime', fr:'storage absent du runtime', de:'Storage nicht in Runtime', it:'storage non in runtime', pt:'storage não no runtime', ru:'storage отсутствует', zh:'storage不在runtime中', ja:'storageがruntimeに無し', ko:'storage가 runtime에 없음', ar:'التخزين غير موجود في وقت التشغيل', he:'אחסון לא ב-runtime', ur:'storage runtime میں نہیں', hi:'storage runtime में नहीं' },
  'staking.rewards.kpi.onChain':           { en:'reading on-chain', es:'leyendo on-chain', fr:'lecture on-chain', de:'On-Chain-Lesung', it:'lettura on-chain', pt:'leitura on-chain', ru:'чтение on-chain', zh:'链上读取', ja:'オンチェーン読込', ko:'온체인 읽기', ar:'قراءة على السلسلة', he:'קריאה on-chain', ur:'on-chain پڑھنا', hi:'ऑन-चेन पढ़ना' },
  'staking.rewards.timeframe.title':       { en:'VAL distributed by timeframe', es:'VAL distribuido por periodo', fr:'VAL distribué par période', de:'VAL verteilt nach Zeitraum', it:'VAL distribuito per periodo', pt:'VAL distribuído por período', ru:'VAL по периодам', zh:'按时段分配的VAL', ja:'期間別VAL分配', ko:'기간별 VAL 분배', ar:'VAL الموزع حسب الفترة', he:'VAL לפי תקופה', ur:'وقت کے لحاظ سے VAL', hi:'समयावधि के अनुसार VAL' },
  'staking.rewards.timeframe.period':      { en:'Period', es:'Periodo', fr:'Période', de:'Zeitraum', it:'Periodo', pt:'Período', ru:'Период', zh:'时段', ja:'期間', ko:'기간', ar:'الفترة', he:'תקופה', ur:'مدت', hi:'अवधि' },
  'staking.rewards.timeframe.allTime':     { en:'All-time', es:'Todo', fr:'Tout temps', de:'Insgesamt', it:'Tutto', pt:'Tudo', ru:'Всё время', zh:'全部', ja:'全期間', ko:'전체', ar:'كل الوقت', he:'תמיד', ur:'تمام وقت', hi:'सर्व समय' },
  'staking.rewards.topDest.title':         { en:'Top recipients (accounts that received most VAL)', es:'Top destinatarios (cuentas que más VAL han cobrado)', fr:'Principaux bénéficiaires', de:'Top-Empfänger', it:'Principali destinatari', pt:'Principais destinatários', ru:'Топ получателей', zh:'顶级接收方', ja:'上位受取人', ko:'상위 수령인', ar:'أكبر المستفيدين', he:'מקבלים מובילים', ur:'سب سے زیادہ وصول کنندہ', hi:'शीर्ष प्राप्तकर्ता' },
  'staking.rewards.topDest.empty':         { en:'No data yet — table populates at the first payout post-enactment.', es:'Sin datos aún — la tabla se rellena al primer pago post-enactment.', fr:'Aucune donnée — la table se remplira après le premier paiement.', de:'Noch keine Daten — füllt sich beim ersten Payout.', it:'Nessun dato — si popola al primo payout.', pt:'Sem dados — preenche no primeiro payout.', ru:'Данных пока нет — заполнится после первой выплаты.', zh:'暂无数据 — 首次支付时填充', ja:'データなし — 初回支払で表示', ko:'데이터 없음 — 첫 지급 시 표시', ar:'لا توجد بيانات بعد', he:'אין נתונים', ur:'ابھی ڈیٹا نہیں', hi:'अभी कोई डेटा नहीं' },
  'staking.rewards.topDest.account':       { en:'Account', es:'Cuenta', fr:'Compte', de:'Konto', it:'Account', pt:'Conta', ru:'Аккаунт', zh:'账户', ja:'アカウント', ko:'계정', ar:'الحساب', he:'חשבון', ur:'اکاؤنٹ', hi:'खाता' },
  'staking.rewards.perValidator.title':    { en:'Per validator — real data (on-chain + indexed payouts)', es:'Por validator — datos reales (on-chain + payouts indexados)', fr:'Par validateur — données réelles', de:'Pro Validator — Echtdaten', it:'Per validator — dati reali', pt:'Por validator — dados reais', ru:'По валидаторам — реальные данные', zh:'每个验证者 — 真实数据', ja:'バリデーター別 — 実データ', ko:'검증자별 — 실데이터', ar:'لكل مدقق — بيانات حقيقية', he:'לפי ולידטור — נתונים אמיתיים', ur:'فی ویلیڈیٹر — حقیقی ڈیٹا', hi:'प्रति वैलिडेटर — वास्तविक डेटा' },
  'staking.rewards.perValidator.validator':{ en:'Validator', es:'Validator', fr:'Validateur', de:'Validator', it:'Validator', pt:'Validator', ru:'Валидатор', zh:'验证者', ja:'バリデーター', ko:'검증자', ar:'المدقق', he:'ולידטור', ur:'ویلیڈیٹر', hi:'वैलिडेटर' },
  'staking.rewards.perValidator.commission':{ en:'Comm', es:'Comis.', fr:'Comm.', de:'Komm.', it:'Comm.', pt:'Comis.', ru:'Комис.', zh:'佣金', ja:'手数料', ko:'수수료', ar:'العمولة', he:'עמלה', ur:'کمیشن', hi:'कमीशन' },
  'staking.rewards.perValidator.avgPts':   { en:'Avg pts/era', es:'Pts/era prom.', fr:'Pts/ère moy.', de:'Ø Pkt/Ära', it:'Punti/era med.', pt:'Pts/era méd.', ru:'Ср. очки/эра', zh:'平均点/纪元', ja:'平均pt/エラ', ko:'평균 pt/에라', ar:'متوسط النقاط/الحقبة', he:'נק׳ ממוצע/עידן', ur:'اوسط پوائنٹس/دور', hi:'औसत pts/युग' },
  'staking.rewards.perValidator.lastClaim':{ en:'Last claim', es:'Último claim', fr:'Dernier claim', de:'Letzter Claim', it:'Ultimo claim', pt:'Último claim', ru:'Последний клейм', zh:'上次领取', ja:'最終受取', ko:'마지막 청구', ar:'آخر مطالبة', he:'תביעה אחרונה', ur:'آخری کلیم', hi:'अंतिम क्लेम' },
  'staking.rewards.perValidator.valReceived':{ en:'VAL received', es:'VAL recibido', fr:'VAL reçu', de:'VAL erhalten', it:'VAL ricevuto', pt:'VAL recebido', ru:'VAL получено', zh:'已收VAL', ja:'受取VAL', ko:'받은 VAL', ar:'VAL المستلم', he:'VAL התקבל', ur:'موصول VAL', hi:'प्राप्त VAL' },
  'staking.rewards.perValidator.loading':  { en:'Loading…', es:'Cargando…', fr:'Chargement…', de:'Lädt…', it:'Caricamento…', pt:'Carregando…', ru:'Загрузка…', zh:'加载中…', ja:'読み込み中…', ko:'로딩 중…', ar:'جار التحميل…', he:'טוען…', ur:'لوڈ ہو رہا ہے…', hi:'लोड हो रहा है…' },
  'staking.rewards.perValidator.claim':    { en:'Claim', es:'Cobro', fr:'Récolte', de:'Claim', it:'Riscatto', pt:'Cobrança', ru:'Клейм', zh:'领取', ja:'受取', ko:'청구', ar:'مطالبة', he:'תביעה', ur:'کلیم', hi:'क्लेम' },
  'staking.rewards.tt.claim':              { en:'Validator-side claim profitability: what the validator collects (own commission + own-exposure share) vs the cost of claiming all pending eras (each pending era needs one payout_stakers call at 0.01 XOR). Red = net loss (fee > reward); yellow = roughly break-even (<3% profit); green = ≥3% profit. The cost rises as pending eras accumulate.', es:'Rentabilidad del cobro para el validador: lo que cobra el validador (su comisión + su parte por exposure own) frente al coste de reclamar todas las eras pendientes (cada era pendiente requiere una llamada payout_stakers a 0.01 XOR). Rojo = pérdida neta (tarifa > recompensa); amarillo = break-even (<3% beneficio); verde = ≥3% beneficio. El coste sube según se acumulan eras pendientes.', fr:'Rentabilité du claim côté validateur : ce que le validateur perçoit vs le coût de réclamer toutes les ères en attente (une call payout_stakers par ère, 0.01 XOR). Rouge = perte ; jaune = seuil ; vert = ≥3%.', de:'Claim-Rentabilität des Validators: Ertrag vs. Kosten aller offenen Ären (je Ära ein payout_stakers, 0.01 XOR). Rot = Verlust; gelb = Break-even; grün = ≥3%.', it:'Redditività del riscatto per il validator: incasso vs costo di riscattare le ere pendenti (una call payout_stakers per era, 0.01 XOR). Rosso = perdita; giallo = pari; verde = ≥3%.', pt:'Rentabilidade da cobrança para o validator: recebido vs custo de reclamar eras pendentes (uma call payout_stakers por era, 0.01 XOR). Vermelho = perda; amarelo = empate; verde = ≥3%.', ru:'Рентабельность клейма для валидатора: доход против стоимости всех ожидающих эр (одна payout_stakers на эру, 0.01 XOR). Красный = убыток; жёлтый = около нуля; зелёный = ≥3%.', zh:'验证者领取收益性：所得 vs 领取所有待领纪元的成本（每纪元一次 payout_stakers，0.01 XOR）。红=亏损；黄=持平；绿=≥3%。', ja:'バリデーター視点の受取採算：収入 vs 全保留エラの受取コスト（エラ毎にpayout_stakers 1回、0.01 XOR）。赤=損失、黄=収支均衡、緑=≥3%。', ko:'검증자 청구 수익성: 수입 vs 모든 보류 에라 청구 비용(에라당 payout_stakers 1회, 0.01 XOR). 빨강=손실, 노랑=본전, 초록=≥3%.', ar:'ربحية المطالبة للمدقق: الإيراد مقابل تكلفة المطالبة بجميع الحقب المعلقة (مكالمة payout_stakers لكل حقبة، 0.01 XOR). أحمر=خسارة؛ أصفر=تعادل؛ أخضر=≥3%.', he:'רווחיות התביעה לולידטור: הכנסה מול עלות תביעת כל העידנים הממתינים (קריאת payout_stakers לכל עידן, 0.01 XOR). אדום=הפסד; צהוב=איזון; ירוק=≥3%.', ur:'ویلیڈیٹر کلیم منافع: آمدنی بمقابلہ تمام زیر التواء ادوار کے کلیم کی لاگت (فی دور ایک payout_stakers، 0.01 XOR)۔ سرخ=نقصان؛ پیلا=برابر؛ سبز=≥3%۔', hi:'वैलिडेटर क्लेम लाभप्रदता: आय बनाम सभी लंबित युगों के क्लेम की लागत (प्रति युग एक payout_stakers, 0.01 XOR)। लाल=हानि; पीला=बराबर; हरा=≥3%।' },
  'staking.rewards.tt.claimXorNet':        { en:'Net XOR you pocket by claiming, no USD: VAL reward × the direct DEX VAL→XOR rate − the XOR fee. Same red/yellow/green thresholds as the $ column, but as an absolute XOR amount (a % is the same in any currency, so this shows the magnitude instead).', es:'XOR neto que te llevas al reclamar, sin USD: reward VAL × la tasa directa DEX VAL→XOR − la tarifa XOR. Mismos umbrales rojo/amarillo/verde que la columna $, pero como cantidad absoluta de XOR (un % es igual en cualquier moneda, así que aquí ves la magnitud).', fr:'XOR net empoché en réclamant, sans USD : reward VAL × taux direct DEX VAL→XOR − frais XOR. Mêmes seuils rouge/jaune/vert que la colonne $, mais en montant XOR absolu.', de:'Netto-XOR beim Claim, ohne USD: VAL-Reward × direkter DEX VAL→XOR-Kurs − XOR-Gebühr. Gleiche Schwellen wie die $-Spalte, aber als absoluter XOR-Betrag.', it:'XOR netto incassato col claim, senza USD: reward VAL × tasso diretto DEX VAL→XOR − fee XOR. Stesse soglie della colonna $, ma come importo XOR assoluto.', pt:'XOR líquido ao reclamar, sem USD: reward VAL × taxa direta DEX VAL→XOR − taxa XOR. Mesmos limiares da coluna $, mas como valor XOR absoluto.', ru:'Чистый XOR от клейма, без USD: reward VAL × прямой курс DEX VAL→XOR − комиссия XOR. Те же пороги, что и в колонке $, но абсолютной суммой XOR.', zh:'领取后净得XOR（不经美元）：VAL奖励 × DEX直接VAL→XOR汇率 − XOR手续费。与$列阈值相同，但显示绝对XOR数额。', ja:'受取で得る正味XOR（USD非経由）：VAL報酬 × DEX直接VAL→XORレート − XOR手数料。$列と同じ閾値だが、絶対XOR額で表示。', ko:'청구 시 실수령 XOR(USD 미경유): VAL 보상 × DEX 직접 VAL→XOR 환율 − XOR 수수료. $ 열과 동일 기준이나 절대 XOR 금액으로 표시.', ar:'صافي XOR من المطالبة بدون دولار: مكافأة VAL × سعر DEX المباشر VAL→XOR − رسوم XOR. نفس عتبات عمود $ لكن كمبلغ XOR مطلق.', he:'XOR נטו מהתביעה, ללא דולר: תגמול VAL × שער DEX ישיר VAL→XOR − עמלת XOR. אותם ספים כמו עמודת $, אך כסכום XOR מוחלט.', ur:'کلیم سے خالص XOR، بغیر USD: VAL انعام × DEX براہ راست VAL→XOR ریٹ − XOR فیس۔ $ کالم جیسے حدود، مگر مطلق XOR رقم میں۔', hi:'क्लेम से शुद्ध XOR, बिना USD: VAL रिवॉर्ड × DEX सीधा VAL→XOR दर − XOR शुल्क। $ कॉलम जैसे थ्रेशोल्ड, पर निरपेक्ष XOR राशि में।' },
  'staking.rewards.perValidator.outstanding':   { en:'Outstanding', es:'Pendiente', fr:'En attente', de:'Ausstehend', it:'In sospeso', pt:'Pendente', ru:'Ожидается', zh:'待领', ja:'未受取', ko:'미수령', ar:'معلق', he:'ממתין', ur:'باقی', hi:'लंबित' },
  'staking.rewards.tt.valXorFlip':   { en:'Click to flip direction: VAL→XOR ⇄ XOR→VAL', es:'Pulsa para invertir la dirección: VAL→XOR ⇄ XOR→VAL', fr:'Cliquez pour inverser le sens : VAL→XOR ⇄ XOR→VAL', de:'Klicken zum Umkehren der Richtung: VAL→XOR ⇄ XOR→VAL', it:'Clicca per invertire la direzione: VAL→XOR ⇄ XOR→VAL', pt:'Clique para inverter a direção: VAL→XOR ⇄ XOR→VAL', ru:'Нажмите, чтобы поменять направление: VAL→XOR ⇄ XOR→VAL', zh:'点击切换方向：VAL→XOR ⇄ XOR→VAL', ja:'クリックで方向を反転：VAL→XOR ⇄ XOR→VAL', ko:'클릭하여 방향 전환: VAL→XOR ⇄ XOR→VAL', ar:'انقر لعكس الاتجاه: VAL→XOR ⇄ XOR→VAL', he:'לחץ להיפוך הכיוון: VAL→XOR ⇄ XOR→VAL', ur:'سمت بدلنے کے لیے کلک کریں: VAL→XOR ⇄ XOR→VAL', hi:'दिशा बदलने के लिए क्लिक करें: VAL→XOR ⇄ XOR→VAL' },
  'staking.rewards.valXorNow':   { en:'now', es:'ahora', fr:'maint.', de:'jetzt', it:'ora', pt:'agora', ru:'сейчас', zh:'现在', ja:'現在', ko:'현재', ar:'الآن', he:'עכשיו', ur:'ابھی', hi:'अभी' },
  'staking.rewards.tt.valXorRange':   { en:'VAL→XOR rate range over the selected window (min / now / max), from real hourly price history (VAL price ÷ XOR price). The current DEX rate sits between min and max — high = good moment to convert VAL to XOR. Same for every validator (market rate).', es:'Rango del ratio VAL→XOR en la ventana seleccionada (min / ahora / max), del histórico horario real de precios (precio VAL ÷ precio XOR). El ratio DEX actual está entre min y max — alto = buen momento para convertir VAL a XOR. Igual para todos los validadores (precio de mercado).', fr:'Plage du taux VAL→XOR sur la fenêtre choisie (min / maintenant / max), depuis l\'historique horaire réel des prix.', de:'VAL→XOR-Kursspanne im gewählten Fenster (min / jetzt / max), aus echter stündlicher Preishistorie.', it:'Intervallo del tasso VAL→XOR nella finestra scelta (min / ora / max), dallo storico orario reale dei prezzi.', pt:'Faixa da taxa VAL→XOR na janela escolhida (min / agora / max), do histórico horário real de preços.', ru:'Диапазон курса VAL→XOR за выбранное окно (мин / сейчас / макс), из реальной почасовой истории цен.', zh:'所选窗口内VAL→XOR汇率范围（最小/现在/最大），来自真实的每小时价格历史。', ja:'選択期間のVAL→XORレート範囲（最小/現在/最大）。実際の時間別価格履歴から算出。', ko:'선택한 기간의 VAL→XOR 환율 범위(최소/현재/최대), 실제 시간별 가격 이력 기반.', ar:'نطاق سعر VAL→XOR خلال النافذة المختارة (الأدنى / الآن / الأعلى)، من سجل الأسعار الساعي الحقيقي.', he:'טווח שער VAL→XOR בחלון הנבחר (מינ׳ / עכשיו / מקס׳), מהיסטוריית מחירים שעתית אמיתית.', ur:'منتخب ونڈو میں VAL→XOR ریٹ کی رینج (کم سے کم / ابھی / زیادہ سے زیادہ)، حقیقی گھنٹہ وار قیمت ہسٹری سے۔', hi:'चयनित विंडो में VAL→XOR दर सीमा (न्यूनतम / अभी / अधिकतम), वास्तविक प्रति घंटा मूल्य इतिहास से।' },
  'staking.rewards.perValidator.pendingEras':   { en:'Pending eras', es:'Eras pendientes', fr:'Ères en attente', de:'Offene Ären', it:'Ere in sospeso', pt:'Eras pendentes', ru:'Ожидающие эры', zh:'待领纪元', ja:'保留エラ', ko:'대기 에라', ar:'حقب معلقة', he:'עידנים ממתינים', ur:'زیر التواء ادوار', hi:'लंबित युग' },
  'staking.rewards.tt.pendingEras':   { en:'Eras with unclaimed VAL rewards (within the ~84-era / 21-day window). Each needs one payout_stakers call.', es:'Eras con recompensas VAL sin reclamar (ventana ~84 eras / 21 días). Cada una requiere una llamada payout_stakers.', fr:'Ères avec récompenses VAL non réclamées (fenêtre ~84 ères / 21 jours). Une call payout_stakers chacune.', de:'Ären mit nicht eingelösten VAL-Belohnungen (~84 Ären / 21 Tage). Je ein payout_stakers nötig.', it:'Ere con ricompense VAL non riscosse (finestra ~84 ere / 21 giorni). Una call payout_stakers ciascuna.', pt:'Eras com recompensas VAL não reclamadas (janela ~84 eras / 21 dias). Cada uma requer uma call payout_stakers.', ru:'Эры с невостребованными наградами VAL (окно ~84 эры / 21 день). Каждая требует payout_stakers.', zh:'有未领取VAL奖励的纪元（~84纪元/21天窗口内）。每个需一次payout_stakers。', ja:'VAL報酬が未受取のエラ（~84エラ/21日の期間内）。各々payout_stakers 1回が必要。', ko:'미수령 VAL 보상이 있는 에라(~84에라/21일 기간 내). 각각 payout_stakers 1회 필요.', ar:'حقب ذات مكافآت VAL غير مطالب بها (نافذة ~84 حقبة / 21 يومًا). كل منها يتطلب payout_stakers.', he:'עידנים עם תגמולי VAL שלא נתבעו (חלון ~84 עידנים / 21 ימים). כל אחד דורש payout_stakers.', ur:'غیر دعویٰ شدہ VAL انعامات والے ادوار (~84 ادوار / 21 دن کی ونڈو)۔ ہر ایک کو ایک payout_stakers درکار۔', hi:'बिना दावे वाले VAL रिवॉर्ड वाले युग (~84 युग / 21 दिन विंडो)। हर एक को एक payout_stakers चाहिए।' },
  'staking.rewards.perValidator.yieldNominator':{ en:'Yield/XOR (nom)', es:'Yield/XOR (nom)', fr:'Yield/XOR (nom)', de:'Yield/XOR (Nom)', it:'Yield/XOR (nom)', pt:'Yield/XOR (nom)', ru:'Доход/XOR (ном)', zh:'每XOR收益(提名)', ja:'XOR当たり利回り(ノム)', ko:'XOR당 수익(노미)', ar:'العائد/XOR (الترشيح)', he:'תשואה/XOR (נומ)', ur:'فی XOR منافع', hi:'प्रति XOR यील्ड' },
  /* Tooltips & glossary descriptions */
  'staking.rewards.tt.allTime':       { en:'Total VAL ever paid to stakers via xorFee.ValStakingRewardPaid events indexed by sorametrics.', es:'Total VAL pagado a stakers vía eventos xorFee.ValStakingRewardPaid indexados por sorametrics.', fr:'Total VAL versé aux stakers via les événements xorFee.ValStakingRewardPaid.', de:'Gesamt-VAL an Staker via xorFee.ValStakingRewardPaid Events.', it:'Totale VAL pagato agli staker tramite eventi xorFee.ValStakingRewardPaid.', pt:'Total VAL pago aos stakers via eventos xorFee.ValStakingRewardPaid.', ru:'Всего VAL выплачено стейкерам через события xorFee.ValStakingRewardPaid.', zh:'通过xorFee.ValStakingRewardPaid事件支付给质押者的VAL总量。', ja:'xorFee.ValStakingRewardPaidイベントでステーカーに支払われたVAL合計。', ko:'xorFee.ValStakingRewardPaid 이벤트로 스테이커에게 지급된 VAL 합계.', ar:'إجمالي VAL المدفوع للمساهمين عبر أحداث xorFee.ValStakingRewardPaid.', he:'סה"כ VAL ששולם לסטייקרים דרך אירועי xorFee.ValStakingRewardPaid.', ur:'xorFee.ValStakingRewardPaid ایونٹس کے ذریعے VAL کا کل ادا۔', hi:'xorFee.ValStakingRewardPaid इवेंट्स के माध्यम से कुल VAL.' },
  'staking.rewards.tt.bucketCurrent': { en:'Real on-chain VAL accumulated in xorFee.valStakingEraReward[currentEra]. Distributed proportionally to validators based on reward_points when payout_stakers is called.', es:'VAL real on-chain acumulado en xorFee.valStakingEraReward[era_actual]. Se distribuye proporcionalmente a los validators según reward_points cuando se llama payout_stakers.', fr:'VAL on-chain accumulé dans xorFee.valStakingEraReward.', de:'On-Chain VAL angesammelt in xorFee.valStakingEraReward.', it:'VAL on-chain accumulato in xorFee.valStakingEraReward.', pt:'VAL on-chain acumulado em xorFee.valStakingEraReward.', ru:'On-chain VAL накоплено в xorFee.valStakingEraReward.', zh:'链上累积在xorFee.valStakingEraReward的VAL。', ja:'xorFee.valStakingEraRewardに蓄積されたVAL。', ko:'xorFee.valStakingEraReward에 누적된 VAL.', ar:'VAL متراكم في xorFee.valStakingEraReward.', he:'VAL שהצטבר ב-xorFee.valStakingEraReward.', ur:'xorFee.valStakingEraReward میں جمع شدہ VAL۔', hi:'xorFee.valStakingEraReward में संग्रहीत VAL.' },
  'staking.rewards.tt.bucketUnassigned': { en:'VAL accumulated but not yet assigned to a specific era (xorFee.unassignedValStakingReward). Will be merged into the next era bucket.', es:'VAL acumulado pero aún no asignado a una era específica (xorFee.unassignedValStakingReward). Se fusionará con el bucket de la próxima era.', fr:'VAL accumulé non encore attribué à une ère.', de:'VAL angesammelt aber noch keiner Ära zugewiesen.', it:'VAL accumulato non ancora assegnato a un\'era.', pt:'VAL acumulado ainda não atribuído a uma era.', ru:'VAL накоплено, но ещё не назначено эре.', zh:'已累积但未分配到具体纪元的VAL。', ja:'未割当のVAL。', ko:'에라에 미할당된 VAL.', ar:'VAL متراكم غير مخصص لحقبة.', he:'VAL לא משויך לעידן.', ur:'دور سے غیر منسلک VAL۔', hi:'किसी युग को असाइन नहीं किया गया VAL.' },
  'staking.rewards.tt.outstanding':   { en:'VAL pending to be claimed by this validator across unclaimed eras within HistoryDepth. Computed as Σ (myPoints/totalPoints × bucket) for each unclaimed era. Caduca tras 84 eras (~21 días).', es:'VAL pendiente de reclamar para este validator en eras no reclamadas dentro del HistoryDepth (84 eras = ~21 días). Caduca si no se reclama.', fr:'VAL en attente de réclamation dans la fenêtre HistoryDepth.', de:'VAL ausstehend zur Reklamation innerhalb HistoryDepth.', it:'VAL in attesa di reclamo entro HistoryDepth.', pt:'VAL pendente de reclamação dentro do HistoryDepth.', ru:'VAL к получению в окне HistoryDepth.', zh:'HistoryDepth窗口内待领取的VAL。', ja:'HistoryDepth内で受取待ちのVAL。', ko:'HistoryDepth 내 미수령 VAL.', ar:'VAL معلق للمطالبة ضمن HistoryDepth.', he:'VAL ממתין למימוש בתוך HistoryDepth.', ur:'HistoryDepth کے اندر دعوی کے لیے VAL۔', hi:'HistoryDepth के अंदर दावे के लिए लंबित VAL.' },
  'staking.rewards.tt.yieldNominator':{ en:'VAL per XOR per era a nominator earns delegating to this validator: (1-commission) × T_currentEra / total_stake. Identical for all nominators of the same validator (Substrate NPoS rule).', es:'VAL por XOR por era que recibe un nominator delegando a este validator: (1-comisión) × T_era_actual / stake_total. Idéntico para todos los nominators del mismo validator (regla NPoS de Substrate).', fr:'VAL par XOR par ère pour un nominateur déléguant à ce validateur.', de:'VAL pro XOR pro Ära für Nominator dieses Validators.', it:'VAL per XOR per era per un nominator.', pt:'VAL por XOR por era para um nominador.', ru:'VAL за XOR за эру для номинатора.', zh:'每XOR每纪元对该验证者提名的VAL。', ja:'このバリデーターへの委任あたりVAL。', ko:'이 검증자 위임 시 XOR당 VAL.', ar:'VAL لكل XOR لكل حقبة للترشيح.', he:'VAL לכל XOR לעידן עבור נומינטור.', ur:'فی XOR فی دور VAL برائے نامزدگی۔', hi:'प्रति XOR प्रति युग VAL नॉमिनेटर के लिए.' },
  'staking.rewards.tt.commission':    { en:'Cut the validator keeps from every reward before it splits the rest among nominators by stake proportion.', es:'Comisión que el validator se queda de cada reward antes de repartir el resto entre nominators por proporción de stake.', fr:'Commission prélevée par le validateur avant le partage.', de:'Provision die der Validator vor der Aufteilung einbehält.', it:'Commissione trattenuta dal validator.', pt:'Comissão retida pelo validator.', ru:'Комиссия валидатора перед распределением.', zh:'验证者在分配前扣除的佣金。', ja:'バリデーターが分配前に取る手数料。', ko:'검증자가 분배 전에 가져가는 수수료.', ar:'العمولة التي يحتفظ بها المدقق قبل التوزيع.', he:'עמלת הולידטור לפני חלוקה.', ur:'تقسیم سے پہلے ویلیڈیٹر کا کمیشن۔', hi:'वितरण से पहले वैलिडेटर का कमीशन.' },
  'staking.rewards.tt.lastClaim':     { en:'How long ago someone (anyone) executed payout_stakers for this validator. Anyone can call it; pays MINIMAL_FEE. If never called for 84 eras, the rewards expire.', es:'Hace cuánto que alguien (cualquiera) ejecutó payout_stakers para este validator. Lo puede llamar cualquiera y cuesta MINIMAL_FEE. Si no se llama en 84 eras, las recompensas caducan.', fr:'Depuis quand quelqu\'un a appelé payout_stakers pour ce validateur.', de:'Wann zuletzt jemand payout_stakers für diesen Validator aufgerufen hat.', it:'Da quanto qualcuno ha eseguito payout_stakers per questo validator.', pt:'Há quanto tempo alguém executou payout_stakers para este validator.', ru:'Когда кто-то вызывал payout_stakers для этого валидатора.', zh:'有人为此验证者执行payout_stakers的时间。', ja:'このバリデーターのpayout_stakersが最後に実行された時期。', ko:'이 검증자에 대해 payout_stakers가 마지막 실행된 시기.', ar:'متى تم استدعاء payout_stakers لهذا المدقق.', he:'מתי בוצע payout_stakers לולידטור.', ur:'payout_stakers کب کال ہوا۔', hi:'payout_stakers कब कॉल हुआ.' },
  'staking.rewards.tt.avgPts':        { en:'Average reward_points this validator earned per era they produced blocks in (last 30 eras). Higher = produces blocks more consistently. Drives reward distribution.', es:'Media de reward_points que este validator ganó por era en la que produjo bloques (últimas 30 eras). Más alto = produce bloques más consistentemente. Determina la distribución de rewards.', fr:'Moyenne de reward_points par ère.', de:'Durchschnittliche reward_points pro Ära.', it:'Media di reward_points per era.', pt:'Média de reward_points por era.', ru:'Средние reward_points за эру.', zh:'每纪元平均奖励点数。', ja:'エラあたり平均報酬ポイント。', ko:'에라당 평균 보상 포인트.', ar:'متوسط نقاط المكافأة لكل حقبة.', he:'נקודות תגמול ממוצעות לעידן.', ur:'فی دور اوسط ریوارڈ پوائنٹس۔', hi:'प्रति युग औसत रिवॉर्ड पॉइंट्स.' },
  'staking.rewards.tt.valReceived':   { en:'Total VAL the validator has received (own commission + own exposure share) across all indexed payouts.', es:'Total VAL que el validator ha recibido (su comisión + su parte por exposure own) sumando todos los payouts indexados.', fr:'VAL total reçu par le validateur.', de:'Gesamt VAL erhalten vom Validator.', it:'Totale VAL ricevuto dal validator.', pt:'Total VAL recebido pelo validator.', ru:'Всего VAL получено валидатором.', zh:'验证者收到的VAL总量。', ja:'バリデーターが受取った合計VAL。', ko:'검증자가 받은 총 VAL.', ar:'إجمالي VAL المستلم من المدقق.', he:'סה"כ VAL שהתקבל ע"י הולידטור.', ur:'ویلیڈیٹر کا کل موصول VAL۔', hi:'वैलिडेटर का कुल प्राप्त VAL.' },
  'staking.rewards.tt.payouts':       { en:'Count of payout_stakers calls that paid this validator since indexing started.', es:'Número de llamadas payout_stakers que han pagado a este validator desde que empezamos a indexar.', fr:'Nombre d\'appels payout_stakers.', de:'Anzahl payout_stakers Aufrufe.', it:'Numero di chiamate payout_stakers.', pt:'Número de chamadas payout_stakers.', ru:'Кол-во вызовов payout_stakers.', zh:'payout_stakers调用次数。', ja:'payout_stakers呼出回数。', ko:'payout_stakers 호출 횟수.', ar:'عدد استدعاءات payout_stakers.', he:'מספר קריאות payout_stakers.', ur:'payout_stakers کالز کی تعداد۔', hi:'payout_stakers कॉल्स.' },
  'staking.rewards.glossary.title':   { en:'What each metric means', es:'Qué significa cada métrica', fr:'Signification de chaque métrique', de:'Was jede Metrik bedeutet', it:'Cosa significa ogni metrica', pt:'O que cada métrica significa', ru:'Что означает каждая метрика', zh:'每个指标的含义', ja:'各指標の意味', ko:'각 지표의 의미', ar:'معنى كل مقياس', he:'משמעות כל מדד', ur:'ہر میٹرک کا مطلب', hi:'प्रत्येक मीट्रिक का अर्थ' },
  /* Live pipeline card */
  'staking.rewards.live.title':       { en:'Live pipeline · fees → VAL bucket', es:'Pipeline en vivo · fees → bucket VAL', fr:'Pipeline en direct', de:'Live-Pipeline', it:'Pipeline live', pt:'Pipeline ao vivo', ru:'Конвейер в реальном времени', zh:'实时流水线', ja:'ライブパイプライン', ko:'라이브 파이프라인', ar:'خط الأنابيب المباشر', he:'צינור חי', ur:'لائیو پائپ لائن', hi:'लाइव पाइपलाइन' },
  'staking.rewards.live.xorPending':  { en:'XOR pending swap', es:'XOR pendiente swap', fr:'XOR en attente de swap', de:'XOR Swap-Warteschlange', it:'XOR in attesa di swap', pt:'XOR aguardando swap', ru:'XOR ожидает свопа', zh:'XOR等待兑换', ja:'XOR スワップ待ち', ko:'XOR 스왑 대기', ar:'XOR في انتظار التبادل', he:'XOR ממתין להחלפה', ur:'XOR سویپ کا منتظر', hi:'XOR स्वैप के लिए लंबित' },
  'staking.rewards.live.eraBucket':   { en:'Era VAL bucket', es:'Bucket VAL de la era', fr:'Pool VAL de l\'ère', de:'VAL-Topf der Ära', it:'Pool VAL dell\'era', pt:'Pool VAL da era', ru:'VAL пул эры', zh:'纪元VAL池', ja:'エラVALプール', ko:'에라 VAL 풀', ar:'وعاء VAL للحقبة', he:'מאגר VAL לעידן', ur:'دور کا VAL پول', hi:'युग VAL पूल' },
  'staking.rewards.live.nextRemint':  { en:'Next remint window', es:'Próximo remint', fr:'Prochain remint', de:'Nächstes Remint', it:'Prossimo remint', pt:'Próximo remint', ru:'След. remint', zh:'下次重铸', ja:'次のリミント', ko:'다음 리민트', ar:'إعادة الصياغة التالية', he:'remint הבא', ur:'اگلا remint', hi:'अगला remint' },
  'staking.rewards.live.lastUpdate':  { en:'updated', es:'actualizado', fr:'mis à jour', de:'aktualisiert', it:'aggiornato', pt:'atualizado', ru:'обновлено', zh:'已更新', ja:'更新', ko:'업데이트됨', ar:'محدث', he:'עודכן', ur:'اپ ڈیٹ شدہ', hi:'अद्यतन' },
  'staking.rewards.live.live':        { en:'LIVE', es:'EN VIVO', fr:'EN DIRECT', de:'LIVE', it:'LIVE', pt:'AO VIVO', ru:'LIVE', zh:'实时', ja:'ライブ', ko:'실시간', ar:'مباشر', he:'חי', ur:'لائیو', hi:'लाइव' },
  'staking.rewards.live.naBucket':    { en:'storage not in runtime', es:'storage no en runtime', fr:'absent du runtime', de:'nicht in Runtime', it:'non in runtime', pt:'não no runtime', ru:'отсутствует', zh:'不在runtime中', ja:'runtimeに無し', ko:'runtime에 없음', ar:'غير موجود', he:'לא ב-runtime', ur:'runtime میں نہیں', hi:'runtime में नहीں' },
  /* Smart picks card */
  'staking.rewards.smart.title':        { en:'Smart picks', es:'Recomendaciones', fr:'Recommandations', de:'Empfehlungen', it:'Consigli', pt:'Recomendações', ru:'Рекомендации', zh:'智能推荐', ja:'おすすめ', ko:'추천', ar:'توصيات ذكية', he:'בחירות חכמות', ur:'سمارٹ تجاویز', hi:'स्मार्ट सुझाव' },
  'staking.rewards.smart.bestFor':      { en:'Best for nominators (top yield neto)', es:'Mejores para nominar (top yield neto)', fr:'Meilleurs à nominer', de:'Beste für Nominators', it:'Migliori da nominare', pt:'Melhores para nomear', ru:'Лучшие для номинирования', zh:'最佳提名候选', ja:'指名推奨上位', ko:'추천 위임 대상', ar:'الأفضل للترشيح', he:'הטובים ביותר לנומינציה', ur:'نامزدگی کے لیے بہترین', hi:'नामांकन के लिए सर्वोत्तम' },
  'staking.rewards.smart.bestSub':      { en:'Ranked by (1−commission) × T / total — yield per XOR for a nominator', es:'Ordenados por (1−comisión) × T / total — yield por XOR del nominator', fr:'Classés par yield/XOR', de:'Sortiert nach Yield/XOR', it:'Ordinati per yield/XOR', pt:'Ordenados por yield/XOR', ru:'По доходности на XOR', zh:'按每XOR收益排序', ja:'XOR当たり利回り順', ko:'XOR당 수익 순', ar:'مرتبة حسب العائد/XOR', he:'מסודר לפי תשואה/XOR', ur:'فی XOR منافع کے لحاظ سے', hi:'प्रति XOR यील्ड क्रम में' },
  'staking.rewards.smart.health':       { en:'Network health', es:'Salud de la red', fr:'Santé du réseau', de:'Netzwerkgesundheit', it:'Salute della rete', pt:'Saúde da rede', ru:'Здоровье сети', zh:'网络健康', ja:'ネットワーク健全性', ko:'네트워크 상태', ar:'صحة الشبكة', he:'בריאות הרשת', ur:'نیٹ ورک ہیلتھ', hi:'नेटवर्क स्वास्थ्य' },
  'staking.rewards.smart.stakingRatio': { en:'Staking ratio', es:'Ratio de staking', fr:'Ratio de staking', de:'Staking-Verhältnis', it:'Ratio di staking', pt:'Ratio de staking', ru:'Доля стейкинга', zh:'质押率', ja:'ステーキング比率', ko:'스테이킹 비율', ar:'نسبة الرهن', he:'יחס הסטייקינג', ur:'اسٹیکنگ تناسب', hi:'स्टेकिंग अनुपात' },
  'staking.rewards.smart.medianApr':    { en:'Median reward APR', es:'APR mediano (rewards)', fr:'APR médian', de:'Median-APR', it:'APR mediano', pt:'APR mediano', ru:'Медианный APR', zh:'中位APR', ja:'中央値APR', ko:'중간 APR', ar:'APR وسطي', he:'APR חציוני', ur:'درمیانی APR', hi:'मध्यम APR' },
  'staking.rewards.smart.rewardsEra':   { en:'Rewards distributed / era', es:'Rewards distribuidos / era', fr:'Récompenses / ère', de:'Belohnungen / Ära', it:'Ricompense / era', pt:'Recompensas / era', ru:'Награды / эра', zh:'每纪元奖励', ja:'エラあたり報酬', ko:'에라당 보상', ar:'مكافآت / حقبة', he:'תגמולים / עידן', ur:'فی دور انعامات', hi:'प्रति युग पुरस्कार' },
  'staking.rewards.smart.deflation':    { en:'Net VAL deflation / era', es:'Deflación neta VAL / era', fr:'Déflation VAL / ère', de:'VAL-Deflation / Ära', it:'Deflazione VAL / era', pt:'Deflação VAL / era', ru:'Дефляция VAL / эра', zh:'每纪元VAL通缩', ja:'エラあたりVALデフレ', ko:'에라당 VAL 디플레이션', ar:'انكماش VAL / حقبة', he:'דפלציית VAL / עידן', ur:'فی دور VAL ڈیفلیشن', hi:'प्रति युग VAL मुद्रास्फीति-संकोचन' },
  'staking.rewards.smart.deflationDesc':{ en:'10% of converted VAL is burnt, 90% goes to stakers (= bucket ÷ 9). Redistribution, not emission.', es:'10% del VAL convertido se quema, 90% va a stakers (= bucket ÷ 9). Redistribución, no emisión.', fr:'10% du VAL converti est brûlé, 90% aux stakers (= pool ÷ 9). Redistribution, pas émission.', de:'10% des umgewandelten VAL verbrannt, 90% an Staker (= Topf ÷ 9). Umverteilung, keine Emission.', it:'10% del VAL convertito bruciato, 90% agli staker (= pool ÷ 9). Redistribuzione, non emissione.', pt:'10% do VAL convertido queimado, 90% aos stakers (= bucket ÷ 9). Redistribuição, não emissão.', ru:'10% конвертированного VAL сжигается, 90% стейкерам (= пул ÷ 9). Перераспределение, не эмиссия.', zh:'转换的VAL中10%销毁，90%给质押者（=池÷9）。再分配，非发行。', ja:'変換VALの10%焼却、90%はステーカーへ（=プール÷9）。再分配であり発行ではない。', ko:'전환된 VAL의 10% 소각, 90%는 스테이커에게 (= 풀 ÷ 9). 재분배, 발행 아님.', ar:'يُحرق 10٪ من VAL المحول، و90٪ للمساهمين (= الوعاء ÷ 9). إعادة توزيع لا إصدار.', he:'10% מה-VAL שהומר נשרף, 90% לסטייקרים (= מאגר ÷ 9). חלוקה מחדש, לא הנפקה.', ur:'تبدیل شدہ VAL کا 10٪ جلایا، 90٪ سٹیکرز کو (= پول ÷ 9)۔ تقسیم، نہ کہ اشاعت۔', hi:'परिवर्तित VAL का 10% जलाया, 90% स्टेकर्स को (= पूल ÷ 9)। पुनर्वितरण, उत्सर्जन नहीं।' },
  'staking.rewards.smart.aprCol':       { en:'APR', es:'APR', fr:'APR', de:'APR', it:'APR', pt:'APR', ru:'APR', zh:'APR', ja:'APR', ko:'APR', ar:'APR', he:'APR', ur:'APR', hi:'APR' },
  'staking.rewards.smart.emptyState':   { en:'Waiting for first payout_stakers post-enactment to populate yield data.', es:'Esperando primer payout_stakers post-enactment para calcular yields.', fr:'En attente du premier payout_stakers post-enactment.', de:'Warte auf ersten payout_stakers post-Enactment.', it:'In attesa del primo payout_stakers post-enactment.', pt:'Aguardando primeiro payout_stakers pós-enactment.', ru:'Ожидание первой выплаты после enactment.', zh:'等待启用后首次payout_stakers', ja:'有効化後初回payout_stakers待ち', ko:'활성화 후 첫 payout_stakers 대기 중', ar:'في انتظار أول payout_stakers بعد التفعيل', he:'ממתין ל-payout_stakers הראשון', ur:'پہلے payout_stakers کا منتظر', hi:'पहले payout_stakers की प्रतीक्षा' },

  /* ===== Governance (headers only; sub-tabs stay in Spanish) ===== */
  'gov.title':       { en:'Governance',  es:'Gobernanza',  fr:'Gouvernance',  de:'Governance',  it:'Governance',  pt:'Governança',  ru:'Управление',  zh:'治理',  ja:'ガバナンス',  ko:'거버넌스',  ar:'الحوكمة',  he:'ממשל',  ur:'گورننس',  hi:'शासन' },
  'gov.sub':         { en:'Council, Democracy and Technical Committee of the SORA chain.', es:'Consejo, Democracia y Comité Técnico de la cadena SORA.', fr:'Conseil, Démocratie et Comité Technique de la chaîne SORA.', de:'Council, Democracy und Technical Committee der SORA-Chain.', it:'Consiglio, Democrazia e Comitato Tecnico della chain SORA.', pt:'Conselho, Democracia e Comitê Técnico da chain SORA.', ru:'Совет, Демократия и Технический комитет SORA.', zh:'SORA 链的理事会、民主与技术委员会。', ja:'SORA チェーンの評議会、民主制、技術委員会。', ko:'SORA 체인의 의회, 민주주의, 기술 위원회.', ar:'مجلس وديمقراطية ولجنة فنية لسلسلة SORA.', he:'מועצה, דמוקרטיה וועדה טכנית של שרשרת SORA.', ur:'SORA چین کا کونسل، جمہوریت اور تکنیکی کمیٹی۔', hi:'SORA चेन का काउंसिल, डेमोक्रेसी और तकनीकी समिति।' },

  /* ===== Portfolio / Balance ===== */
  'portfolio.title': { en:'Portfolio',  es:'Cartera',  fr:'Portefeuille',  de:'Portfolio',  it:'Portafoglio',  pt:'Carteira',  ru:'Портфель',  zh:'投资组合',  ja:'ポートフォリオ',  ko:'포트폴리오',  ar:'المحفظة',  he:'תיק',  ur:'پورٹ فولیو',  hi:'पोर्टफ़ोलियो' },
  'portfolio.sub':   { en:'Holdings across all watched wallets.', es:'Tenencias en todas las carteras observadas.', fr:'Avoirs sur tous les wallets suivis.', de:'Bestände aller beobachteten Wallets.', it:'Partecipazioni in tutti i wallet osservati.', pt:'Posições em todas as carteiras monitoradas.', ru:'Активы по всем отслеживаемым кошелькам.', zh:'所有监控钱包的持仓。', ja:'監視中のすべてのウォレットの保有状況。', ko:'모니터링 중인 모든 지갑의 보유 현황.', ar:'الحيازات في جميع المحافظ المراقبة.', he:'החזקות בכל הארנקים המנוטרים.', ur:'نگرانی میں تمام والٹس کے ہولڈنگز۔', hi:'देखे गए सभी वॉलेट्स में होल्डिंग।' },
  'balance.title':   { en:'Activity',  es:'Actividad',  fr:'Activité',  de:'Aktivität',  it:'Attività',  pt:'Atividade',  ru:'Активность',  zh:'活动',  ja:'アクティビティ',  ko:'활동',  ar:'النشاط',  he:'פעילות',  ur:'سرگرمی',  hi:'गतिविधि' },
  'balance.sub':     { en:'Aggregated history across your wallets.', es:'Historial agregado de tus wallets.', fr:'Historique agrégé de vos portefeuilles.', de:'Aggregierte Historie aller Wallets.', it:'Cronologia aggregata dei tuoi wallet.', pt:'Histórico agregado das suas carteiras.', ru:'Сводная история всех кошельков.', zh:'所有钱包的汇总活动。', ja:'全ウォレットの集約履歴。', ko:'전체 지갑 집계 기록.', ar:'السجل المجمّع لمحافظك.', he:'היסטוריה מאוחדת של הארנקים שלך.', ur:'آپ کے تمام والیٹس کی مجموعی سرگرمی۔', hi:'सभी वॉलेट का संयुक्त इतिहास।' },

  /* ===== Drill panel ===== */
  'drill.overview':  { en:'Overview',     es:'Resumen',     fr:'Aperçu',      de:'Überblick',   it:'Panoramica',  pt:'Visão geral',  ru:'Обзор',        zh:'概览',     ja:'概要',        ko:'개요',         ar:'نظرة عامة',   he:'סקירה',       ur:'جائزہ',        hi:'अवलोकन' },
  'drill.details':   { en:'Details',      es:'Detalles',    fr:'Détails',     de:'Details',     it:'Dettagli',    pt:'Detalhes',     ru:'Подробности',  zh:'详情',     ja:'詳細',        ko:'세부사항',     ar:'التفاصيل',    he:'פרטים',       ur:'تفصیلات',      hi:'विवरण' },
  'drill.from':      { en:'From',         es:'De',          fr:'De',          de:'Von',         it:'Da',          pt:'De',           ru:'От',           zh:'来自',     ja:'から',        ko:'발신',         ar:'من',          he:'מאת',         ur:'از',          hi:'से' },
  'drill.to':        { en:'To',           es:'Para',        fr:'Vers',        de:'An',          it:'A',           pt:'Para',         ru:'Кому',         zh:'至',       ja:'宛先',        ko:'수신',         ar:'إلى',         he:'אל',          ur:'بنام',        hi:'को' },
  'drill.amount':    { en:'Amount',       es:'Cantidad',    fr:'Montant',     de:'Betrag',      it:'Importo',     pt:'Valor',        ru:'Сумма',        zh:'金额',     ja:'金額',        ko:'금액',         ar:'المبلغ',      he:'סכום',        ur:'رقم',          hi:'राशि' },
  'drill.fee':       { en:'Fee',          es:'Comisión',    fr:'Frais',       de:'Gebühr',      it:'Commissione', pt:'Taxa',         ru:'Комиссия',     zh:'手续费',   ja:'手数料',      ko:'수수료',       ar:'الرسوم',      he:'עמלה',        ur:'فیس',          hi:'शुल्क' },
  'drill.timestamp': { en:'Timestamp',    es:'Marca temporal', fr:'Horodatage', de:'Zeitstempel', it:'Timestamp',  pt:'Carimbo',      ru:'Время',        zh:'时间戳',   ja:'タイムスタンプ', ko:'타임스탬프',    ar:'الطابع الزمني', he:'חותמת זמן',  ur:'ٹائم اسٹیمپ',  hi:'टाइमस्टैम्प' },
  'drill.block':     { en:'Block',        es:'Bloque',      fr:'Bloc',        de:'Block',       it:'Blocco',      pt:'Bloco',        ru:'Блок',         zh:'区块',     ja:'ブロック',    ko:'블록',         ar:'كتلة',        he:'בלוק',        ur:'بلاک',         hi:'ब्लॉक' },
  'drill.hash':      { en:'Hash',         es:'Hash',        fr:'Hash',        de:'Hash',        it:'Hash',        pt:'Hash',         ru:'Хэш',          zh:'哈希',     ja:'ハッシュ',    ko:'해시',         ar:'هاش',         he:'האש',         ur:'ہیش',          hi:'हैश' },
  'drill.status':    { en:'Status',       es:'Estado',      fr:'Statut',      de:'Status',      it:'Stato',       pt:'Status',       ru:'Статус',       zh:'状态',     ja:'ステータス',   ko:'상태',         ar:'الحالة',      he:'סטטוס',       ur:'حالت',         hi:'स्थिति' },

  /* ===== Tweaks ===== */
  'tweaks.title':    { en:'Tweaks',       es:'Ajustes',     fr:'Réglages',    de:'Einstellungen', it:'Regolazioni', pt:'Ajustes',   ru:'Настройки',    zh:'调整',     ja:'調整',        ko:'조정',         ar:'التعديلات',   he:'התאמות',      ur:'ترتیبات',      hi:'समायोजन' },
  'tweaks.section':  { en:'Section',      es:'Sección',     fr:'Section',     de:'Bereich',     it:'Sezione',     pt:'Seção',        ru:'Раздел',       zh:'分区',     ja:'セクション',   ko:'섹션',         ar:'القسم',       he:'מקטע',        ur:'سیکشن',        hi:'खंड' },
  'tweaks.density':  { en:'Density',      es:'Densidad',    fr:'Densité',     de:'Dichte',      it:'Densità',     pt:'Densidade',    ru:'Плотность',    zh:'密度',     ja:'密度',        ko:'밀도',         ar:'الكثافة',     he:'צפיפות',      ur:'کثافت',        hi:'घनत्व' },
  'tweaks.motion':   { en:'Motion',       es:'Movimiento',  fr:'Mouvement',   de:'Bewegung',    it:'Movimento',   pt:'Movimento',    ru:'Движение',     zh:'动画',     ja:'モーション',   ko:'모션',         ar:'الحركة',      he:'תנועה',       ur:'حرکت',         hi:'गति' },
  'tweaks.accent':   { en:'Accent',       es:'Acento',      fr:'Accent',      de:'Akzent',      it:'Accento',     pt:'Destaque',     ru:'Акцент',       zh:'主色',     ja:'アクセント',   ko:'강조색',       ar:'اللون المميز', he:'צבע הדגשה',  ur:'لہجہ',         hi:'एक्सेंट' },

  /* ===== Staking KPIs / headers ===== */
  'staking.kpi.activeValidators': { en:'Active Validators', es:'Validadores Activos', fr:'Validateurs actifs', de:'Aktive Validatoren', it:'Validatori attivi', pt:'Validadores ativos', ru:'Активные валидаторы', zh:'活跃验证者', ja:'アクティブバリデーター', ko:'활성 검증자', ar:'المدققون النشطون', he:'ולידטורים פעילים', ur:'ایکٹو ویلیڈیٹرز', hi:'सक्रिय वैलिडेटर' },
  'staking.kpi.totalStaked':      { en:'Total Staked', es:'Total en Stake', fr:'Total staké', de:'Gesamt gestaked', it:'Totale in stake', pt:'Total em stake', ru:'Всего в стейкинге', zh:'总质押', ja:'総ステーク', ko:'총 스테이킹', ar:'إجمالي الرهن', he:'סה"כ נעול', ur:'کل اسٹیک', hi:'कुल स्टेक' },
  'staking.kpi.avgCommission':    { en:'Avg Commission', es:'Comisión Media', fr:'Commission moy.', de:'Ø Kommission', it:'Commissione media', pt:'Comissão média', ru:'Ср. комиссия', zh:'平均佣金', ja:'平均手数料', ko:'평균 수수료', ar:'متوسط العمولة', he:'עמלה ממוצעת', ur:'اوسط کمیشن', hi:'औसत कमीशन' },
  'staking.kpi.nextEraIn':        { en:'Next Era In', es:'Próxima Era En', fr:'Prochaine ère', de:'Nächste Ära', it:'Prossima era', pt:'Próxima era', ru:'След. эра через', zh:'下一纪元', ja:'次のエラ', ko:'다음 에라', ar:'العصر التالي خلال', he:'עידן הבא בעוד', ur:'اگلا دور', hi:'अगला एरा' },
  'staking.kpi.targetWaiting':    { en:'target · waiting', es:'objetivo · espera', fr:'cible · attente', de:'Ziel · Warteliste', it:'obiettivo · attesa', pt:'alvo · aguardando', ru:'цель · ожидание', zh:'目标 · 等待中', ja:'目標・待機', ko:'목표 · 대기', ar:'الهدف · الانتظار', he:'יעד · המתנה', ur:'ہدف · انتظار', hi:'लक्ष्य · प्रतीक्षा' },
  'staking.kpi.activeSet':        { en:'active set', es:'conjunto activo', fr:'ensemble actif', de:'aktives Set', it:'set attivo', pt:'conjunto ativo', ru:'активный набор', zh:'活跃集合', ja:'アクティブセット', ko:'활성 세트', ar:'المجموعة النشطة', he:'קבוצה פעילה', ur:'ایکٹو سیٹ', hi:'सक्रिय सेट' },
  'staking.kpi.era':              { en:'era', es:'era', fr:'ère', de:'Ära', it:'era', pt:'era', ru:'эра', zh:'纪元', ja:'エラ', ko:'에라', ar:'حقبة', he:'עידן', ur:'دور', hi:'युग' },

  'staking.col.validator':   { en:'Validator',  es:'Validador',   fr:'Validateur',  de:'Validator',  it:'Validatore',  pt:'Validador',  ru:'Валидатор',  zh:'验证者',  ja:'バリデーター',  ko:'검증자',  ar:'المدقق',  he:'ולידטור',  ur:'ویلیڈیٹر',  hi:'वैलिडेटर' },
  'staking.col.totalStake':  { en:'Total Stake', es:'Stake Total', fr:'Stake total', de:'Gesamt-Stake', it:'Stake totale', pt:'Stake total', ru:'Общий стейк', zh:'总质押', ja:'総ステーク', ko:'총 스테이크', ar:'إجمالي الرهن', he:'נעילה כוללת', ur:'کل اسٹیک', hi:'कुल स्टेक' },
  'staking.col.own':         { en:'Own', es:'Propio', fr:'Propre', de:'Eigen', it:'Proprio', pt:'Próprio', ru:'Своё', zh:'自质押', ja:'自己', ko:'자기', ar:'ذاتي', he:'עצמי', ur:'ذاتی', hi:'अपना' },
  'staking.col.noms':        { en:'Noms', es:'Nom.', fr:'Nom.', de:'Nom.', it:'Nom.', pt:'Nom.', ru:'Ном.', zh:'提名', ja:'指名', ko:'지명', ar:'المرشحون', he:'ממנים', ur:'نامزد', hi:'नामांकन' },
  'staking.col.commission':  { en:'Commission', es:'Comisión', fr:'Commission', de:'Kommission', it:'Commissione', pt:'Comissão', ru:'Комиссия', zh:'佣金', ja:'手数料', ko:'수수료', ar:'العمولة', he:'עמלה', ur:'کمیشن', hi:'कमीशन' },
  'staking.col.eraPts':      { en:'Era Pts', es:'Puntos', fr:'Points', de:'Era-Pts', it:'Pt. Era', pt:'Pts Era', ru:'Очки эры', zh:'纪元积分', ja:'エラPt', ko:'에라 점수', ar:'نقاط الحقبة', he:"נק' עידן", ur:'دور پوائنٹس', hi:'एरा अंक' },
  'staking.col.status':      { en:'Status', es:'Estado', fr:'Statut', de:'Status', it:'Stato', pt:'Status', ru:'Статус', zh:'状态', ja:'ステータス', ko:'상태', ar:'الحالة', he:'סטטוס', ur:'حالت', hi:'स्थिति' },

  'status.active':       { en:'Active',       es:'Activo',      fr:'Actif',      de:'Aktiv',      it:'Attivo',      pt:'Ativo',      ru:'Активен',     zh:'活跃',    ja:'アクティブ',  ko:'활성',     ar:'نشط',       he:'פעיל',    ur:'ایکٹو',    hi:'सक्रिय' },
  'status.waiting':      { en:'Waiting',      es:'En Espera',   fr:'En attente', de:'Wartend',    it:'In attesa',   pt:'Aguardando', ru:'Ожидание',    zh:'等待中',  ja:'待機',       ko:'대기',     ar:'قيد الانتظار', he:'ממתין',  ur:'انتظار',   hi:'प्रतीक्षारत' },
  'status.oversub':      { en:'Oversub.',     es:'Sobresusc.',  fr:'Sur-abonné', de:'Überbucht',  it:'Sovrascritto',pt:'Sobrescrito',ru:'Переподписка',zh:'超额',   ja:'定員超',     ko:'초과',     ar:'مفرط الاشتراك', he:'עודף',  ur:'اوور سب',  hi:'ओवरसब' },

  /* ===== Tweaks ===== */
  'tweaks.visible':       { en:'Section', es:'Sección', fr:'Section', de:'Bereich', it:'Sezione', pt:'Seção', ru:'Раздел', zh:'区域', ja:'セクション', ko:'섹션', ar:'القسم', he:'מקטע', ur:'سیکشن', hi:'खंड' },
  'tweaks.chartType':     { en:'Chart type', es:'Tipo de gráfico', fr:'Type de graphique', de:'Diagrammtyp', it:'Tipo di grafico', pt:'Tipo de gráfico', ru:'Тип графика', zh:'图表类型', ja:'チャートタイプ', ko:'차트 유형', ar:'نوع الرسم', he:'סוג תרשים', ur:'چارٹ کی قسم', hi:'चार्ट प्रकार' },
  'tweaks.liveSpeed':     { en:'Live speed', es:'Velocidad en vivo', fr:'Vitesse live', de:'Live-Geschwindigkeit', it:'Velocità live', pt:'Velocidade ao vivo', ru:'Скорость потока', zh:'实时速度', ja:'ライブ速度', ko:'실시간 속도', ar:'السرعة المباشرة', he:'מהירות חי', ur:'براہ راست رفتار', hi:'लाइव गति' },

  /* ===== Buttons / misc ===== */
  'btn.exportCsv':   { en:'Export CSV',       es:'Exportar CSV',  fr:'Exporter CSV',  de:'CSV exportieren',  it:'Esporta CSV',  pt:'Exportar CSV',  ru:'Экспорт CSV',  zh:'导出 CSV',  ja:'CSV エクスポート',  ko:'CSV 내보내기',  ar:'تصدير CSV',  he:'ייצא CSV',  ur:'CSV برآمد',  hi:'CSV निर्यात' },
  'btn.streaming':   { en:'streaming',        es:'en directo',    fr:'en direct',     de:'live',             it:'in diretta',   pt:'em tempo real', ru:'эфир',         zh:'实时',      ja:'配信中',          ko:'스트리밍',     ar:'بث',         he:'משדר',       ur:'لائیو',      hi:'स्ट्रीमिंग' },
  'btn.fullExplorer':{ en:'Full Explorer',    es:'Explorador Completo', fr:'Explorateur complet', de:'Voller Explorer', it:'Explorer completo', pt:'Explorador completo', ru:'Полный обозреватель', zh:'完整浏览器', ja:'フルエクスプローラー', ko:'전체 탐색기', ar:'المستكشف الكامل', he:'סייר מלא', ur:'مکمل ایکسپلورر', hi:'पूर्ण एक्सप्लोरर' },
  'btn.provideLiquidity': { en:'+ Provide Liquidity', es:'+ Aportar Liquidez', fr:'+ Fournir de la liquidité', de:'+ Liquidität bereitstellen', it:'+ Fornisci liquidità', pt:'+ Fornecer liquidez', ru:'+ Добавить ликвидность', zh:'+ 提供流动性', ja:'+ 流動性を提供', ko:'+ 유동성 공급', ar:'+ توفير السيولة', he:'+ ספק נזילות', ur:'+ لکویڈٹی فراہم', hi:'+ लिक्विडिटी प्रदान करें' },
  'btn.addWallet':   { en:'+ Add wallet',     es:'+ Añadir cartera',  fr:'+ Ajouter un wallet', de:'+ Wallet hinzufügen', it:'+ Aggiungi wallet', pt:'+ Adicionar carteira', ru:'+ Добавить кошелёк', zh:'+ 添加钱包', ja:'+ ウォレット追加', ko:'+ 지갑 추가', ar:'+ إضافة محفظة', he:'+ הוסף ארנק', ur:'+ والیٹ شامل', hi:'+ वॉलेट जोड़ें' },

  /* ===== Filter chips / toggles ===== */
  'chip.all':        { en:'All',     es:'Todos',     fr:'Tous',     de:'Alle',     it:'Tutti',    pt:'Todos',   ru:'Все',     zh:'全部',  ja:'すべて',   ko:'전체',   ar:'الكل',    he:'הכול',   ur:'سب',      hi:'सभी' },
  'chip.swap':       { en:'Swap',    es:'Swap',      fr:'Swap',     de:'Swap',     it:'Swap',     pt:'Swap',    ru:'Своп',    zh:'兑换',  ja:'スワップ', ko:'스왑',   ar:'مبادلة',  he:'החלפה',  ur:'سواپ',    hi:'स्वैप' },
  'chip.transfer':   { en:'Transfer',es:'Transfer.', fr:'Transfert',de:'Transfer', it:'Trasf.',   pt:'Transf.', ru:'Перевод', zh:'转账',  ja:'送金',    ko:'전송',   ar:'تحويل',   he:'העברה',  ur:'منتقلی',  hi:'ट्रांस.' },
  'chip.block':      { en:'Block',   es:'Bloque',    fr:'Bloc',     de:'Block',    it:'Blocco',   pt:'Bloco',   ru:'Блок',    zh:'区块',  ja:'ブロック', ko:'블록',   ar:'كتلة',    he:'בלוק',   ur:'بلاک',    hi:'ब्लॉक' },
  'chip.order':      { en:'Order',   es:'Orden',     fr:'Ordre',    de:'Order',    it:'Ordine',   pt:'Ordem',   ru:'Ордер',   zh:'订单',  ja:'注文',    ko:'주문',   ar:'أمر',     he:'הזמנה',  ur:'آرڈر',    hi:'ऑर्डर' },
  'chip.burn':       { en:'Burn',    es:'Quema',     fr:'Burn',     de:'Burn',     it:'Burn',     pt:'Burn',    ru:'Сжигание',zh:'销毁',  ja:'バーン',   ko:'소각',   ar:'حرق',     he:'שריפה',  ur:'برن',     hi:'बर्न' },
  'chip.favorites':  { en:'Favorites', es:'Favoritos', fr:'Favoris', de:'Favoriten', it:'Preferiti', pt:'Favoritos', ru:'Избранное', zh:'收藏', ja:'お気に入り', ko:'즐겨찾기', ar:'المفضلة', he:'מועדפים', ur:'پسندیدہ', hi:'पसंदीदा' },
  'scope.mine':      { en:'Mine',    es:'Mis',       fr:'Miennes',  de:'Meine',    it:'Mie',      pt:'Minhas',  ru:'Мои',     zh:'我的',  ja:'自分',    ko:'내 것',  ar:'خاصتي',  he:'שלי',    ur:'میری',    hi:'मेरी' },
  'scope.watched':   { en:'Watched', es:'Vigiladas', fr:'Suivies',  de:'Beobachtet', it:'Osservate', pt:'Observadas', ru:'Отслеж.', zh:'观察', ja:'監視中',   ko:'관찰 중', ar:'مراقبة', he:'במעקב',  ur:'زیر نگرانی', hi:'निगरानी' },
  'badge.mine':      { en:'MINE',    es:'MÍA',       fr:'À MOI',    de:'MEINS',    it:'MIA',      pt:'MINHA',   ru:'МОЯ',     zh:'我的',  ja:'自分',    ko:'내 것',  ar:'خاصتي',  he:'שלי',    ur:'میری',    hi:'मेरी' },
  'badge.watched':   { en:'WATCHED', es:'VIG',       fr:'SUIVIE',   de:'BEOB.',    it:'OSS.',     pt:'OBS.',    ru:'СЛЕЖ.',   zh:'观察',  ja:'監視',    ko:'관찰',   ar:'مراقبة', he:'מעקב',   ur:'نگرانی',  hi:'निगरानी' },

  /* ===== Pulse ===== */
  'pulse.kpi.swaps24':    { en:'Swaps · 24h',     es:'Swaps · 24h',      fr:'Swaps · 24h',      de:'Swaps · 24h',      it:'Swap · 24h',      pt:'Swaps · 24h',     ru:'Свопы · 24ч',      zh:'兑换 · 24h',  ja:'スワップ・24h',  ko:'스왑 · 24h',   ar:'مبادلات · 24س',   he:'החלפות · 24h', ur:'سواپس · 24h',  hi:'स्वैप · 24h' },
  'pulse.kpi.volume':     { en:'Volume · KUSD',   es:'Volumen · KUSD',   fr:'Volume · KUSD',    de:'Volumen · KUSD',   it:'Volume · KUSD',   pt:'Volume · KUSD',   ru:'Объём · KUSD',     zh:'交易量 · KUSD', ja:'取引高・KUSD',   ko:'거래량 · KUSD',ar:'الحجم · KUSD',    he:'נפח · KUSD',  ur:'حجم · KUSD',   hi:'वॉल्यूम · KUSD' },
  'pulse.kpi.wallets':    { en:'Active Wallets',  es:'Carteras Activas', fr:'Wallets actifs',   de:'Aktive Wallets',   it:'Wallet attivi',   pt:'Carteiras ativas',ru:'Активные кошельки',zh:'活跃钱包',    ja:'アクティブウォレット', ko:'활성 지갑', ar:'المحافظ النشطة', he:'ארנקים פעילים', ur:'ایکٹو والٹس', hi:'सक्रिय वॉलेट' },
  'pulse.kpi.block':      { en:'Avg Block Time',  es:'Tiempo Medio de Bloque', fr:'Temps moy. de bloc', de:'Ø Blockzeit', it:'Tempo medio blocco', pt:'Tempo méd. de bloco', ru:'Ср. время блока', zh:'平均出块', ja:'平均ブロック時間', ko:'평균 블록 시간', ar:'متوسط وقت الكتلة', he:'זמן בלוק ממוצע', ur:'اوسط بلاک ٹائم', hi:'औसत ब्लॉक समय' },
  'pulse.trending':       { en:'Trending Tokens · 24h', es:'Tokens en Tendencia · 24h', fr:'Tokens tendance · 24h', de:'Trending-Tokens · 24h', it:'Token in trend · 24h', pt:'Tokens em alta · 24h', ru:'Трендовые токены · 24ч', zh:'热门代币 · 24h', ja:'トレンドトークン・24h', ko:'트렌딩 토큰 · 24h', ar:'التوكنز الرائجة · 24س', he:'טוקנים חמים · 24h', ur:'ٹرینڈنگ ٹوکنز · 24h', hi:'ट्रेंडिंग टोकन · 24h' },
  'pulse.health':         { en:'Network Health',  es:'Salud de la Red',  fr:'Santé du réseau',  de:'Netzwerk-Zustand', it:'Stato di rete',   pt:'Saúde da rede',   ru:'Состояние сети',   zh:'网络健康',    ja:'ネットワーク健全性', ko:'네트워크 상태', ar:'صحة الشبكة',      he:'בריאות הרשת',  ur:'نیٹ ورک صحت',  hi:'नेटवर्क स्वास्थ्य' },

  /* ===== Burn KPIs ===== */
  'burn.kpi.totalBurned': { en:'Total Burned', es:'Total Quemado', fr:'Total brûlé', de:'Gesamt verbrannt', it:'Totale bruciato', pt:'Total queimado', ru:'Всего сожжено', zh:'总销毁', ja:'総バーン', ko:'총 소각', ar:'إجمالي الحرق', he:'סה"כ נשרף', ur:'کل برن', hi:'कुल बर्न' },
  'burn.kpi.burnRate':    { en:'Burn Rate',    es:'Tasa de Quema', fr:'Taux de burn', de:'Burn-Rate',   it:'Tasso di burn',   pt:'Taxa de queima', ru:'Скорость сжигания', zh:'销毁速率', ja:'バーンレート', ko:'소각 속도', ar:'معدل الحرق', he:'קצב שריפה', ur:'برن ریٹ', hi:'बर्न दर' },
  'burn.kpi.supply':      { en:'Circulating',  es:'Circulante',   fr:'En circulation', de:'Im Umlauf',  it:'Circolante',     pt:'Em circulação', ru:'В обращении', zh:'流通量', ja:'流通量', ko:'유통량', ar:'المتداول', he:'במחזור', ur:'گردش میں', hi:'परिसंचरण' },
  'burn.kpi.priceImpact': { en:'Price · 24h',  es:'Precio · 24h', fr:'Prix · 24h',   de:'Preis · 24h', it:'Prezzo · 24h',   pt:'Preço · 24h',   ru:'Цена · 24ч', zh:'价格 · 24h', ja:'価格・24h', ko:'가격 · 24h', ar:'السعر · 24س', he:'מחיר · 24h', ur:'قیمت · 24h', hi:'मूल्य · 24h' },
  'burn.topHolders':      { en:'Top Holders',  es:'Principales Titulares', fr:'Principaux détenteurs', de:'Top-Halter', it:'Principali detentori', pt:'Principais detentores', ru:'Топ-держатели', zh:'主要持有者', ja:'トップホルダー', ko:'상위 보유자', ar:'كبار الحائزين', he:'מחזיקים מובילים', ur:'ٹاپ ہولڈرز', hi:'शीर्ष धारक' },
  'burn.referral.title':       { en:'Referral · XOR', es:'Referidos · XOR', fr:'Parrainage · XOR', de:'Empfehlung · XOR', it:'Referral · XOR', pt:'Indicação · XOR', ru:'Рефералы · XOR', zh:'推荐 · XOR', ja:'リファラル · XOR', ko:'추천 · XOR', ar:'الإحالة · XOR', he:'הפניה · XOR', ur:'ریفرل · XOR', hi:'रेफरल · XOR' },
  'burn.referral.paid':        { en:'Paid to referrers', es:'Pagado a referidos', fr:'Payé aux parrains', de:'An Werber gezahlt', it:'Pagato ai referrer', pt:'Pago aos indicadores', ru:'Выплачено рефералам', zh:'支付给推荐人', ja:'リファラーへ支払', ko:'추천인에게 지급', ar:'مدفوع للمحيلين', he:'שולם למפנים', ur:'ریفررز کو ادا', hi:'रेफरर को भुगतान' },
  'burn.referral.paidSub':     { en:'real referrer rewards', es:'recompensas reales a referidos', fr:'récompenses parrains réelles', de:'echte Werber-Belohnungen', it:'ricompense referrer reali', pt:'recompensas reais', ru:'реальные награды', zh:'真实推荐奖励', ja:'実リファラル報酬', ko:'실제 추천 보상', ar:'مكافآت حقيقية', he:'תגמולי הפניה אמיתיים', ur:'حقیقی ریفرل انعامات', hi:'वास्तविक रेफरल पुरस्कार' },
  'burn.referral.redirected':  { en:'Redirected → XOR burn', es:'Redirigido → quema XOR', fr:'Redirigé → burn XOR', de:'Umgeleitet → XOR-Burn', it:'Reindirizzato → burn XOR', pt:'Redirecionado → burn XOR', ru:'Перенаправлено → сжигание XOR', zh:'重定向 → XOR销毁', ja:'転送 → XOR焼却', ko:'리디렉션 → XOR 소각', ar:'إعادة توجيه → حرق XOR', he:'הופנה → שריפת XOR', ur:'ری ڈائریکٹ → XOR برن', hi:'पुनर्निर्देशित → XOR बर्न' },
  'burn.referral.redirectedSub':{ en:'no referrer set → burnt as XOR', es:'sin referido → se quema como XOR', fr:'sans parrain → brûlé en XOR', de:'kein Werber → als XOR verbrannt', it:'nessun referrer → bruciato come XOR', pt:'sem indicador → queimado como XOR', ru:'нет реферала → сжигается как XOR', zh:'无推荐人 → 作为XOR销毁', ja:'リファラーなし → XORとして焼却', ko:'추천인 없음 → XOR로 소각', ar:'لا محيل → يحرق كـ XOR', he:'אין מפנה → נשרף כ-XOR', ur:'کوئی ریفرر نہیں → XOR کے طور پر جلا', hi:'कोई रेफरर नहीं → XOR के रूप में जला' },
  'burn.referral.note':        { en:'In 4.8.6 the unreferred referrer slice (11.76% of each fee) is burnt as XOR — no longer redirected to KUSD.', es:'En 4.8.6 la parte de referido sin asignar (11.76% de cada fee) se quema como XOR — ya no se redirige a KUSD.', fr:'En 4.8.6 la part parrain sans parrain (11,76%) est brûlée en XOR — plus de redirection KUSD.', de:'In 4.8.6 wird der nicht zugewiesene Werber-Anteil (11,76%) als XOR verbrannt — keine KUSD-Umleitung mehr.', it:'In 4.8.6 la quota referrer non assegnata (11,76%) è bruciata come XOR — non più reindirizzata a KUSD.', pt:'No 4.8.6 a fatia de indicação sem indicador (11,76%) é queimada como XOR — não mais redirecionada a KUSD.', ru:'В 4.8.6 нераспределённая реферальная доля (11,76%) сжигается как XOR — больше не идёт в KUSD.', zh:'4.8.6中无推荐人的推荐份额(每笔费用11.76%)作为XOR销毁 — 不再重定向到KUSD。', ja:'4.8.6ではリファラー未設定分(各手数料の11.76%)はXORとして焼却 — KUSDへの転送は廃止。', ko:'4.8.6에서 미지정 추천 몫(수수료의 11.76%)은 XOR로 소각 — 더 이상 KUSD로 리디렉션 안 함.', ar:'في 4.8.6 يُحرق نصيب الإحالة غير المخصص (11.76٪) كـ XOR — لم يعد يُوجه إلى KUSD.', he:'ב-4.8.6 חלק ההפניה הלא-משויך (11.76%) נשרף כ-XOR — כבר לא מופנה ל-KUSD.', ur:'4.8.6 میں غیر تفویض شدہ ریفرل حصہ (11.76٪) XOR کے طور پر جلایا — اب KUSD کو ری ڈائریکٹ نہیں۔', hi:'4.8.6 में बिना रेफरर वाला हिस्सा (11.76%) XOR के रूप में जलाया — अब KUSD में नहीं।' },
  'burn.burnRateCum':     { en:'Burn Rate — cumulative', es:'Tasa de quema — acumulada', fr:'Taux de burn — cumulé', de:'Burn-Rate — kumuliert', it:'Tasso di burn — cumulativo', pt:'Taxa de queima — acumulada', ru:'Скорость сжигания — нарастающая', zh:'销毁速率 — 累计', ja:'バーンレート — 累積', ko:'소각 속도 — 누적', ar:'معدل الحرق — تراكمي', he:'קצב שריפה — מצטבר', ur:'برن ریٹ — مجموعی', hi:'बर्न दर — संचयी' },

  /* ===== Swaps / Extrinsics / Transfers / Bridges / Holders table ===== */
  'col.time':        { en:'Time',    es:'Tiempo',    fr:'Temps',   de:'Zeit',     it:'Ora',     pt:'Hora',     ru:'Время',    zh:'时间',  ja:'時間',   ko:'시간',    ar:'الوقت',    he:'זמן',     ur:'وقت',      hi:'समय' },
  'col.from':        { en:'From',    es:'De',        fr:'De',      de:'Von',      it:'Da',      pt:'De',       ru:'От',       zh:'来自',  ja:'から',   ko:'발신',    ar:'من',       he:'מאת',     ur:'از',       hi:'से' },
  'col.to':          { en:'To',      es:'Para',      fr:'Vers',    de:'An',       it:'A',       pt:'Para',     ru:'Кому',     zh:'至',    ja:'宛先',   ko:'수신',    ar:'إلى',      he:'אל',      ur:'بنام',     hi:'को' },
  'col.rate':        { en:'Rate',    es:'Tasa',      fr:'Taux',    de:'Kurs',     it:'Tasso',   pt:'Taxa',     ru:'Курс',     zh:'汇率',  ja:'レート',  ko:'환율',    ar:'السعر',    he:'שער',     ur:'ریٹ',      hi:'दर' },
  'col.fee':         { en:'Fee',     es:'Comisión',  fr:'Frais',   de:'Gebühr',   it:'Commiss.',pt:'Taxa',     ru:'Комиссия', zh:'手续费',ja:'手数料',  ko:'수수료',  ar:'رسوم',     he:'עמלה',    ur:'فیس',      hi:'शुल्क' },
  'col.caller':      { en:'Caller',  es:'Llamante',  fr:'Appelant',de:'Aufrufer', it:'Chiamante',pt:'Chamador',ru:'Отправитель',zh:'调用者',ja:'呼び出し元', ko:'호출자', ar:'المتصل',   he:'קורא',    ur:'کالر',     hi:'कॉलर' },
  'col.status':      { en:'Status',  es:'Estado',    fr:'Statut',  de:'Status',   it:'Stato',   pt:'Status',   ru:'Статус',   zh:'状态',  ja:'ステータス',ko:'상태',  ar:'الحالة',   he:'סטטוס',   ur:'حالت',     hi:'स्थिति' },
  'col.asset':       { en:'Asset',   es:'Activo',    fr:'Actif',   de:'Asset',    it:'Asset',   pt:'Ativo',    ru:'Актив',    zh:'资产',  ja:'資産',    ko:'자산',    ar:'الأصل',    he:'נכס',     ur:'اثاثہ',    hi:'परिसंपत्ति' },
  'col.amount':      { en:'Amount',  es:'Cantidad',  fr:'Montant', de:'Betrag',   it:'Importo', pt:'Valor',    ru:'Сумма',    zh:'数量',  ja:'金額',    ko:'금액',    ar:'المبلغ',   he:'סכום',    ur:'رقم',      hi:'राशि' },
  'col.memo':        { en:'Memo',    es:'Nota',      fr:'Note',    de:'Notiz',    it:'Nota',    pt:'Nota',     ru:'Примеч.',  zh:'备注',  ja:'メモ',    ko:'메모',    ar:'ملاحظة',   he:'הערה',    ur:'نوٹ',      hi:'मेमो' },
  'col.direction':   { en:'Direction',es:'Dirección',fr:'Direction',de:'Richtung',it:'Direzione',pt:'Direção', ru:'Направление',zh:'方向',ja:'方向',    ko:'방향',    ar:'الاتجاه',   he:'כיוון',  ur:'سمت',      hi:'दिशा' },
  'col.chain':       { en:'Chain',   es:'Cadena',    fr:'Chaîne',  de:'Chain',    it:'Chain',   pt:'Cadeia',   ru:'Сеть',     zh:'链',    ja:'チェーン', ko:'체인',    ar:'السلسلة',  he:'שרשרת',  ur:'چین',     hi:'चेन' },
  'col.pair':        { en:'Pair',    es:'Par',       fr:'Paire',   de:'Paar',     it:'Coppia',  pt:'Par',      ru:'Пара',     zh:'交易对',ja:'ペア',    ko:'페어',    ar:'زوج',      he:'צמד',     ur:'جوڑا',    hi:'जोड़ी' },
  'col.price':       { en:'Price',   es:'Precio',    fr:'Prix',    de:'Preis',    it:'Prezzo',  pt:'Preço',    ru:'Цена',     zh:'价格',  ja:'価格',    ko:'가격',    ar:'السعر',    he:'מחיר',    ur:'قیمت',    hi:'मूल्य' },
  'col.size':        { en:'Size',    es:'Tamaño',    fr:'Taille',  de:'Größe',    it:'Dim.',    pt:'Tamanho',  ru:'Размер',   zh:'规模',  ja:'サイズ',  ko:'크기',    ar:'الحجم',    he:'גודל',    ur:'سائز',    hi:'आकार' },
  'col.total':       { en:'Total',   es:'Total',     fr:'Total',   de:'Gesamt',   it:'Totale',  pt:'Total',    ru:'Итого',    zh:'总额',  ja:'合計',    ko:'합계',    ar:'الإجمالي', he:'סה"כ',   ur:'کل',      hi:'कुल' },
  'col.rank':        { en:'Rank',    es:'Rango',     fr:'Rang',    de:'Rang',     it:'Rango',   pt:'Posição',  ru:'Ранг',     zh:'排名',  ja:'順位',    ko:'순위',    ar:'الترتيب',   he:'דירוג',  ur:'رینک',    hi:'रैंक' },
  'col.identity':    { en:'Identity', es:'Identidad', fr:'Identité', de:'Identität', it:'Identità', pt:'Identidade' },
  'col.account':     { en:'Account', es:'Cuenta',    fr:'Compte',  de:'Konto',    it:'Account', pt:'Conta',    ru:'Аккаунт',  zh:'账户',  ja:'アカウント',ko:'계정',  ar:'الحساب',   he:'חשבון',   ur:'اکاؤنٹ',  hi:'खाता' },
  'col.value':       { en:'Value',   es:'Valor',     fr:'Valeur',  de:'Wert',     it:'Valore',  pt:'Valor',    ru:'Стоимость',zh:'价值',  ja:'価値',    ko:'가치',    ar:'القيمة',    he:'ערך',    ur:'ویلیو',   hi:'मूल्य' },
  'col.tokens':      { en:'Tokens',  es:'Tokens',    fr:'Tokens',  de:'Tokens',   it:'Token',   pt:'Tokens',   ru:'Токены',   zh:'代币',  ja:'トークン', ko:'토큰',    ar:'العملات',  he:'אסימונים',ur:'ٹوکنز',  hi:'टोकन' },
  'col.lastActivity':{ en:'Last Activity', es:'Última Actividad', fr:'Dern. activité', de:'Letzte Aktivität', it:'Ultima attività', pt:'Última atividade', ru:'Последняя активность', zh:'最后活动', ja:'最終活動', ko:'마지막 활동', ar:'آخر نشاط', he:'פעילות אחרונה', ur:'آخری سرگرمی', hi:'अंतिम गतिविधि' },
  'col.pool':        { en:'Pool',    es:'Pool',      fr:'Pool',    de:'Pool',     it:'Pool',    pt:'Pool',     ru:'Пул',      zh:'池',    ja:'プール',   ko:'풀',      ar:'المجمع',   he:'בריכה',   ur:'پول',     hi:'पूल' },
  'col.tvl':         { en:'TVL',     es:'TVL',       fr:'TVL',     de:'TVL',      it:'TVL',     pt:'TVL',      ru:'TVL',      zh:'TVL',   ja:'TVL',     ko:'TVL',    ar:'TVL',      he:'TVL',    ur:'TVL',     hi:'TVL' },
  'col.volume':      { en:'Volume',  es:'Volumen',   fr:'Volume',  de:'Volumen',  it:'Volume',  pt:'Volume',   ru:'Объём',    zh:'交易量',ja:'取引高',  ko:'거래량',  ar:'الحجم',    he:'נפח',     ur:'حجم',     hi:'वॉल्यूम' },
  'col.apr':         { en:'APR',     es:'APR',       fr:'APR',     de:'APR',      it:'APR',     pt:'APR',      ru:'APR',      zh:'年化',  ja:'APR',     ko:'APR',    ar:'APR',      he:'APR',    ur:'APR',     hi:'APR' },
  'col.change24':    { en:'24h',     es:'24h',       fr:'24h',     de:'24h',      it:'24h',     pt:'24h',      ru:'24ч',      zh:'24h',   ja:'24h',     ko:'24h',    ar:'24س',      he:'24h',    ur:'24h',     hi:'24h' },
  'col.marketCap':   { en:'Market Cap', es:'Cap. de Mercado', fr:'Cap. marché', de:'Marktkap.', it:'Cap. mercato', pt:'Cap. de mercado', ru:'Рын. кап.', zh:'市值',  ja:'時価総額', ko:'시가총액',ar:'القيمة السوقية', he:'שווי שוק', ur:'مارکیٹ کیپ', hi:'मार्केट कैप' },
  'col.supply':      { en:'Supply',  es:'Oferta',    fr:'Offre',   de:'Angebot',  it:'Offerta', pt:'Oferta',   ru:'Предложение',zh:'供应',ja:'供給量',  ko:'공급',   ar:'الإمداد',   he:'היצע',   ur:'سپلائی',  hi:'आपूर्ति' },
  'col.extrinsic':   { en:'Extrinsic', es:'Extrínseco', fr:'Extrinsèque', de:'Extrinsic', it:'Extrinsic', pt:'Extrínseco', ru:'Экстринсик', zh:'外部交易', ja:'エクストリンシック', ko:'익스트린식', ar:'المعاملة', he:'אקסטרינסיק', ur:'ایکسٹرنسک', hi:'एक्सट्रिंसिक' },
  'col.call':        { en:'Call',    es:'Llamada',   fr:'Appel',   de:'Aufruf',   it:'Chiamata',pt:'Chamada',  ru:'Вызов',    zh:'调用',  ja:'呼び出し', ko:'호출',    ar:'الاستدعاء',he:'קריאה',  ur:'کال',     hi:'कॉल' },
  'col.signer':      { en:'Signer',  es:'Firmante',  fr:'Signataire',de:'Signierer',it:'Firmatario',pt:'Signatário',ru:'Подписант',zh:'签名者',ja:'署名者',ko:'서명자',ar:'الموقّع', he:'חותם',   ur:'دستخط کنندہ',hi:'हस्ताक्षरक' },
  'col.result':      { en:'Result',  es:'Resultado', fr:'Résultat',de:'Ergebnis', it:'Risultato',pt:'Resultado',ru:'Результат',zh:'结果',ja:'結果',    ko:'결과',    ar:'النتيجة',  he:'תוצאה',  ur:'نتیجہ',  hi:'परिणाम' },

  /* ===== Status pills ===== */
  'status.success':  { en:'Success',  es:'Éxito',   fr:'Succès',  de:'Erfolg',  it:'Successo',pt:'Sucesso', ru:'Успех',   zh:'成功',  ja:'成功',    ko:'성공',   ar:'نجاح',     he:'הצלחה',  ur:'کامیاب',  hi:'सफल' },
  'status.failed':   { en:'Failed',   es:'Fallido', fr:'Échec',   de:'Fehlgeschl.',it:'Fallito',pt:'Falhou',  ru:'Ошибка',  zh:'失败',  ja:'失敗',    ko:'실패',   ar:'فشل',      he:'נכשל',   ur:'ناکام',   hi:'विफल' },
  'status.pending':  { en:'Pending',  es:'Pendiente',fr:'En cours',de:'Ausstehend',it:'In attesa',pt:'Pendente',ru:'Ожидание',zh:'待处理',ja:'保留中',  ko:'대기중', ar:'قيد الانتظار',he:'ממתין', ur:'زیر التوا',hi:'लंबित' },
  'status.done':     { en:'Done',     es:'Hecho',   fr:'Terminé', de:'Fertig',  it:'Fatto',   pt:'Feito',   ru:'Готово',  zh:'已完成',ja:'完了',    ko:'완료',   ar:'تم',       he:'בוצע',   ur:'مکمل',    hi:'हो गया' },
  'status.finalized':{ en:'Finalized',es:'Finalizado',fr:'Finalisé',de:'Finalisiert',it:'Finalizzato',pt:'Finalizado',ru:'Финализирован',zh:'已最终化',ja:'ファイナライズ',ko:'최종화됨',ar:'مُنهى',he:'סופי',ur:'حتمی',hi:'अंतिम' },
  'sev.low':         { en:'Low',      es:'Baja',    fr:'Faible',  de:'Niedrig', it:'Bassa',   pt:'Baixa',   ru:'Низкая',  zh:'低',    ja:'低',      ko:'낮음',   ar:'منخفض',    he:'נמוכה',  ur:'کم',      hi:'निम्न' },
  'sev.medium':      { en:'Medium',   es:'Media',   fr:'Moyenne', de:'Mittel',  it:'Media',   pt:'Média',   ru:'Средняя', zh:'中',    ja:'中',      ko:'보통',   ar:'متوسط',    he:'בינונית',ur:'درمیانہ',hi:'मध्यम' },
  'sev.high':        { en:'High',     es:'Alta',    fr:'Élevée',  de:'Hoch',    it:'Alta',    pt:'Alta',    ru:'Высокая', zh:'高',    ja:'高',      ko:'높음',   ar:'عالي',     he:'גבוהה',  ur:'بلند',    hi:'उच्च' },
  'sev.critical':    { en:'Critical', es:'Crítica', fr:'Critique',de:'Kritisch',it:'Critica', pt:'Crítica', ru:'Критич.', zh:'严重',  ja:'重大',    ko:'심각',   ar:'حرج',      he:'קריטית', ur:'نازک',    hi:'गंभीर' },

  /* ===== Pagination ===== */
  'pag.first':       { en:'« First',  es:'« Inicio', fr:'« Début', de:'« Erste', it:'« Prima', pt:'« Início',ru:'« В начало',zh:'« 首页',ja:'« 最初',  ko:'« 처음', ar:'« الأول',  he:'« ראשון',ur:'« پہلا',  hi:'« प्रथम' },
  'pag.prev':        { en:'⬅ Prev',   es:'⬅ Ant.',  fr:'⬅ Préc.', de:'⬅ Zurück',it:'⬅ Prec.',pt:'⬅ Ant.',  ru:'⬅ Назад', zh:'⬅ 上一页',ja:'⬅ 前へ',  ko:'⬅ 이전', ar:'⬅ السابق', he:'⬅ הקודם', ur:'⬅ پچھلا', hi:'⬅ पिछला' },
  'pag.next':        { en:'Next ➡',   es:'Sig. ➡',  fr:'Suiv. ➡', de:'Weiter ➡',it:'Succ. ➡',pt:'Próx. ➡', ru:'Далее ➡', zh:'下一页 ➡',ja:'次へ ➡',  ko:'다음 ➡', ar:'التالي ➡', he:'הבא ➡',  ur:'اگلا ➡',  hi:'अगला ➡' },
  'pag.last':        { en:'Last »',   es:'Último »',fr:'Fin »',   de:'Letzte »',it:'Ultima »',pt:'Último »',ru:'В конец »',zh:'末页 »',  ja:'最後 »',  ko:'마지막 »',ar:'الأخير »',he:'אחרון »', ur:'آخری »',  hi:'अंतिम »' },
  'pag.pageOf':      { en:'Page',     es:'Página',  fr:'Page',    de:'Seite',   it:'Pagina',  pt:'Página',  ru:'Стр.',    zh:'第',    ja:'ページ',  ko:'페이지', ar:'صفحة',     he:'עמוד',   ur:'صفحہ',    hi:'पृष्ठ' },
  'pag.of':          { en:'of',       es:'de',      fr:'sur',     de:'von',     it:'di',      pt:'de',      ru:'из',      zh:'/',     ja:'/',       ko:'/',      ar:'من',       he:'מתוך',   ur:'از',      hi:'का' },

  /* ===== Governance inner labels ===== */
  "common.prev":   { en:"Prev",                es:"Anterior",         fr:"Préc.",         de:"Zurück",        it:"Prec.",          pt:"Anterior",       ru:"Naz",          zh:"上一页",      ja:"前へ",            ko:"이전",          ar:"السابق",         he:"הקודם",         ur:"پچھلا",         hi:"पिछला" },
  "common.next":   { en:"Next",                es:"Siguiente",        fr:"Suiv.",         de:"Weiter",        it:"Succ.",          pt:"Próximo",        ru:"Vpered",       zh:"下一页",      ja:"次へ",            ko:"다음",          ar:"التالي",         he:"הבא",           ur:"اگلا",          hi:"अगला" },
  "common.pageOf": { en:"Page {n} of {total}", es:"Página {n} de {total}", fr:"Page {n} sur {total}", de:"Seite {n} von {total}", it:"Pagina {n} di {total}", pt:"Página {n} de {total}", ru:"Stranitsa {n} iz {total}", zh:"第 {n} 页/共 {total} 页", ja:"{total} 中 {n} ページ", ko:"{total} 중 {n} 페이지", ar:"الصفحة {n} من {total}", he:"עמוד {n} מתוך {total}", ur:"صفحہ {n} از {total}", hi:"पृष्ठ {n} / {total}" },
  "gov.tab.council":   { en:"Council",            es:"Consejo",         fr:"Conseil",         de:"Council",        it:"Consiglio",      pt:"Conselho",       ru:"Sovet",          zh:"理事会",        ja:"評議会",          ko:"의회",            ar:"مجلس",            he:"מועצה",          ur:"کونسل",          hi:"परिषद" },
  "gov.scheduler.title":          { en:"Upcoming Executions (Scheduler)", es:"Próximas ejecuciones (Scheduler)", fr:"Exécutions à venir (Scheduler)", de:"Anstehende Ausführungen (Scheduler)", it:"Prossime esecuzioni (Scheduler)", pt:"Próximas execuções (Scheduler)", ru:"Predstoyashchie ispolneniya (Scheduler)", zh:"即将执行（调度器）", ja:"次の実行（スケジューラ）", ko:"예정된 실행 (스케줄러)", ar:"التنفيذات القادمة (المجدول)", he:"הפעלות קרובות (Scheduler)", ur:"آنے والی execuciones (Scheduler)", hi:"आगामी निष्पादन (Scheduler)" },
  "gov.scheduler.scheduled":      { en:"scheduled",                       es:"programadas",                      fr:"programmées",                    de:"geplant",                                it:"programmate",                  pt:"programadas",                    ru:"zaplanirovano",                          zh:"已计划",        ja:"予定済み",         ko:"예약됨",            ar:"مُجدولة",                he:"מתוזמנות",       ur:"شیڈولڈ",          hi:"निर्धारित" },
  "gov.scheduler.alertWillFail":  { en:"there are scheduled executions that will fail because the preimage bytes are not on-chain.", es:"hay ejecuciones programadas que fallarán porque los bytes de la preimagen no están on-chain.", fr:"des exécutions programmées vont échouer car les octets de la préimage ne sont pas on-chain.", de:"es gibt geplante Ausführungen, die scheitern werden, weil die Preimage-Bytes nicht on-chain sind.", it:"ci sono esecuzioni programmate che falliranno perché i byte della preimage non sono on-chain.", pt:"há execuções programadas que falharão porque os bytes da pré-imagem não estão on-chain.", ru:"est zaplanirovannye ispolneniya, kotorye ne udadutsya, tak kak baytov preobraza net on-chain.", zh:"有预定执行将因为预映像字节不在链上而失败。", ja:"プリイメージのバイトがオンチェーンに無いため、予定の実行は失敗します。", ko:"프리이미지 바이트가 온체인에 없어 예정된 실행이 실패합니다.", ar:"هناك تنفيذات مجدولة ستفشل لأن بايتات الصورة الأولية ليست على السلسلة.", he:"יש הפעלות מתוזמנות שייכשלו כי בייטי הפרי-אימג לא בשרשרת.", ur:"شیڈولڈ execuciones ناکام ہوں گی کیونکہ preimage bytes آن چین نہیں۔", hi:"प्रीइमेज बाइट्स ऑन-चेन न होने के कारण शेड्यूल्ड निष्पादन विफल होंगे।" },
  "gov.scheduler.block":          { en:"Block",                           es:"Bloque",                           fr:"Bloc",                            de:"Block",                                  it:"Blocco",                       pt:"Bloco",                          ru:"Blok",                                   zh:"区块",          ja:"ブロック",         ko:"블록",              ar:"كتلة",                   he:"בלוק",            ur:"بلاک",            hi:"ब्लॉक" },
  "gov.scheduler.executesAt":     { en:"Executes at",                     es:"Ejecuta en",                       fr:"Exécute à",                       de:"Ausführung bei",                         it:"Esegue al",                    pt:"Executa em",                     ru:"Vypolnyaetsya v",                        zh:"执行于",        ja:"実行ブロック",     ko:"실행 시점",         ar:"ينفذ عند",               he:"מבוצע ב",         ur:"چلتا ہے",         hi:"निष्पादन" },
  "gov.scheduler.call":           { en:"Call",                            es:"Call",                             fr:"Appel",                           de:"Call",                                   it:"Call",                         pt:"Chamada",                        ru:"Vyzov",                                  zh:"调用",          ja:"コール",           ko:"호출",              ar:"استدعاء",                he:"קריאה",          ur:"کال",             hi:"कॉल" },
  "gov.scheduler.preimage":       { en:"Preimage",                        es:"Preimagen",                        fr:"Préimage",                        de:"Preimage",                               it:"Preimage",                     pt:"Pré-imagem",                     ru:"Preobraz",                               zh:"预映像",        ja:"プリイメージ",     ko:"프리이미지",        ar:"الصورة الأولية",         he:"פרי-אימג",       ur:"پری امیج",        hi:"प्रीइमेज" },
  "gov.scheduler.origin":         { en:"Origin",                          es:"Origen",                           fr:"Origine",                         de:"Ursprung",                               it:"Origine",                      pt:"Origem",                         ru:"Istochnik",                              zh:"来源",          ja:"オリジン",         ko:"출처",              ar:"المصدر",                 he:"מקור",            ur:"اوریجن",          hi:"मूल" },
  "gov.scheduler.loading":        { en:"Loading agenda…",                 es:"Cargando agenda...",               fr:"Chargement de l\\u0027agenda…",   de:"Agenda wird geladen…",                   it:"Caricamento agenda…",          pt:"Carregando agenda…",             ru:"Zagruzka agendy…",                       zh:"加载议程…",     ja:"アジェンダを読み込み中…", ko:"안건 로딩…", ar:"جارٍ تحميل جدول الأعمال…", he:"טוען סדר יום…", ur:"ایجنڈا لوڈ ہو رہا ہے…", hi:"एजेंडा लोड हो रहा है…" },
  "gov.scheduler.empty":          { en:"No executions scheduled.",        es:"No hay ejecuciones programadas.",  fr:"Aucune exécution programmée.",    de:"Keine geplanten Ausführungen.",          it:"Nessuna esecuzione programmata.", pt:"Nenhuma execução agendada.",  ru:"Net zaplanirovannykh ispolneniy.",       zh:"无预定执行。",  ja:"予定はありません。", ko:"예약된 실행 없음.", ar:"لا توجد تنفيذات مجدولة.", he:"אין הפעלות מתוזמנות.", ur:"کوئی شیڈولڈ execuciones نہیں۔", hi:"कोई निष्पादन निर्धारित नहीं।" },
  "gov.scheduler.tipFooter":      { en:"Current tip: {tip} · {n} executions scheduled", es:"Tip actual: {tip} · {n} ejecuciones programadas", fr:"Tip actuel : {tip} · {n} exécutions programmées", de:"Aktueller Tip: {tip} · {n} geplante Ausführungen", it:"Tip attuale: {tip} · {n} esecuzioni programmate", pt:"Tip atual: {tip} · {n} execuções programadas", ru:"Tekushchiy tip: {tip} · {n} ispolneniy zaplanirovano", zh:"当前 tip: {tip} · {n} 项执行计划", ja:"現在の tip: {tip} · {n} 件予定", ko:"현재 tip: {tip} · {n} 건 예약됨", ar:"الـ tip الحالي: {tip} · {n} تنفيذات مجدولة", he:"Tip נוכחי: {tip} · {n} הפעלות מתוזמנות", ur:"موجودہ tip: {tip} · {n} execuciones شیڈولڈ", hi:"वर्तमान tip: {tip} · {n} निष्पादन निर्धारित" },
  "gov.preimages.title":             { en:"Preimages",                es:"Preimágenes",                  fr:"Préimages",                    de:"Preimages",                  it:"Preimage",                       pt:"Pré-imagens",                ru:"Preobrazy",                  zh:"预映像",          ja:"プリイメージ",          ko:"프리이미지",            ar:"الصور الأولية",         he:"פרי-אימג",          ur:"پری امیج",           hi:"प्रीइमेज" },
  "gov.preimages.filterPlaceholder": { en:"Filter by hash or depositor…", es:"Filtrar por hash o depositante...", fr:"Filtrer par hash ou déposant…", de:"Nach Hash oder Einzahler filtern…", it:"Filtra per hash o depositante…", pt:"Filtrar por hash ou depositante…", ru:"Filtr po heshu ili vnositelyu…", zh:"按哈希或存款人筛选…", ja:"ハッシュまたは預金者で絞り込み…", ko:"해시 또는 예치자로 필터…", ar:"تصفية حسب الهاش أو المودع…", he:"סנן לפי האש או מפקיד…", ur:"ہیش یا جمع کنندہ کے ذریعے فلٹر…", hi:"हैश या जमाकर्ता से फ़िल्टर…" },
  "gov.preimages.size":              { en:"Size",                     es:"Tamaño",                       fr:"Taille",                       de:"Größe",                      it:"Dimensione",                     pt:"Tamanho",                    ru:"Razmer",                     zh:"大小",            ja:"サイズ",                ko:"크기",                  ar:"الحجم",                  he:"גודל",              ur:"سائز",                hi:"आकार" },
  "gov.preimages.deposit":           { en:"Deposit",                  es:"Depósito",                     fr:"Dépôt",                        de:"Einzahlung",                 it:"Deposito",                       pt:"Depósito",                   ru:"Depozit",                    zh:"存款",            ja:"デポジット",            ko:"예치금",                ar:"إيداع",                  he:"פיקדון",            ur:"ڈپازٹ",               hi:"जमा" },
  "gov.preimages.published":         { en:"Published",                es:"Publicada",                    fr:"Publié",                       de:"Veröffentlicht",             it:"Pubblicata",                     pt:"Publicada",                  ru:"Opublikovano",               zh:"已发布",          ja:"公開済み",              ko:"게시됨",                ar:"نُشر",                   he:"פורסם",             ur:"شائع شدہ",            hi:"प्रकाशित" },
  "gov.preimages.loading":           { en:"Loading preimages…",       es:"Cargando preimágenes...",      fr:"Chargement des préimages…",    de:"Preimages werden geladen…",  it:"Caricamento preimage…",          pt:"Carregando pré-imagens…",    ru:"Zagruzka preobrazov…",       zh:"加载预映像…",     ja:"プリイメージを読み込み中…", ko:"프리이미지 로드 중…",   ar:"جارٍ تحميل الصور الأولية…", he:"טוען פרי-אימג…",  ur:"پری امیج لوڈ ہو رہے ہیں…", hi:"प्रीइमेज लोड हो रहे हैं…" },
  "gov.preimages.empty":             { en:"No preimages to show.",    es:"Sin preimágenes que mostrar.", fr:"Aucune préimage à afficher.",  de:"Keine Preimages zum Anzeigen.", it:"Nessuna preimage da mostrare.", pt:"Sem pré-imagens para mostrar.", ru:"Net preobrazov dlya pokaza.", zh:"无预映像可显示。", ja:"表示するプリイメージはありません。", ko:"표시할 프리이미지가 없습니다.", ar:"لا توجد صور أولية للعرض.", he:"אין פרי-אימג להציג.", ur:"کوئی پری امیج دکھانے کو نہیں۔", hi:"दिखाने के लिए कोई प्रीइमेज नहीं।" },
  "gov.preimages.history":           { en:"History",                  es:"Historial",                    fr:"Historique",                   de:"Verlauf",                    it:"Cronologia",                     pt:"Histórico",                  ru:"Istoriya",                   zh:"历史",            ja:"履歴",                  ko:"기록",                  ar:"السجل",                  he:"היסטוריה",          ur:"تاریخ",               hi:"इतिहास" },
  "gov.tab.elections": { en:"Elections",          es:"Elecciones",      fr:"Élections",       de:"Wahlen",         it:"Elezioni",       pt:"Eleições",       ru:"Vybory",         zh:"选举",          ja:"選挙",            ko:"선거",            ar:"انتخابات",       he:"בחירות",        ur:"انتخابات",       hi:"चुनाव" },
  "gov.tab.motions":   { en:"Motions",            es:"Mociones",        fr:"Motions",         de:"Anträge",        it:"Mozioni",        pt:"Moções",         ru:"Predlozheniya",  zh:"动议",          ja:"動議",            ko:"동의",            ar:"اقتراحات",       he:"הצעות",         ur:"تحریکیں",         hi:"प्रस्ताव" },
  "gov.tab.democracy": { en:"Democracy",          es:"Democracia",      fr:"Démocratie",      de:"Democracy",      it:"Democrazia",     pt:"Democracia",     ru:"Demokratiya",    zh:"民主",          ja:"民主制",          ko:"민주주의",        ar:"ديمقراطية",      he:"דמוקרטיה",      ur:"جمہوریت",        hi:"लोकतंत्र" },
  "gov.tab.technical": { en:"Technical Committee",es:"Comité Técnico",  fr:"Comité Technique",de:"Technical Committee", it:"Comitato Tecnico", pt:"Comitê Técnico", ru:"Tekhnicheskiy komitet", zh:"技术委员会", ja:"技術委員会",     ko:"기술 위원회",     ar:"اللجنة الفنية", he:"ועדה טכנית",    ur:"تکنیکی کمیٹی",   hi:"तकनीकी समिति" },
  'gov.col.member':     { en:'Member',    es:'Miembro',    fr:'Membre',     de:'Mitglied',   it:'Membro',    pt:'Membro',    ru:'Член',       zh:'成员',  ja:'メンバー',  ko:'구성원',  ar:'عضو',      he:'חבר',    ur:'رکن',     hi:'सदस्य' },
  'gov.col.candidate':  { en:'Candidate', es:'Candidato',  fr:'Candidat',   de:'Kandidat',   it:'Candidato', pt:'Candidato', ru:'Кандидат',   zh:'候选人', ja:'候補者',    ko:'후보',    ar:'مرشح',     he:'מועמד',  ur:'امیدوار',  hi:'उम्मीदवार' },
  'gov.col.motion':     { en:'Motion',    es:'Moción',     fr:'Motion',     de:'Antrag',     it:'Mozione',   pt:'Moção',     ru:'Предложение',zh:'动议',  ja:'動議',      ko:'동의',    ar:'اقتراح',   he:'הצעה',   ur:'تحریک',   hi:'प्रस्ताव' },
  'gov.col.proposal':   { en:'Proposal',  es:'Propuesta',  fr:'Proposition',de:'Vorschlag',  it:'Proposta',  pt:'Proposta',  ru:'Предложение',zh:'提案',  ja:'提案',      ko:'제안',    ar:'مقترح',    he:'הצעה',   ur:'تجویز',   hi:'प्रस्ताव' },
  'gov.col.votes':      { en:'Votes',     es:'Votos',      fr:'Votes',      de:'Stimmen',    it:'Voti',      pt:'Votos',     ru:'Голоса',     zh:'投票',  ja:'投票',      ko:'투표',    ar:'الأصوات',  he:'הצבעות', ur:'ووٹ',     hi:'वोट' },
  'gov.col.aye':        { en:'AYE',       es:'SÍ',         fr:'POUR',       de:'JA',         it:'SÌ',        pt:'SIM',       ru:'ЗА',         zh:'赞成',  ja:'賛成',      ko:'찬성',    ar:'نعم',      he:'בעד',    ur:'ہاں',     hi:'हाँ' },
  'gov.col.nay':        { en:'NAY',       es:'NO',         fr:'CONTRE',     de:'NEIN',       it:'NO',        pt:'NÃO',       ru:'ПРОТИВ',     zh:'反对',  ja:'反対',      ko:'반대',    ar:'لا',       he:'נגד',    ur:'نہیں',    hi:'नहीं' },
  'gov.col.deadline':   { en:'Deadline',  es:'Plazo',      fr:'Échéance',   de:'Frist',      it:'Scadenza',  pt:'Prazo',     ru:'Срок',       zh:'截止',  ja:'期限',      ko:'마감',    ar:'الموعد',   he:'יעד',    ur:'آخری تاریخ',hi:'समय सीमा' },
  'gov.col.proposer':   { en:'Proposer',  es:'Proponente', fr:'Proposant',  de:'Antragst.',  it:'Proponente',pt:'Proponente',ru:'Автор',      zh:'提议者',ja:'提案者',    ko:'제안자',  ar:'المقترح',  he:'מציע',   ur:'تجویز کنندہ',hi:'प्रस्तावक' },
  'gov.col.threshold':  { en:'Threshold', es:'Umbral',     fr:'Seuil',      de:'Schwelle',   it:'Soglia',    pt:'Limiar',    ru:'Порог',      zh:'阈值',  ja:'しきい値',  ko:'임계값',  ar:'العتبة',   he:'סף',     ur:'حد',      hi:'सीमा' },

  /* ===== Balance ===== */
  'balance.netWorth':   { en:'Net Worth',    es:'Patrimonio Neto', fr:'Valeur nette', de:'Nettowert',   it:'Patrimonio netto',pt:'Patrimônio líq.',ru:'Чистая стоимость',zh:'净值',ja:'純資産',  ko:'순자산',  ar:'صافي الثروة',he:'שווי נטו',  ur:'خالص مالیت',hi:'कुल संपत्ति' },
  'balance.allocation': { en:'Allocation',   es:'Asignación',     fr:'Allocation',   de:'Allokation',  it:'Allocazione',    pt:'Alocação',        ru:'Распределение',   zh:'资产分配',ja:'配分',    ko:'자산 배분',ar:'التخصيص',  he:'הקצאה',   ur:'تقسیم',   hi:'आवंटन' },
  'balance.change24':   { en:'24h Change',   es:'Cambio 24h',     fr:'Variation 24h',de:'24h-Änderung',it:'Variazione 24h', pt:'Variação 24h',    ru:'Изменение 24ч',   zh:'24h 变动',ja:'24h 変動', ko:'24h 변동',ar:'تغير 24س', he:'שינוי 24h', ur:'24h تبدیلی',hi:'24h बदलाव' },
  'balance.addToast':   { en:'Wallet address input coming soon', es:'Entrada de dirección de cartera próximamente', fr:'Entrée d\'adresse bientôt', de:'Wallet-Adresse bald verfügbar', it:'Input indirizzo in arrivo', pt:'Entrada de endereço em breve', ru:'Ввод адреса скоро', zh:'钱包地址输入即将推出', ja:'ウォレットアドレス入力は近日公開', ko:'지갑 주소 입력 곧 제공', ar:'إدخال عنوان المحفظة قريباً', he:'קלט כתובת ארנק בקרוב', ur:'والٹ ایڈریس جلد', hi:'वॉलेट पता जल्द' },

  /* ===== Intelligence ===== */
  'intel.kpi.insights': { en:'Insights · 24h', es:'Perspectivas · 24h', fr:'Analyses · 24h', de:'Einblicke · 24h', it:'Insight · 24h', pt:'Insights · 24h', ru:'Аналитика · 24ч', zh:'洞察 · 24h', ja:'洞察・24h', ko:'인사이트 · 24h', ar:'رؤى · 24س', he:'תובנות · 24h', ur:'بصیرتیں · 24h', hi:'अंतर्दृष्टि · 24h' },
  'intel.kpi.alerts':   { en:'Active Alerts',  es:'Alertas Activas',   fr:'Alertes actives',de:'Aktive Warnungen',it:'Avvisi attivi', pt:'Alertas ativos', ru:'Активные алерты', zh:'活跃警报', ja:'アクティブアラート', ko:'활성 알림', ar:'تنبيهات نشطة', he:'התרעות פעילות', ur:'ایکٹو الرٹس', hi:'सक्रिय अलर्ट' },
  'intel.kpi.watchlist':{ en:'Watchlist Hits', es:'Lista de Vigilancia',fr:'Watchlist',     de:'Watchlist-Treffer',it:'Hit watchlist', pt:'Watchlist',      ru:'Срабатывания',    zh:'关注命中', ja:'ウォッチリスト', ko:'워치리스트', ar:'قائمة المراقبة', he:'רשימת מעקב', ur:'واچ لسٹ', hi:'वॉचलिस्ट' },
  'intel.kpi.anomalies':{ en:'Open Anomalies', es:'Anomalías Abiertas',fr:'Anomalies ouv.',de:'Offene Anomalien',it:'Anomalie aperte',pt:'Anomalias abertas',ru:'Открытые аномалии',zh:'未解决异常',ja:'未解決異常',ko:'미해결 이상',ar:'حالات شاذة',he:'חריגות פתוחות',ur:'کھلی بے ضابطگیاں',hi:'खुली विसंगतियाँ' },

  /* ===== Intelligence · Network fees widget (Fees · live) ===== */
  'intel.fees.title':       { en:'Network fees · live',          es:'Tarifas de red · en vivo',       fr:'Frais réseau · en direct',       de:'Netzwerkgebühren · live',      it:'Commissioni rete · live',      pt:'Taxas de rede · ao vivo',       ru:'Комиссии сети · в реальном времени', zh:'网络费用 · 实时',   ja:'ネットワーク手数料 · ライブ', ko:'네트워크 수수료 · 실시간', ar:'رسوم الشبكة · مباشر', he:'עמלות רשת · בזמן אמת', ur:'نیٹ ورک فیس · لائیو', hi:'नेटवर्क शुल्क · लाइव' },
  'intel.fees.block':       { en:'block',                        es:'bloque',                          fr:'bloc',                           de:'Block',                        it:'blocco',                       pt:'bloco',                         ru:'блок',                              zh:'区块',             ja:'ブロック',                    ko:'블록',                    ar:'الكتلة',              he:'בלוק',                  ur:'بلاک',                    hi:'ब्लॉक' },
  'intel.fees.classTransfer':{en:'Transfer',                     es:'Transferencia',                   fr:'Transfert',                      de:'Überweisung',                  it:'Trasferimento',                pt:'Transferência',                 ru:'Перевод',                           zh:'转账',             ja:'転送',                        ko:'전송',                    ar:'تحويل',               he:'העברה',                 ur:'ٹرانسفر',                 hi:'ट्रांसफर' },
  'intel.fees.classSwap':   { en:'Swap',                         es:'Swap',                            fr:'Échange',                        de:'Tausch',                       it:'Swap',                         pt:'Swap',                          ru:'Обмен',                             zh:'兑换',             ja:'スワップ',                    ko:'스왑',                    ar:'مبادلة',              he:'החלפה',                 ur:'سویپ',                    hi:'स्वैप' },
  'intel.fees.classBridge': { en:'Bridge',                       es:'Bridge',                          fr:'Bridge',                         de:'Bridge',                       it:'Bridge',                       pt:'Bridge',                        ru:'Мост',                              zh:'跨链',             ja:'ブリッジ',                    ko:'브리지',                  ar:'جسر',                 he:'גשר',                   ur:'برج',                     hi:'ब्रिज' },
  'intel.fees.multGov':     { en:'Governance multiplier',        es:'Multiplicador gobernanza',       fr:'Multiplicateur gouvernance',     de:'Governance-Multiplikator',     it:'Moltiplicatore governance',    pt:'Multiplicador governança',      ru:'Множитель управления',              zh:'治理乘数',         ja:'ガバナンス乗数',              ko:'거버넌스 승수',           ar:'مضاعف الحوكمة',       he:'מכפיל ממשל',            ur:'گورننس ملٹی پلائر',       hi:'शासन गुणक' },
  'intel.fees.multGovSub':  { en:'xorFee.Multiplier · via referendum', es:'xorFee.Multiplier · vía referéndum', fr:'xorFee.Multiplier · par référendum', de:'xorFee.Multiplier · per Referendum', it:'xorFee.Multiplier · via referendum', pt:'xorFee.Multiplier · via referendo', ru:'xorFee.Multiplier · через референдум', zh:'xorFee.Multiplier · 通过公投', ja:'xorFee.Multiplier · 国民投票経由', ko:'xorFee.Multiplier · 국민투표 경유', ar:'xorFee.Multiplier · عبر الاستفتاء', he:'xorFee.Multiplier · באמצעות משאל', ur:'xorFee.Multiplier · ریفرنڈم کے ذریعے', hi:'xorFee.Multiplier · जनमत संग्रह के माध्यम से' },
  'intel.fees.multCong':    { en:'Congestion multiplier',        es:'Multiplicador congestión',       fr:'Multiplicateur congestion',      de:'Stau-Multiplikator',           it:'Moltiplicatore congestione',   pt:'Multiplicador congestão',       ru:'Множитель загрузки',                zh:'拥堵乘数',         ja:'混雑乗数',                    ko:'혼잡 승수',               ar:'مضاعف الازدحام',      he:'מכפיל גודש',            ur:'کنجیشن ملٹی پلائر',       hi:'भीड़ गुणक' },
  'intel.fees.multCongSub': { en:'auto-adjusts each block',      es:'ajuste dinámico cada bloque',    fr:'s\'ajuste à chaque bloc',        de:'pro Block angepasst',          it:'si adatta ad ogni blocco',     pt:'ajusta-se a cada bloco',        ru:'подстраивается каждый блок',        zh:'每区块自动调整',   ja:'ブロック毎に自動調整',        ko:'블록마다 자동 조정',      ar:'يتكيف مع كل كتلة',    he:'מתעדכן בכל בלוק',       ur:'ہر بلاک میں خود کار',     hi:'हर ब्लॉक में स्वत: समायोजन' },
  'intel.fees.accumVal':    { en:'Queued → VAL buy-burn',        es:'Acum. → buy-burn VAL',           fr:'File → buy-burn VAL',            de:'Warteschl. → VAL buy-burn',    it:'In coda → buy-burn VAL',       pt:'Fila → buy-burn VAL',           ru:'Очередь → buy-burn VAL',            zh:'待处理 → VAL 回购销毁', ja:'キュー → VAL 買い焼却',       ko:'대기 → VAL 매입소각',     ar:'قيد الانتظار → حرق VAL',he:'בתור → רכישה ושריפה VAL',ur:'قطار → VAL buy-burn',     hi:'कतार → VAL buy-burn' },
  'intel.fees.accumPswap':  { en:'Queued → KUSD buy-burn',       es:'Acum. → buy-burn KUSD',          fr:'File → buy-burn KUSD',           de:'Warteschl. → KUSD buy-burn',   it:'In coda → buy-burn KUSD',      pt:'Fila → buy-burn KUSD',          ru:'Очередь → buy-burn KUSD',           zh:'待处理 → KUSD 回购销毁', ja:'キュー → KUSD 買い焼却',      ko:'대기 → KUSD 매입소각',    ar:'قيد الانتظار → حرق KUSD', he:'בתור → רכישה ושריפה KUSD', ur:'قطار → KUSD buy-burn',  hi:'कतार → KUSD buy-burn' },
  'intel.fees.remintEvery': { en:'Remint every',                 es:'Remint cada',                    fr:'Remint tous les',                de:'Remint alle',                  it:'Remint ogni',                  pt:'Remint a cada',                 ru:'Ремят каждые',                      zh:'重铸每',           ja:'リミント毎',                  ko:'리민트 주기',             ar:'إعادة سك كل',         he:'Remint כל',             ur:'Remint ہر',               hi:'Remint प्रत्येक' },
  'intel.fees.blocks':      { en:'blocks',                       es:'bloques',                        fr:'blocs',                          de:'Blöcke',                       it:'blocchi',                      pt:'blocos',                        ru:'блоков',                            zh:'区块',             ja:'ブロック',                    ko:'블록',                    ar:'كتل',                 he:'בלוקים',                ur:'بلاکس',                   hi:'ब्लॉक' },
  'intel.fees.accumEmpty':  { en:'Zero means the last remint just flushed (or no fees accumulated this cycle). On a low-traffic window the buckets sit at 0 most of the time and refill in the next ~10 min.',
                              es:'El cero indica que el último remint se acaba de ejecutar (o que no hubo fees este ciclo). En una red con poca actividad los contadores permanecen en 0 la mayor parte del tiempo y se vuelven a llenar en los próximos ~10 min.',
                              fr:'Zéro signifie que le dernier remint vient de se produire (ou aucune fee ce cycle). Sur un réseau peu actif les compteurs restent à 0 la plupart du temps et se remplissent dans les ~10 prochaines minutes.',
                              de:'Null bedeutet, dass der letzte Remint gerade durchgelaufen ist (oder keine Gebühren in diesem Zyklus). Bei geringem Verkehr bleiben die Zähler meistens bei 0 und füllen sich in den nächsten ~10 Min. wieder.',
                              it:'Zero significa che l\'ultimo remint è appena stato eseguito (o nessuna fee in questo ciclo). In una rete poco attiva i contatori restano a 0 la maggior parte del tempo e si riempiono nei prossimi ~10 min.',
                              pt:'Zero significa que o último remint acabou de ser executado (ou não houve taxas neste ciclo). Em uma rede pouco ativa os contadores ficam em 0 a maior parte do tempo e enchem nos próximos ~10 min.',
                              ru:'Ноль означает, что последний ремят только что прошёл (или в этом цикле не было комиссий). В спокойные периоды счётчики большую часть времени на 0 и заполняются в следующие ~10 минут.',
                              zh:'零表示刚刚完成了上一次重铸（或本周期没有费用）。在低流量窗口中，计数器大部分时间保持为 0，并在接下来的约 10 分钟内重新填充。',
                              ja:'ゼロは直前のリミントが実行されたばかり（またはこのサイクルで手数料がなかった）ことを意味します。低トラフィック時はほとんどの時間 0 で、次の約 10 分で再び蓄積されます。',
                              ko:'0은 마지막 리민트가 방금 실행되었음을 의미합니다(또는 이번 주기에 수수료가 없었음). 트래픽이 적을 때는 대부분 0이고 다음 ~10분 동안 다시 채워집니다.',
                              ar:'يعني الصفر أن آخر إعادة سك قد تمّت للتو (أو لم تتراكم رسوم في هذه الدورة). في أوقات الحركة المنخفضة تبقى العدادات على 0 معظم الوقت وتُعاد تعبئتها في الـ ~10 دقائق التالية.',
                              he:'אפס פירושו שה-remint האחרון זה עתה בוצע (או שלא נצברו עמלות במחזור הזה). ברשת שקטה המונים יישארו על 0 רוב הזמן ויתמלאו מחדש ב-10 הדקות הבאות.',
                              ur:'صفر کا مطلب ہے کہ آخری ریمینٹ ابھی مکمل ہوا ہے (یا اس دور میں کوئی فیس جمع نہیں ہوئی)۔ کم ٹریفک کے دوران کاؤنٹرز زیادہ تر وقت 0 پر رہتے ہیں اور اگلے ~10 منٹ میں دوبارہ بھر جاتے ہیں۔',
                              hi:'शून्य का अर्थ है कि पिछला रीमिंट अभी-अभी चला (या इस चक्र में कोई शुल्क जमा नहीं हुआ)। कम ट्रैफ़िक की स्थिति में काउंटर अधिकतर समय 0 पर रहते हैं और अगले ~10 मिनट में फिर से भर जाते हैं।' },
  'intel.fees.weekly':      { en:'Fee volume · 7d vs prev',      es:'Volumen fees · 7d vs ant.',      fr:'Volume frais · 7j vs préc.',     de:'Gebührenvolumen · 7T vs. vor.', it:'Volume fee · 7g vs prec.',    pt:'Volume taxas · 7d vs ant.',     ru:'Объём комиссий · 7д vs пред.',     zh:'费用量 · 7天 vs 上周', ja:'手数料 · 7日 vs 前週',       ko:'수수료 · 7일 vs 이전',    ar:'حجم الرسوم · 7 أيام مقابل',he:'נפח עמלות · 7י מול קודם',ur:'فیس حجم · 7 دن vs پچھلا', hi:'शुल्क · 7दि vs पिछले' },
  'intel.fees.nextRemint':  { en:'Next buy-burn',               es:'Próximo buy-burn',                fr:'Prochain buy-burn',              de:'Nächster Buy-Burn',             it:'Prossimo buy-burn',            pt:'Próximo buy-burn',              ru:'Следующий buy-burn',               zh:'下次回购销毁',      ja:'次のバイバック焼却',          ko:'다음 매입소각',           ar:'إعادة الشراء والحرق التالية', he:'רכישה ושריפה הבאה', ur:'اگلا buy-burn',           hi:'अगला buy-burn' },
  'intel.fees.burnSplit':   { en:'Burn split · per 100 XOR fee paid', es:'Reparto de burn · por 100 XOR de fee', fr:'Répartition burn · par 100 XOR de frais', de:'Burn-Aufteilung · pro 100 XOR Gebühr', it:'Suddivisione burn · per 100 XOR di fee', pt:'Distribuição burn · por 100 XOR de taxa', ru:'Распределение burn · на 100 XOR комиссии', zh:'销毁分配 · 每100 XOR 手续费', ja:'バーン配分 · 100 XOR 手数料あたり', ko:'소각 분배 · 수수료 100 XOR 당', ar:'توزيع الحرق · لكل 100 XOR رسوم', he:'חלוקת שריפה · לכל 100 XOR עמלה', ur:'برن تقسیم · ہر 100 XOR فیس', hi:'बर्न वितरण · प्रति 100 XOR शुल्क' },
  'intel.fees.burnDirect':  { en:'directly burned',             es:'quemado directamente',            fr:'brûlé directement',              de:'direkt verbrannt',              it:'bruciato direttamente',        pt:'queimado diretamente',          ru:'сжигается напрямую',                zh:'直接销毁',          ja:'直接焼却',                    ko:'직접 소각',               ar:'يحرق مباشرة',         he:'נשרף ישירות',          ur:'براہ راست جلایا',         hi:'सीधे जलाया गया' },
  'intel.fees.notBurned':   { en:'not burned · paid to referrer', es:'no se quema · pago al referente', fr:'non brûlé · payé au parrain',    de:'nicht verbrannt · an Werber',   it:'non bruciato · al referrer',   pt:'não queimado · ao referenciador', ru:'не сжигается · реферер',         zh:'不销毁 · 支付给推荐人', ja:'焼却なし · リファラーへ',     ko:'소각 안됨 · 추천인에게',   ar:'لا يحرق · للمحيل',      he:'לא נשרף · למפנה',       ur:'نہیں جلایا · ریفرل کو',  hi:'नहीं जलाया · रेफरर को' },
  'intel.fees.shareCol':    { en:'Share',                       es:'Cuota',                           fr:'Part',                           de:'Anteil',                        it:'Quota',                        pt:'Quota',                         ru:'Доля',                              zh:'占比',              ja:'割合',                        ko:'비중',                    ar:'الحصة',               he:'חלק',                  ur:'حصہ',                     hi:'हिस्सा' },
  'intel.fees.xorCol':      { en:'XOR cycle',                   es:'XOR ciclo',                       fr:'XOR cycle',                      de:'XOR Zyklus',                    it:'XOR ciclo',                    pt:'XOR ciclo',                     ru:'XOR цикл',                          zh:'XOR周期',           ja:'XORサイクル',                ko:'XOR 주기',                ar:'دورة XOR',           he:'מחזור XOR',            ur:'XOR سائیکل',              hi:'XOR चक्र' },
  'intel.fees.alreadyBurned':{ en:'already burned',              es:'ya quemado',                      fr:'déjà brûlé',                     de:'bereits verbrannt',             it:'già bruciato',                 pt:'já queimado',                   ru:'уже сожжено',                       zh:'已销毁',            ja:'焼却済み',                   ko:'이미 소각됨',             ar:'تم الحرق',           he:'כבר נשרף',             ur:'پہلے جلا دیا',            hi:'पहले से जला' },
  'intel.fees.queued':      { en:'queued',                      es:'en cola',                         fr:'en file',                        de:'in Warteschl.',                 it:'in coda',                      pt:'na fila',                       ru:'в очереди',                         zh:'排队中',            ja:'キュー中',                   ko:'대기 중',                 ar:'في الطابور',         he:'בתור',                  ur:'قطار میں',                hi:'कतार में' },
  'intel.fees.cycleTotal':  { en:'Cycle total (extrapolated from VAL bucket)', es:'Total ciclo (extrapolado del bucket VAL)', fr:'Total cycle (extrapolé du bucket VAL)', de:'Zyklus-Total (extrap. aus VAL-Bucket)', it:'Totale ciclo (estrapolato dal bucket VAL)', pt:'Total ciclo (extrapolado do bucket VAL)', ru:'Итог цикла (экстрап. из VAL-бакета)', zh:'周期总计（从VAL桶推算）', ja:'サイクル合計（VALバケットから推定）', ko:'주기 합계 (VAL 버킷에서 추정)', ar:'إجمالي الدورة (مُستقرأ من دلو VAL)', he:'סה"כ מחזור (משוער מדלי VAL)', ur:'سائیکل کا کل (VAL بکیٹ سے اخذ)', hi:'चक्र कुल (VAL बकेट से अनुमान)' },
  'intel.fees.burnFromFees':{ en:'Burn from network fees',         es:'Quema por fees de red',           fr:'Burn par frais réseau',          de:'Burn aus Netzgebühren',         it:'Burn da fee di rete',          pt:'Burn das taxas de rede',        ru:'Сжигание из сетевых комиссий',     zh:'网络手续费销毁',     ja:'ネットワーク手数料の焼却',    ko:'네트워크 수수료 소각',    ar:'حرق من رسوم الشبكة',  he:'שריפה מעמלות רשת',     ur:'نیٹ ورک فیس سے برن',      hi:'नेटवर्क शुल्क से बर्न' },
  'intel.fees.tfLive':      { en:'Live',                          es:'En vivo',                         fr:'En direct',                      de:'Live',                          it:'In diretta',                   pt:'Ao vivo',                       ru:'В реальном времени',                zh:'实时',              ja:'ライブ',                      ko:'실시간',                  ar:'مباشر',               he:'חי',                    ur:'لائیو',                   hi:'लाइव' },
  'intel.fees.tfAll':       { en:'All',                           es:'Todo',                            fr:'Tout',                           de:'Alle',                          it:'Tutto',                        pt:'Tudo',                          ru:'Все',                              zh:'全部',              ja:'全期間',                     ko:'전체',                    ar:'الكل',                he:'הכל',                  ur:'سب',                      hi:'सभी' },
  'intel.fees.burnedCol':   { en:'Burned',                        es:'Quemado',                         fr:'Brûlé',                          de:'Verbrannt',                     it:'Bruciato',                     pt:'Queimado',                      ru:'Сожжено',                          zh:'已销毁',           ja:'焼却済み',                   ko:'소각됨',                  ar:'محروق',               he:'נשרף',                 ur:'جلایا',                  hi:'जलाया' },
  'intel.fees.sourceLive':  { en:'Cycle in flight · estimated from on-chain accumulators', es:'Ciclo en curso · estimado desde acumuladores on-chain', fr:'Cycle en cours · estimé depuis les accumulateurs on-chain', de:'Zyklus läuft · geschätzt aus On-Chain-Akkumulatoren', it:'Ciclo in corso · stimato dagli accumulatori on-chain', pt:'Ciclo em curso · estimado dos acumuladores on-chain', ru:'Цикл в процессе · оценка по on-chain аккумуляторам', zh:'周期进行中 · 根据链上累加器估算', ja:'サイクル進行中 · オンチェーン累積から推定', ko:'주기 진행 중 · 온체인 누적값에서 추정', ar:'الدورة جارية · مُقدّر من المراكم على السلسلة', he:'מחזור בתהליך · משוער ממצברים בשרשרת', ur:'سائیکل جاری · آن چین جمع کنندہ سے تخمینہ', hi:'चक्र चालू · ऑन-चेन संचयक से अनुमान' },
  'intel.fees.totalPaid':   { en:'total fees paid',               es:'fees totales pagadas',            fr:'total frais payés',              de:'Gesamtgebühren gezahlt',        it:'fee totali pagate',            pt:'total de taxas pagas',          ru:'всего комиссий уплачено',          zh:'总支付手续费',     ja:'合計支払手数料',             ko:'총 수수료',               ar:'إجمالي الرسوم المدفوعة',he:'סה"כ עמלות שולמו',     ur:'کل ادا کردہ فیس',         hi:'कुल भुगतान शुल्क' },
  'intel.fees.noFees':      { en:'no fees recorded',              es:'sin fees registradas',            fr:'aucun frais enregistré',         de:'keine Gebühren erfasst',        it:'nessuna fee registrata',       pt:'sem taxas registradas',         ru:'нет зарегистрированных комиссий',  zh:'未记录手续费',     ja:'手数料記録なし',             ko:'기록된 수수료 없음',      ar:'لا توجد رسوم مسجلة',  he:'לא נרשמו עמלות',       ur:'کوئی فیس درج نہیں',      hi:'कोई शुल्क दर्ज नहीं' },
  'intel.fees.noData':      { en:'No data for this timeframe.',   es:'Sin datos para este periodo.',    fr:'Aucune donnée pour cette période.', de:'Keine Daten für diesen Zeitraum.', it:'Nessun dato per questo periodo.', pt:'Sem dados para este período.', ru:'Нет данных за этот период.',     zh:'此时段无数据。',    ja:'この期間のデータはありません。', ko:'이 기간에 대한 데이터가 없습니다.', ar:'لا توجد بيانات لهذه الفترة.', he:'אין נתונים לתקופה זו.', ur:'اس مدت کا کوئی ڈیٹا نہیں۔', hi:'इस अवधि का कोई डेटा नहीं।' },
  'intel.fees.withRef':     { en:'with referrer',                 es:'con referente',                   fr:'avec parrain',                   de:'mit Werber',                    it:'con referrer',                 pt:'com referenciador',             ru:'с реферером',                      zh:'有推荐人',         ja:'リファラーあり',             ko:'추천인 있음',            ar:'مع محيل',             he:'עם מפנה',              ur:'ریفرر کے ساتھ',          hi:'रेफरर के साथ' },
  'intel.fees.burnedTotal': { en:'burned',                        es:'quemado',                         fr:'brûlé',                          de:'verbrannt',                     it:'bruciato',                     pt:'queimado',                      ru:'сожжено',                          zh:'已销毁',           ja:'焼却',                       ko:'소각',                    ar:'محروق',               he:'נשרף',                 ur:'جلایا',                  hi:'जलाया' },
  "intel.fees.refLiveBucket": { en:"reserved 11.76% (split unknown until remint)", es:"reservado 11.76% (division desconocida hasta el remint)", fr:"reserve 11,76% (repartition inconnue jusqu'au remint)", de:"reserviert 11,76% (Aufteilung bis zum Remint unbekannt)", it:"riservato 11,76% (suddivisione ignota fino al remint)", pt:"reservado 11.76% (divisao desconhecida ate o remint)", ru:"zarezervirovano 11.76% (razdelenie neizvestno do remint)", zh:"保留 11.76%（直到 remint 才知道分配）", ja:"予約 11.76%（remintまで内訳不明）", ko:"예약 11.76% (remint까지 분할 미상)", ar:"محجوز 11.76% (التوزيع غير معروف حتى remint)", he:"שמור 11.76% (חלוקה לא ידועה עד remint)", ur:"محفوظ 11.76% (remint تک تقسیم نامعلوم)", hi:"आरक्षित 11.76% (remint तक विभाजन अज्ञात)" },
  "intel.fees.refSplit":      { en:"paid to referrers · redirected to KUSD when no-referrer", es:"pagado a referentes · redirigido a KUSD si no hay referente", fr:"paye aux parrains · redirige vers KUSD sans parrain", de:"an Werber gezahlt · zu KUSD umgeleitet wenn kein Werber", it:"pagato ai referrer · reindirizzato a KUSD senza referrer", pt:"pago aos referenciadores · redirecionado para KUSD sem referenciador", ru:"vyplacheno referalam · perenapravleno v KUSD bez referala", zh:"支付给推荐人 · 无推荐人时转入KUSD", ja:"リファラーへ支払 · リファラー無しでKUSDへ", ko:"추천인 지급 · 없으면 KUSD로 전환", ar:"دفع للمحيلين · يحول إلى KUSD بدون محيل", he:"שולם למפנים · הופנה ל-KUSD ללא מפנה", ur:"ریفررز کو ادا · ریفرر نہ ہونے پر KUSD", hi:"रेफरर को भुगतान · नहीं तो KUSD में" },
  "intel.fees.refPaid":       { en:"paid to referrer",          es:"pagado al referente",        fr:"paye au parrain",            de:"an Werber gezahlt",        it:"pagato al referrer",       pt:"pago ao referenciador",     ru:"vyplacheno referalu",        zh:"支付给推荐人",   ja:"リファラーへ支払",         ko:"추천인에게 지급",      ar:"دفع للمحيل",          he:"שולם למפנה",           ur:"ریفرر کو ادا",         hi:"रेफरर को भुगतान" },
  "intel.fees.refRedirected": { en:"redirected to KUSD bucket", es:"redirigido al bucket KUSD", fr:"redirige vers KUSD",         de:"zu KUSD umgeleitet",       it:"reindirizzato a KUSD",     pt:"redirecionado para KUSD",   ru:"perenapravleno v KUSD",      zh:"转入KUSD池",     ja:"KUSDバケットへ",           ko:"KUSD 버킷으로",        ar:"حول إلى KUSD",        he:"הופנה ל-KUSD",          ur:"KUSD میں منتقل",        hi:"KUSD में भेजा" },
  "intel.fees.willBurn":      { en:"will be burned",            es:"se quemara",                 fr:"sera brule",                 de:"wird verbrannt",           it:"sara bruciato",            pt:"sera queimado",             ru:"budet sozhzheno",            zh:"将被销毁",       ja:"焼却される",                ko:"소각될 예정",          ar:"سيحرق",                he:"יישרף",                ur:"جلایا جائے گا",          hi:"जलाया जाएगा" },
  'intel.fees.noReferrerNote': { en:'If there is no referrer, the 11.76% is redirected to the KUSD bucket → KUSD burn becomes 40.58%.',
                              es:'Si no hay referrer, el 11,76% se redirige al bucket de KUSD → KUSD pasa a quemarse al 40,58%.',
                              fr:'En l\'absence de parrain, les 11,76% sont redirigés vers le bucket KUSD → le burn de KUSD passe à 40,58%.',
                              de:'Wenn kein Werber vorhanden ist, werden die 11,76% in den KUSD-Bucket umgeleitet → KUSD-Burn steigt auf 40,58%.',
                              it:'Se non c\'è referrer, l\'11,76% viene reindirizzato al bucket KUSD → il burn di KUSD diventa 40,58%.',
                              pt:'Se não houver referenciador, os 11,76% são redirecionados para o bucket KUSD → KUSD passa a queimar 40,58%.',
                              ru:'Если реферера нет, 11,76% перенаправляются в KUSD-бакет → сжигание KUSD становится 40,58%.',
                              zh:'如果没有推荐人，11.76%会重定向到KUSD桶 → KUSD销毁变为40.58%。',
                              ja:'リファラーがいない場合、11.76%は KUSD バケットへリダイレクト → KUSD の焼却が 40.58% に。',
                              ko:'추천인이 없으면 11.76%가 KUSD 버킷으로 리디렉션 → KUSD 소각이 40.58%가 됩니다.',
                              ar:'في حال عدم وجود محيل، يُعاد توجيه 11.76% إلى دلو KUSD → يصبح حرق KUSD 40.58%.',
                              he:'אם אין מפנה, ה-11.76% מועברים לדלי KUSD → שריפת KUSD הופכת ל-40.58%.',
                              ur:'اگر کوئی ریفرر نہیں ہے تو 11.76% KUSD بکیٹ پر بھیجا جاتا ہے → KUSD برن 40.58% ہو جاتا ہے۔',
                              hi:'यदि कोई रेफरर नहीं है, तो 11.76% KUSD बकेट में पुनर्निर्देशित होता है → KUSD बर्न 40.58% हो जाता है।' },

  /* ===== Intelligence · Bridge large-tx widget ===== */
  'intel.bridges.title':    { en:'Bridge moves · ≥$3K',          es:'Movimientos bridge · ≥$3K',      fr:'Mouvements bridge · ≥3K$',       de:'Bridge-Bewegungen · ≥3K$',     it:'Movimenti bridge · ≥3K$',      pt:'Movimentos bridge · ≥$3K',      ru:'Переводы моста · ≥$3K',            zh:'跨链转账 · ≥$3K',   ja:'ブリッジ移動 · ≥$3K',         ko:'브리지 이동 · ≥$3K',      ar:'تحويلات الجسر · ≥$3K',he:'תנועות גשר · ≥$3K',      ur:'برج موومنٹس · ≥$3K',      hi:'ब्रिज मूव्स · ≥$3K' },
  'intel.bridges.tf24h':    { en:'24h',                          es:'24h',                            fr:'24h',                            de:'24h',                          it:'24h',                          pt:'24h',                           ru:'24ч',                               zh:'24小时',           ja:'24時間',                      ko:'24시간',                  ar:'24س',                 he:'24ש',                   ur:'24گ',                     hi:'24घं' },
  'intel.bridges.tf7d':     { en:'7d',                           es:'7d',                             fr:'7j',                             de:'7T',                           it:'7g',                           pt:'7d',                            ru:'7д',                                zh:'7天',              ja:'7日',                         ko:'7일',                     ar:'7أ',                  he:'7י',                    ur:'7د',                      hi:'7दि' },
  'intel.bridges.tf30d':    { en:'30d',                          es:'30d',                            fr:'30j',                            de:'30T',                          it:'30g',                          pt:'30d',                           ru:'30д',                               zh:'30天',             ja:'30日',                        ko:'30일',                    ar:'30أ',                 he:'30י',                   ur:'30د',                     hi:'30दि' },
  'intel.bridges.tf1y':     { en:'1y',                           es:'1a',                             fr:'1a',                             de:'1J',                           it:'1a',                           pt:'1a',                            ru:'1г',                                zh:'1年',              ja:'1年',                         ko:'1년',                     ar:'1س',                  he:'1ש',                    ur:'1سال',                    hi:'1सा' },
  'intel.bridges.none':     { en:'No bridge moves ≥ $3K in the selected window.',
                              es:'Sin movimientos bridge ≥ $3K en la ventana seleccionada.',
                              fr:'Aucun mouvement bridge ≥ 3K$ dans la fenêtre sélectionnée.',
                              de:'Keine Bridge-Bewegungen ≥ 3K$ im ausgewählten Fenster.',
                              it:'Nessun movimento bridge ≥ 3K$ nella finestra selezionata.',
                              pt:'Sem movimentos bridge ≥ $3K na janela selecionada.',
                              ru:'Нет переводов моста ≥ $3K в выбранном окне.',
                              zh:'所选时间范围内无 ≥ $3K 的跨链转账。',
                              ja:'選択した期間に $3K 以上のブリッジ移動はありません。',
                              ko:'선택한 기간 동안 $3K 이상의 브리지 이동이 없습니다.',
                              ar:'لا توجد تحويلات جسر ≥ $3K في النطاق المحدد.',
                              he:'אין תנועות גשר ≥ 3K$ בחלון שנבחר.',
                              ur:'منتخب ونڈو میں $3K سے زیادہ کی کوئی برج موومنٹ نہیں۔',
                              hi:'चयनित अवधि में $3K से अधिक कोई ब्रिज मूव नहीं है।' },
  'intel.bridges.more':     { en:'+',         es:'+',        fr:'+',        de:'+',        it:'+',        pt:'+',        ru:'+',        zh:'+',       ja:'+',       ko:'+',       ar:'+',         he:'+',        ur:'+',       hi:'+' },
  'intel.bridges.moreSfx':  { en:'more',      es:'más',      fr:'de plus',  de:'weitere',  it:'altro',    pt:'mais',     ru:'ещё',      zh:'更多',    ja:'件以上',  ko:'개 더',   ar:'أكثر',      he:'נוספים',   ur:'مزید',    hi:'और' },
  'intel.bridges.openDrill':{ en:'Click to open details', es:'Click para ver detalles', fr:'Cliquer pour voir les détails', de:'Für Details klicken', it:'Clic per i dettagli', pt:'Clique para ver detalhes', ru:'Нажмите для деталей', zh:'点击查看详情', ja:'クリックして詳細', ko:'클릭하여 상세', ar:'انقر لعرض التفاصيل', he:'לחץ לפרטים', ur:'تفصیل دیکھنے کے لیے کلک کریں', hi:'विवरण के लिए क्लिक करें' },

  /* ===== Intelligence · Bridge net-flow bar widget ===== */
  'intel.bflow.title':  { en:'Bridge net flow',  es:'Flujo neto bridge',   fr:'Flux net bridge',     de:'Bridge-Nettofluss',   it:'Flusso netto bridge',   pt:'Fluxo líquido bridge',  ru:'Чистый поток моста',   zh:'跨链净流量',    ja:'ブリッジ純流量',     ko:'브리지 순흐름',      ar:'صافي تدفق الجسر',  he:'זרימה נטו של גשר',   ur:'برج نیٹ فلو',      hi:'ब्रिज शुद्ध प्रवाह' },
  'intel.bflow.tfAll':  { en:'All',              es:'Todo',                fr:'Tout',                de:'Alle',                it:'Tutto',                 pt:'Tudo',                  ru:'Все',                  zh:'全部',          ja:'全期間',             ko:'전체',               ar:'الكل',             he:'הכל',                ur:'سب',               hi:'सभी' },
  'intel.bflow.noFlow': { en:'No bridge flow in this window.',
                          es:'Sin flujo bridge en esta ventana.',
                          fr:'Aucun flux bridge dans cette fenêtre.',
                          de:'Kein Bridge-Fluss in diesem Fenster.',
                          it:'Nessun flusso bridge in questa finestra.',
                          pt:'Sem fluxo bridge nesta janela.',
                          ru:'Нет потока моста в этом окне.',
                          zh:'此时间窗口内无跨链流量。',
                          ja:'この期間にブリッジの流れはありません。',
                          ko:'이 기간에 브리지 흐름이 없습니다.',
                          ar:'لا يوجد تدفق جسر في هذه النافذة.',
                          he:'אין זרימת גשר בחלון זה.',
                          ur:'اس وقفے میں کوئی برج فلو نہیں۔',
                          hi:'इस अवधि में कोई ब्रिज प्रवाह नहीं।' },
  'intel.bflow.out':    { en:'Out',              es:'Salida',              fr:'Sortie',              de:'Raus',                it:'Uscita',                pt:'Saída',                 ru:'Выход',                zh:'流出',          ja:'流出',               ko:'유출',               ar:'خروج',             he:'יציאה',              ur:'اخراج',            hi:'बाहर' },
  'intel.bflow.in':     { en:'In',               es:'Entrada',             fr:'Entrée',              de:'Rein',                it:'Entrata',               pt:'Entrada',               ru:'Вход',                 zh:'流入',          ja:'流入',               ko:'유입',               ar:'دخول',             he:'כניסה',              ur:'داخل',             hi:'अंदर' },
  'intel.bflow.net':    { en:'Net',              es:'Neto',                fr:'Net',                 de:'Netto',               it:'Netto',                 pt:'Líquido',               ru:'Нетто',                zh:'净',            ja:'ネット',             ko:'순',                 ar:'صافي',             he:'נטו',                ur:'خالص',             hi:'शुद्ध' },
  'intel.bflow.topIn':  { en:'Top inflow',       es:'Mayor entrada',       fr:'Plus grande entrée',  de:'Größter Zufluss',     it:'Max entrata',           pt:'Maior entrada',         ru:'Наибольший приток',    zh:'最大流入',      ja:'最大流入',           ko:'최대 유입',          ar:'أكبر تدفق داخل',   he:'כניסה מובילה',       ur:'سب سے بڑا ان فلو', hi:'शीर्ष प्रवाह' },
  'intel.bflow.topOut': { en:'Top outflow',      es:'Mayor salida',        fr:'Plus grande sortie',  de:'Größter Abfluss',     it:'Max uscita',            pt:'Maior saída',           ru:'Наибольший отток',     zh:'最大流出',      ja:'最大流出',           ko:'최대 유출',          ar:'أكبر تدفق خارج',   he:'יציאה מובילה',       ur:'سب سے بڑا آؤٹ فلو',hi:'शीर्ष बहिर्वाह' },
  'intel.bflow.txs':    { en:'bridge tx',        es:'tx bridge',           fr:'tx bridge',           de:'Bridge-Tx',           it:'tx bridge',             pt:'tx bridge',             ru:'транз. моста',         zh:'跨链交易',      ja:'ブリッジtx',         ko:'브리지 tx',          ar:'معاملة جسر',       he:'עסקות גשר',          ur:'برج tx',           hi:'ब्रिज tx' },

  /* ===== Prediction Markets (polkamarkt) ===== */
  'predict.title':          { en:'Polkamarkt', es:'Polkamarkt', fr:'Polkamarkt', de:'Polkamarkt', it:'Polkamarkt', pt:'Polkamarkt', ru:'Polkamarkt', zh:'Polkamarkt', ja:'Polkamarkt', ko:'Polkamarkt', ar:'Polkamarkt', he:'Polkamarkt', ur:'Polkamarkt', hi:'Polkamarkt' },
  'predict.sub':            { en:'Prediction markets · SORA', es:'Mercados de predicción · SORA', fr:'Marchés de prédiction · SORA', de:'Vorhersagemärkte · SORA', it:'Mercati di predizione · SORA', pt:'Mercados de previsão · SORA', ru:'Рынки прогнозов · SORA', zh:'预测市场 · SORA', ja:'予測市場 · SORA', ko:'예측 시장 · SORA', ar:'أسواق التنبؤ · SORA', he:'שוקי תחזיות · SORA', ur:'پیش گوئی مارکیٹس · SORA', hi:'पूर्वानुमान बाजार · SORA' },
  'predict.kpi.total':      { en:'Markets',           es:'Mercados',              fr:'Marchés',             de:'Märkte',                it:'Mercati',              pt:'Mercados',               ru:'Рынки',               zh:'市场',           ja:'市場',               ko:'시장',                ar:'الأسواق',             he:'שווקים',             ur:'مارکیٹس',           hi:'बाज़ार' },
  'predict.kpi.active':     { en:'Active',            es:'Activos',               fr:'Actifs',              de:'Aktiv',                 it:'Attivi',               pt:'Ativos',                 ru:'Активные',            zh:'活跃',           ja:'アクティブ',         ko:'활성',                ar:'نشط',                 he:'פעילים',             ur:'ایکٹو',             hi:'सक्रिय' },
  'predict.kpi.volume':     { en:'Trading vol.',      es:'Volumen',               fr:'Volume',              de:'Handelsvol.',           it:'Volume',               pt:'Volume',                 ru:'Объём торгов',        zh:'交易量',         ja:'取引量',             ko:'거래량',              ar:'حجم التداول',        he:'נפח מסחר',           ur:'ٹریڈنگ حجم',        hi:'ट्रेडिंग वॉल्यूम' },
  'predict.kpi.opengov':    { en:'OpenGov-linked',    es:'Ligados a OpenGov',     fr:'Liés à OpenGov',      de:'OpenGov-verknüpft',     it:'Legati a OpenGov',     pt:'Ligados ao OpenGov',     ru:'Связан с OpenGov',    zh:'OpenGov 关联',   ja:'OpenGov連携',        ko:'OpenGov 연결',        ar:'مرتبطة بـ OpenGov',   he:'מקושרים ל-OpenGov',  ur:'OpenGov سے منسلک', hi:'OpenGov से जुड़े' },
  'predict.tab.markets':    { en:'All Markets',       es:'Todos los Mercados',    fr:'Tous les Marchés',    de:'Alle Märkte',           it:'Tutti i Mercati',      pt:'Todos os Mercados',      ru:'Все рынки',           zh:'所有市场',       ja:'全市場',             ko:'전체 시장',           ar:'جميع الأسواق',       he:'כל השווקים',         ur:'تمام مارکیٹس',      hi:'सभी बाज़ार' },
  'predict.tab.opengov':    { en:'OpenGov-linked',    es:'Ligados a OpenGov',     fr:'Liés à OpenGov',      de:'OpenGov-verknüpft',     it:'Legati a OpenGov',     pt:'Ligados ao OpenGov',     ru:'Связан с OpenGov',    zh:'OpenGov 关联',   ja:'OpenGov連携',        ko:'OpenGov 연결',        ar:'مرتبطة بـ OpenGov',   he:'מקושרים ל-OpenGov',  ur:'OpenGov سے منسلک', hi:'OpenGov से जुड़े' },
  'predict.col.question':   { en:'Question',          es:'Pregunta',              fr:'Question',            de:'Frage',                 it:'Domanda',              pt:'Pergunta',               ru:'Вопрос',              zh:'问题',           ja:'質問',               ko:'질문',                ar:'سؤال',                he:'שאלה',               ur:'سوال',              hi:'प्रश्न' },
  'predict.col.prob':       { en:'Prob · YES',        es:'Prob · SÍ',             fr:'Prob · OUI',          de:'Wahr · JA',             it:'Prob · SÌ',            pt:'Prob · SIM',             ru:'Вероятность · ДА',    zh:'概率 · 是',     ja:'確率 · はい',         ko:'확률 · 예',           ar:'احتمالية · نعم',      he:'סיכוי · כן',         ur:'احتمال · ہاں',      hi:'संभावना · हाँ' },
  'predict.col.volume':     { en:'Volume',            es:'Volumen',               fr:'Volume',              de:'Volumen',               it:'Volume',               pt:'Volume',                 ru:'Объём',               zh:'成交量',         ja:'出来高',             ko:'거래량',              ar:'الحجم',               he:'נפח',                ur:'حجم',               hi:'वॉल्यूम' },
  'predict.col.status':     { en:'Status',            es:'Estado',                fr:'Statut',              de:'Status',                it:'Stato',                pt:'Estado',                 ru:'Статус',              zh:'状态',           ja:'状態',               ko:'상태',                ar:'الحالة',              he:'סטטוס',              ur:'حالت',              hi:'स्थिति' },
  'predict.col.close':      { en:'Close',             es:'Cierre',                fr:'Clôture',             de:'Ende',                  it:'Chiusura',             pt:'Fechar',                 ru:'Закрытие',            zh:'收盘',           ja:'クローズ',           ko:'종료',                ar:'الإغلاق',             he:'סגירה',              ur:'بند',               hi:'बंद' },
  'predict.col.creator':    { en:'Creator',           es:'Creador',               fr:'Créateur',            de:'Ersteller',             it:'Creatore',             pt:'Criador',                ru:'Создатель',           zh:'创建者',         ja:'作成者',             ko:'생성자',              ar:'المنشئ',              he:'יוצר',               ur:'تخلیق کار',         hi:'निर्माता' },
  'predict.col.market':     { en:'Market',            es:'Mercado',               fr:'Marché',              de:'Markt',                 it:'Mercato',              pt:'Mercado',                ru:'Рынок',               zh:'市场',           ja:'市場',               ko:'시장',                ar:'السوق',               he:'שוק',                ur:'مارکیٹ',            hi:'बाज़ार' },
  'predict.col.yes':        { en:'YES shares',        es:'Participaciones SÍ',    fr:'Parts OUI',           de:'JA-Anteile',            it:'Quote SÌ',             pt:'Cotas SIM',              ru:'Доли ДА',             zh:'是 股份',        ja:'はい株式',           ko:'예 주식',             ar:'أسهم نعم',            he:'מניות כן',           ur:'ہاں شیئرز',         hi:'हाँ शेयर' },
  'predict.col.no':         { en:'NO shares',         es:'Participaciones NO',    fr:'Parts NON',           de:'NEIN-Anteile',          it:'Quote NO',             pt:'Cotas NÃO',              ru:'Доли НЕТ',            zh:'否 股份',        ja:'いいえ株式',         ko:'아니오 주식',         ar:'أسهم لا',             he:'מניות לא',           ur:'نہیں شیئرز',        hi:'नहीं शेयर' },
  'predict.col.netPaid':    { en:'Net paid',          es:'Neto pagado',           fr:'Net payé',            de:'Netto bezahlt',         it:'Netto pagato',         pt:'Líquido pago',           ru:'Нетто оплачено',      zh:'净支付',         ja:'純支払',             ko:'순 지불',             ar:'صافي المدفوع',        he:'שולם נטו',           ur:'خالص ادا شدہ',     hi:'शुद्ध भुगतान' },
  'predict.noMarkets':      { en:'No markets have been created yet.', es:'Aún no se han creado mercados.', fr:'Aucun marché créé pour le moment.', de:'Noch keine Märkte erstellt.', it:'Nessun mercato creato ancora.', pt:'Nenhum mercado criado ainda.', ru:'Рынки ещё не созданы.', zh:'尚未创建任何市场。', ja:'まだ市場が作成されていません。', ko:'아직 생성된 시장이 없습니다.', ar:'لم يتم إنشاء أسواق بعد.', he:'עדיין לא נוצרו שווקים.', ur:'ابھی تک کوئی مارکیٹ نہیں بنائی گئی۔', hi:'अभी तक कोई बाज़ार नहीं बनाया गया है।' },
  'predict.noOpengov':      { en:'No referendum-linked markets yet.', es:'Aún no hay mercados ligados a referéndum.', fr:'Aucun marché lié à un référendum pour le moment.', de:'Noch keine referendumsgebundenen Märkte.', it:'Nessun mercato legato a referendum ancora.', pt:'Ainda não há mercados ligados a referendos.', ru:'Пока нет рынков, связанных с референдумом.', zh:'尚无关联公投的市场。', ja:'国民投票に関連する市場はまだありません。', ko:'국민투표 연계 시장이 아직 없습니다.', ar:'لا توجد أسواق مرتبطة بالاستفتاء حتى الآن.', he:'אין עדיין שווקים המקושרים למשאל.', ur:'ریفرنڈم سے منسلک کوئی مارکیٹ ابھی نہیں۔', hi:'अभी तक जनमत-संग्रह से जुड़े कोई बाज़ार नहीं हैं।' },
  'predict.positions.title':{ en:'Prediction Market Positions', es:'Posiciones en Mercados de Predicción', fr:'Positions de Marchés de Prédiction', de:'Positionen in Vorhersagemärkten', it:'Posizioni in Mercati di Predizione', pt:'Posições em Mercados de Previsão', ru:'Позиции в рынках прогнозов', zh:'预测市场持仓', ja:'予測市場ポジション', ko:'예측 시장 포지션', ar:'المراكز في أسواق التنبؤ', he:'פוזיציות בשוקי תחזיות', ur:'پیش گوئی مارکیٹ پوزیشنز', hi:'पूर्वानुमान बाजार स्थितियां' },

  /* ===== Tools section ===== */
  'tools.title':          { en:'Tools',                       es:'Herramientas',                      fr:'Outils',                            de:'Werkzeuge',                         it:'Strumenti',                         pt:'Ferramentas',                       ru:'Инструменты',                       zh:'工具',              ja:'ツール',                     ko:'도구',                       ar:'الأدوات',                    he:'כלים',                        ur:'اوزار',                     hi:'उपकरण' },
  'tools.compare.title':  { en:'Price comparison', es:'Comparador de precios', fr:'Comparateur de prix', de:'Preisvergleich', it:'Confronto prezzi', pt:'Comparador de preços', ru:'Сравнение цен', zh:'价格对比', ja:'価格比較', ko:'가격 비교', ar:'مقارنة الأسعار', he:'השוואת מחירים', ur:'قیمت موازنہ', hi:'मूल्य तुलना' },
  'tools.compare.ratioLabel': { en:'ratio', es:'ratio', fr:'ratio', de:'Verhältnis', it:'rapporto', pt:'razão', ru:'отношение', zh:'比率', ja:'比率', ko:'비율', ar:'النسبة', he:'יחס', ur:'تناسب', hi:'अनुपात' },
  'tools.compare.swap':   { en:'Swap tokens', es:'Invertir tokens', fr:'Inverser', de:'Tokens tauschen', it:'Inverti', pt:'Inverter', ru:'Поменять', zh:'交换', ja:'入れ替え', ko:'교체', ar:'تبديل', he:'החלף', ur:'تبدیل', hi:'अदला-बदली' },
  'tools.compare.min':    { en:'min', es:'mín', fr:'min', de:'Min', it:'min', pt:'mín', ru:'мин', zh:'最小', ja:'最小', ko:'최소', ar:'الأدنى', he:'מינ׳', ur:'کم', hi:'न्यून' },
  'tools.compare.max':    { en:'max', es:'máx', fr:'max', de:'Max', it:'max', pt:'máx', ru:'макс', zh:'最大', ja:'最大', ko:'최대', ar:'الأعلى', he:'מקס׳', ur:'زیادہ', hi:'अधिक' },
  'tools.compare.now':    { en:'now', es:'actual', fr:'actuel', de:'aktuell', it:'attuale', pt:'atual', ru:'сейчас', zh:'当前', ja:'現在', ko:'현재', ar:'الآن', he:'עכשיו', ur:'ابھی', hi:'अभी' },
  'tools.compare.atCursor': { en:'at cursor', es:'en cursor', fr:'au curseur', de:'am Cursor', it:'al cursore', pt:'no cursor', ru:'на курсоре', zh:'光标处', ja:'カーソル位置', ko:'커서 위치', ar:'عند المؤشر', he:'בסמן', ur:'کرسر پر', hi:'कर्सर पर' },
  'tools.compare.loading':{ en:'Loading history…', es:'Cargando histórico…', fr:'Chargement…', de:'Lädt…', it:'Caricamento…', pt:'Carregando…', ru:'Загрузка…', zh:'加载历史…', ja:'履歴を読み込み中…', ko:'기록 로딩…', ar:'جار تحميل السجل…', he:'טוען היסטוריה…', ur:'تاریخ لوڈ ہو رہی…', hi:'इतिहास लोड हो रहा…' },
  'tools.compare.same':   { en:'Pick two different tokens.', es:'Elige dos tokens distintos.', fr:'Choisissez deux jetons différents.', de:'Zwei verschiedene Tokens wählen.', it:'Scegli due token diversi.', pt:'Escolha dois tokens diferentes.', ru:'Выберите два разных токена.', zh:'选择两个不同的代币。', ja:'異なる2つのトークンを選択。', ko:'서로 다른 두 토큰 선택.', ar:'اختر رمزين مختلفين.', he:'בחר שני טוקנים שונים.', ur:'دو مختلف ٹوکن چنیں۔', hi:'दो अलग टोकन चुनें।' },
  'tools.compare.nodata': { en:'No overlapping history for this pair.', es:'Sin histórico solapado para este par.', fr:'Pas d\'historique commun pour cette paire.', de:'Keine überlappende Historie für dieses Paar.', it:'Nessuno storico sovrapposto per questa coppia.', pt:'Sem histórico sobreposto para este par.', ru:'Нет общей истории для этой пары.', zh:'该交易对无重叠历史。', ja:'このペアの重複履歴がありません。', ko:'이 페어의 중복 기록 없음.', ar:'لا يوجد سجل متداخل لهذا الزوج.', he:'אין היסטוריה חופפת לזוג זה.', ur:'اس جوڑے کی مشترکہ تاریخ نہیں۔', hi:'इस जोड़ी का साझा इतिहास नहीं।' },
  'tools.compare.caveat': { en:'Ratio = {a} price ÷ {b} price per hour, from real price history (price_history). No estimates.', es:'Ratio = precio {a} ÷ precio {b} por hora, del histórico real de precios (price_history). Sin estimaciones.', fr:'Ratio = prix {a} ÷ prix {b} par heure, depuis l\'historique réel des prix. Sans estimations.', de:'Verhältnis = {a}-Preis ÷ {b}-Preis pro Stunde, aus echter Preishistorie. Keine Schätzungen.', it:'Rapporto = prezzo {a} ÷ prezzo {b} per ora, dallo storico reale dei prezzi. Senza stime.', pt:'Razão = preço {a} ÷ preço {b} por hora, do histórico real de preços. Sem estimativas.', ru:'Отношение = цена {a} ÷ цена {b} в час, из реальной истории цен. Без оценок.', zh:'比率 = 每小时 {a} 价格 ÷ {b} 价格，来自真实价格历史。无估算。', ja:'比率 = {a}価格 ÷ {b}価格（毎時）、実際の価格履歴より。推定なし。', ko:'비율 = 시간당 {a} 가격 ÷ {b} 가격, 실제 가격 이력 기반. 추정 없음.', ar:'النسبة = سعر {a} ÷ سعر {b} بالساعة، من سجل الأسعار الحقيقي. بدون تقديرات.', he:'יחס = מחיר {a} ÷ מחיר {b} לשעה, מהיסטוריית מחירים אמיתית. ללא הערכות.', ur:'تناسب = فی گھنٹہ {a} قیمت ÷ {b} قیمت، حقیقی قیمت ہسٹری سے۔ بغیر تخمینہ۔', hi:'अनुपात = प्रति घंटा {a} मूल्य ÷ {b} मूल्य, वास्तविक मूल्य इतिहास से। कोई अनुमान नहीं।' },
  'tools.compare.equals': { en:'=', es:'=', fr:'=', de:'=', it:'=', pt:'=', ru:'=', zh:'=', ja:'=', ko:'=', ar:'=', he:'=', ur:'=', hi:'=' },
  'tools.compare.inverse':{ en:'inverse', es:'inverso', fr:'inverse', de:'invers', it:'inverso', pt:'inverso', ru:'обратное', zh:'反向', ja:'逆', ko:'역', ar:'معكوس', he:'הפוך', ur:'الٹا', hi:'व्युत्क्रम' },
  'tools.compare.usd':    { en:'USD', es:'USD', fr:'USD', de:'USD', it:'USD', pt:'USD', ru:'USD', zh:'美元', ja:'USD', ko:'USD', ar:'دولار', he:'דולר', ur:'ڈالر', hi:'USD' },
  'tools.predict.title':  { en:'Block ↔ Time Predictor',      es:'Convertidor Bloque ↔ Tiempo',       fr:'Convertisseur Bloc ↔ Temps',        de:'Block ↔ Zeit Konverter',            it:'Convertitore Blocco ↔ Tempo',       pt:'Conversor Bloco ↔ Tempo',           ru:'Конвертер Блок ↔ Время',            zh:'区块 ↔ 时间 转换器', ja:'ブロック ↔ 時間 変換',      ko:'블록 ↔ 시간 변환기',         ar:'محول الكتلة ↔ الوقت',       he:'ממיר בלוק ↔ זמן',             ur:'بلاک ↔ وقت کنورٹر',         hi:'ब्लॉक ↔ समय परिवर्तक' },
  'tools.currentBlock':   { en:'Current block',               es:'Bloque actual',                     fr:'Bloc actuel',                       de:'Aktueller Block',                   it:'Blocco attuale',                    pt:'Bloco atual',                       ru:'Текущий блок',                      zh:'当前区块',          ja:'現在のブロック',              ko:'현재 블록',                 ar:'الكتلة الحالية',             he:'בלוק נוכחי',                  ur:'موجودہ بلاک',              hi:'वर्तमान ब्लॉक' },
  'tools.blockTime':      { en:'Block time',                  es:'Tiempo de bloque',                  fr:'Temps de bloc',                     de:'Blockzeit',                         it:'Tempo di blocco',                   pt:'Tempo de bloco',                    ru:'Время блока',                       zh:'出块时间',          ja:'ブロック時間',                ko:'블록 시간',                 ar:'زمن الكتلة',                he:'זמן בלוק',                    ur:'بلاک ٹائم',                hi:'ब्लॉक समय' },
  'tools.now':            { en:'Now',                         es:'Ahora',                             fr:'Maintenant',                        de:'Jetzt',                             it:'Ora',                               pt:'Agora',                             ru:'Сейчас',                            zh:'现在',              ja:'今',                          ko:'지금',                       ar:'الآن',                       he:'עכשיו',                       ur:'ابھی',                      hi:'अभी' },
  'tools.mode.b2t':       { en:'Block → Date',                es:'Bloque → Fecha',                    fr:'Bloc → Date',                       de:'Block → Datum',                     it:'Blocco → Data',                     pt:'Bloco → Data',                      ru:'Блок → Дата',                       zh:'区块 → 日期',       ja:'ブロック → 日付',            ko:'블록 → 날짜',               ar:'الكتلة → التاريخ',           he:'בלוק → תאריך',                ur:'بلاک → تاریخ',             hi:'ब्लॉक → दिनांक' },
  'tools.mode.t2b':       { en:'Date → Block',                es:'Fecha → Bloque',                    fr:'Date → Bloc',                       de:'Datum → Block',                     it:'Data → Blocco',                     pt:'Data → Bloco',                      ru:'Дата → Блок',                       zh:'日期 → 区块',       ja:'日付 → ブロック',            ko:'날짜 → 블록',               ar:'التاريخ → الكتلة',           he:'תאריך → בלוק',                ur:'تاریخ → بلاک',             hi:'दिनांक → ब्लॉक' },
  'tools.inputBlock':     { en:'Target block number',         es:'Número de bloque objetivo',         fr:'Numéro de bloc cible',              de:'Ziel-Blocknummer',                  it:'Numero di blocco obiettivo',        pt:'Número de bloco alvo',              ru:'Номер целевого блока',              zh:'目标区块号',        ja:'目標ブロック番号',            ko:'목표 블록 번호',             ar:'رقم الكتلة المستهدفة',       he:'מספר בלוק יעד',              ur:'ہدف بلاک نمبر',            hi:'लक्ष्य ब्लॉक संख्या' },
  'tools.inputTime':      { en:'Target date/time',            es:'Fecha/hora objetivo',               fr:'Date/heure cible',                  de:'Ziel-Datum/Uhrzeit',                it:'Data/ora obiettivo',                pt:'Data/hora alvo',                    ru:'Целевая дата/время',                zh:'目标日期/时间',    ja:'目標日時',                    ko:'목표 날짜/시간',             ar:'التاريخ/الوقت المستهدف',    he:'תאריך/שעה יעד',              ur:'ہدف تاریخ/وقت',             hi:'लक्ष्य दिनांक/समय' },
  'tools.result':         { en:'Result',                      es:'Resultado',                         fr:'Résultat',                          de:'Ergebnis',                          it:'Risultato',                         pt:'Resultado',                         ru:'Результат',                         zh:'结果',              ja:'結果',                        ko:'결과',                       ar:'النتيجة',                    he:'תוצאה',                       ur:'نتیجہ',                     hi:'परिणाम' },
  'tools.blocks':         { en:'blocks',                      es:'bloques',                           fr:'blocs',                             de:'Blöcke',                            it:'blocchi',                           pt:'blocos',                            ru:'блоков',                            zh:'区块',              ja:'ブロック',                    ko:'블록',                       ar:'كتل',                        he:'בלוקים',                      ur:'بلاکس',                     hi:'ब्लॉक' },
  'tools.forward':        { en:'ahead',                       es:'hacia adelante',                    fr:'en avant',                          de:'voraus',                            it:'avanti',                            pt:'à frente',                          ru:'вперёд',                            zh:'之后',              ja:'先',                          ko:'후',                         ar:'للأمام',                     he:'קדימה',                       ur:'آگے',                       hi:'आगे' },
  'tools.back':           { en:'ago',                         es:'hacia atrás',                       fr:'en arrière',                        de:'zurück',                            it:'indietro',                          pt:'atrás',                             ru:'назад',                             zh:'之前',              ja:'前',                          ko:'전',                         ar:'مضى',                        he:'אחורה',                       ur:'پیچھے',                     hi:'पीछे' },
  'tools.in':             { en:'in',                          es:'en',                                fr:'dans',                              de:'in',                                it:'tra',                               pt:'em',                                ru:'через',                             zh:'在',                ja:'後',                          ko:'후',                         ar:'بعد',                        he:'בעוד',                        ur:'میں',                       hi:'में' },
  'tools.ago':            { en:'ago',                         es:'hace',                              fr:'il y a',                            de:'vor',                               it:'fa',                                pt:'atrás',                             ru:'назад',                             zh:'前',                ja:'前',                          ko:'전',                         ar:'قبل',                        he:'לפני',                        ur:'پہلے',                      hi:'पहले' },
  'tools.unit.d':         { en:'d', es:'d', fr:'j', de:'T', it:'g', pt:'d', ru:'д', zh:'天', ja:'日', ko:'일', ar:'ي', he:'י', ur:'د', hi:'दि' },
  'tools.unit.h':         { en:'h', es:'h', fr:'h', de:'h', it:'h', pt:'h', ru:'ч', zh:'时', ja:'時', ko:'시', ar:'س', he:'ש', ur:'گ', hi:'घं' },
  'tools.unit.m':         { en:'m', es:'m', fr:'m', de:'m', it:'m', pt:'m', ru:'м', zh:'分', ja:'分', ko:'분', ar:'د', he:'ד', ur:'م', hi:'मि' },
  'tools.unit.s':         { en:'s', es:'s', fr:'s', de:'s', it:'s', pt:'s', ru:'с', zh:'秒', ja:'秒', ko:'초', ar:'ث', he:'ש', ur:'س', hi:'से' },
  'tools.invalidBlock':   { en:'Enter a valid block number.', es:'Introduce un número de bloque válido.', fr:'Entrez un numéro de bloc valide.', de:'Gültige Blocknummer eingeben.', it:'Inserisci un numero di blocco valido.', pt:'Insira um número de bloco válido.', ru:'Введите действительный номер блока.', zh:'请输入有效的区块号。', ja:'有効なブロック番号を入力してください。', ko:'유효한 블록 번호를 입력하세요.', ar:'أدخل رقم كتلة صالح.', he:'הזן מספר בלוק תקין.', ur:'درست بلاک نمبر درج کریں۔', hi:'एक वैध ब्लॉक संख्या दर्ज करें।' },
  'tools.invalidTime':    { en:'Enter a valid date/time.',    es:'Introduce una fecha/hora válida.',  fr:'Entrez une date/heure valide.',     de:'Gültiges Datum/Uhrzeit eingeben.',  it:'Inserisci una data/ora valida.',    pt:'Insira uma data/hora válida.',      ru:'Введите действительную дату/время.', zh:'请输入有效的日期/时间。',  ja:'有効な日時を入力してください。', ko:'유효한 날짜/시간을 입력하세요.', ar:'أدخل تاريخًا/وقتًا صالحًا.', he:'הזן תאריך/שעה תקינים.', ur:'درست تاریخ/وقت درج کریں۔', hi:'मान्य दिनांक/समय दर्ज करें।' },
  'tools.caveat':         { en:'Estimate based on 6-second block time. Actual block production may vary ±5% due to congestion or validator issues.',
                            es:'Estimación basada en block time de 6s. La producción real de bloques puede variar ±5% por congestión o problemas de validadores.',
                            fr:'Estimation basée sur un temps de bloc de 6s. La production réelle peut varier de ±5% en raison de la congestion ou des problèmes de validateurs.',
                            de:'Schätzung basierend auf 6s Blockzeit. Die tatsächliche Produktion kann aufgrund von Überlastung oder Validator-Problemen um ±5% variieren.',
                            it:'Stima basata su 6s di tempo di blocco. La produzione effettiva può variare ±5% a causa di congestione o problemi di validatori.',
                            pt:'Estimativa baseada em block time de 6s. A produção real pode variar ±5% devido a congestionamento ou problemas de validadores.',
                            ru:'Оценка основана на блок-тайме 6с. Реальное производство блоков может отклоняться на ±5% из-за нагрузки или проблем валидаторов.',
                            zh:'基于 6 秒出块时间估算。实际出块可能因拥堵或验证者问题而有 ±5% 偏差。',
                            ja:'6秒のブロック時間に基づく推定。実際の生成は混雑やバリデータの問題により ±5% 変動する可能性があります。',
                            ko:'6초 블록 타임 기준 추정치. 실제 블록 생성은 혼잡이나 검증자 문제로 ±5% 변동할 수 있습니다.',
                            ar:'تقدير بناءً على زمن كتلة 6 ثوانٍ. قد يختلف الإنتاج الفعلي بنسبة ±5% بسبب الازدحام أو مشاكل المحققين.',
                            he:'הערכה המבוססת על זמן בלוק של 6 שניות. הייצור בפועל יכול להשתנות ב-±5% עקב גודש או תקלות של מאמתים.',
                            ur:'6 سیکنڈ بلاک ٹائم کی بنیاد پر تخمینہ۔ اصل پیداوار بھیڑ یا ویلیڈیٹر کے مسائل کی وجہ سے ±5% تک مختلف ہو سکتی ہے۔',
                            hi:'6-सेकंड ब्लॉक टाइम पर आधारित अनुमान। वास्तविक उत्पादन भीड़ या वैलिडेटर मुद्दों के कारण ±5% तक भिन्न हो सकता है।' },

  /* ===== Music player ===== */
  'music.nowPlaying':{ en:'Now playing', es:'Reproduciendo', fr:'En lecture', de:'Läuft jetzt', it:'In riproduzione', pt:'Tocando agora', ru:'Сейчас играет', zh:'正在播放', ja:'再生中', ko:'재생 중', ar:'قيد التشغيل', he:'מתנגן כעת', ur:'چل رہا ہے', hi:'अभी चल रहा' },
  'music.track':     { en:'Track',       es:'Pista',        fr:'Piste',      de:'Titel',      it:'Traccia',        pt:'Faixa',        ru:'Трек',          zh:'曲目',   ja:'トラック', ko:'트랙',   ar:'المسار',     he:'רצועה',    ur:'ٹریک',    hi:'ट्रैक' },
  'music.artist':    { en:'Artist',      es:'Artista',      fr:'Artiste',    de:'Künstler',   it:'Artista',        pt:'Artista',      ru:'Исполнитель',   zh:'艺术家', ja:'アーティスト',ko:'아티스트',ar:'الفنان',     he:'אמן',      ur:'فنکار',   hi:'कलाकार' },
  'music.playlist':  { en:'Playlist',    es:'Lista',        fr:'Playlist',   de:'Playlist',   it:'Playlist',       pt:'Playlist',     ru:'Плейлист',      zh:'播放列表',ja:'プレイリスト',ko:'플레이리스트',ar:'قائمة التشغيل',he:'פלייליסט',ur:'پلے لسٹ', hi:'प्लेलिस्ट' },
  'music.volume':    { en:'Volume',      es:'Volumen',      fr:'Volume',     de:'Lautstärke', it:'Volume',         pt:'Volume',       ru:'Громкость',     zh:'音量',   ja:'音量',    ko:'볼륨',    ar:'الصوت',      he:'עוצמה',    ur:'والیوم',  hi:'वॉल्यूम' },
  'music.play':      { en:'Play',        es:'Reproducir',   fr:'Lire',       de:'Abspielen',  it:'Riproduci',      pt:'Tocar',        ru:'Играть',        zh:'播放',   ja:'再生',    ko:'재생',    ar:'تشغيل',      he:'נגן',      ur:'چلائیں',  hi:'चलाएँ' },
  'music.pause':     { en:'Pause',       es:'Pausar',       fr:'Pause',      de:'Pause',      it:'Pausa',          pt:'Pausar',       ru:'Пауза',         zh:'暂停',   ja:'一時停止',ko:'일시정지',ar:'إيقاف مؤقت', he:'השהה',    ur:'روکیں',   hi:'रोकें' },
  'music.next':      { en:'Next',        es:'Siguiente',    fr:'Suivant',    de:'Weiter',     it:'Successivo',     pt:'Próximo',      ru:'Следующий',     zh:'下一首', ja:'次へ',    ko:'다음',    ar:'التالي',     he:'הבא',      ur:'اگلا',    hi:'अगला' },
  'music.prev':      { en:'Previous',    es:'Anterior',     fr:'Précédent',  de:'Zurück',     it:'Precedente',     pt:'Anterior',     ru:'Предыдущий',    zh:'上一首', ja:'前へ',    ko:'이전',    ar:'السابق',     he:'הקודם',    ur:'پچھلا',   hi:'पिछला' },

  /* ===== Extrinsics/drill expansion ===== */
  'drill.decodedArgs':  { en:'Decoded Args',    es:'Args. Decodificados', fr:'Args décodés',    de:'Dekodierte Args', it:'Arg. decodificati', pt:'Args decod.',   ru:'Декод. аргументы',  zh:'解码参数', ja:'デコード引数', ko:'디코드 인자', ar:'المعاملات المفكوكة',he:'ארגומנטים מפוענחים',ur:'ڈی کوڈ شدہ آرگز',hi:'डिकोडेड आर्ग्स' },
  'drill.events':       { en:'Events',          es:'Eventos',             fr:'Événements',      de:'Ereignisse',      it:'Eventi',             pt:'Eventos',        ru:'События',           zh:'事件',   ja:'イベント',    ko:'이벤트',  ar:'الأحداث',       he:'אירועים',      ur:'ایونٹس',      hi:'घटनाएँ' },
  'drill.feeBreakdown': { en:'Fee Breakdown',   es:'Desglose de Comisión',fr:'Détail des frais',de:'Gebühren-Aufschl.', it:'Dettaglio commiss.',pt:'Detalhe da taxa',ru:'Разбивка комиссии', zh:'手续费明细',ja:'手数料内訳',ko:'수수료 내역',ar:'تفصيل الرسوم', he:'פירוט עמלה',   ur:'فیس کی تفصیل',hi:'शुल्क विवरण' },

  /* ===== Preimage Decode & History modals ===== */
  'preimage.decode.title':            { en:'Decode preimage',                    es:'Decodificar preimagen',                fr:'Décoder la préimage',                 de:'Preimage dekodieren',                 it:'Decodifica preimage',                   pt:'Decodificar preimage',                   ru:'Декодировать прообраз',              zh:'解码预映像',         ja:'プリイメージをデコード',        ko:'프리이미지 디코딩',          ar:'فك ترميز الصورة الأولية',             he:'פענוח preimage',                 ur:'پری امیج ڈی کوڈ کریں',            hi:'प्रीइमेज डिकोड करें' },
  'preimage.decode.decoding':         { en:'Decoding...',                        es:'Decodificando...',                     fr:'Décodage...',                         de:'Dekodieren...',                       it:'Decodifica...',                         pt:'Decodificando...',                       ru:'Декодирование...',                   zh:'解码中...',          ja:'デコード中...',                  ko:'디코딩 중...',               ar:'جارٍ فك الترميز...',                  he:'מפענח...',                       ur:'ڈی کوڈ ہو رہا ہے...',              hi:'डिकोड कर रहा है...' },
  'preimage.decode.decodingLarge':    { en:'Decoding (large runtime, ~6 MB)...', es:'Decodificando (runtime grande, ~6MB)...', fr:'Décodage (gros runtime, ~6 Mo)...',  de:'Dekodieren (großes Runtime, ~6 MB)...', it:'Decodifica (runtime grande, ~6MB)...', pt:'Decodificando (runtime grande, ~6MB)...', ru:'Декодирование (большой runtime, ~6 МБ)...', zh:'解码中（运行时较大，约 6 MB）...', ja:'デコード中（大きなランタイム、~6MB）...', ko:'디코딩 중 (대용량 런타임, ~6 MB)...', ar:'جارٍ فك الترميز (runtime كبير، ~6 ميغا)...', he:'מפענח (runtime גדול, ~6 MB)...', ur:'ڈی کوڈ (بڑا رن ٹائم، ~6 MB)...', hi:'डिकोड (बड़ा रनटाइम, ~6 MB)...' },
  'preimage.decode.rateLimitHint':    { en:'Backend rate limit: 120 req/min per IP. Wait ~60s and retry, or ask the admin to raise the cap.', es:'El backend tiene rate limit 120 req/min por IP. Espera ~60s y reintenta, o el admin puede subir el límite.', fr:'Limite backend : 120 req/min par IP. Attendez ~60 s puis réessayez, ou demandez à l\'admin d\'augmenter.', de:'Backend-Limit: 120 Anfr./Min. pro IP. ~60 s warten und erneut versuchen, oder Admin bittet erhöhen.', it:'Rate limit backend: 120 req/min per IP. Attendi ~60s e riprova, o chiedi all\'admin di alzarlo.', pt:'Limite do backend: 120 req/min por IP. Aguarde ~60 s e tente de novo, ou peça ao admin para subir.', ru:'Лимит: 120 зап./мин на IP. Подождите ~60 с и повторите, или попросите админа поднять лимит.', zh:'后端速率限制：每 IP 120 次/分钟。请等待约 60 秒后重试，或请管理员提高限额。', ja:'バックエンドのレート制限: IPごとに120リクエスト/分。~60秒待って再試行するか、管理者に引き上げを依頼してください。', ko:'백엔드 속도 제한: IP당 120 req/min. 약 60초 후 재시도하거나 관리자에게 한도 상향을 요청하세요.', ar:'حد معدّل الطلبات: 120/دقيقة لكل IP. انتظر ~60 ثانية وأعد المحاولة، أو اطلب من المشرف رفع الحد.', he:'הגבלת קצב: 120/דק\' לכל IP. המתן ~60 שנ\' ונסה שוב, או בקש מהמנהל להעלות.', ur:'بیک اینڈ لیمٹ: 120 فی منٹ فی IP۔ ~60 سیکنڈ انتظار کریں یا ایڈمن سے حد بڑھانے کو کہیں۔', hi:'बैकएंड दर सीमा: 120 req/min प्रति IP। ~60s प्रतीक्षा करें और पुनः प्रयास करें।' },
  'preimage.decode.retry':            { en:'Retry',                              es:'Reintentar',                           fr:'Réessayer',                           de:'Wiederholen',                         it:'Riprova',                                pt:'Tentar novamente',                       ru:'Повторить',                           zh:'重试',               ja:'再試行',                         ko:'재시도',                     ar:'إعادة المحاولة',                      he:'נסה שוב',                        ur:'دوبارہ کوشش',                      hi:'पुनः प्रयास' },
  'preimage.decode.viewJson':         { en:'{ } Raw JSON',                       es:'{ } Ver JSON crudo',                   fr:'{ } JSON brut',                       de:'{ } Roh-JSON',                        it:'{ } JSON grezzo',                       pt:'{ } JSON bruto',                         ru:'{ } Сырой JSON',                     zh:'{ } 原始 JSON',       ja:'{ } 生 JSON',                     ko:'{ } 원본 JSON',               ar:'{ } JSON الخام',                      he:'{ } JSON גולמי',                  ur:'{ } خام JSON',                      hi:'{ } रॉ JSON' },
  'preimage.decode.viewHuman':        { en:'👁 Human view',                      es:'👁 Vista humana',                      fr:'👁 Vue humaine',                      de:'👁 Menschliche Ansicht',              it:'👁 Vista leggibile',                    pt:'👁 Visão humana',                        ru:'👁 Читаемый вид',                    zh:'👁 易读视图',          ja:'👁 可読ビュー',                    ko:'👁 사람이 읽는 보기',          ar:'👁 عرض مقروء',                        he:'👁 תצוגה נוחה',                    ur:'👁 انسانی نظارہ',                    hi:'👁 सरल दृश्य' },
  'preimage.decode.viewJsonTip':      { en:'Show raw JSON (hex truncated)',      es:'Mostrar JSON crudo (con hex truncado)', fr:'Afficher le JSON brut (hex tronqué)', de:'Roh-JSON anzeigen (Hex gekürzt)',     it:'Mostra JSON grezzo (hex troncato)',      pt:'Mostrar JSON bruto (hex truncado)',      ru:'Показать сырой JSON (hex сокращён)', zh:'显示原始 JSON（hex 已截断）',  ja:'生 JSON を表示（hex は省略）',     ko:'원본 JSON 표시(hex 생략)',    ar:'عرض JSON الخام (hex مختصر)',          he:'הצג JSON גולמי (hex קצוץ)',       ur:'خام JSON دکھائیں (hex مختصر)',      hi:'रॉ JSON दिखाएँ (hex संक्षिप्त)' },
  'preimage.decode.viewHumanTip':     { en:'Show human view',                    es:'Mostrar vista humana',                 fr:'Afficher la vue humaine',             de:'Menschliche Ansicht zeigen',          it:'Mostra vista leggibile',                 pt:'Mostrar visão humana',                   ru:'Показать читаемый вид',              zh:'显示易读视图',         ja:'可読ビューを表示',                ko:'사람이 읽는 보기 표시',       ar:'عرض التنسيق المقروء',                 he:'הצג תצוגה נוחה',                 ur:'انسانی نظارہ دکھائیں',              hi:'सरल दृश्य दिखाएँ' },
  'preimage.decode.copyField':        { en:'Copy',                               es:'Copiar',                               fr:'Copier',                              de:'Kopieren',                            it:'Copia',                                  pt:'Copiar',                                 ru:'Скопировать',                         zh:'复制',               ja:'コピー',                         ko:'복사',                       ar:'نسخ',                                 he:'העתק',                            ur:'کاپی',                              hi:'कॉपी' },
  'preimage.decode.copyFieldTip':     { en:'Copy full bytes of "{key}" to clipboard', es:'Copiar bytes completos de "{key}" al portapapeles', fr:'Copier les octets de "{key}" dans le presse-papiers', de:'Volle Bytes von "{key}" in die Zwischenablage kopieren', it:'Copia i byte di "{key}" negli appunti', pt:'Copiar bytes de "{key}" para área de transferência', ru:'Скопировать байты "{key}" в буфер',  zh:'将 "{key}" 的完整字节复制到剪贴板', ja:'"{key}" の完全なバイトをクリップボードへコピー', ko:'"{key}" 의 전체 바이트를 클립보드로 복사', ar:'نسخ بايتات "{key}" إلى الحافظة', he:'העתק בייטים של "{key}" ללוח', ur:'"{key}" کے بائٹس کلپ بورڈ پر کاپی کریں', hi:'"{key}" के बाइट क्लिपबोर्ड पर कॉपी करें' },
  'preimage.decode.download':         { en:'Download',                           es:'Descargar',                            fr:'Télécharger',                         de:'Herunterladen',                       it:'Scarica',                                pt:'Baixar',                                 ru:'Скачать',                             zh:'下载',               ja:'ダウンロード',                    ko:'다운로드',                   ar:'تنزيل',                               he:'הורד',                           ur:'ڈاؤن لوڈ',                         hi:'डाउनलोड' },
  'preimage.decode.downloadHexTip':   { en:'Download "{key}" as .hex.txt file',  es:'Descargar "{key}" como fichero .hex.txt', fr:'Télécharger "{key}" en fichier .hex.txt', de:'"{key}" als .hex.txt-Datei herunterladen', it:'Scarica "{key}" come file .hex.txt', pt:'Baixar "{key}" como arquivo .hex.txt', ru:'Скачать "{key}" как .hex.txt',      zh:'将 "{key}" 下载为 .hex.txt 文件', ja:'"{key}" を .hex.txt ファイルとしてダウンロード', ko:'"{key}" 을 .hex.txt 파일로 다운로드', ar:'تنزيل "{key}" كملف .hex.txt',        he:'הורד את "{key}" כקובץ .hex.txt',  ur:'"{key}" کو .hex.txt فائل میں ڈاؤن لوڈ', hi:'"{key}" को .hex.txt फ़ाइल में डाउनलोड' },
  'preimage.decode.downloadWasm':     { en:'Download .wasm.zst',                 es:'Descargar .wasm.zst',                  fr:'Télécharger .wasm.zst',               de:'.wasm.zst herunterladen',             it:'Scarica .wasm.zst',                      pt:'Baixar .wasm.zst',                       ru:'Скачать .wasm.zst',                   zh:'下载 .wasm.zst',     ja:'.wasm.zst をダウンロード',         ko:'.wasm.zst 다운로드',           ar:'تنزيل .wasm.zst',                      he:'הורד .wasm.zst',                  ur:'.wasm.zst ڈاؤن لوڈ',                hi:'.wasm.zst डाउनलोड' },
  'preimage.decode.downloadWasmTip':  { en:'Download compressed WASM — decompress with `zstd -d`', es:'Descargar WASM comprimido — descomprímelo con `zstd -d`', fr:'Télécharger le WASM compressé — décompresser avec `zstd -d`', de:'Komprimiertes WASM herunterladen — mit `zstd -d` entpacken', it:'Scarica WASM compresso — decomprimi con `zstd -d`', pt:'Baixar WASM comprimido — descomprimir com `zstd -d`', ru:'Скачать сжатый WASM — распакуйте `zstd -d`', zh:'下载压缩 WASM — 用 `zstd -d` 解压', ja:'圧縮 WASM をダウンロード — `zstd -d` で解凍', ko:'압축 WASM 다운로드 — `zstd -d` 로 압축 해제', ar:'تنزيل WASM مضغوط — فكّ الضغط بـ `zstd -d`', he:'הורד WASM דחוס — פתח עם `zstd -d`', ur:'کمپریسڈ WASM ڈاؤن لوڈ کریں — `zstd -d` سے کھولیں', hi:'संपीड़ित WASM डाउनलोड — `zstd -d` से खोलें' },
  'preimage.decode.upgradeTitle':     { en:'⚙️ SORA runtime upgrade',            es:'⚙️ Actualización de runtime SORA',     fr:'⚙️ Mise à jour du runtime SORA',      de:'⚙️ SORA-Runtime-Upgrade',             it:'⚙️ Aggiornamento runtime SORA',          pt:'⚙️ Atualização do runtime SORA',         ru:'⚙️ Обновление рантайма SORA',         zh:'⚙️ SORA 运行时升级',    ja:'⚙️ SORA ランタイム更新',           ko:'⚙️ SORA 런타임 업그레이드',     ar:'⚙️ ترقية runtime SORA',                 he:'⚙️ שדרוג runtime של SORA',         ur:'⚙️ SORA رن ٹائم اپ گریڈ',           hi:'⚙️ SORA रनटाइम अपग्रेड' },
  'preimage.decode.targetPending':    { en:'Target specVersion pending (backend has no /decode-pretty endpoint).', es:'specVersion destino pendiente (backend sin endpoint /decode-pretty).', fr:'specVersion cible en attente (backend sans /decode-pretty).', de:'Ziel-specVersion ausstehend (Backend ohne /decode-pretty).', it:'specVersion destinazione in attesa (backend senza /decode-pretty).', pt:'specVersion alvo pendente (backend sem /decode-pretty).', ru:'Целевая specVersion ожидается (бэкенд без /decode-pretty).', zh:'目标 specVersion 待定（后端无 /decode-pretty）。', ja:'対象 specVersion 保留中（バックエンドに /decode-pretty なし）。', ko:'대상 specVersion 보류 (백엔드에 /decode-pretty 없음).', ar:'specVersion الهدف معلّق (لا يوجد /decode-pretty).', he:'specVersion יעד ממתין (אין /decode-pretty).', ur:'ٹارگٹ specVersion ملتوی (/decode-pretty نہیں)۔', hi:'लक्ष्य specVersion लंबित (/decode-pretty नहीं)।' },
  'preimage.decode.specName':         { en:'specName',                           es:'specName',                             fr:'specName',                            de:'specName',                            it:'specName',                               pt:'specName',                               ru:'specName',                            zh:'specName',           ja:'specName',                       ko:'specName',                    ar:'specName',                             he:'specName',                        ur:'specName',                          hi:'specName' },
  'preimage.decode.compressed':       { en:'Compressed (zstd)',                  es:'Comprimido (zstd)',                    fr:'Compressé (zstd)',                    de:'Komprimiert (zstd)',                  it:'Compresso (zstd)',                       pt:'Comprimido (zstd)',                      ru:'Сжато (zstd)',                        zh:'已压缩 (zstd)',       ja:'圧縮済み (zstd)',                 ko:'압축됨 (zstd)',               ar:'مضغوط (zstd)',                         he:'דחוס (zstd)',                     ur:'کمپریسڈ (zstd)',                    hi:'संपीड़ित (zstd)' },
  'preimage.decode.decompressed':     { en:'Decompressed (WASM)',                es:'Descomprimido (WASM)',                 fr:'Décompressé (WASM)',                  de:'Entpackt (WASM)',                     it:'Decompresso (WASM)',                     pt:'Descomprimido (WASM)',                   ru:'Распаковано (WASM)',                  zh:'已解压 (WASM)',       ja:'解凍済み (WASM)',                 ko:'압축해제 (WASM)',             ar:'مفكوك (WASM)',                         he:'מפוענח (WASM)',                   ur:'ڈی کمپریسڈ (WASM)',                hi:'डिकंप्रेस्ड (WASM)' },
  'preimage.decode.magicZstd':        { en:'Zstd magic',                         es:'Magic zstd',                           fr:'Magic zstd',                          de:'Zstd-Magic',                          it:'Magic zstd',                             pt:'Magic zstd',                             ru:'Сигнатура zstd',                      zh:'Zstd 魔数',          ja:'Zstd マジック',                  ko:'Zstd 매직',                  ar:'توقيع zstd',                           he:'חתימת zstd',                      ur:'Zstd میجک',                         hi:'Zstd मैजिक' },
  'preimage.decode.magicWasm':        { en:'WASM magic',                         es:'Magic WASM',                           fr:'Magic WASM',                          de:'WASM-Magic',                          it:'Magic WASM',                             pt:'Magic WASM',                             ru:'Сигнатура WASM',                      zh:'WASM 魔数',          ja:'WASM マジック',                  ko:'WASM 매직',                  ar:'توقيع WASM',                           he:'חתימת WASM',                      ur:'WASM میجک',                         hi:'WASM मैजिक' },
  'preimage.decode.integrity':        { en:'Integrity',                          es:'Integridad',                           fr:'Intégrité',                           de:'Integrität',                          it:'Integrità',                              pt:'Integridade',                            ru:'Целостность',                         zh:'完整性',             ja:'整合性',                         ko:'무결성',                     ar:'السلامة',                              he:'שלמות',                          ur:'سالمیت',                            hi:'अखंडता' },
  'preimage.decode.integrityMatch':   { en:'✓ blake2_256 matches',               es:'✓ blake2_256 coincide',                fr:'✓ blake2_256 correspond',             de:'✓ blake2_256 stimmt',                 it:'✓ blake2_256 corrisponde',               pt:'✓ blake2_256 confere',                   ru:'✓ blake2_256 совпадает',              zh:'✓ blake2_256 匹配',  ja:'✓ blake2_256 一致',               ko:'✓ blake2_256 일치',           ar:'✓ تطابق blake2_256',                   he:'✓ blake2_256 תואם',              ur:'✓ blake2_256 میل کھاتا ہے',         hi:'✓ blake2_256 मेल खाता है' },
  'preimage.decode.integrityMismatch':{ en:'✗ hash mismatch',                    es:'✗ hash no coincide',                   fr:'✗ hash ne correspond pas',            de:'✗ Hash-Abweichung',                   it:'✗ hash non corrisponde',                 pt:'✗ hash não confere',                     ru:'✗ хеши не совпадают',                 zh:'✗ 哈希不匹配',        ja:'✗ ハッシュ不一致',                ko:'✗ 해시 불일치',               ar:'✗ عدم تطابق الهاش',                   he:'✗ אי-התאמת hash',                ur:'✗ ہیش میل نہیں کھاتا',             hi:'✗ हैश बेमेल' },
  'preimage.decode.magicOk':          { en:'✓ detected',                         es:'✓ detectada',                          fr:'✓ détecté',                           de:'✓ erkannt',                           it:'✓ rilevato',                             pt:'✓ detectado',                            ru:'✓ обнаружено',                        zh:'✓ 已检测',            ja:'✓ 検出済み',                      ko:'✓ 감지됨',                    ar:'✓ مكتشف',                              he:'✓ זוהה',                          ur:'✓ پتہ چلا',                         hi:'✓ पता चला' },
  'preimage.decode.magicFail':        { en:'✗ not detected',                     es:'✗ no detectada',                       fr:'✗ non détecté',                       de:'✗ nicht erkannt',                     it:'✗ non rilevato',                         pt:'✗ não detectado',                        ru:'✗ не найдено',                        zh:'✗ 未检测到',          ja:'✗ 未検出',                        ko:'✗ 감지되지 않음',             ar:'✗ غير مكتشف',                          he:'✗ לא זוהה',                       ur:'✗ نہیں ملا',                        hi:'✗ नहीं मिला' },
  'preimage.decode.rawHelp':          { en:'To inspect the raw WASM, use the 💾 .wasm.zst button, then `zstd -d runtime-*.wasm.zst` and open with wasm-objdump or subxt.', es:'Para inspeccionar el WASM crudo, descárgalo con el botón 💾 .wasm.zst, luego `zstd -d runtime-*.wasm.zst` y ábrelo con wasm-objdump o subxt.', fr:'Pour inspecter le WASM brut, utilisez 💾 .wasm.zst, puis `zstd -d runtime-*.wasm.zst` et ouvrez-le avec wasm-objdump ou subxt.', de:'Für Roh-WASM: 💾 .wasm.zst-Knopf, dann `zstd -d runtime-*.wasm.zst` und mit wasm-objdump oder subxt öffnen.', it:'Per ispezionare il WASM grezzo, usa 💾 .wasm.zst, poi `zstd -d runtime-*.wasm.zst` con wasm-objdump o subxt.', pt:'Para inspecionar o WASM bruto, use 💾 .wasm.zst, depois `zstd -d runtime-*.wasm.zst` com wasm-objdump ou subxt.', ru:'Для проверки сырого WASM нажмите 💾 .wasm.zst, затем `zstd -d runtime-*.wasm.zst` и откройте wasm-objdump/subxt.', zh:'查看原始 WASM：使用 💾 .wasm.zst 按钮，然后 `zstd -d runtime-*.wasm.zst`，用 wasm-objdump 或 subxt 打开。', ja:'生 WASM を確認するには 💾 .wasm.zst ボタン、`zstd -d runtime-*.wasm.zst` 後に wasm-objdump/subxt で開く。', ko:'원본 WASM 확인: 💾 .wasm.zst 버튼 → `zstd -d runtime-*.wasm.zst` → wasm-objdump/subxt 로 열기.', ar:'لفحص WASM الخام استخدم زر 💾 .wasm.zst ثم `zstd -d runtime-*.wasm.zst` وافتح مع wasm-objdump أو subxt.', he:'לבדיקת WASM גולמי: 💾 .wasm.zst, אז `zstd -d runtime-*.wasm.zst` עם wasm-objdump או subxt.', ur:'خام WASM کا معائنہ: 💾 .wasm.zst، پھر `zstd -d runtime-*.wasm.zst` اور wasm-objdump/subxt میں کھولیں۔', hi:'कच्चे WASM की जाँच: 💾 .wasm.zst बटन → `zstd -d runtime-*.wasm.zst` → wasm-objdump/subxt में खोलें।' },
  'preimage.decode.noArgs':           { en:'This call has no arguments.',         es:'Esta llamada no tiene argumentos.',    fr:'Cet appel n\'a pas d\'arguments.',    de:'Dieser Aufruf hat keine Argumente.',  it:'Questa chiamata non ha argomenti.',      pt:'Esta chamada não tem argumentos.',       ru:'У этого вызова нет аргументов.',      zh:'此调用没有参数。',      ja:'この呼び出しには引数がありません。',   ko:'이 호출에 인자가 없습니다.',    ar:'هذا الاستدعاء بلا وسائط.',             he:'אין ארגומנטים לקריאה הזו.',       ur:'اس کال میں کوئی آرگیومنٹ نہیں۔',    hi:'इस कॉल में कोई तर्क नहीं है।' },
  'preimage.decode.noDecoded':        { en:'Could not decode (bytes unavailable).', es:'No se pudo decodificar (bytes no disponibles).', fr:'Décodage impossible (octets indisponibles).', de:'Dekodieren nicht möglich (Bytes fehlen).', it:'Decodifica impossibile (byte non disp.).', pt:'Não foi possível decodificar (bytes indisp.).', ru:'Декодировать не удалось (байтов нет).', zh:'无法解码（字节不可用）。', ja:'デコードできません（バイト未取得）。', ko:'디코딩 실패 (바이트 없음).',  ar:'تعذّر فك الترميز (لا توجد بايتات).',     he:'לא ניתן לפענח (אין בייטים).',     ur:'ڈی کوڈ نہیں ہو سکا (بائٹس دستیاب نہیں)۔', hi:'डिकोड नहीं हो सका (बाइट अनुपलब्ध)।' },
  /* History modal */
  'preimage.history.title':           { en:'Event history',                      es:'Historial de eventos',                 fr:'Historique d\'événements',            de:'Ereignisverlauf',                     it:'Cronologia eventi',                      pt:'Histórico de eventos',                   ru:'История событий',                     zh:'事件历史',           ja:'イベント履歴',                    ko:'이벤트 기록',                 ar:'سجل الأحداث',                           he:'היסטוריית אירועים',               ur:'واقعات کی تاریخ',                  hi:'घटना इतिहास' },
  'preimage.history.summary':         { en:'Summary',                            es:'Resumen',                              fr:'Résumé',                              de:'Zusammenfassung',                     it:'Riepilogo',                              pt:'Resumo',                                 ru:'Сводка',                              zh:'摘要',               ja:'概要',                           ko:'요약',                       ar:'ملخّص',                                he:'סיכום',                          ur:'خلاصہ',                             hi:'सारांश' },
  'preimage.history.noted':           { en:'Uploaded',                           es:'Subida',                               fr:'Déposée',                             de:'Hochgeladen',                         it:'Caricata',                               pt:'Enviada',                                ru:'Загружен',                            zh:'已上传',             ja:'登録済み',                       ko:'업로드됨',                   ar:'مرفوعة',                               he:'הועלתה',                          ur:'اپ لوڈ',                            hi:'अपलोड' },
  'preimage.history.requested':       { en:'Requested',                          es:'Solicitada',                           fr:'Demandée',                            de:'Angefordert',                         it:'Richiesta',                              pt:'Solicitada',                             ru:'Запрошен',                            zh:'已请求',             ja:'要求済み',                       ko:'요청됨',                     ar:'مطلوبة',                               he:'נתבקשה',                         ur:'درخواست کی',                       hi:'अनुरोधित' },
  'preimage.history.cleared':         { en:'Deleted / Unnoted',                  es:'Borrada / Unnoted',                    fr:'Supprimée / Unnoted',                 de:'Gelöscht / Unnoted',                  it:'Eliminata / Unnoted',                    pt:'Apagada / Unnoted',                      ru:'Удалён / Unnoted',                    zh:'已删除 / Unnoted',    ja:'削除 / Unnoted',                  ko:'삭제 / Unnoted',              ar:'محذوفة / Unnoted',                      he:'נמחקה / Unnoted',                 ur:'حذف / Unnoted',                     hi:'हटाई गई / Unnoted' },
  'preimage.history.noNoted':         { en:'No Noted event detected in range.',  es:'No se detectó evento Noted en el rango.', fr:'Aucun événement Noted dans la plage.', de:'Kein Noted-Ereignis im Bereich.',   it:'Nessun evento Noted nel range.',         pt:'Nenhum evento Noted no intervalo.',      ru:'Событие Noted в диапазоне не найдено.', zh:'范围内未检测到 Noted 事件。', ja:'範囲内に Noted イベントは検出されませんでした。', ko:'범위 내 Noted 이벤트가 없습니다.', ar:'لم يُكتشف حدث Noted في النطاق.',        he:'לא אותר אירוע Noted בטווח.',      ur:'رینج میں کوئی Noted ایونٹ نہیں ملا۔', hi:'रेंज में कोई Noted ईवेंट नहीं मिला।' },
  'preimage.history.indexerWorking':  { en:'Indexer processing history (cursor: {cursor}). Older preimages will appear as backfill catches up.', es:'Indexador procesando histórico (cursor: {cursor}). Si la preimagen es anterior, aparecerá cuando el backfill llegue.', fr:'Indexeur en cours (cursor : {cursor}). Les préimages plus anciennes apparaîtront après le backfill.', de:'Indexer arbeitet (Cursor: {cursor}). Ältere Preimages erscheinen, sobald Backfill sie erreicht.', it:'Indexer al lavoro (cursor: {cursor}). Le preimage più vecchie appariranno col backfill.', pt:'Indexador processando (cursor: {cursor}). Preimages mais antigas aparecerão após o backfill.', ru:'Индексатор обрабатывает (cursor: {cursor}). Старые прообразы появятся после дозагрузки.', zh:'索引器处理中 (cursor: {cursor})。更旧的预映像会在补档后出现。', ja:'インデクサ処理中 (cursor: {cursor})。古いプリイメージはバックフィル後に表示。', ko:'인덱서 처리 중 (cursor: {cursor}). 오래된 프리이미지는 백필 후 표시.', ar:'الفهرس يعمل (cursor: {cursor}). ستظهر preimages الأقدم بعد إكمال backfill.', he:'מאנדקס פועל (cursor: {cursor}). preimages ישנים יופיעו אחרי backfill.', ur:'انڈیکسر کام کر رہا ہے (cursor: {cursor}).', hi:'इंडेक्सर प्रगति पर (cursor: {cursor}).' },
  'preimage.history.loading':         { en:'Loading...',                         es:'Cargando...',                          fr:'Chargement...',                       de:'Wird geladen...',                     it:'Caricamento...',                         pt:'Carregando...',                          ru:'Загрузка...',                         zh:'加载中...',           ja:'読み込み中...',                   ko:'불러오는 중...',              ar:'جارٍ التحميل...',                      he:'טוען...',                        ur:'لوڈ ہو رہا ہے...',                  hi:'लोड हो रहा है...' },
  'preimage.history.loadingTimeline': { en:'Loading timeline...',                es:'Cargando timeline...',                 fr:'Chargement de la timeline...',        de:'Zeitleiste wird geladen...',          it:'Caricamento timeline...',                pt:'Carregando linha do tempo...',           ru:'Загрузка ленты...',                   zh:'加载时间线...',       ja:'タイムライン読み込み中...',        ko:'타임라인 불러오는 중...',      ar:'جارٍ تحميل الخط الزمني...',             he:'טוען ציר זמן...',                 ur:'ٹائم لائن لوڈ ہو رہی ہے...',        hi:'टाइमलाइन लोड हो रही है...' },
  'preimage.history.noEvents':        { en:'No events in available range.',      es:'Sin eventos en el rango disponible.',  fr:'Aucun événement dans la plage.',      de:'Keine Ereignisse im verfügbaren Bereich.', it:'Nessun evento nel range.',           pt:'Nenhum evento no intervalo.',            ru:'Событий в диапазоне нет.',            zh:'可用范围内无事件。',    ja:'利用可能な範囲にイベントはありません。', ko:'사용 가능 범위에 이벤트 없음.',  ar:'لا توجد أحداث في النطاق.',               he:'אין אירועים בטווח.',              ur:'رینج میں کوئی ایونٹ نہیں۔',         hi:'रेंज में कोई ईवेंट नहीं।' },
  'preimage.history.dbSource':        { en:'Data from own indexer',              es:'Datos del indexador propio',           fr:'Données de l\'indexeur propre',       de:'Daten aus eigenem Indexer',           it:'Dati dall\'indexer proprio',             pt:'Dados do indexador próprio',             ru:'Данные собственного индексера',       zh:'来自自有索引器的数据',  ja:'自前インデクサのデータ',           ko:'자체 인덱서 데이터',           ar:'بيانات من الفهرس الخاص',               he:'מידע מהאינדקסר הפנימי',            ur:'اپنے انڈیکسر سے ڈیٹا',              hi:'अपने इंडेक्सर का डेटा' },
  'preimage.history.dbComplete':      { en:'✓ Stored in own DB · full history',  es:'✓ Guardado en BD propia · histórico completo', fr:'✓ Enregistré en BDD propre · historique complet', de:'✓ In eigener DB gespeichert · volle Historie', it:'✓ Salvato in DB proprio · storico completo', pt:'✓ Salvo em BD própria · histórico completo', ru:'✓ Сохранено в своей БД · полная история', zh:'✓ 存储于自建 DB · 完整历史', ja:'✓ 自前 DB に保存 · 全履歴',        ko:'✓ 자체 DB 저장 · 전체 이력',  ar:'✓ محفوظ في قاعدة خاصة · سجل كامل',      he:'✓ נשמר ב-DB פנימי · היסטוריה מלאה', ur:'✓ اپنی DB میں محفوظ · مکمل تاریخ',   hi:'✓ अपने DB में सहेजा गया · पूर्ण इतिहास' },
  'preimage.history.dbBackfilling':   { en:'backfill in progress',               es:'backfill en curso',                    fr:'backfill en cours',                   de:'Backfill läuft',                      it:'backfill in corso',                      pt:'backfill em andamento',                  ru:'идёт дозагрузка',                     zh:'补档中',             ja:'バックフィル中',                  ko:'백필 진행 중',                ar:'backfill قيد التنفيذ',                 he:'backfill רץ',                     ur:'backfill جاری',                     hi:'बैकफ़िल जारी' },
  'preimage.history.rpcScanBtn':      { en:'↑ Scan earlier blocks (RPC)',        es:'↑ Scan RPC bloques anteriores',        fr:'↑ Scanner les blocs antérieurs (RPC)',de:'↑ Frühere Blöcke scannen (RPC)',      it:'↑ Scansiona blocchi precedenti (RPC)',   pt:'↑ Escanear blocos anteriores (RPC)',     ru:'↑ Сканировать более ранние блоки (RPC)', zh:'↑ 扫描更早的区块 (RPC)', ja:'↑ 過去ブロックをスキャン (RPC)',    ko:'↑ 이전 블록 스캔 (RPC)',       ar:'↑ فحص كتل سابقة (RPC)',                he:'↑ סרוק בלוקים קודמים (RPC)',       ur:'↑ پچھلے بلاکس اسکین (RPC)',         hi:'↑ पिछले ब्लॉक स्कैन (RPC)' },
  'preimage.history.rpcScanUsed':     { en:'Includes RPC scan (slow)',           es:'Incluye RPC scan (lento)',             fr:'Inclut un scan RPC (lent)',           de:'Enthält RPC-Scan (langsam)',          it:'Include scan RPC (lento)',               pt:'Inclui scan RPC (lento)',                ru:'Включает RPC-скан (медленно)',        zh:'包含 RPC 扫描（慢）',  ja:'RPC スキャン込み（低速）',           ko:'RPC 스캔 포함 (느림)',         ar:'يشمل فحص RPC (بطيء)',                   he:'כולל סריקת RPC (איטי)',            ur:'RPC اسکین شامل (سست)',              hi:'RPC स्कैन शामिल (धीमा)' },
  'preimage.history.reasonUpgrade':   { en:'🔧 Runtime upgrade',                 es:'🔧 Runtime upgrade',                   fr:'🔧 Mise à jour du runtime',           de:'🔧 Runtime-Upgrade',                  it:'🔧 Aggiornamento runtime',               pt:'🔧 Atualização de runtime',              ru:'🔧 Обновление рантайма',              zh:'🔧 运行时升级',        ja:'🔧 ランタイム更新',                 ko:'🔧 런타임 업그레이드',         ar:'🔧 ترقية runtime',                      he:'🔧 שדרוג runtime',                 ur:'🔧 رن ٹائم اپ گریڈ',                 hi:'🔧 रनटाइम अपग्रेड' },
  'preimage.history.reasonScheduler': { en:'⏲ Executed by scheduler',            es:'⏲ Scheduler lo ejecutó',               fr:'⏲ Exécuté par le scheduler',          de:'⏲ Vom Scheduler ausgeführt',          it:'⏲ Eseguito dallo scheduler',             pt:'⏲ Executado pelo scheduler',             ru:'⏲ Выполнено планировщиком',           zh:'⏲ 由调度器执行',       ja:'⏲ スケジューラで実行',              ko:'⏲ 스케줄러가 실행',             ar:'⏲ نفّذه المجدوِل',                      he:'⏲ בוצע ע״י המתזמן',                ur:'⏲ شیڈیولر نے چلایا',                 hi:'⏲ शेड्यूलर ने चलाया' },
  'preimage.history.reasonUnnote':    { en:'👤 Depositor deleted it',            es:'👤 Depositante lo borró',              fr:'👤 Déposant l\'a supprimé',           de:'👤 Einzahler hat es gelöscht',        it:'👤 Depositante l\'ha eliminato',         pt:'👤 Depositante apagou',                  ru:'👤 Удалено депозитором',              zh:'👤 存款人已删除',      ja:'👤 デポジッタが削除',                ko:'👤 예치자가 삭제',             ar:'👤 المودِع حذفها',                      he:'👤 המפקיד מחק',                    ur:'👤 ڈپازٹر نے حذف کیا',               hi:'👤 जमाकर्ता ने हटाया' },

  /* ===== Portfolio: backup / restore / empty state ===== */
  'portfolio.backup':          { en:'Backup',               es:'Backup',              fr:'Sauvegarde',          de:'Backup',               it:'Backup',              pt:'Backup',              ru:'Резервная копия',     zh:'备份',             ja:'バックアップ',        ko:'백업',             ar:'نسخة احتياطية',        he:'גיבוי',              ur:'بیک اپ',             hi:'बैकअप' },
  'portfolio.restore':         { en:'Restore',              es:'Restaurar',           fr:'Restaurer',           de:'Wiederherstellen',     it:'Ripristina',          pt:'Restaurar',           ru:'Восстановить',        zh:'恢复',             ja:'復元',                ko:'복원',             ar:'استعادة',              he:'שחזור',              ur:'بحال کریں',          hi:'पुनर्स्थापित' },
  'portfolio.backupTip':       { en:'Download backup (.json) with wallets + favorites + language',  es:'Descargar backup (.json) con carteras + favoritos + idioma',      fr:'Télécharger la sauvegarde (.json) : portefeuilles + favoris + langue',  de:'Backup (.json) mit Wallets + Favoriten + Sprache herunterladen',  it:'Scarica backup (.json) con portafogli + preferiti + lingua',  pt:'Baixar backup (.json) com carteiras + favoritos + idioma',  ru:'Скачать резервную копию (.json): кошельки + избранное + язык', zh:'下载备份 (.json)：钱包 + 收藏 + 语言',   ja:'バックアップ (.json) をダウンロード：ウォレット・お気に入り・言語',  ko:'백업 (.json) 다운로드: 지갑 + 즐겨찾기 + 언어',   ar:'تنزيل النسخة (.json): المحافظ والمفضلة واللغة',    he:'הורד גיבוי (.json): ארנקים + מועדפים + שפה',   ur:'بیک اپ (.json) ڈاؤن لوڈ: والیٹس + پسندیدہ + زبان',  hi:'बैकअप (.json) डाउनलोड: वॉलेट + पसंदीदा + भाषा' },
  'portfolio.restoreTip':      { en:'Restore backup — accepts v1 and v2 files',     es:'Restaurar backup — acepta formatos v1 y v2',      fr:'Restaurer la sauvegarde — accepte les formats v1 et v2',      de:'Backup wiederherstellen — v1- und v2-Dateien',      it:'Ripristina backup — accetta file v1 e v2',      pt:'Restaurar backup — aceita arquivos v1 e v2',      ru:'Восстановить — принимает файлы v1 и v2',      zh:'恢复备份 — 支持 v1 和 v2 文件',      ja:'バックアップを復元 — v1 / v2 ファイル対応',      ko:'백업 복원 — v1 및 v2 파일 지원',      ar:'استعادة النسخة — يقبل ملفات v1 و v2',      he:'שחזור גיבוי — תומך בקבצי v1 ו־v2',      ur:'بیک اپ بحال — v1 اور v2 فائلیں',      hi:'बैकअप पुनर्स्थापित — v1 और v2 फ़ाइलें' },
  'portfolio.restoreConfirm':  { en:'Restore backup?\nYour current wallets and favorites will be replaced.',  es:'¿Restaurar backup?\nSe reemplazarán tus carteras y favoritos actuales.',  fr:'Restaurer la sauvegarde ?\nVos portefeuilles et favoris actuels seront remplacés.',  de:'Backup wiederherstellen?\nDeine aktuellen Wallets und Favoriten werden ersetzt.',  it:'Ripristinare il backup?\nI portafogli e i preferiti attuali saranno sostituiti.',  pt:'Restaurar backup?\nSuas carteiras e favoritos atuais serão substituídos.',  ru:'Восстановить?\nТекущие кошельки и избранное будут заменены.',  zh:'恢复备份？\n当前钱包和收藏将被替换。',  ja:'バックアップを復元しますか？\n現在のウォレットとお気に入りが置き換えられます。',  ko:'백업을 복원하시겠어요?\n현재 지갑과 즐겨찾기가 대체됩니다.',  ar:'استعادة النسخة؟\nسيتم استبدال المحافظ والمفضلة الحالية.',  he:'לשחזר את הגיבוי?\nהארנקים והמועדפים הנוכחיים יוחלפו.',  ur:'بیک اپ بحال کریں؟\nموجودہ والیٹس اور پسندیدہ بدل جائیں گے۔',  hi:'बैकअप पुनर्स्थापित करें?\nआपके वर्तमान वॉलेट और पसंदीदा बदल जाएँगे।' },
  'portfolio.backupOk':        { en:'Backup downloaded',           es:'Backup descargado',           fr:'Sauvegarde téléchargée',       de:'Backup heruntergeladen',       it:'Backup scaricato',           pt:'Backup baixado',           ru:'Резервная копия скачана',    zh:'备份已下载',       ja:'バックアップをダウンロードしました',     ko:'백업이 다운로드됨',       ar:'تم تنزيل النسخة',          he:'הגיבוי הורד',         ur:'بیک اپ ڈاؤن لوڈ ہو گیا',      hi:'बैकअप डाउनलोड हुआ' },
  'portfolio.restoreOk':       { en:'Backup restored',             es:'Backup restaurado',           fr:'Sauvegarde restaurée',         de:'Backup wiederhergestellt',     it:'Backup ripristinato',         pt:'Backup restaurado',        ru:'Резервная копия восстановлена', zh:'备份已恢复',       ja:'バックアップを復元しました',             ko:'백업 복원됨',            ar:'تمت الاستعادة',             he:'הגיבוי שוחזר',         ur:'بیک اپ بحال ہو گیا',          hi:'बैकअप पुनर्स्थापित' },
  'portfolio.restoreErr':      { en:'Invalid file',                es:'Archivo inválido',            fr:'Fichier invalide',             de:'Ungültige Datei',              it:'File non valido',              pt:'Arquivo inválido',         ru:'Неверный файл',              zh:'文件无效',         ja:'無効なファイル',             ko:'잘못된 파일',           ar:'ملف غير صالح',              he:'קובץ לא תקין',         ur:'غلط فائل',                 hi:'अमान्य फ़ाइल' },
  'portfolio.noWalletsYet':    { en:'No wallets yet',              es:'Sin wallets todavía',         fr:'Aucun portefeuille',           de:'Noch keine Wallets',           it:'Nessun portafoglio',           pt:'Sem carteiras ainda',      ru:'Пока нет кошельков',         zh:'还没有钱包',       ja:'ウォレットがありません',       ko:'아직 지갑 없음',         ar:'لا توجد محافظ بعد',          he:'אין ארנקים עדיין',     ur:'ابھی کوئی والیٹ نہیں',       hi:'अभी कोई वॉलेट नहीं' },
  'portfolio.emptyHint':       { en:'Add a wallet to see your real portfolio, or restore a backup (v1 or v2).',  es:'Añade una wallet para ver tu portafolio real, o restaura un backup (v1 o v2).',  fr:'Ajoutez un portefeuille pour voir votre portfolio réel, ou restaurez une sauvegarde (v1 ou v2).',  de:'Füge eine Wallet hinzu, um dein echtes Portfolio zu sehen, oder stelle ein Backup wieder her (v1 oder v2).',  it:'Aggiungi un portafoglio per vedere il tuo portfolio reale, o ripristina un backup (v1 o v2).',  pt:'Adicione uma carteira para ver o portfólio real, ou restaure um backup (v1 ou v2).',  ru:'Добавьте кошелёк, чтобы увидеть реальный портфель, или восстановите копию (v1 или v2).',  zh:'添加钱包查看真实组合，或恢复备份 (v1 / v2)。',  ja:'ウォレットを追加して実際のポートフォリオを表示、またはバックアップ (v1/v2) を復元。',  ko:'지갑을 추가하여 실제 포트폴리오를 보거나 백업(v1/v2)을 복원하세요.',  ar:'أضف محفظة لرؤية محفظتك الحقيقية، أو استعد نسخة (v1 أو v2).',  he:'הוסף ארנק כדי לראות את התיק האמיתי, או שחזר גיבוי (v1 או v2).',  ur:'اپنی اصلی پورٹ فولیو دیکھنے کے لیے والیٹ شامل کریں یا بیک اپ (v1/v2) بحال کریں۔',  hi:'वास्तविक पोर्टफ़ोलियो देखने के लिए वॉलेट जोड़ें, या बैकअप (v1/v2) पुनर्स्थापित करें।' },
  'portfolio.addWallet':       { en:'+ Add Wallet',                es:'+ Añadir Wallet',             fr:'+ Ajouter portefeuille',       de:'+ Wallet hinzufügen',          it:'+ Aggiungi portafoglio',       pt:'+ Adicionar carteira',     ru:'+ Добавить кошелёк',         zh:'+ 添加钱包',      ja:'+ ウォレット追加',             ko:'+ 지갑 추가',           ar:'+ أضف محفظة',              he:'+ הוסף ארנק',         ur:'+ والیٹ شامل کریں',          hi:'+ वॉलेट जोड़ें' },
  'portfolio.showWallets':     { en:'Show wallets',                es:'Mostrar wallets',             fr:'Afficher les portefeuilles',   de:'Wallets anzeigen',             it:'Mostra portafogli',            pt:'Mostrar carteiras',        ru:'Показать кошельки',          zh:'显示钱包',        ja:'ウォレットを表示',           ko:'지갑 보이기',           ar:'إظهار المحافظ',            he:'הצג ארנקים',         ur:'والیٹس دکھائیں',             hi:'वॉलेट दिखाएँ' },
  'portfolio.hideWallets':     { en:'Hide wallets',                es:'Ocultar wallets',             fr:'Masquer les portefeuilles',    de:'Wallets ausblenden',           it:'Nascondi portafogli',          pt:'Ocultar carteiras',        ru:'Скрыть кошельки',            zh:'隐藏钱包',        ja:'ウォレットを隠す',           ko:'지갑 숨기기',           ar:'إخفاء المحافظ',            he:'הסתר ארנקים',         ur:'والیٹس چھپائیں',             hi:'वॉलेट छिपाएँ' },
  'portfolio.hideLow':         { en:'Hide low balances',           es:'Ocultar saldos bajos',        fr:'Masquer les petits soldes',    de:'Kleine Guthaben ausblenden',   it:'Nascondi saldi bassi',         pt:'Ocultar saldos baixos',    ru:'Скрыть малые балансы',       zh:'隐藏少量余额',    ja:'低額残高を隠す',             ko:'소액 잔고 숨기기',       ar:'إخفاء الأرصدة الصغيرة',     he:'הסתר יתרות קטנות',     ur:'کم بیلنس چھپائیں',          hi:'कम बैलेंस छिपाएँ' },
  'portfolio.hideLowTip':      { en:'Hide tokens with value ≤ $0.05 from the table. Does not affect net worth or the allocation chart.',  es:'Oculta tokens con valor ≤ $0.05 de la tabla. No afecta al total ni al gráfico de asignación.',  fr:'Masque les jetons avec valeur ≤ 0,05 $ du tableau. N\'affecte ni le total ni la répartition.',  de:'Blendet Tokens mit Wert ≤ 0,05 $ aus der Tabelle aus. Kein Einfluss auf Nettovermögen/Allocation.',  it:'Nasconde i token con valore ≤ $0,05 dalla tabella. Non influisce su net worth o allocazione.',  pt:'Oculta tokens com valor ≤ $0,05 da tabela. Não afeta net worth nem a alocação.',  ru:'Скрывает токены со значением ≤ $0,05 из таблицы. Не влияет на суммарную стоимость и распределение.',  zh:'从表格中隐藏价值 ≤ $0.05 的代币。不影响总资产或分配图。',  ja:'テーブルで価値 ≤ $0.05 のトークンを非表示。合計や配分チャートには影響しません。',  ko:'테이블에서 $0.05 이하 가치의 토큰 숨김. 총 자산/배분 차트에는 영향 없음.',  ar:'يخفي الرموز التي قيمتها ≤ $0.05 من الجدول. لا يؤثر على صافي الثروة أو مخطط التوزيع.',  he:'מסתיר אסימונים בשווי ≤ $0.05 מהטבלה. לא משפיע על ערך נטו או תרשים ההקצאה.',  ur:'ٹیبل سے ≤ $0.05 والیو کے ٹوکن چھپائیں۔ کل یا تقسیم چارٹ متاثر نہیں ہوتا۔',  hi:'तालिका से ≤ $0.05 मूल्य वाले टोकन छिपाता है। कुल या आवंटन चार्ट पर प्रभाव नहीं।' },
  'portfolio.allLowHidden':    { en:'All balances are below the threshold. Turn off the filter to see them.',  es:'Todos los saldos están por debajo del umbral. Desactiva el filtro para verlos.',  fr:'Tous les soldes sont sous le seuil. Désactivez le filtre pour les voir.',  de:'Alle Guthaben liegen unter dem Schwellenwert. Filter deaktivieren, um sie zu sehen.',  it:'Tutti i saldi sono sotto la soglia. Disattiva il filtro per vederli.',  pt:'Todos os saldos estão abaixo do limite. Desative o filtro para vê-los.',  ru:'Все балансы ниже порога. Отключите фильтр, чтобы увидеть.',  zh:'所有余额都低于阈值。关闭筛选以查看。',  ja:'すべての残高が閾値以下です。フィルターをオフにして表示。',  ko:'모든 잔고가 임계값 이하입니다. 필터를 꺼서 확인하세요.',  ar:'جميع الأرصدة أقل من الحد. عطّل الفلتر لرؤيتها.',  he:'כל היתרות מתחת לסף. כבה את המסנן כדי לראותן.',  ur:'تمام بیلنسز حد سے کم ہیں۔ دیکھنے کے لیے فلٹر بند کریں۔',  hi:'सभी बैलेंस सीमा से नीचे हैं। देखने के लिए फ़िल्टर बंद करें।' },

  /* ===== Wallet Add/Details modals ===== */
  'wallet.securityBanner':     { en:'🔒 Read-only. SoraMetrics never asks for your seed or private key — only the public address to show balance and activity. Signing happens in your wallet (Fearless, Polkaswap, Talisman…).',  es:'🔒 Solo-lectura. SoraMetrics nunca pide tu seed ni tu clave privada — únicamente la dirección pública para mostrar saldo y actividad. Las firmas las haces desde tu wallet (Fearless, Polkaswap, Talisman…).',  fr:'🔒 Lecture seule. SoraMetrics ne demande jamais votre seed ni votre clé privée — uniquement l\'adresse publique pour afficher solde et activité. Les signatures se font dans votre portefeuille (Fearless, Polkaswap, Talisman…).',  de:'🔒 Nur-lesen. SoraMetrics fragt niemals nach Seed oder Private Key — nur nach der öffentlichen Adresse. Signieren erfolgt in deiner Wallet (Fearless, Polkaswap, Talisman…).',  it:'🔒 Sola lettura. SoraMetrics non chiede mai seed o chiave privata — solo l\'indirizzo pubblico per saldo e attività. Le firme avvengono nel tuo wallet (Fearless, Polkaswap, Talisman…).',  pt:'🔒 Somente leitura. SoraMetrics nunca pede seed nem chave privada — apenas o endereço público para mostrar saldo e atividade. As assinaturas são feitas na sua carteira (Fearless, Polkaswap, Talisman…).',  ru:'🔒 Только чтение. SoraMetrics никогда не просит сид-фразу или приватный ключ — только публичный адрес для отображения баланса и активности. Подписи — в вашем кошельке (Fearless, Polkaswap, Talisman…).',  zh:'🔒 只读。SoraMetrics 绝不索取助记词或私钥——仅需公共地址用于显示余额和活动。签名请在您的钱包中进行（Fearless、Polkaswap、Talisman…）。',  ja:'🔒 読み取り専用。SoraMetrics はシードや秘密鍵を求めません。公開アドレスのみで残高と履歴を表示します。署名はご自身のウォレット（Fearless、Polkaswap、Talisman…）で行ってください。',  ko:'🔒 읽기 전용. SoraMetrics는 시드 구문이나 개인 키를 요구하지 않으며, 잔액·활동 표시에 공개 주소만 사용합니다. 서명은 Fearless, Polkaswap, Talisman 등 사용자 지갑에서 진행하세요.',  ar:'🔒 قراءة فقط. SoraMetrics لا يطلب أبدًا عبارة الاسترداد أو المفتاح الخاص — فقط العنوان العام لعرض الرصيد والنشاط. التوقيع يتم من محفظتك (Fearless, Polkaswap, Talisman…).',  he:'🔒 קריאה בלבד. SoraMetrics לעולם לא מבקש את ה-seed או המפתח הפרטי — רק הכתובת הציבורית להצגת יתרה ופעילות. החתימות נעשות בארנק שלך (Fearless / Polkaswap / Talisman…).',  ur:'🔒 صرف پڑھنے کے لیے۔ SoraMetrics آپ کی seed یا پرائیویٹ کلید کبھی نہیں مانگتا — صرف بیلنس اور سرگرمی دکھانے کے لیے پبلک ایڈریس۔ دستخط آپ کے والیٹ (Fearless/Polkaswap/Talisman) سے ہوتے ہیں۔',  hi:'🔒 केवल-पढ़ें। SoraMetrics कभी आपकी seed या निजी कुंजी नहीं माँगता — केवल सार्वजनिक पता बैलेंस/गतिविधि दिखाने के लिए। हस्ताक्षर आपके वॉलेट (Fearless/Polkaswap/Talisman…) में होते हैं।' },
  'wallet.aliasOptional':      { en:'Alias (optional)',          es:'Alias (opcional)',          fr:'Alias (optionnel)',       de:'Alias (optional)',       it:'Alias (opzionale)',       pt:'Alias (opcional)',       ru:'Псевдоним (необязательно)', zh:'别名（可选）',     ja:'エイリアス（任意）',        ko:'별칭 (선택)',          ar:'اسم مستعار (اختياري)',      he:'כינוי (לא חובה)',      ur:'عرفیت (اختیاری)',         hi:'उपनाम (वैकल्पिक)' },
  'wallet.aliasPlaceholder':   { en:'E.g. Trading, Savings… (leave empty to use address)',  es:'Ej: Trading, Savings… (si lo dejas vacío se usa la dirección)',  fr:'Ex : Trading, Savings… (laissez vide pour utiliser l\'adresse)',  de:'z.B. Trading, Savings… (leer lassen = Adresse)',  it:'Es: Trading, Savings… (vuoto = indirizzo)',  pt:'Ex: Trading, Savings… (vazio = endereço)',  ru:'Напр: Trading, Savings… (пусто = адрес)',  zh:'例如：Trading、Savings… （留空使用地址）',  ja:'例：Trading, Savings…（空欄でアドレス表示）',  ko:'예: Trading, Savings… (비우면 주소 사용)',  ar:'مثال: Trading, Savings… (اتركه فارغًا لاستخدام العنوان)',  he:'למשל: Trading, Savings… (ריק = הכתובת)',  ur:'جیسے: Trading, Savings… (خالی چھوڑیں تو ایڈریس)',  hi:'जैसे: Trading, Savings… (खाली = पता)' },
  'wallet.publicAddress':      { en:'SORA public address',       es:'Dirección pública SORA',     fr:'Adresse publique SORA',    de:'SORA öffentliche Adresse', it:'Indirizzo pubblico SORA', pt:'Endereço público SORA',  ru:'Публичный адрес SORA',     zh:'SORA 公共地址',    ja:'SORA 公開アドレス',         ko:'SORA 공개 주소',        ar:'العنوان العام لـ SORA',    he:'כתובת ציבורית SORA',   ur:'SORA پبلک ایڈریس',        hi:'SORA सार्वजनिक पता' },
  'wallet.addressPlaceholder': { en:'cnV… (47-49 chars)',        es:'cnV… (47-49 caracteres)',    fr:'cnV… (47-49 car.)',        de:'cnV… (47-49 Zeichen)',     it:'cnV… (47-49 caratteri)',  pt:'cnV… (47-49 caracteres)',ru:'cnV… (47-49 симв.)',         zh:'cnV…（47-49 字符）', ja:'cnV…（47〜49文字）',        ko:'cnV… (47-49자)',         ar:'cnV… (47-49 حرف)',         he:'cnV… (47-49 תווים)',   ur:'cnV… (47-49 حروف)',        hi:'cnV… (47-49 वर्ण)' },
  'wallet.addressInvalidHint': { en:'Address doesn\'t match SORA SS58 format. Must start with cn and be 47-49 chars.',  es:'La dirección no tiene el formato SS58 de SORA. Debe empezar por cn y tener 47-49 caracteres.',  fr:'L\'adresse ne correspond pas au format SS58 de SORA. Doit commencer par cn et faire 47-49 caractères.',  de:'Adresse entspricht nicht dem SS58-Format von SORA. Muss mit cn beginnen, 47-49 Zeichen.',  it:'Indirizzo non nel formato SS58 di SORA. Deve iniziare con cn e avere 47-49 caratteri.',  pt:'Endereço fora do formato SS58 de SORA. Começa com cn e tem 47-49 caracteres.',  ru:'Адрес не в формате SS58 SORA. Должен начинаться с cn и иметь 47-49 символов.',  zh:'地址不是 SORA SS58 格式。需以 cn 开头，47-49 字符。',  ja:'SORA の SS58 形式ではありません。cn で始まる 47〜49 文字が必要です。',  ko:'SORA SS58 형식이 아닙니다. cn으로 시작하고 47-49자여야 합니다.',  ar:'العنوان ليس بصيغة SS58 الخاصة بـ SORA. يبدأ بـ cn وطوله 47-49.',  he:'הכתובת לא בפורמט SS58 של SORA. חייבת להתחיל ב-cn, 47-49 תווים.',  ur:'ایڈریس SORA کے SS58 فارمیٹ میں نہیں۔ cn سے شروع اور 47-49 حروف۔',  hi:'पता SORA SS58 प्रारूप में नहीं। cn से शुरू, 47-49 वर्ण।' },
  'wallet.addressInvalid':     { en:'Invalid SORA address',      es:'Dirección SORA inválida',    fr:'Adresse SORA invalide',    de:'Ungültige SORA-Adresse',   it:'Indirizzo SORA non valido',pt:'Endereço SORA inválido', ru:'Неверный адрес SORA',        zh:'SORA 地址无效',    ja:'SORA アドレスが無効',       ko:'유효하지 않은 SORA 주소',ar:'عنوان SORA غير صالح',       he:'כתובת SORA לא תקינה',  ur:'غلط SORA ایڈریس',          hi:'अमान्य SORA पता' },
  'wallet.cancel':             { en:'Cancel',                    es:'Cancelar',                    fr:'Annuler',                  de:'Abbrechen',                it:'Annulla',                 pt:'Cancelar',               ru:'Отмена',                     zh:'取消',            ja:'キャンセル',                ko:'취소',                  ar:'إلغاء',                    he:'ביטול',                ur:'منسوخ',                    hi:'रद्द करें' },
  'wallet.add':                { en:'Add',                       es:'Añadir',                      fr:'Ajouter',                  de:'Hinzufügen',               it:'Aggiungi',                pt:'Adicionar',              ru:'Добавить',                   zh:'添加',            ja:'追加',                     ko:'추가',                  ar:'إضافة',                    he:'הוסף',                 ur:'شامل',                    hi:'जोड़ें' },
  'wallet.modalTitle':         { en:'Add Wallet',                es:'Añadir Cartera',              fr:'Ajouter portefeuille',     de:'Wallet hinzufügen',        it:'Aggiungi portafoglio',    pt:'Adicionar carteira',     ru:'Добавить кошелёк',           zh:'添加钱包',        ja:'ウォレット追加',            ko:'지갑 추가',              ar:'إضافة محفظة',             he:'הוסף ארנק',           ur:'والیٹ شامل کریں',         hi:'वॉलेट जोड़ें' },
  'wallet.myWallets':          { en:'My Wallets',                es:'Mis Wallets',                 fr:'Mes portefeuilles',        de:'Meine Wallets',            it:'I miei portafogli',       pt:'Minhas carteiras',       ru:'Мои кошельки',               zh:'我的钱包',        ja:'マイウォレット',            ko:'내 지갑',                ar:'محافظي',                  he:'הארנקים שלי',          ur:'میرے والیٹس',             hi:'मेरे वॉलेट' },
  'wallet.follow':             { en:'Follow',                    es:'Seguir',                      fr:'Suivre',                   de:'Folgen',                   it:'Segui',                   pt:'Seguir',                 ru:'Следить',                    zh:'关注',            ja:'フォロー',                 ko:'팔로우',                 ar:'متابعة',                  he:'עקוב',                 ur:'فالو',                    hi:'फ़ॉलो' },
  'wallet.myWalletsTip':       { en:'Add to My Wallets (your own wallets)',     es:'Añadir a Mis Wallets (carteras propias)',     fr:'Ajouter à Mes portefeuilles (vos portefeuilles)',     de:'Zu Meine Wallets hinzufügen (eigene Wallets)',     it:'Aggiungi a I miei portafogli (portafogli propri)',     pt:'Adicionar às Minhas carteiras (carteiras próprias)',     ru:'Добавить в Мои кошельки (свои кошельки)',     zh:'添加到我的钱包（自己的钱包）',     ja:'マイウォレット（自分の）に追加',     ko:'내 지갑(나의 지갑)에 추가',     ar:'أضف إلى محافظي (محافظك الخاصة)',     he:'הוסף ל"הארנקים שלי" (שלך)',     ur:'میرے والیٹس میں شامل (اپنے)',     hi:'मेरे वॉलेट में जोड़ें (अपने)' },
  'wallet.followTip':          { en:'Add to Following (wallets to watch)',     es:'Añadir a Seguidas (carteras a vigilar)',     fr:'Ajouter à Suivis (portefeuilles à surveiller)',     de:'Zu Beobachtete hinzufügen (zu überwachen)',     it:'Aggiungi a Seguiti (portafogli da monitorare)',     pt:'Adicionar a Seguidas (a monitorar)',     ru:'Добавить в Отслеживаемые',     zh:'添加到关注列表',     ja:'ウォッチ中に追加',     ko:'팔로잉에 추가',     ar:'أضف إلى المتابَعة',     he:'הוסף ל"עוקבים"',     ur:'فالو لسٹ میں',     hi:'फ़ॉलो सूची में' },
  'wallet.addedToMyWallets':   { en:'Added to My Wallets',       es:'Añadida a Mis Wallets',       fr:'Ajoutée à Mes portefeuilles', de:'Zu Meine Wallets hinzugefügt', it:'Aggiunto a I miei portafogli', pt:'Adicionada às Minhas carteiras', ru:'Добавлено в Мои кошельки', zh:'已加入我的钱包', ja:'マイウォレットに追加', ko:'내 지갑에 추가됨', ar:'أُضيفت إلى محافظي',      he:'נוסף ל"הארנקים שלי"',  ur:'میرے والیٹس میں شامل',    hi:'मेरे वॉलेट में जोड़ा' },
  'wallet.addedToFollowing':   { en:'Added to Following',         es:'Añadida a Seguidas',          fr:'Ajoutée à Suivis',         de:'Zu Beobachtete hinzugefügt', it:'Aggiunto ai Seguiti',   pt:'Adicionada a Seguidas',  ru:'Добавлено в Отслеживаемые',  zh:'已加入关注',     ja:'ウォッチ中に追加',        ko:'팔로잉에 추가됨',         ar:'أُضيفت إلى المتابَعة',     he:'נוסף ל"עוקבים"',       ur:'فالو لسٹ میں شامل',       hi:'फ़ॉलो सूची में जोड़ा' },
  'wallet.aliasUpdated':       { en:'Alias updated',              es:'Alias actualizado',           fr:'Alias mis à jour',         de:'Alias aktualisiert',       it:'Alias aggiornato',        pt:'Alias atualizado',       ru:'Псевдоним обновлён',         zh:'别名已更新',      ja:'エイリアスを更新',           ko:'별칭 업데이트됨',        ar:'تم تحديث الاسم',            he:'הכינוי עודכן',          ur:'عرفیت اپ ڈیٹ',             hi:'उपनाम अपडेट' },
  'wallet.removed':            { en:'Wallet removed',             es:'Cartera eliminada',           fr:'Portefeuille supprimé',    de:'Wallet entfernt',          it:'Portafoglio rimosso',     pt:'Carteira removida',      ru:'Кошелёк удалён',             zh:'钱包已删除',      ja:'ウォレット削除',             ko:'지갑 삭제됨',            ar:'تمت إزالة المحفظة',        he:'הארנק הוסר',           ur:'والیٹ حذف',                hi:'वॉलेट हटाया' },
  'wallet.removedFromFollowing':{ en:'Removed from Following',    es:'Quitada de Seguidas',         fr:'Retirée de Suivis',        de:'Aus Beobachtete entfernt', it:'Rimosso dai Seguiti',     pt:'Removida de Seguidas',   ru:'Удалено из Отслеживаемых',   zh:'已从关注中移除',  ja:'ウォッチ中から削除',         ko:'팔로잉에서 제거',        ar:'أُزيلت من المتابَعة',       he:'הוסר מ"עוקבים"',       ur:'فالو لسٹ سے ہٹایا',       hi:'फ़ॉलो से हटाया' },
  'wallet.inMyWallets':        { en:'In My Wallets',              es:'En Mis Wallets',              fr:'Dans Mes portefeuilles',   de:'In Meine Wallets',         it:'In I miei portafogli',    pt:'Em Minhas carteiras',    ru:'В Моих кошельках',           zh:'在我的钱包中',   ja:'マイウォレット内',            ko:'내 지갑에 있음',         ar:'في محافظي',                he:'ב"הארנקים שלי"',       ur:'میرے والیٹس میں',         hi:'मेरे वॉलेट में' },
  'wallet.inFollowing':        { en:'In Following',               es:'En Seguidas',                 fr:'Dans Suivis',              de:'In Beobachtete',           it:'Nei Seguiti',             pt:'Em Seguidas',            ru:'В Отслеживаемых',            zh:'在关注中',        ja:'ウォッチ中',                ko:'팔로잉에 있음',          ar:'في المتابَعة',             he:'ב"עוקבים"',            ur:'فالو لسٹ میں',            hi:'फ़ॉलो में' },
  'wallet.savePrompt':         { en:'Save this wallet',           es:'Guardar esta wallet',         fr:'Enregistrer ce portefeuille', de:'Diese Wallet speichern', it:'Salva questo portafoglio', pt:'Salvar esta carteira',    ru:'Сохранить этот кошелёк',      zh:'保存此钱包',      ja:'このウォレットを保存',        ko:'이 지갑 저장',           ar:'احفظ هذه المحفظة',         he:'שמור את הארנק הזה',    ur:'یہ والیٹ محفوظ کریں',     hi:'यह वॉलेट सहेजें' },
  'wallet.alias':              { en:'Alias',                      es:'Alias',                       fr:'Alias',                    de:'Alias',                    it:'Alias',                   pt:'Alias',                  ru:'Псевдоним',                  zh:'别名',            ja:'エイリアス',                ko:'별칭',                   ar:'اسم مستعار',               he:'כינוי',                ur:'عرفیت',                   hi:'उपनाम' },
  'wallet.save':               { en:'Save',                       es:'Guardar',                     fr:'Enregistrer',              de:'Speichern',                it:'Salva',                   pt:'Salvar',                 ru:'Сохранить',                  zh:'保存',            ja:'保存',                     ko:'저장',                   ar:'حفظ',                     he:'שמור',                 ur:'محفوظ',                   hi:'सहेजें' },
  'wallet.myWalletsDesc':      { en:'My Wallets = your own wallets · Following = other wallets you want to watch.',  es:'Mis Wallets = tus carteras propias · Seguidas = otras carteras que quieres vigilar.',  fr:'Mes portefeuilles = les vôtres · Suivis = autres portefeuilles à surveiller.',  de:'Meine Wallets = eigene Wallets · Beobachtete = weitere Wallets, die du beobachten willst.',  it:'I miei portafogli = i tuoi · Seguiti = altri portafogli da monitorare.',  pt:'Minhas carteiras = próprias · Seguidas = outras carteiras a monitorar.',  ru:'Мои кошельки = свои · Отслеживаемые = другие для наблюдения.',  zh:'我的钱包 = 自己的 · 关注 = 想监控的其他钱包。',  ja:'マイウォレット = 自分の · ウォッチ中 = 監視したい他のウォレット。',  ko:'내 지갑 = 본인 · 팔로잉 = 관찰할 기타 지갑.',  ar:'محافظي = الخاصة بك · المتابَعة = محافظ أخرى تراقبها.',  he:'הארנקים שלי = שלך · עוקבים = ארנקים נוספים שתרצה לעקוב אחריהם.',  ur:'میرے والیٹس = اپنے · فالو = وہ دیگر والیٹس جنہیں آپ دیکھنا چاہیں۔',  hi:'मेरे वॉलेट = अपने · फ़ॉलो = निगरानी के लिए अन्य वॉलेट।' },
  'wallet.remove':             { en:'Remove',                es:'Eliminar',               fr:'Supprimer',             de:'Entfernen',            it:'Rimuovi',             pt:'Remover',             ru:'Удалить',               zh:'删除',          ja:'削除',            ko:'삭제',            ar:'حذف',               he:'הסר',          ur:'حذف',           hi:'हटाएँ' },
  'wallet.removeConfirm':      { en:'Remove',                es:'¿Eliminar',              fr:'Supprimer',             de:'Entfernen',            it:'Rimuovere',           pt:'Remover',             ru:'Удалить',               zh:'删除',          ja:'削除',            ko:'삭제',            ar:'حذف',               he:'הסר',          ur:'حذف',           hi:'हटाएँ' },
  'wallet.removeWarn':         { en:'This cannot be undone.', es:'No se puede deshacer.',  fr:'Irréversible.',         de:'Nicht rückgängig zu machen.', it:'Non annullabile.',  pt:'Irreversível.',       ru:'Это необратимо.',       zh:'无法撤销。',     ja:'元に戻せません。', ko:'되돌릴 수 없습니다.', ar:'لا يمكن التراجع.',    he:'לא ניתן לבטל.', ur:'واپس نہیں ہوگا۔', hi:'पूर्ववत नहीं होगा।' },
  'wallet.removeYes':          { en:'Yes, remove',           es:'Sí, eliminar',           fr:'Oui, supprimer',        de:'Ja, entfernen',        it:'Sì, rimuovi',         pt:'Sim, remover',        ru:'Да, удалить',           zh:'是，删除',      ja:'はい、削除',       ko:'예, 삭제',         ar:'نعم، احذف',        he:'כן, הסר',      ur:'ہاں، حذف کریں', hi:'हाँ, हटाएँ' },
  'wallet.moveToFollowingTip': { en:'Move this wallet to Following (read-only watch list)',  es:'Mover esta wallet a Seguidas (lista de solo-lectura)',  fr:'Déplacer ce portefeuille vers Suivis (lecture seule)',  de:'Diese Wallet zu Beobachtete verschieben (nur-lesen)',  it:'Sposta questo portafoglio in Seguiti (solo lettura)',  pt:'Mover esta carteira para Seguidas (somente leitura)',  ru:'Переместить в Отслеживаемые (только чтение)',  zh:'将此钱包移至关注（只读）',  ja:'このウォレットをウォッチ中へ移動（読み取り専用）',  ko:'이 지갑을 팔로잉으로 이동 (읽기 전용)',  ar:'نقل هذه المحفظة إلى المتابَعة (قراءة فقط)',  he:'העבר ארנק זה ל"עוקבים" (קריאה בלבד)',  ur:'اس والیٹ کو فالو میں منتقل کریں',  hi:'इस वॉलेट को फ़ॉलो में ले जाएँ' },
  'wallet.moveToMyWalletsTip': { en:'Move this wallet to My Wallets (your own)',  es:'Mover esta wallet a Mis Wallets (carteras propias)',  fr:'Déplacer vers Mes portefeuilles (les vôtres)',  de:'Nach Meine Wallets verschieben (eigene)',  it:'Sposta in I miei portafogli (propri)',  pt:'Mover para Minhas carteiras (próprias)',  ru:'Переместить в Мои кошельки (свои)',  zh:'移至我的钱包（自己的）',  ja:'マイウォレット（自分の）へ移動',  ko:'내 지갑(나의 지갑)으로 이동',  ar:'نقل إلى محافظي (الخاصة بك)',  he:'העבר ל"הארנקים שלי" (שלך)',  ur:'میرے والیٹس میں منتقل',  hi:'मेरे वॉलेट में ले जाएँ' },

  /* ===== Full Explorer modal (Pulse → blocks) ===== */
  'explorer.title':            { en:'Block Explorer',               es:'Explorador de bloques',         fr:'Explorateur de blocs',      de:'Block-Explorer',          it:'Esploratore di blocchi',   pt:'Explorador de blocos',     ru:'Обозреватель блоков',      zh:'区块浏览器',      ja:'ブロックエクスプローラ',     ko:'블록 탐색기',          ar:'مستكشف الكتل',             he:'סייר בלוקים',          ur:'بلاک ایکسپلورر',          hi:'ब्लॉक एक्सप्लोरर' },
  'explorer.sub':              { en:'Paginate backwards or jump to any block', es:'Pagina hacia atrás o salta a cualquier bloque', fr:'Paginez en arrière ou sautez à un bloc', de:'Rückwärts blättern oder zu einem Block springen', it:'Scorri indietro o salta a un blocco', pt:'Pagine para trás ou salte para qualquer bloco', ru:'Листайте назад или перейдите к любому блоку', zh:'向前翻页或跳转到任意区块', ja:'遡ってページング、または任意のブロックへジャンプ', ko:'뒤로 페이징하거나 특정 블록으로 이동', ar:'تصفح إلى الخلف أو اقفز إلى أي كتلة', he:'דפדוף אחורה או קפיצה לבלוק', ur:'پیچھے کریں یا کسی بلاک پر جائیں', hi:'पीछे जाएँ या किसी ब्लॉक पर कूदें' },
  'explorer.gotoPlaceholder':  { en:'Go to block #…',                es:'Ir a bloque #…',                fr:'Aller au bloc #…',          de:'Zu Block #… gehen',       it:'Vai al blocco #…',         pt:'Ir ao bloco #…',           ru:'К блоку #…',                zh:'跳转到 #…',       ja:'ブロック #… へ',             ko:'블록 #… 로 이동',        ar:'اذهب إلى الكتلة #…',        he:'עבור לבלוק #…',        ur:'بلاک #… پر جائیں',         hi:'ब्लॉक #… पर जाएँ' },
  'explorer.go':               { en:'Go',                            es:'Ir',                            fr:'Aller',                     de:'Los',                     it:'Vai',                      pt:'Ir',                       ru:'Перейти',                   zh:'跳转',            ja:'移動',                      ko:'이동',                    ar:'اذهب',                      he:'עבור',                 ur:'جائیں',                    hi:'जाएँ' },
  'explorer.latest':           { en:'Latest',                        es:'Último',                        fr:'Dernier',                   de:'Neueste',                 it:'Ultimo',                   pt:'Último',                   ru:'Последний',                 zh:'最新',            ja:'最新',                      ko:'최신',                    ar:'الأحدث',                   he:'האחרון',               ur:'تازہ',                     hi:'नवीनतम' },
  'explorer.newer':            { en:'Newer',                         es:'Más reciente',                  fr:'Plus récent',               de:'Neuer',                   it:'Più recente',              pt:'Mais recente',             ru:'Новее',                     zh:'较新',            ja:'より新しい',                ko:'최신 쪽',                 ar:'الأحدث',                   he:'חדש יותר',             ur:'نیا',                       hi:'नया' },
  'explorer.older':            { en:'Older',                         es:'Más antiguo',                   fr:'Plus ancien',               de:'Älter',                   it:'Più vecchio',              pt:'Mais antigo',              ru:'Старее',                    zh:'较旧',            ja:'より古い',                  ko:'이전 쪽',                 ar:'الأقدم',                   he:'ישן יותר',             ur:'پرانا',                    hi:'पुराना' },
  'explorer.col.block':        { en:'Block',                         es:'Bloque',                        fr:'Bloc',                      de:'Block',                   it:'Blocco',                   pt:'Bloco',                    ru:'Блок',                      zh:'区块',            ja:'ブロック',                  ko:'블록',                    ar:'كتلة',                      he:'בלוק',                 ur:'بلاک',                     hi:'ब्लॉक' },
  'explorer.col.time':         { en:'Time',                          es:'Hora',                          fr:'Heure',                     de:'Zeit',                    it:'Ora',                      pt:'Hora',                     ru:'Время',                     zh:'时间',            ja:'時刻',                      ko:'시간',                    ar:'الوقت',                    he:'זמן',                  ur:'وقت',                      hi:'समय' },
  'explorer.col.validator':    { en:'Validator',                     es:'Validator',                     fr:'Validateur',                de:'Validator',               it:'Validatore',               pt:'Validador',                ru:'Валидатор',                 zh:'验证者',          ja:'バリデータ',                ko:'검증자',                  ar:'المُصدّق',                  he:'ולידטור',              ur:'تصدیق کنندہ',             hi:'सत्यापनकर्ता' },
  'explorer.col.extrinsics':   { en:'Extrinsics',                    es:'Extrínsecos',                   fr:'Extrinsèques',              de:'Extrinsics',              it:'Extrinsic',                pt:'Extrínsecos',              ru:'Экстринсики',               zh:'外部交易',        ja:'エクストリンシック',           ko:'익스트린식',               ar:'المعاملات',                 he:'אקסטרינסיקים',         ur:'ایکسٹرنسکس',                hi:'एक्सट्रिंसिक्स' },
  'explorer.col.hash':         { en:'Hash',                          es:'Hash',                          fr:'Hash',                      de:'Hash',                    it:'Hash',                     pt:'Hash',                     ru:'Хэш',                       zh:'哈希',            ja:'ハッシュ',                  ko:'해시',                    ar:'الهاش',                    he:'האש',                  ur:'ہیش',                      hi:'हैश' },
  'explorer.loading':          { en:'Loading…',                      es:'Cargando…',                     fr:'Chargement…',               de:'Wird geladen…',           it:'Caricamento…',             pt:'Carregando…',              ru:'Загрузка…',                 zh:'加载中…',         ja:'読み込み中…',                ko:'불러오는 중…',             ar:'جارٍ التحميل…',              he:'טוען…',                ur:'لوڈ ہو رہا ہے…',           hi:'लोड हो रहा है…' },
  'explorer.empty':            { en:'No blocks in this range.',      es:'Sin bloques en este rango.',    fr:'Aucun bloc dans cet intervalle.', de:'Keine Blöcke in diesem Bereich.', it:'Nessun blocco in questo intervallo.', pt:'Sem blocos neste intervalo.', ru:'В этом диапазоне нет блоков.', zh:'此范围内无区块。',  ja:'この範囲にブロックはありません。',   ko:'이 범위에 블록이 없습니다.', ar:'لا توجد كتل في هذا النطاق.',   he:'אין בלוקים בטווח הזה.',  ur:'اس رینج میں کوئی بلاک نہیں۔', hi:'इस रेंज में कोई ब्लॉक नहीं।' },

  /* ===== Governance · body strings (tabs stay in Spanish as proper names) ===== */
  'gov.council.members':       { en:'Council members',           es:'Miembros del Consejo',      fr:'Membres du Conseil',        de:'Council-Mitglieder',       it:'Membri del Consiglio',    pt:'Membros do Conselho',    ru:'Члены Совета',             zh:'理事会成员',     ja:'評議会メンバー',            ko:'의회 구성원',           ar:'أعضاء المجلس',           he:'חברי המועצה',         ur:'کونسل کے ارکان',          hi:'परिषद सदस्य' },
  'gov.council.seatsFilled':   { en:'{n} seats filled',          es:'{n} asientos ocupados',     fr:'{n} sièges occupés',        de:'{n} Sitze besetzt',        it:'{n} seggi occupati',      pt:'{n} assentos ocupados',  ru:'Занято мест: {n}',          zh:'已占 {n} 席位',   ja:'占有議席 {n}',               ko:'{n}석 채움',              ar:'{n} مقاعد مشغولة',        he:'{n} מושבים מאוישים',    ur:'{n} سیٹیں بھری',          hi:'{n} सीटें भरी' },
  'gov.col.joined':            { en:'Joined (era)',              es:'Se unió (era)',             fr:'Rejoint (ère)',             de:'Beigetreten (Ära)',        it:'Entrato (era)',           pt:'Entrou (era)',           ru:'Вступил (эра)',            zh:'加入 (era)',     ja:'参加 (era)',                ko:'가입 (era)',             ar:'انضم (era)',              he:'הצטרף (era)',          ur:'شامل (era)',              hi:'शामिल (era)' },
  'gov.col.votesCast':         { en:'Votes cast',                es:'Votos emitidos',            fr:'Votes exprimés',            de:'Abgegebene Stimmen',       it:'Voti espressi',           pt:'Votos emitidos',         ru:'Поданные голоса',          zh:'已投票',         ja:'投じられた票',               ko:'투표 수',                ar:'الأصوات المُدلى بها',      he:'הצבעות שניתנו',        ur:'ڈالے گئے ووٹ',             hi:'डाले गए वोट' },
  'gov.col.title':             { en:'Title',                     es:'Título',                    fr:'Titre',                     de:'Titel',                    it:'Titolo',                  pt:'Título',                 ru:'Заголовок',               zh:'标题',           ja:'タイトル',                  ko:'제목',                   ar:'العنوان',                 he:'כותרת',                ur:'عنوان',                    hi:'शीर्षक' },
  'gov.col.seconds':           { en:'Endorsements',              es:'Respaldos',                 fr:'Soutiens',                  de:'Unterstützungen',          it:'Sostegni',                pt:'Apoios',                 ru:'Поддержки',                zh:'支持数',         ja:'賛同',                     ko:'지지',                   ar:'التأييدات',               he:'תמיכות',               ur:'حمایتیں',                  hi:'समर्थन' },
  'gov.col.deposit':           { en:'Deposit',                   es:'Depósito',                  fr:'Dépôt',                     de:'Einlage',                  it:'Deposito',                pt:'Depósito',               ru:'Депозит',                  zh:'押金',           ja:'デポジット',                ko:'예치금',                 ar:'إيداع',                   he:'פיקדון',               ur:'ڈپازٹ',                   hi:'जमा' },
  'gov.elections.candidates':  { en:'Current candidates',        es:'Candidatos actuales',       fr:'Candidats actuels',         de:'Aktuelle Kandidaten',      it:'Candidati attuali',       pt:'Candidatos atuais',      ru:'Текущие кандидаты',        zh:'当前候选人',     ja:'現在の候補者',               ko:'현재 후보',              ar:'المرشحون الحاليون',        he:'מועמדים נוכחיים',      ur:'موجودہ امیدوار',           hi:'वर्तमान उम्मीदवार' },
  'gov.elections.runnersUp':   { en:'Runners-up',                es:'Suplentes',                 fr:'Suppléants',                de:'Nachrücker',               it:'Supplenti',               pt:'Suplentes',              ru:'Запасные',                 zh:'候补',           ja:'次点',                     ko:'차점자',                 ar:'البدلاء',                 he:'ממלאי מקום',           ur:'متبادل',                   hi:'उपविजेता' },
  'gov.elections.bond':        { en:'Bond',                      es:'Fianza',                    fr:'Caution',                   de:'Kaution',                  it:'Cauzione',                pt:'Caução',                 ru:'Залог',                    zh:'保证金',         ja:'保証金',                   ko:'보증금',                 ar:'الكفالة',                 he:'ערבות',                ur:'ضمانت',                   hi:'जमानत' },
  'gov.elections.seatsCovered':{ en:'seats filled · next vote in', es:'asientos cubiertos · siguiente votación en', fr:'sièges occupés · prochain vote dans', de:'Sitze belegt · nächste Wahl in', it:'seggi occupati · prossimo voto in', pt:'assentos preenchidos · próxima votação em', ru:'мест занято · следующее голосование через', zh:'席位已占 · 下次投票还有', ja:'議席充足 · 次回投票まで', ko:'좌석 채움 · 다음 투표까지', ar:'المقاعد مشغولة · التصويت القادم خلال', he:'מושבים מאוישים · הצבעה הבאה בעוד', ur:'سیٹیں بھری · اگلا ووٹ', hi:'सीटें भरी · अगला वोट' },
  'gov.elections.eras':        { en:'eras',                      es:'eras',                      fr:'ères',                      de:'Ären',                     it:'ere',                     pt:'eras',                   ru:'эр',                       zh:'eras',           ja:'eras',                    ko:'eras',                   ar:'عصور',                    he:'עידנים',               ur:'ادوار',                   hi:'युग' },
  'gov.motions.title':         { en:'Active and recent motions', es:'Mociones activas y recientes', fr:'Motions actives et récentes', de:'Aktive und jüngste Anträge', it:'Mozioni attive e recenti', pt:'Moções ativas e recentes', ru:'Активные и недавние предложения', zh:'活跃和近期动议', ja:'アクティブ・最近の動議',       ko:'활성 및 최근 동의',       ar:'الاقتراحات النشطة والحديثة', he:'הצעות פעילות וחדשות',  ur:'فعال اور حالیہ تحریکیں',   hi:'सक्रिय व हालिया प्रस्ताव' },
  'gov.motions.proposedBy':    { en:'Proposed by',               es:'Propuesta por',             fr:'Proposé par',               de:'Vorgeschlagen von',        it:'Proposto da',             pt:'Proposto por',           ru:'Предложено',               zh:'提议人',         ja:'提案者',                   ko:'제안자',                 ar:'اقترحه',                  he:'הוצע על ידי',          ur:'تجویز کردہ',              hi:'प्रस्तावक' },
  'gov.status.open':           { en:'Open',                      es:'Abierta',                   fr:'Ouverte',                   de:'Offen',                    it:'Aperta',                  pt:'Aberta',                 ru:'Открыто',                  zh:'开放',           ja:'受付中',                   ko:'오픈',                    ar:'مفتوحة',                  he:'פתוחה',                ur:'کھلا',                    hi:'खुला' },
  'gov.status.passed':         { en:'Approved',                  es:'Aprobada',                  fr:'Approuvée',                 de:'Angenommen',               it:'Approvata',               pt:'Aprovada',               ru:'Одобрено',                 zh:'通过',           ja:'可決',                     ko:'승인',                    ar:'تمت الموافقة',             he:'אושרה',                ur:'منظور',                   hi:'स्वीकृत' },
  'gov.status.rejected':       { en:'Rejected',                  es:'Rechazada',                 fr:'Rejetée',                   de:'Abgelehnt',                it:'Respinta',                pt:'Rejeitada',              ru:'Отклонено',                zh:'驳回',           ja:'否決',                     ko:'거부',                    ar:'مرفوضة',                   he:'נדחתה',                ur:'مسترد',                   hi:'अस्वीकृत' },
  'gov.democracy.referendums': { en:'Active referendums',        es:'Referéndums en curso',      fr:'Référendums en cours',      de:'Aktive Referenden',        it:'Referendum in corso',     pt:'Referendos ativos',      ru:'Активные референдумы',     zh:'进行中的公投',    ja:'実施中の国民投票',           ko:'진행 중 국민투표',         ar:'الاستفتاءات النشطة',       he:'משאלים פעילים',        ur:'فعال ریفرنڈم',            hi:'सक्रिय जनमत' },
  'gov.democracy.noReferendums':{en:'No active referendums.',    es:'No hay referéndums activos.',fr:'Aucun référendum actif.',  de:'Keine aktiven Referenden.',it:'Nessun referendum attivo.',pt:'Sem referendos ativos.', ru:'Нет активных референдумов.', zh:'当前无公投。',    ja:'実施中の国民投票はありません。', ko:'진행 중인 국민투표 없음.', ar:'لا توجد استفتاءات نشطة.', he:'אין משאלים פעילים.',   ur:'کوئی فعال ریفرنڈم نہیں۔', hi:'कोई सक्रिय जनमत नहीं।' },
  'gov.democracy.endsIn':      { en:'Ends in',                   es:'Termina en',                fr:'Se termine dans',           de:'Endet in',                 it:'Finisce in',              pt:'Termina em',             ru:'Заканчивается через',      zh:'结束于',         ja:'終了まで',                  ko:'종료까지',                ar:'ينتهي خلال',               he:'מסתיים בעוד',          ur:'ختم ہوگا',                hi:'समाप्त होगा' },
  'gov.democracy.turnout':     { en:'Turnout',                   es:'Participación',             fr:'Participation',             de:'Beteiligung',              it:'Partecipazione',          pt:'Participação',           ru:'Участие',                  zh:'参与率',         ja:'投票率',                   ko:'참여율',                  ar:'نسبة المشاركة',           he:'שיעור הצבעה',          ur:'شرح شرکت',                hi:'भागीदारी' },
  'gov.democracy.publicProposals':{en:'Public proposals',        es:'Propuestas públicas',       fr:'Propositions publiques',    de:'Öffentliche Vorschläge',   it:'Proposte pubbliche',      pt:'Propostas públicas',     ru:'Публичные предложения',    zh:'公共提案',       ja:'公開提案',                  ko:'공개 제안',               ar:'المقترحات العامة',         he:'הצעות ציבוריות',       ur:'عوامی تجاویز',            hi:'सार्वजनिक प्रस्ताव' },
  'gov.democracy.noProposals': { en:'No active public proposals.', es:'Sin propuestas públicas activas.', fr:'Aucune proposition publique active.', de:'Keine aktiven öffentlichen Vorschläge.', it:'Nessuna proposta pubblica attiva.', pt:'Sem propostas públicas ativas.', ru:'Нет активных публичных предложений.', zh:'当前无公共提案。', ja:'現在、公開提案はありません。', ko:'활성 공개 제안 없음.', ar:'لا توجد مقترحات عامة نشطة.', he:'אין הצעות ציבוריות פעילות.', ur:'کوئی فعال عوامی تجاویز نہیں۔', hi:'कोई सक्रिय सार्वजनिक प्रस्ताव नहीं।' },
  'gov.tech.members':          { en:'Technical Committee members', es:'Miembros del Comité Técnico', fr:'Membres du Comité Technique', de:'Mitglieder des Technical Committee', it:'Membri del Comitato Tecnico', pt:'Membros do Comitê Técnico', ru:'Члены Технического комитета', zh:'技术委员会成员', ja:'技術委員会メンバー',   ko:'기술 위원회 구성원',      ar:'أعضاء اللجنة الفنية',     he:'חברי הוועדה הטכנית',   ur:'تکنیکی کمیٹی کے ارکان',    hi:'तकनीकी समिति सदस्य' },
  'gov.tech.motions':          { en:'Technical motions',         es:'Mociones técnicas',         fr:'Motions techniques',        de:'Technische Anträge',       it:'Mozioni tecniche',        pt:'Moções técnicas',        ru:'Технические предложения',  zh:'技术动议',       ja:'技術的動議',                ko:'기술 동의',               ar:'الاقتراحات الفنية',        he:'הצעות טכניות',         ur:'تکنیکی تحریکیں',          hi:'तकनीकी प्रस्ताव' },

  /* ===== Pool activity (global + per-pool modal) ===== */
  'pool.activity.title':       { en:'Activity',                    es:'Activity',                  fr:'Activité',                 de:'Aktivität',              it:'Attività',              pt:'Atividade',             ru:'Активность',            zh:'活动',           ja:'アクティビティ',           ko:'활동',                ar:'النشاط',                  he:'פעילות',             ur:'سرگرمی',                hi:'गतिविधि' },
  'pool.activity.globalTitle': { en:'Global liquidity activity',   es:'Actividad global de liquidez', fr:'Activité de liquidité globale', de:'Globale Liquiditätsaktivität', it:'Attività globale di liquidità', pt:'Atividade global de liquidez', ru:'Глобальная активность ликвидности', zh:'全局流动性活动', ja:'グローバル流動性アクティビティ', ko:'전체 유동성 활동', ar:'نشاط السيولة العام', he:'פעילות נזילות כוללת', ur:'عالمی لیکویڈٹی سرگرمی', hi:'वैश्विक तरलता गतिविधि' },
  'pool.activity.empty':       { en:'No recent activity in this pool.', es:'Sin actividad reciente en este pool.', fr:'Aucune activité récente dans ce pool.', de:'Keine jüngste Aktivität in diesem Pool.', it:'Nessuna attività recente in questo pool.', pt:'Sem atividade recente neste pool.', ru:'В этом пуле нет недавней активности.', zh:'此池无最近活动。', ja:'このプールに最近のアクティビティはありません。', ko:'이 풀에 최근 활동이 없습니다.', ar:'لا يوجد نشاط حديث في هذا المجمع.', he:'אין פעילות אחרונה בבריכה זו.', ur:'اس پول میں حالیہ سرگرمی نہیں۔', hi:'इस पूल में हाल की गतिविधि नहीं।' },
  'pool.activity.loading':     { en:'Loading activity...',         es:'Cargando actividad...',     fr:'Chargement de l\'activité...', de:'Aktivität wird geladen...', it:'Caricamento attività...', pt:'Carregando atividade...', ru:'Загрузка активности...', zh:'加载活动中...',    ja:'アクティビティを読み込み中...', ko:'활동 불러오는 중...',  ar:'جارٍ تحميل النشاط...',     he:'טוען פעילות...',      ur:'سرگرمی لوڈ ہو رہی...',    hi:'गतिविधि लोड हो रही...' },
  'pool.activity.noneRecent':  { en:'No recent activity',          es:'Sin actividad reciente',    fr:'Aucune activité récente',  de:'Keine jüngste Aktivität',it:'Nessuna attività recente', pt:'Sem atividade recente', ru:'Нет недавней активности',  zh:'无最近活动',      ja:'最近のアクティビティなし',    ko:'최근 활동 없음',       ar:'لا يوجد نشاط حديث',        he:'אין פעילות אחרונה',    ur:'کوئی حالیہ سرگرمی نہیں',    hi:'कोई हाल की गतिविधि नहीं' },
  'pool.activity.dateFilterTip':{en:'Filter events before this date/time', es:'Filtrar eventos anteriores a esta fecha/hora', fr:'Filtrer les événements avant cette date/heure', de:'Ereignisse vor diesem Datum/Uhrzeit filtern', it:'Filtra eventi precedenti a data/ora', pt:'Filtrar eventos anteriores a esta data/hora', ru:'Фильтр: события до этой даты/времени', zh:'筛选此日期/时间之前的事件', ja:'この日時より前のイベントでフィルタ', ko:'이 날짜/시간 이전 이벤트 필터', ar:'تصفية الأحداث قبل هذا التاريخ/الوقت', he:'סינון אירועים לפני תאריך/שעה זו', ur:'اس تاریخ/وقت سے پہلے کے واقعات', hi:'इस तिथि/समय से पहले की घटनाएँ' },
  'pool.activity.events':      { en:'events',                      es:'eventos',                   fr:'événements',               de:'Ereignisse',             it:'eventi',                pt:'eventos',               ru:'событий',                zh:'事件',           ja:'イベント',                ko:'이벤트',                ar:'أحداث',                    he:'אירועים',             ur:'واقعات',                   hi:'घटनाएँ' },
  'pool.activity.add':         { en:'Add',                         es:'Depósito',                  fr:'Ajout',                    de:'Hinzufügen',             it:'Aggiunta',              pt:'Adição',                ru:'Добавление',             zh:'添加',           ja:'追加',                    ko:'추가',                ar:'إضافة',                    he:'הוספה',               ur:'اضافہ',                    hi:'जोड़' },
  'pool.activity.remove':      { en:'Remove',                      es:'Retiro',                    fr:'Retrait',                  de:'Entfernen',              it:'Rimozione',             pt:'Retirada',              ru:'Изъятие',                zh:'移除',           ja:'削除',                    ko:'제거',                ar:'إزالة',                    he:'הסרה',                ur:'ہٹانا',                    hi:'हटाएँ' },
  'pool.activity.pageHead':    { en:'Latest page',                 es:'Página más reciente',       fr:'Page la plus récente',     de:'Neueste Seite',          it:'Pagina più recente',    pt:'Página mais recente',   ru:'Самая свежая страница',  zh:'最新页',         ja:'最新ページ',              ko:'최신 페이지',           ar:'أحدث صفحة',                he:'עמוד האחרון',         ur:'تازہ ترین صفحہ',           hi:'नवीनतम पृष्ठ' },
  'pool.activity.pageN':       { en:'Page {n}',                    es:'Página {n}',                fr:'Page {n}',                 de:'Seite {n}',              it:'Pagina {n}',            pt:'Página {n}',            ru:'Страница {n}',           zh:'第 {n} 页',     ja:'{n} ページ',              ko:'{n} 페이지',            ar:'صفحة {n}',                 he:'עמוד {n}',            ur:'صفحہ {n}',                 hi:'पृष्ठ {n}' },
  'pool.col.time':             { en:'Time',                        es:'Hora',                      fr:'Heure',                    de:'Zeit',                   it:'Ora',                   pt:'Hora',                  ru:'Время',                  zh:'时间',           ja:'時刻',                    ko:'시간',                ar:'الوقت',                   he:'זמן',                 ur:'وقت',                      hi:'समय' },
  'pool.col.block':            { en:'Block',                       es:'Bloque',                    fr:'Bloc',                     de:'Block',                  it:'Blocco',                pt:'Bloco',                 ru:'Блок',                   zh:'区块',           ja:'ブロック',                ko:'블록',                ar:'كتلة',                     he:'בלוק',                ur:'بلاک',                     hi:'ब्लॉक' },
  'pool.col.pair':             { en:'Pair',                        es:'Par',                       fr:'Paire',                    de:'Paar',                   it:'Coppia',                pt:'Par',                   ru:'Пара',                   zh:'交易对',         ja:'ペア',                    ko:'페어',                ar:'الزوج',                   he:'זוג',                 ur:'جوڑا',                     hi:'जोड़ी' },
  'pool.col.type':             { en:'Type',                        es:'Tipo',                      fr:'Type',                     de:'Typ',                    it:'Tipo',                  pt:'Tipo',                  ru:'Тип',                    zh:'类型',           ja:'種類',                    ko:'유형',                ar:'النوع',                   he:'סוג',                 ur:'قسم',                      hi:'प्रकार' },
  'pool.col.amount':           { en:'Amount',                      es:'Cantidad',                  fr:'Montant',                  de:'Betrag',                 it:'Quantità',              pt:'Quantia',               ru:'Количество',             zh:'数量',           ja:'数量',                    ko:'수량',                ar:'المقدار',                  he:'כמות',                ur:'مقدار',                    hi:'राशि' },

  /* ===== Generic small strings used in multiple places ===== */
  'common.loading':            { en:'Loading…',                    es:'Cargando…',                 fr:'Chargement…',              de:'Wird geladen…',          it:'Caricamento…',          pt:'Carregando…',           ru:'Загрузка…',              zh:'加载中…',        ja:'読み込み中…',             ko:'불러오는 중…',          ar:'جارٍ التحميل…',            he:'טוען…',               ur:'لوڈ ہو رہا ہے…',          hi:'लोड हो रहा है…' },
  'common.loadingShort':       { en:'loading',                     es:'cargando',                  fr:'chargement',               de:'lädt',                   it:'caricamento',           pt:'carregando',            ru:'загрузка',               zh:'加载中',         ja:'読込中',                  ko:'로딩',                ar:'جاري التحميل',             he:'טוען',                ur:'لوڈ',                      hi:'लोड' },
  'common.refresh':            { en:'Refresh',                     es:'Actualizar',                fr:'Actualiser',               de:'Aktualisieren',          it:'Aggiorna',              pt:'Atualizar',             ru:'Обновить',               zh:'刷新',           ja:'更新',                    ko:'새로고침',              ar:'تحديث',                    he:'רענן',                ur:'ریفریش',                   hi:'रिफ़्रेश' },
  'common.clear':              { en:'Clear',                       es:'Limpiar',                   fr:'Effacer',                  de:'Löschen',                it:'Pulisci',               pt:'Limpar',                ru:'Очистить',               zh:'清除',           ja:'クリア',                  ko:'지우기',                ar:'مسح',                      he:'נקה',                 ur:'صاف کریں',                 hi:'साफ़ करें' },
  'wallet.openTip':            { en:'Open wallet',                 es:'Abrir wallet',              fr:'Ouvrir le portefeuille',   de:'Wallet öffnen',          it:'Apri portafoglio',      pt:'Abrir carteira',        ru:'Открыть кошелёк',        zh:'打开钱包',       ja:'ウォレットを開く',         ko:'지갑 열기',             ar:'افتح المحفظة',             he:'פתח ארנק',            ur:'والیٹ کھولیں',            hi:'वॉलेट खोलें' },
  // XOR migration page. Languages without an entry fall back to English.
  'xormig.title':            { en:'XOR cross-chain migration', es:'Migración XOR entre cadenas', fr:'Migration XOR inter-chaînes', de:'XOR-Cross-Chain-Migration', it:'Migrazione XOR cross-chain', pt:'Migração XOR entre cadeias' },
  'xormig.subtitle':         { en:'XOR burned on SORA v2 with eligibility from block #25,867,650 is reclaimable on Minamoto. Each verified migration carries the v2 burn-tx hash on-chain in Minamoto so we can stitch both sides into one timeline.', es:'El XOR quemado en SORA v2, elegible desde el bloque #25.867.650, se puede reclamar en Minamoto. Cada migración verificada lleva en Minamoto el hash de la transacción de quema de v2, y así unimos ambos lados en una sola línea temporal.', fr:'Le XOR brûlé sur SORA v2, éligible à partir du bloc #25 867 650, est réclamable sur Minamoto. Chaque migration vérifiée porte sur Minamoto le hash de la transaction de burn v2, ce qui permet de relier les deux côtés en une seule chronologie.', de:'Auf SORA v2 verbranntes XOR ist ab Block #25.867.650 auf Minamoto einforderbar. Jede verifizierte Migration trägt auf Minamoto den Hash der v2-Burn-Transaktion, sodass beide Seiten zu einer Zeitleiste verbunden werden.', it:'L\'XOR bruciato su SORA v2, idoneo dal blocco #25.867.650, è riscattabile su Minamoto. Ogni migrazione verificata porta su Minamoto l\'hash della transazione di burn v2, così uniamo i due lati in un\'unica cronologia.', pt:'O XOR queimado na SORA v2, elegível a partir do bloco #25.867.650, pode ser resgatado na Minamoto. Cada migração verificada leva na Minamoto o hash da transação de queima da v2, unindo os dois lados numa única linha do tempo.' },
  'xormig.totalClaims':      { en:'Migrations', es:'Migraciones', fr:'Migrations', de:'Migrationen', it:'Migrazioni', pt:'Migrações' },
  'xormig.totalXor':         { en:'XOR migrated', es:'XOR migrado', fr:'XOR migré', de:'Migriertes XOR', it:'XOR migrato', pt:'XOR migrado' },
  'xormig.uniqueWallets':    { en:'Unique senders', es:'Remitentes únicos', fr:'Expéditeurs uniques', de:'Eindeutige Absender', it:'Mittenti unici', pt:'Remetentes únicos' },
  'xormig.lastClaim':        { en:'Last migration', es:'Última migración', fr:'Dernière migration', de:'Letzte Migration', it:'Ultima migrazione', pt:'Última migração' },
  'xormig.when':             { en:'When', es:'Cuándo', fr:'Quand', de:'Wann', it:'Quando', pt:'Quando' },
  'xormig.v2Block':          { en:'v2 block', es:'Bloque v2', fr:'Bloc v2', de:'v2-Block', it:'Blocco v2', pt:'Bloco v2' },
  'xormig.v2BurnTx':         { en:'v2 burn tx', es:'Tx de quema v2', fr:'Tx de burn v2', de:'v2-Burn-Tx', it:'Tx di burn v2', pt:'Tx de queima v2' },
  'xormig.v2Signer':         { en:'v2 signer', es:'Firmante v2', fr:'Signataire v2', de:'v2-Unterzeichner', it:'Firmatario v2', pt:'Signatário v2' },
  'xormig.mnBlock':          { en:'MN block', es:'Bloque MN', fr:'Bloc MN', de:'MN-Block', it:'Blocco MN', pt:'Bloco MN' },
  'xormig.mnClaimTx':        { en:'MN claim tx', es:'Tx de reclamo MN', fr:'Tx de réclamation MN', de:'MN-Claim-Tx', it:'Tx di riscatto MN', pt:'Tx de resgate MN' },
  'xormig.mnRecipient':      { en:'MN recipient', es:'Destinatario MN', fr:'Destinataire MN', de:'MN-Empfänger', it:'Destinatario MN', pt:'Destinatário MN' },
  'xormig.noClaims':         { en:'No verified migrations yet — they appear here once a Minamoto claim references its v2 burn-tx hash on-chain.', es:'Aún no hay migraciones verificadas: aparecerán aquí cuando un reclamo en Minamoto referencie en cadena el hash de su transacción de quema de v2.', fr:'Aucune migration vérifiée pour l\'instant : elles apparaîtront ici dès qu\'une réclamation sur Minamoto référencera on-chain le hash de sa transaction de burn v2.', de:'Noch keine verifizierten Migrationen – sie erscheinen hier, sobald ein Minamoto-Claim den Hash seiner v2-Burn-Transaktion on-chain referenziert.', it:'Nessuna migrazione verificata per ora: appariranno qui quando un riscatto su Minamoto farà riferimento on-chain all\'hash della sua transazione di burn v2.', pt:'Ainda não há migrações verificadas: aparecerão aqui quando um resgate na Minamoto referenciar on-chain o hash da sua transação de queima da v2.' },
};

/* ========================== Context / provider ========================== */
const LangContext = createContext({ lang: 'es', setLang: () => {}, t: (k) => k, dir: 'ltr', locale: 'es-ES' });

const BCP47 = {
  es: 'es-ES', en: 'en-US', fr: 'fr-FR', de: 'de-DE', it: 'it-IT', pt: 'pt-PT',
  ru: 'ru-RU', zh: 'zh-CN', ja: 'ja-JP', ko: 'ko-KR', ar: 'ar-SA', he: 'he-IL',
  ur: 'ur-PK', hi: 'hi-IN',
};

function LangProvider({ children }) {
  const [lang, setLangState] = useState(() => {
    try {
      const saved = localStorage.getItem('sorametrics.lang');
      if (saved && LANG_BY_CODE[saved]) return saved;
    } catch (_) {}
    return 'es';
  });

  const meta = LANG_BY_CODE[lang] || LANG_BY_CODE.es;
  const dir = meta.rtl ? 'rtl' : 'ltr';

  useEffect(() => {
    document.documentElement.lang = lang;
    document.documentElement.dir = dir;
    document.body.classList.toggle('rtl', dir === 'rtl');
    try { localStorage.setItem('sorametrics.lang', lang); } catch (_) {}
    window.__CURRENT_LANG__ = lang;
  }, [lang, dir]);

  const t = useCallback((key, fallback) => {
    const row = DICT[key];
    if (!row) return fallback !== undefined ? fallback : key;
    return row[lang] || row.en || fallback || key;
  }, [lang]);

  const setLang = useCallback((code) => {
    if (LANG_BY_CODE[code]) setLangState(code);
  }, []);

  const value = useMemo(() => ({
    lang, setLang, t, dir, locale: BCP47[lang] || 'es-ES',
  }), [lang, setLang, t, dir]);

  return <LangContext.Provider value={value}>{children}</LangContext.Provider>;
}

function useLang() { return useContext(LangContext); }
function useT()    { return useContext(LangContext).t; }

/* ========================= Number / date helpers ========================= */
function fmtNumber(n, locale, opts) {
  try { return new Intl.NumberFormat(locale || 'es-ES', opts).format(n); }
  catch (_) { return String(n); }
}
function fmtDate(d, locale, opts) {
  try { return new Intl.DateTimeFormat(locale || 'es-ES', opts || { dateStyle: 'medium', timeStyle: 'short' }).format(d); }
  catch (_) { return String(d); }
}

/* ============================== Lang picker ============================== */
function LangPicker() {
  const { lang, setLang, t } = useLang();
  const [open, setOpen] = useState(false);
  const ref = useRef(null);
  const meta = LANG_BY_CODE[lang];

  useEffect(() => {
    if (!open) return;
    const onDoc = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
    const onEsc = (e) => { if (e.key === 'Escape') setOpen(false); };
    document.addEventListener('mousedown', onDoc);
    document.addEventListener('keydown', onEsc);
    return () => {
      document.removeEventListener('mousedown', onDoc);
      document.removeEventListener('keydown', onEsc);
    };
  }, [open]);

  return (
    <div className="lang-wrap" ref={ref}>
      <button className="lang-pill" onClick={() => setOpen(v => !v)} title={t('common.language')}>
        <span className="lang-flag">{meta.flag}</span>
        <span className="lang-code">{lang.toUpperCase()}</span>
        <span className="lang-caret">▾</span>
      </button>
      {open && (
        <div className="lang-pop" role="menu">
          {LANGS.map(l => (
            <button key={l.code}
                    className={'lang-pop-row' + (l.code === lang ? ' active' : '')}
                    onClick={() => { setLang(l.code); setOpen(false); }}>
              <span className="lang-flag">{l.flag}</span>
              <span className="lang-native">{l.native}</span>
              <span className="lang-pop-code">{l.code.toUpperCase()}</span>
            </button>
          ))}
        </div>
      )}
    </div>
  );
}

Object.assign(window, { LANGS, LANG_BY_CODE, LangProvider, useLang, useT, LangPicker, fmtNumber, fmtDate, DICT });
