/* 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.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:'वॉलेट खोलें' },
};

/* ========================== 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 });
