// ============ i18n (EN/MN) — USD only ============
const TRANSLATIONS = {
  en: {
    // Nav
    nav_dashboard: 'Dashboard',
    nav_trades: 'Trades',
    nav_analytics: 'Analytics',
    nav_calendar: 'Calendar',
    nav_journal: 'Journal',
    nav_playbook: 'Playbook',
    nav_settings: 'Settings',
    nav_log_trade: 'Log trade',
    nav_notifications: 'Notifications',
    // Generic
    export: 'Export', import: 'Import', cancel: 'Cancel', save: 'Save',
    save_changes: 'Save changes', save_draft: 'Save as draft', save_trade: 'Save trade',
    today: 'Today', filter: 'Filter', new_strategy: 'New strategy',
    // Dashboard
    dash_sub: 'Tuesday, April 21 · Session 94 of 2026',
    kpi_net_pnl: 'Net P&L', kpi_win_rate: 'Win Rate', kpi_profit_factor: 'Profit Factor', kpi_avg_r: 'Avg R',
    equity_curve: 'Equity Curve',
    equity_sub: 'Account balance over 96 trading days',
    starting: 'Starting', current: 'Current',
    recent_trades: 'Recent Trades', recent_trades_sub: 'Last 10 closed positions',
    view_all: 'View all',
    // Table headers
    th_ticker: 'Ticker', th_dir: 'Dir', th_size: 'Size', th_entry: 'Entry', th_exit: 'Exit',
    th_pnl: 'P&L', th_r: 'R', th_tags: 'Tags', th_date: 'Date', th_trades: 'Trades', th_winrate: 'Win %', th_avg_r: 'Avg R', th_net: 'Net', th_strategy: 'Strategy',
    // Trades
    trades_sub: '{n} of {total} trades',
    search_ph: 'Search ticker or strategy…',
    all_statuses: 'All statuses', closed: 'Closed', open: 'Open',
    any_direction: 'Any direction', long: 'Long', short: 'Short',
    any_outcome: 'Any outcome', wins_only: 'Wins only', losses_only: 'Losses only', breakeven: 'Breakeven',
    sort_by: 'Sort by', newest: 'Newest', oldest: 'Oldest',
    highest_pnl: 'Highest P&L', lowest_pnl: 'Lowest P&L', highest_r: 'Highest R',
    no_match: 'No trades match these filters.',
    showing: 'Showing', of: 'of', prev: 'Prev', next: 'Next',
    export_csv: 'Export CSV',
    // Analytics
    analytics_sub: 'Performance breakdowns · Jan 15 – Apr 21',
    wl_mix: 'Win / Loss Mix', r_dist: 'R-Multiple Distribution', r_dist_sub: 'buckets of 1R',
    pnl_by_dow: 'P&L by Day of Week', pnl_by_hour: 'P&L by Hour of Day',
    best_worst_strategies: 'Best / Worst Strategies', by_instrument: 'By Instrument',
    wins: 'Wins', losses: 'Losses', be: 'Breakeven',
    avg_win: 'Avg win', avg_loss: 'Avg loss',
    n_trades: '{n} trades',
    // Calendar
    cal_sub: 'Daily P&L heatmap · green = net profit, red = net loss',
    month: 'Month', trading_days: 'Trading days', avg_per_day: 'Avg / day',
    weekly: 'Weekly', week: 'Week',
    // Journal
    journal_sub: 'Daily reflections — one entry per trading day',
    market_obs: 'Market observations', lessons_learned: 'Lessons learned', mood: 'Mood', tomorrow_plan: "Tomorrow's plan",
    mood_labels: ['Awful','Bad','Meh','Good','Great'],
    journal_ph_market: 'What did the market do today? Tape, catalysts, volatility…',
    journal_ph_lessons: 'Patterns, mistakes, wins to remember…',
    journal_ph_plan: 'Watchlist, bias, key levels, risk limits…',
    entries_this_month: 'Entries this month',
    // Playbook
    playbook_sub: 'Named setups and their performance · click a card to edit the rulebook',
    winrate: 'Win rate', net_pnl_label: 'Net P&L', over_n_trades: 'over {n} trades',
    last_used: 'Last used',
    new_strategy_sub: 'Define rules, entry, stop and target',
    // Settings
    settings_sub: 'Manage your profile, risk rules, goals and security',
    st_profile: 'Profile', st_risk: 'Risk rules', st_goals: 'Goals', st_security: 'Security',
    display_name: 'Display name', email: 'Email', time_zone: 'Time zone',
    base_currency: 'Base currency', default_asset: 'Default asset class', account_size: 'Account size',
    upload: 'Upload', member_since: 'Member since Jan 2026',
    max_risk_trade: 'Max risk per trade', max_daily_loss: 'Max daily loss',
    max_weekly_loss: 'Max weekly loss', max_concurrent: 'Max concurrent positions',
    default_stop: 'Default stop type', hard_stop: 'Hard stop', mental_stop: 'Mental stop', time_stop: 'Time-based',
    min_rr: 'Minimum R:R',
    block_after_loss: 'Block new trades after daily loss hit',
    block_after_loss_sub: "Lock out the Log trade button if today's P&L crosses −3%",
    monthly_target: 'Monthly profit target', annual_target: 'Annual return target',
    target_wr: 'Target win rate', target_r: 'Target avg R',
    habits: 'Habits',
    password: 'Password', last_changed: 'Last changed 42 days ago', change_password: 'Change password',
    two_factor: 'Two-factor authentication', authenticator_on: 'Authenticator app · enabled',
    active_sessions: 'Active sessions', current_session: 'CURRENT', revoke: 'Revoke',
    // Log trade
    logtrade_sub: 'Capture every execution with context — the data compounds',
    sec_instrument: 'Instrument', sec_instrument_sub: 'What did you trade?',
    sec_execution: 'Execution', sec_execution_sub: 'Prices, sizes, times and fees',
    sec_risk: 'Risk plan', sec_risk_sub: 'Where were you wrong? Where were you right?',
    sec_context: 'Context', sec_context_sub: 'Setup, quality and state of mind',
    sec_reflection: 'Reflection', sec_reflection_sub: 'Honest post-trade review',
    ticker: 'Ticker', asset_class: 'Asset class', direction: 'Direction',
    entry_price: 'Entry price', entry_time: 'Entry time', exit_price: 'Exit price', exit_time: 'Exit time',
    size_shares: 'Size (shares)', commission: 'Commission', venue: 'Venue', account: 'Account',
    stop_loss: 'Stop loss', take_profit: 'Take profit', planned_rr: 'Planned R:R',
    strategy_tags: 'Strategy tags', setup_quality: 'Setup quality',
    emotion_state: 'Emotional state', discipline_check: 'Discipline check',
    disc_followed: 'Followed plan', disc_sized: 'Sized correctly', disc_stop: 'Honored stop',
    mistakes: 'Mistakes', self_grade: 'Self-grade',
    screenshot: 'Screenshot', screenshot_drop: 'Drop chart or click to upload',
    notes: 'Notes', notes_ph: 'What happened, what did you see, what will you do next time…',
    live_preview: 'Live Preview', emotion_label: 'Emotion', grade: 'Grade', quality: 'Quality',
    tags: 'Tags', none_selected: 'None selected',
    risk_check: 'Risk check',
    rc_1: 'Risk within 1.0% per-trade limit',
    rc_2: 'R:R above 1.5 minimum',
    rc_3: 'Daily loss limit not hit',
    r_multiple: 'R multiple', rr: 'R:R',
    entry: 'Entry', exit: 'Exit', size: 'Size', risk: 'Risk',
    // Mood 7pt
    mood7: ['Panicked','Fearful','Anxious','Neutral','Calm','Confident','Euphoric'],
    // Accounts
    all_accounts:'All accounts', accounts_lower:'accounts', trades_lower:'trades', net:'net',
    new_account:'New account', new_account_sub:'Add a brokerage, prop, or paper account',
    edit_account:'Edit account', edit_account_sub:'Update details or archive',
    account_name:'Account name', color:'Color', broker:'Broker', account_type:'Account type',
    currency_label:'Currency', asset_class_label:'Asset class', starting_capital:'Starting capital',
    challenge_rules:'Prop challenge rules',
    max_daily_loss_pct:'Max daily loss %', max_total_loss_pct:'Max total loss %',
    profit_target_pct:'Profit target %', challenge_deadline:'Challenge deadline',
    notes_optional:'Optional notes about this account…',
    create_account:'Create account', delete:'Delete',
    st_accounts:'Accounts', accounts_sub:'Manage brokerage, prop, and paper accounts',
    th_name:'Name', th_broker:'Broker', th_type:'Type', th_currency:'Currency',
    th_starting:'Starting', th_balance:'Balance', th_open:'Open', th_actions:'',
    accounts_snapshot:'Accounts snapshot', accounts_snapshot_sub:'Per-account performance today',
    daily_loss_used:'Daily loss used', total_loss_used:'Total loss used', profit_target_progress:'Profit target',
    challenge:'Challenge', funded:'Funded', personal:'Personal', demo:'Demo', paper:'Paper',
    today_pnl:'Today', balance:'Balance',
    days_left:'{n}d left', expired:'expired',

    // ===== Auth =====
    auth_tagline_label: 'The trader\'s journal',
    auth_tagline: 'Every edge starts with honest review.',
    auth_tagline_sub: 'A private journal for serious traders — log setups, review mistakes, and build the discipline that compounds.',
    auth_traders: 'Traders', auth_trades_logged: 'Trades logged', auth_rating: 'App Store',
    login_title: 'Sign in to Edgebook', login_sub: 'Welcome back — pick up where you left off.',
    signup_title: 'Create your account', signup_sub: 'Start journaling in under a minute. No credit card.',
    forgot_title: 'Reset your password', forgot_sub: 'Enter your email and we\'ll send a 6-digit code.',
    forgot_hint: 'The code expires in 15 minutes.',
    reset_title: 'Set a new password',
    reset_sub: 'Enter the code we sent and choose a new password.',
    reset_sub_with_email: 'Enter the code we sent to {email} and choose a new password.',
    verify_title: 'Verify your email',
    verify_sub: 'We sent a 6-digit code to your inbox.',
    verify_sub_with_email: 'We sent a 6-digit code to {email}.',
    email: 'Email', password: 'Password', full_name: 'Full name', full_name_placeholder: 'Jane Trader',
    new_password: 'New password', confirm_password: 'Confirm password',
    forgot_password: 'Forgot?', remember_me: 'Keep me signed in',
    sign_in: 'Sign in', sign_up: 'Sign up', create_account_btn: 'Create account',
    no_account: 'New to Edgebook?', have_account: 'Already have an account?',
    continue_google: 'Continue with Google', signup_google: 'Sign up with Google', or: 'or',
    pw_strength: 'Password strength', pw_hint: 'At least 8 characters',
    pw_weak: 'Weak', pw_fair: 'Fair', pw_good: 'Good', pw_strong: 'Strong',
    accept_terms_prefix: 'I agree to the', terms: 'Terms', and: 'and', privacy: 'Privacy Policy',
    send_reset_link: 'Send reset code',
    back_to_login: 'Back to sign in', different_email: 'Use a different email',
    verification_code: 'Verification code', code_hint: '6-digit code from your email',
    verify_email_btn: 'Verify & continue', reset_password_btn: 'Reset password',
    didnt_receive: 'Didn\'t receive it?', resend_code: 'Resend code', code_resent: 'Code resent',
    use_different_email: 'Use a different email',
    err_invalid_credentials: 'Email or password is incorrect.',
    err_invalid_email: 'Please enter a valid email.',
    err_pw_too_short: 'Password must be at least 8 characters.',
    err_pw_mismatch: 'Passwords don\'t match.',
    err_required: 'This field is required.',
    err_accept_terms: 'You must accept the terms to continue.',
    err_code: 'Invalid or expired code.',
    sign_out: 'Sign out', signed_in_as: 'Signed in as',
    language: 'Language',
    st_account: 'Account', account_tab: 'Account',
    st_appearance: 'Appearance', st_notifications: 'Notifications',
    theme_mode: 'Theme', accent_color: 'Accent color',
    accent_sub: 'Used for primary buttons, links and chart highlights.',
    notif_channels: 'Delivery channels', notif_channels_sub: 'Where should we reach you?',
    notif_events: 'Which events', notif_events_sub: 'Turn specific triggers on or off',
    quiet_hours: 'Quiet hours', quiet_hours_sub: 'No alerts during these times',
    mark_all_read: 'Mark all read', all: 'All', unread: 'Unread',
    notif_empty: "You're all caught up ✨",
    notif_settings: 'Notification settings',
    group_today: 'Today', group_yesterday: 'Yesterday', group_week: 'This week', group_earlier: 'Earlier',
    size_contracts: 'Contracts', size_lots: 'Lots',
    risk_pct_account: 'Risk % of account', risk_dollars: 'Risk ($)',
    suggested_size: 'Suggested size', risk_actual: 'Actual risk on this trade:', of_account: 'of account',
    delete_account_title: 'Delete account', delete_account_desc: 'Permanently erase your journal, trades, and all account data. This cannot be undone.',
    delete_account_btn: 'Delete my account',
    confirm_delete_title: 'Are you absolutely sure?',
    confirm_delete_body: 'This will permanently delete your account, all trades, journal entries, and settings. Type DELETE to confirm.',
    type_delete: 'Type DELETE',
    keep_account: 'Keep account',
    change_password: 'Change password', current_password: 'Current password',

    // ===== Onboarding =====
    ob_step_n_of_m: 'Step {n} of {m}',
    ob_welcome_title: 'Welcome to Edgebook, {name}',
    ob_welcome_sub: 'Let\'s set up your first trading account. Takes 30 seconds.',
    ob_f1: 'Track every trade in one place',
    ob_f2: 'See your edge with real stats',
    ob_f3: 'Journal your mind, not just your P&L',
    ob_basics_title: 'Tell us about your account',
    ob_basics_sub: 'You can add more accounts later from Settings.',
    ob_rules_title: 'Set challenge rules',
    ob_rules_sub: 'We\'ll track your daily loss, total loss, and profit target automatically.',
    ob_color: 'Color',
    ob_deadline: 'Deadline',
    ob_back: 'Back',
    ob_continue: 'Continue',
    ob_finish: 'Finish',
    ob_skip: 'Skip for now',
    ob_toast: 'Account created — here\'s your dashboard',

    // ===== KPI Expectancy =====
    kpi_expectancy: 'Expectancy',
    kpi_expectancy_tip: 'Average profit you can expect per trade, given your win rate and average win/loss.',

    // ===== Trade drawer =====
    td_execution: 'Execution',
    td_risk: 'Risk',
    td_context: 'Context',
    td_reflection: 'Reflection',
    td_timestamps: 'Timestamps',
    td_duration: 'Duration',
    td_risk_dollars: 'Risk $',
    td_created: 'Created',
    td_updated: 'Updated',
    td_view: 'View details',
    td_edit: 'Edit trade',
    td_duplicate: 'Duplicate',
    td_delete: 'Delete',
    td_delete_title: 'Delete this trade?',
    td_delete_body: 'This will permanently remove {ticker} {dir} from {date}. This cannot be undone.',
    edit_trade_title: 'Edit trade',
    save_changes_trade: 'Save changes',

    // ===== Playbook =====
    playbook_sub: 'Your named setups and how each one performs',
    search_strategies: 'Search strategies…',
    filter_by: 'Filter',
    profitable: 'Profitable',
    losing: 'Losing',
    unused: 'Unused',
    sort_net: 'Net P&L',
    sort_wr: 'Win rate',
    sort_r: 'Avg R',
    sort_trades: 'Trade count',
    no_description: 'No description yet.',
    no_trades_yet: 'No trades logged for this strategy yet.',
    no_strategies_match: 'No strategies match',
    view_trades: 'View trades',
    edit: 'Edit',
    duplicate: 'Duplicate',
    archive: 'Archive',
    strategy: 'Strategy',
    strategy_name: 'Strategy name',
    description: 'Description',
    strategy_desc_ph: 'What defines this setup? Entry rules, timeframe, conditions…',
    new_strategy_modal_sub: 'Define a new setup to track its edge separately.',
    create_strategy: 'Create strategy',

    // ===== Account modal tabs =====
    acct_tab_general: 'General',
    acct_tab_risk: 'Risk rules',
    acct_tab_goals: 'Goals',
    risk_tab_sub: 'Risk rules apply only to this account. Violating them shows a warning when logging new trades.',
    goals_tab_sub: 'Track performance goals specific to this account.',

    // ===== Settings profile =====
    profile_risk_moved: 'Risk rules and goals are set per-account — open any account from the Accounts tab to configure them.',
  },
  mn: {
    nav_dashboard: 'Хяналтын самбар',
    nav_trades: 'Арилжаа',
    nav_analytics: 'Шинжилгээ',
    nav_calendar: 'Хуанли',
    nav_journal: 'Өдрийн тэмдэглэл',
    nav_playbook: 'Стратегийн ном',
    nav_settings: 'Тохиргоо',
    nav_log_trade: 'Арилжаа бүртгэх',
    nav_notifications: 'Мэдэгдэл',
    export: 'Татах', import: 'Оруулах', cancel: 'Цуцлах', save: 'Хадгалах',
    save_changes: 'Өөрчлөлтийг хадгалах', save_draft: 'Ноороглож хадгалах', save_trade: 'Арилжаа хадгалах',
    today: 'Өнөөдөр', filter: 'Шүүх', new_strategy: 'Шинэ стратеги',
    dash_sub: 'Мягмар, 4-р сарын 21 · 2026 оны 94-р өдөр',
    kpi_net_pnl: 'Цэвэр P&L', kpi_win_rate: 'Ялах %', kpi_profit_factor: 'Ашгийн үзүүлэлт', kpi_avg_r: 'Дундаж R',
    equity_curve: 'Хөрөнгийн муруй',
    equity_sub: '96 өдрийн арилжааны үлдэгдэл',
    starting: 'Эхлэл', current: 'Одоо',
    recent_trades: 'Сүүлийн арилжаанууд', recent_trades_sub: 'Хаагдсан сүүлийн 10',
    view_all: 'Бүгдийг үзэх',
    th_ticker: 'Тикер', th_dir: 'Чиг', th_size: 'Хэмжээ', th_entry: 'Entry', th_exit: 'Exit',
    th_pnl: 'P&L', th_r: 'R', th_tags: 'Таг', th_date: 'Огноо', th_trades: 'Арилжаа', th_winrate: 'Ялах %', th_avg_r: 'Дундаж R', th_net: 'Цэвэр', th_strategy: 'Стратеги',
    trades_sub: 'Нийт {total}-аас {n} арилжаа',
    search_ph: 'Тикер эсвэл стратеги хайх…',
    all_statuses: 'Бүх төлөв', closed: 'Хаагдсан', open: 'Нээлттэй',
    any_direction: 'Бүх чиг', long: 'Long', short: 'Short',
    any_outcome: 'Бүх үр дүн', wins_only: 'Зөвхөн ялалт', losses_only: 'Зөвхөн алдагдал', breakeven: 'Тэнцэл',
    sort_by: 'Эрэмбэлэх', newest: 'Шинэ', oldest: 'Хуучин',
    highest_pnl: 'Их P&L', lowest_pnl: 'Бага P&L', highest_r: 'Их R',
    no_match: 'Шүүлтүүрт тохирох арилжаа алга.',
    showing: 'Харуулж байна', of: '/', prev: 'Өмнөх', next: 'Дараах',
    export_csv: 'CSV татах',
    analytics_sub: 'Гүйцэтгэлийн задаргаа · 1/15 – 4/21',
    wl_mix: 'Ялалт / Алдагдлын харьцаа', r_dist: 'R-ийн тархалт', r_dist_sub: '1R-ийн бүлэг',
    pnl_by_dow: 'Гарагаар P&L', pnl_by_hour: 'Цагаар P&L',
    best_worst_strategies: 'Шилдэг / Муу стратеги', by_instrument: 'Хэрэгслээр',
    wins: 'Ялалт', losses: 'Алдагдал', be: 'Тэнцэл',
    avg_win: 'Дундаж ялалт', avg_loss: 'Дундаж алдагдал',
    n_trades: '{n} арилжаа',
    cal_sub: 'Өдрийн P&L дулааны зураг · ногоон = ашиг, улаан = алдагдал',
    month: 'Сар', trading_days: 'Арилжааны өдрүүд', avg_per_day: 'Өдрийн дундаж',
    weekly: 'Долоо хоног', week: 'Долоо хоног',
    journal_sub: 'Өдөр тутмын эргэцүүлэл — нэг өдөр, нэг тэмдэглэл',
    market_obs: 'Зах зээлийн ажиглалт', lessons_learned: 'Сурсан зүйлс', mood: 'Сэтгэл санаа', tomorrow_plan: 'Маргаашийн төлөвлөгөө',
    mood_labels: ['Муу','Тааруу','Дунд','Сайн','Маш сайн'],
    journal_ph_market: 'Өнөөдөр зах зээл юу хийв? Тэйп, катализатор, хэлбэлзэл…',
    journal_ph_lessons: 'Загвар, алдаа, санах ялалтууд…',
    journal_ph_plan: 'Watchlist, хандлага, түлхүүр түвшин, эрсдэлийн хязгаар…',
    entries_this_month: 'Энэ сарын тэмдэглэлүүд',
    playbook_sub: 'Нэрлэсэн сетапууд ба тэдгээрийн гүйцэтгэл · карт дээр дарж дүрмийг засна',
    winrate: 'Ялах %', net_pnl_label: 'Цэвэр P&L', over_n_trades: '{n} арилжаан дунджаар',
    last_used: 'Сүүлд хэрэглэсэн',
    new_strategy_sub: 'Дүрэм, entry, stop, target-ээ тодорхойл',
    settings_sub: 'Профайл, эрсдэлийн дүрэм, зорилго, аюулгүй байдлаа удирд',
    st_profile: 'Профайл', st_risk: 'Эрсдэлийн дүрэм', st_goals: 'Зорилго', st_security: 'Аюулгүй байдал',
    display_name: 'Нэр', email: 'И-мэйл', time_zone: 'Цагийн бүс',
    base_currency: 'Үндсэн валют', default_asset: 'Үндсэн хөрөнгийн ангилал', account_size: 'Дансны хэмжээ',
    upload: 'Байршуулах', member_since: '2026 оны 1-р сараас гишүүн',
    max_risk_trade: 'Нэг арилжаа дахь дээд эрсдэл', max_daily_loss: 'Өдрийн дээд алдагдал',
    max_weekly_loss: '7 хоногийн дээд алдагдал', max_concurrent: 'Зэрэг идэвхтэй позиц',
    default_stop: 'Үндсэн стопын төрөл', hard_stop: 'Хатуу стоп', mental_stop: 'Оюун санааны стоп', time_stop: 'Цагийн стоп',
    min_rr: 'R:R-ийн доод хэмжээ',
    block_after_loss: 'Өдрийн алдагдал хэтэрвэл арилжаа хаах',
    block_after_loss_sub: 'Өнөөдрийн P&L −3%-г давбал Арилжаа бүртгэх товчийг түгжинэ',
    monthly_target: 'Сарын зорилтот ашиг', annual_target: 'Жилийн зорилтот өгөөж',
    target_wr: 'Зорилтот ялах %', target_r: 'Зорилтот дундаж R',
    habits: 'Зуршил',
    password: 'Нууц үг', last_changed: '42 хоногийн өмнө солигдсон', change_password: 'Нууц үг солих',
    two_factor: 'Хоёр алхамт баталгаажуулалт', authenticator_on: 'Authenticator апп · идэвхтэй',
    active_sessions: 'Идэвхтэй сешн', current_session: 'ОДОО', revoke: 'Цуцлах',
    logtrade_sub: 'Бүх арилжаагаа контексттэй бүртгэ — дата нэмэгдэнэ',
    sec_instrument: 'Хэрэгсэл', sec_instrument_sub: 'Юу арилжсан бэ?',
    sec_execution: 'Гүйцэтгэл', sec_execution_sub: 'Үнэ, хэмжээ, цаг, шимтгэл',
    sec_risk: 'Эрсдэлийн төлөвлөгөө', sec_risk_sub: 'Хаана буруу? Хаана зөв байсан?',
    sec_context: 'Контекст', sec_context_sub: 'Сетап, чанар, сэтгэлийн байдал',
    sec_reflection: 'Эргэцүүлэл', sec_reflection_sub: 'Арилжааны дараах шударга үнэлгээ',
    ticker: 'Тикер', asset_class: 'Хөрөнгийн ангилал', direction: 'Чиг',
    entry_price: 'Entry үнэ', entry_time: 'Entry цаг', exit_price: 'Exit үнэ', exit_time: 'Exit цаг',
    size_shares: 'Хэмжээ (ширхэг)', commission: 'Шимтгэл', venue: 'Платформ', account: 'Данс',
    stop_loss: 'Stop loss', take_profit: 'Take profit', planned_rr: 'Төлөвлөсөн R:R',
    strategy_tags: 'Стратегийн таг', setup_quality: 'Сетапын чанар',
    emotion_state: 'Сэтгэлийн байдал', discipline_check: 'Сахилгын шалгалт',
    disc_followed: 'Төлөвлөгөө баримталсан', disc_sized: 'Зөв хэмжээтэй', disc_stop: 'Stop-оо хүндэтгэсэн',
    mistakes: 'Алдаанууд', self_grade: 'Өөрийн үнэлгээ',
    screenshot: 'Зураг', screenshot_drop: 'График чирж тавь эсвэл дарж оруул',
    notes: 'Тэмдэглэл', notes_ph: 'Юу болов, юу харав, дараа юу хийх вэ…',
    live_preview: 'Шууд урьдчилан харах', emotion_label: 'Сэтгэл', grade: 'Үнэлгээ', quality: 'Чанар',
    tags: 'Таг', none_selected: 'Сонгогдоогүй',
    risk_check: 'Эрсдэлийн шалгалт',
    rc_1: 'Эрсдэл 1.0% дотор',
    rc_2: 'R:R 1.5-аас дээш',
    rc_3: 'Өдрийн алдагдлын хязгаар хүрээгүй',
    r_multiple: 'R үзүүлэлт', rr: 'R:R',
    entry: 'Entry', exit: 'Exit', size: 'Хэмжээ', risk: 'Эрсдэл',
    mood7: ['Сандарсан','Айсан','Түгшүүртэй','Дунд','Тайван','Итгэлтэй','Оргилсон'],
    // Accounts
    all_accounts:'Бүх данс', accounts_lower:'данс', trades_lower:'арилжаа', net:'цэвэр',
    new_account:'Шинэ данс', new_account_sub:'Брокер, prop эсвэл paper данс нэмэх',
    edit_account:'Данс засах', edit_account_sub:'Мэдээллийг шинэчлэх эсвэл архивлах',
    account_name:'Дансны нэр', color:'Өнгө', broker:'Брокер', account_type:'Дансны төрөл',
    currency_label:'Валют', asset_class_label:'Хөрөнгийн ангилал', starting_capital:'Эхлэлийн капитал',
    challenge_rules:'Prop challenge дүрэм',
    max_daily_loss_pct:'Өдрийн дээд алдагдал %', max_total_loss_pct:'Нийт дээд алдагдал %',
    profit_target_pct:'Зорилтот ашиг %', challenge_deadline:'Challenge эцсийн хугацаа',
    notes_optional:'Энэ дансны тухай тэмдэглэл…',
    create_account:'Данс үүсгэх', delete:'Устгах',
    st_accounts:'Данс', accounts_sub:'Брокер, prop, paper дансаа удирдах',
    th_name:'Нэр', th_broker:'Брокер', th_type:'Төрөл', th_currency:'Валют',
    th_starting:'Эхлэл', th_balance:'Үлдэгдэл', th_open:'Нээлттэй', th_actions:'',
    accounts_snapshot:'Дансны хураангуй', accounts_snapshot_sub:'Данс тус бүрийн өнөөдрийн үзүүлэлт',
    daily_loss_used:'Өдрийн алдагдал', total_loss_used:'Нийт алдагдал', profit_target_progress:'Зорилтот ашиг',
    challenge:'Challenge', funded:'Funded', personal:'Хувийн', demo:'Demo', paper:'Paper',
    today_pnl:'Өнөөдөр', balance:'Үлдэгдэл',
    days_left:'{n} өдөр', expired:'дууссан',

    // ===== Auth =====
    auth_tagline_label: 'Арилжаачны тэмдэглэл',
    auth_tagline: 'Аливаа давуу тал шударга эргэн харахаас эхэлдэг.',
    auth_tagline_sub: 'Нухацтай арилжаачдад зориулсан хувийн тэмдэглэл — setup бүртгэх, алдаа шинжлэх, сахилгаа төлөвшүүлэх.',
    auth_traders: 'Арилжаачин', auth_trades_logged: 'Бүртгэгдсэн', auth_rating: 'App Store',
    login_title: 'Edgebook-д нэвтрэх', login_sub: 'Тавтай морил — үргэлжлүүлье.',
    signup_title: 'Бүртгүүлэх', signup_sub: 'Нэг минутанд эхэлнэ. Картын мэдээлэл шаардлагагүй.',
    forgot_title: 'Нууц үгээ сэргээх', forgot_sub: 'И-мэйлээ оруулбал 6 оронтой кодыг илгээнэ.',
    forgot_hint: 'Код 15 минутын дараа хүчингүй болно.',
    reset_title: 'Шинэ нууц үг тохируулах',
    reset_sub: 'Кодоо оруулаад шинэ нууц үг сонгоно уу.',
    reset_sub_with_email: '{email} хаягт илгээсэн кодыг оруулаад шинэ нууц үг сонгоно уу.',
    verify_title: 'И-мэйлээ баталгаажуулна уу',
    verify_sub: 'Inbox-д тань 6 оронтой код илгээв.',
    verify_sub_with_email: '{email} хаяг руу 6 оронтой код илгээв.',
    email: 'И-мэйл', password: 'Нууц үг', full_name: 'Бүтэн нэр', full_name_placeholder: 'Жавхлан Арилжаа',
    new_password: 'Шинэ нууц үг', confirm_password: 'Нууц үг давтах',
    forgot_password: 'Мартсан уу?', remember_me: 'Намайг санаж байх',
    sign_in: 'Нэвтрэх', sign_up: 'Бүртгүүлэх', create_account_btn: 'Данс үүсгэх',
    no_account: 'Edgebook-д шинэ үү?', have_account: 'Аль хэдийн бүртгэлтэй юу?',
    continue_google: 'Google-ээр үргэлжлүүлэх', signup_google: 'Google-ээр бүртгүүлэх', or: 'эсвэл',
    pw_strength: 'Нууц үгний хүч', pw_hint: 'Дор хаяж 8 тэмдэгт',
    pw_weak: 'Сул', pw_fair: 'Дунд', pw_good: 'Сайн', pw_strong: 'Хүчтэй',
    accept_terms_prefix: 'Би', terms: 'Үйлчилгээний нөхцөл', and: 'болон', privacy: 'Нууцлалын бодлогыг',
    send_reset_link: 'Код илгээх',
    back_to_login: 'Нэвтрэх рүү буцах', different_email: 'Өөр и-мэйл ашиглах',
    verification_code: 'Баталгаажуулах код', code_hint: 'И-мэйлээр ирсэн 6 оронтой код',
    verify_email_btn: 'Баталгаажуулах', reset_password_btn: 'Нууц үг сэргээх',
    didnt_receive: 'Хүлээж аваагүй юу?', resend_code: 'Кодыг дахин илгээх', code_resent: 'Код дахин илгээв',
    use_different_email: 'Өөр и-мэйл ашиглах',
    err_invalid_credentials: 'И-мэйл эсвэл нууц үг буруу байна.',
    err_invalid_email: 'Зөв и-мэйл оруулна уу.',
    err_pw_too_short: 'Нууц үг хамгийн багадаа 8 тэмдэгт байх ёстой.',
    err_pw_mismatch: 'Нууц үг таарахгүй байна.',
    err_required: 'Заавал бөглөнө үү.',
    err_accept_terms: 'Үргэлжлүүлэхийн тулд нөхцөлийг зөвшөөрнө үү.',
    err_code: 'Код буруу эсвэл хүчингүй болсон байна.',
    sign_out: 'Гарах', signed_in_as: 'Нэвтэрсэн',
    language: 'Хэл',
    st_account: 'Хэрэглэгч', account_tab: 'Хэрэглэгч',
    st_appearance: 'Харагдац', st_notifications: 'Мэдэгдэл',
    theme_mode: 'Загвар', accent_color: 'Өнгөний ая',
    accent_sub: 'Гол товч, холбоос, графикийн тодруулахад хэрэглэнэ.',
    notif_channels: 'Хүргэх суваг', notif_channels_sub: 'Хаашаа мэдэгдэх вэ?',
    notif_events: 'Ямар үед', notif_events_sub: 'Тодорхой үйл явдлуудыг асаах/унтраах',
    quiet_hours: 'Чимээгүй цаг', quiet_hours_sub: 'Энэ цагт мэдэгдэл ирэхгүй',
    mark_all_read: 'Бүгдийг уншсан', all: 'Бүгд', unread: 'Уншаагүй',
    notif_empty: 'Бүх мэдэгдлийг уншсан байна ✨',
    notif_settings: 'Мэдэгдлийн тохиргоо',
    group_today: 'Өнөөдөр', group_yesterday: 'Өчигдөр', group_week: 'Энэ долоо хоног', group_earlier: 'Өмнөх',
    size_contracts: 'Гэрээ', size_lots: 'Лот',
    risk_pct_account: 'Эрсдэлийн %', risk_dollars: 'Эрсдэл ($)',
    suggested_size: 'Санал болгох хэмжээ', risk_actual: 'Энэ арилжааны бодит эрсдэл:', of_account: 'дансны',
    delete_account_title: 'Данс устгах', delete_account_desc: 'Тэмдэглэл, арилжаа, бүх дансны мэдээллийг бүрмөсөн устгана. Буцаах боломжгүй.',
    delete_account_btn: 'Дансаа устгах',
    confirm_delete_title: 'Та бүрэн итгэлтэй байна уу?',
    confirm_delete_body: 'Энэ нь таны данс, бүх арилжаа, тэмдэглэл, тохиргоог бүрмөсөн устгана. Үргэлжлүүлэхийн тулд DELETE гэж бичнэ үү.',
    type_delete: 'DELETE гэж бичнэ үү',
    keep_account: 'Дансаа хадгалах',
    change_password: 'Нууц үг солих', current_password: 'Одоогийн нууц үг',

    // ===== Onboarding =====
    ob_step_n_of_m: 'Алхам {n}/{m}',
    ob_welcome_title: 'Edgebook-д тавтай морил, {name}',
    ob_welcome_sub: 'Эхний данснаа үүсгэцгээе. 30 секунд зарцуулна.',
    ob_f1: 'Арилжаа бүрээ нэг дор бүртгэх',
    ob_f2: 'Бодит статистикаар давуу талаа харах',
    ob_f3: 'P&L-ээс гадна сэтгэлээ тэмдэглэх',
    ob_basics_title: 'Дансныхаа тухай хэлнэ үү',
    ob_basics_sub: 'Тохиргоо цэснээс дараа нэмэлт данс нэмж болно.',
    ob_rules_title: 'Сорилтын дүрмийг тохируулах',
    ob_rules_sub: 'Өдрийн алдагдал, нийт алдагдал, ашгийн зорилтыг автоматаар хянана.',
    ob_color: 'Өнгө',
    ob_deadline: 'Эцсийн хугацаа',
    ob_back: 'Буцах',
    ob_continue: 'Үргэлжлүүлэх',
    ob_finish: 'Дуусгах',
    ob_skip: 'Дараа нь',
    ob_toast: 'Данс үүсгэгдлээ — дашбордоо харцгаая',

    // ===== KPI Expectancy =====
    kpi_expectancy: 'Хүлээлт',
    kpi_expectancy_tip: 'Ялах хувь, дундаж ялалт/алдагдлыг харгалзан арилжаа тутамд хүлээгдэх дундаж ашиг.',

    // ===== Trade drawer =====
    td_execution: 'Гүйцэтгэл',
    td_risk: 'Эрсдэл',
    td_context: 'Нөхцөл',
    td_reflection: 'Эргэцүүлэл',
    td_timestamps: 'Цаг',
    td_duration: 'Үргэлжлэл',
    td_risk_dollars: 'Эрсдэл $',
    td_created: 'Үүсгэсэн',
    td_updated: 'Шинэчилсэн',
    td_view: 'Дэлгэрэнгүй',
    td_edit: 'Засах',
    td_duplicate: 'Хуулах',
    td_delete: 'Устгах',
    td_delete_title: 'Энэ арилжааг устгах уу?',
    td_delete_body: '{date}-ны {ticker} {dir}-ийг бүрмөсөн устгана. Буцаах боломжгүй.',
    edit_trade_title: 'Арилжаа засах',
    save_changes_trade: 'Өөрчлөлт хадгалах',

    // ===== Playbook =====
    playbook_sub: 'Нэрлэсэн сетапууд ба тэдгээрийн гүйцэтгэл',
    search_strategies: 'Стратеги хайх…',
    filter_by: 'Шүүлт',
    profitable: 'Ашигтай',
    losing: 'Алдагдалтай',
    unused: 'Хэрэглээгүй',
    sort_net: 'Цэвэр P&L',
    sort_wr: 'Ялах хувь',
    sort_r: 'Дундаж R',
    sort_trades: 'Арилжааны тоо',
    no_description: 'Тайлбар алга.',
    no_trades_yet: 'Энэ стратегид арилжаа бүртгэгдээгүй.',
    no_strategies_match: 'Тохирох стратеги алга',
    view_trades: 'Арилжаа харах',
    edit: 'Засах',
    duplicate: 'Хуулах',
    archive: 'Архивлах',
    strategy: 'Стратеги',
    strategy_name: 'Стратегийн нэр',
    description: 'Тайлбар',
    strategy_desc_ph: 'Энэ сетап юугаар тодорхойлогдох вэ? Entry дүрэм, хугацаа, нөхцөл…',
    new_strategy_modal_sub: 'Ирмэгээ тусад нь хэмжих шинэ сетап тодорхойлох.',
    create_strategy: 'Стратеги үүсгэх',

    // ===== Account modal tabs =====
    acct_tab_general: 'Ерөнхий',
    acct_tab_risk: 'Эрсдэлийн дүрэм',
    acct_tab_goals: 'Зорилго',
    risk_tab_sub: 'Энэ дүрэм зөвхөн энэ дансанд үйлчилнэ. Зөрчвөл шинэ арилжаа бүртгэхэд анхааруулна.',
    goals_tab_sub: 'Энэ дансанд хамаарах гүйцэтгэлийн зорилгууд.',

    // ===== Settings profile =====
    profile_risk_moved: 'Эрсдэлийн дүрэм ба зорилго нь данс тус бүрт тохируулагдана — Accounts таб-аас аль нэгийг нээж тохируулна уу.',
  }
};

// Currency formatting — USD only
const CURRENCIES = {
  USD: { symbol: '$', decimals: 2, position: 'prefix', rate: 1 },
};

const I18nContext = React.createContext({ lang: 'en', setLang: ()=>{}, t: (k)=>k, currency: 'USD', setCurrency: ()=>{}, fmt: (n)=>String(n), fmtCur: (n)=>String(n) });

const I18nProvider = ({ children }) => {
  const [lang, setLangRaw] = useState(() => { try { return localStorage.getItem('edgebook:lang') || 'en'; } catch { return 'en'; } });
  const currency = 'USD';
  const setCurrency = () => {};
  const setLang = (l) => { setLangRaw(l); try { localStorage.setItem('edgebook:lang', l); } catch {} };

  const t = (key, vars) => {
    let s = TRANSLATIONS[lang]?.[key];
    if (s == null) s = TRANSLATIONS.en[key];
    if (s == null) s = key;
    if (vars && typeof s === 'string') {
      Object.entries(vars).forEach(([k,v]) => { s = s.replace(`{${k}}`, v); });
    }
    return s;
  };

  // Format USD amount. `signed` prepends +/−.
  const fmtCur = (n, signed = true) => {
    const abs = Math.abs(n);
    const s = abs.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
    const sign = n > 0 ? '+' : n < 0 ? '−' : '';
    return (signed ? sign : '') + '$' + s;
  };

  const fmtCurShort = (n) => {
    const sign = n < 0 ? '−' : n > 0 ? '+' : '';
    const a = Math.abs(n);
    if (a >= 1000) return sign + '$' + (a/1000).toFixed(1) + 'k';
    return sign + '$' + a.toFixed(0);
  };

  return (
    <I18nContext.Provider value={{ lang, setLang, t, currency, setCurrency, fmtCur, fmtCurShort }}>
      {children}
    </I18nContext.Provider>
  );
};

const useI18n = () => React.useContext(I18nContext);

Object.assign(window, { TRANSLATIONS, CURRENCIES, I18nContext, I18nProvider, useI18n });
