// ─── Helix Passport · i18n ───────────────────────────────────────────────────
// Uso: window.t('key') o window.useT() desde cualquier componente
// Idioma guardado en localStorage 'helixLang'

const LANGS = [
  { id:'es', flag:'🇲🇽', label:'ES' },
  { id:'en', flag:'🇺🇸', label:'EN' },
  { id:'de', flag:'🇩🇪', label:'DE' },
  { id:'fr', flag:'🇫🇷', label:'FR' },
];

const TRANSLATIONS = {
  es: {
    // BottomNav
    nav_explore:    'Explorar',
    nav_map:        'Mapa',
    nav_passport:   'Pasaporte',
    nav_ranking:    'Ranking',

    // ZonePicker
    zone_eyebrow:   'Tu zona',
    zone_use_loc:   '📍 Usar mi ubicación',
    zone_title:     '¿Desde dónde exploras?',
    zone_subtitle:  'Elige tu destino y te mostramos los mejores spots verificados cerca de ti.',
    zone_soon:      'Próximamente',

    // RegisterModal
    reg_title_register: 'Regístrate',
    reg_title_activate: 'Activa tu Pasaporte',
    reg_title_login:    'Iniciar sesión',
    reg_subtitle_register: 'Solo necesitamos tres datos. Promesa de viajero: sin spam, sin vueltas.',
    reg_subtitle_login:    'Bienvenido de vuelta, abrocha tu cinturón.',
    reg_tab_register:   'Registro',
    reg_tab_login:      'Iniciar sesión',
    reg_placeholder_name:  'Tu nombre',
    reg_placeholder_phone: 'Número de celular',
    reg_placeholder_pin:   'PIN de 4 dígitos',
    reg_forgot_pin:     '¿Olvidaste tu PIN? Escríbenos a',
    reg_cta_activate:   'Activar Pasaporte',
    reg_cta_login:      'Iniciar sesión',
    reg_footer:         'Los datos se guardan en tu teléfono.',
    reg_mailto_subject: 'Olvidé mi PIN de Helix Passport',
    reg_mailto_body:    'Hola, olvidé mi PIN. Mi teléfono es: ',

    // BusinessCard
    biz_vip_eyebrow:    'Promo Cliente VIP',
    biz_vip_every:      'cada',
    biz_vip_visits:     'visitas',
    biz_catalog_title:  'Catálogo',
    biz_catalog_book:   'Reservar',
    biz_social_title:   'Encuéntranos en',
    biz_see_map:        '🗺️ Ver en mapa',
    biz_stamp:          'Registrar visita',

    // RewardModal
    reward_unlocked:    'Recompensa desbloqueada',
    reward_achieved:    '¡Lo lograste en',
    reward_great:       '¡Genial!',

    // RewardsDrawer
    rewards_title:      'Recompensas',

    // RewardCoupon
    coupon_show_qr:     'Canjear',
    coupon_show_local:  'Muéstrale este QR al local',
    coupon_waiting:     'Esperando que el local escanee...',
    coupon_redeemed:    '¡Recompensa canjeada!',
    coupon_enjoy:       'Disfruta de',

    // Home — Hero
    home_geo_banner: 'Activa tu ubicación para una experiencia personalizada.',
    home_period:        'Mes · May/Jun',
    home_hero_h1_a:     'La ciudad es',
    home_hero_h1_b:     'tu destino.',
    home_hero_sub_a:    'Explora los mejores spots de',
    home_hero_sub_b:    'Sella tu pasaporte. Gana.',
    home_cta_explore:   'Explorar spots',
    home_cta_business:  '¿Tienes un negocio? Únete →',

    // Home — sections
    home_spot_badge:    'Spot del mes',
    home_see_more:      'Ver más',
    home_verified:      'Spots verificados · mes actual',
    home_prize_badge:   '🎰 Gran premio del mes',
    home_prize_empty:   'Consigue tantos sellos como puedas.',
    home_cat_title:     'Mejores spots por categoría',
    home_see_map:       'Ver todos en el mapa',
    home_champion:      'Ganador',
    home_explorers:     'Exploradores del mes',
    home_full_table:    'Ver tabla completa',
    home_spots_singular:'spot',
    home_spots_plural:  'spots',
    home_visits:        'visitas',

    // Home — footer
    footer_tagline:     'Hecho en BCS.\nPara quienes se mueven.',
    footer_web_cta:     '¿Te gusta nuestra web? Cotiza la tuya →',
    footer_copy:        '© 2025 Helix Passport · La Paz, BCS · v1.0',
    // Passport
    passport_title:         'Mi Pasaporte',
    passport_no_user_eyebrow: 'Sin activar',
    passport_no_user_h:     'Tu pasaporte aún',
    passport_no_user_h2:    'está en blanco.',
    passport_no_user_sub:   'Cada visita es un sello. Cada sello te acerca a una recompensa real.',
    passport_activate:      'Activa tu Pasaporte',
    passport_explorer:      'Explorador',
    passport_id_label:      'Pasaporte',
    passport_bday_title:    '🎂 ¡Es tu mes de cumpleaños!',
    passport_bday_body:     'Presenta tu ID [{{id}}] e identificación oficial en locales participantes para canjear tus cortesías según sus términos y condiciones.',
    passport_auth_title:    'Autorización de Cumpleaños',
    passport_auth_body:     '{{biz}} está iniciando tu regalo de cumpleaños. ¿Autorizas este canje?',
    passport_auth_approve:  'Autorizar',
    passport_auth_reject:   'Rechazar',
    passport_auth_pin_label: 'Tu PIN de pasaporte',
    passport_logout:        'Salir',
    passport_tab_gv:        'Gran Viajero',
    passport_tab_vip:       'Cliente VIP',
    passport_change_zone:   'Cambiar zona',
    passport_loading:       'Cargando...',
    passport_stamps_label:  'Sellos del mes',
    passport_visit_s:       'visita',
    passport_visit_p:       'visitas',
    passport_all_done:      '¡Visitaste todos los spots! Estás cerca del premio mayor.',
    passport_visit_more_pre:'Visita',
    passport_visit_more_post:'más para completar los spots del mes.',
    passport_visited_pre:    'Has visitado',
    passport_visited_post_s: 'único este mes.',
    passport_visited_post_p: 'únicos este mes.',
    passport_progress:      'Progreso por negocio',
    passport_reward_pending_1: '1 recompensa pendiente',
    passport_reward_pending_n: 'recompensas pendientes',
    // Leaderboard
    lb_active_month:  'Mes activo',
    lb_title_a:       'Exploradores',
    lb_title_b:       'del mes.',
    lb_subtitle:      'Los que más exploran. Los que más conocen',
    lb_silver:        'Plata',
    lb_gold:          'Oro',
    lb_bronze:        'Bronce',
    lb_loading:       'Cargando ranking…',
    lb_full_table:    'Tabla completa',
    lb_you:           'Tú',
    lb_prize_eyebrow: 'Premio del mes',
    lb_prize_text:    'El explorador #1 se lleva:',
    lb_prize_soon:    'Premio próximamente',
    // App / Próximamente
    app_coming_soon_title: 'Próximamente en esta zona',
    app_coming_soon_sub:   'Estamos incorporando negocios cerca de ti.',
    app_coming_soon_btn:   'Ver zonas disponibles',
    app_winner_title:       '¡Ganaste el mes!',
    app_winner_sub_a:       'Felicidades',
    app_winner_sub_b:       'fuiste el explorador #1 de',
    app_winner_sub_c:       'Pronto un representante de Helix te contactará para entregarte tu premio.',
    app_winner_btn:         '¡Entendido!',
    app_register_ctx_scan:     'Para registrar tu visita',
    app_register_ctx_passport: 'Para activar tu pasaporte',
    // Mapa /
    map_title:'Mapa de Spots',
    map_directions:'Cómo llegar',
    map_featured_badge: 'Destacado',
    map_search_placeholder: 'Buscar negocio...',
    map_nearby:'Cerca de ti',
    map_empty:'No hay spots en esta categoría. Por ahora.',
    map_featured: 'Negocios destacados',
    map_geo_banner: 'Activa tu ubicación para ver los spots más cercanos a ti.',
    map_geo_cta: 'Activar',
    cat_all:'Todos',
    cat_food:'Comida',
    cat_adventure:'Aventura',
    cat_grooming:'Cuidado personal',
    cat_lifestyle:'Lifestyle',
    // Scanner
    scan_title:      'Registrar visita',
    scan_cam_error:  'No se pudo acceder a la cámara. Verifica los permisos.',
    scan_back:       'Volver',
    scan_aim:        'Apunta al QR del negocio',
    scan_cancel:     'Cancelar',
    scan_hint:       'Escanea el QR estático del establecimiento',
    scan_about_to:   'Vas a timbrar',
    scan_step0_h:    'Registra tu visita',
    scan_step0_sub:  'Localiza el código QR de la caja del establecimiento. Asegúrate de estar físicamente dentro del local.',
    scan_step0_cta:  'Escanear código de caja',
    scan_tip_label:  'Tip:',
    scan_tip_body:   'El QR de caja es estático; el QR que tú generas en el paso 2 es único y temporal.',
    scan_step2_h:    '¡Código verificado!',
    scan_step2_sub:  'Muestra este código al personal del local para completar tu visita.',
    scan_generating: 'Generando...',
    scan_expires:    'Este código expira en',
    scan_waiting:    'Esperando que el negocio escanee tu código...',
    //Business
    biz_cam_error:    'No se pudo acceder a la cámara',
    biz_visit_ok:     '✓ Visita registrada',
    biz_reward_ok:    '✓ Recompensa canjeada:',
    biz_conn_error:   'Error de conexión',
    biz_scan_cta:     'Escanear QR del cliente',
    biz_scan_another: 'Escanear otro',
    biz_qr_label:     'QR de tu local — para imprimir',
    biz_clients:      'Clientes',
    biz_hide:         'Ocultar',
    biz_see:          'Ver',
    biz_no_visits:    'Aún no hay visitas registradas.',
    biz_no_reward:    'Sin definir',
    biz_promo_updated:'✓ Promo actualizada',
    biz_edit:         'Editar',
    biz_reward_label: 'Recompensa',
    biz_goal_label:   'Meta de visitas (2–50)',
    biz_pin_label:    'Confirmar PIN',
    biz_saving:       'Guardando...',
    biz_save_promo:   'Guardar promo',
    biz_promo_section:         'Promociones',
    biz_birthday_title:        'Regalo de Cumpleaños',
    biz_birthday_on:           'Activo',
    biz_birthday_off:          'Inactivo',
    biz_birthday_gift_label:   'Descripción del regalo',
    biz_birthday_gift_ph:      'Ej: Copa de vino gratis',
    biz_birthday_auth_label:   'Nombre del Autorizador',
    biz_birthday_auth_ph:      'Ej: Carlos Martínez',
    biz_birthday_not_set:      'Sin configurar',
    biz_birthday_saved:        '✓ Configuración guardada',
    biz_redeem_btn:            'Redimir Cumpleaños',
    biz_redeem_title:          'Regalo de Cumpleaños',
    biz_redeem_ine_title:      '⚠ Verificar Identificación',
    biz_redeem_ine_body:       'Solicita al cliente una identificación oficial vigente. El cliente puede ser foráneo.',
    biz_redeem_ine_check:      'He verificado la identificación del cliente',
    biz_redeem_auth_label:     'Nombre del Autorizador',
    biz_redeem_pin_label:      'PIN de canje',
    biz_redeem_pin_ph:         '4 dígitos',
    biz_redeem_continue:       'Continuar',
    biz_redeem_passport_label: 'Número de Pasaporte',
    biz_redeem_passport_ph:    'Ej: 00001',
    biz_redeem_month_label:    'Mes de Nacimiento (según INE)',
    biz_redeem_verify_btn:     'Verificar Cliente',
    biz_redeem_waiting_title:  'Esperando autorización del cliente',
    biz_redeem_waiting_body:   'El cliente debe aceptar el canje en su dispositivo.',
    biz_redeem_err_rejected:   'El cliente rechazó la autorización',
    biz_redeem_err_expired:    'La solicitud expiró. Intenta de nuevo.',
    biz_redeem_confirm_btn:    'Confirmar y Registrar',
    biz_redeem_success_title:  '¡Canje Registrado!',
    biz_redeem_success_sub:    'Regalo entregado a',
    biz_redeem_err_window:     'Fuera de ventana. Mes de cumpleaños registrado: mes {{n}}.',
    biz_redeem_err_24h:        'Canje bloqueado: menos de 24 h desde el último registro.',
    biz_redeem_err_annual:     'Canje bloqueado: ya se registró este año en este local.',
    biz_month_names:           'Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre',
    biz_promo_pin_sub:         'Ingresa tu PIN para acceder a Promociones',
    biz_birthday_edit:         'Editar',
    biz_birthday_terms_label:  'Términos y Condiciones',
    biz_birthday_terms_ph:     'Ej: Solo válido en tu mes de cumpleaños. Presenta identificación vigente.',
    biz_birthday_redeem_pin_label: 'PIN de canje (4 dígitos)',
    biz_birthday_redeem_pin_ph: 'Ej: 1234',
    biz_birthday_pin_required: 'El PIN de canje es obligatorio cuando el programa está activo.',
    biz_birthday_pin_hint:     'Dejar vacío para conservar el PIN actual.',
    map_filter_birthday:       '🎁 Cumpleaños',
    map_bday_redeemed:         'Ya canjeado este año',
    map_bday_terms_label:      'Términos',
    map_bday_available:        'Disponible este mes',
    map_filter_promo:          '🔥 Promo Hoy',
    map_promo_badge:           'Promo hoy',
    scan_promo_h:              '¡Promo del día desbloqueada!',
    scan_promo_sub:            'Muestra esta pantalla al personal para que te apliquen el beneficio.',
    scan_promo_done:           'Listo, continuar',
    biz_daily_promos_title:    'Promos por Día',
    biz_daily_promos_sub:      'El cliente la verá al registrar su visita ese día de la semana.',
    biz_daily_promo_ph_es:     'Ej: 2x1 en bebidas',
    biz_daily_promo_ph_en:     'E.g.: 2-for-1 drinks (optional)',
    biz_daily_promo_saved:     '✓ Guardado',
    biz_logout:       'Cerrar sesión del negocio',
    biz_reward_every: 'Recompensa cada',
    biz_panel_title:'Panel de Negocio',
    biz_access_eyebrow:'Acceso exclusivo',
    biz_access_h:'Entra a tu panel',
    biz_code_placeholder:'Código HELIX-XXX-0000',
    biz_pin6_placeholder:'PIN de 6 dígitos',
    biz_verifying:'Verificando...',
    biz_enter:'Entrar',
    biz_total_visits:'Visitas totales',
    biz_unique_clients:'Clientes únicos',
    biz_verify_section:'Verificar visita de cliente',
    //Month prize
    prize_see_details:   'Ver detalles',
  prize_value:         'Valor:',
  prize_date_note:     'Los detalles de entrega se coordinan directamente con el ganador. Recibirás un mensaje del equipo Helix para hacer efectivo tu premio.',
  prize_meet:          'Conocer',
    // Reward visit format
    reward_condition:    '{{reward}} a la {{visits}}ª visita',
    // Map
    map_center_btn:      'Centrar en mi ubicación',
    // Passport
    passport_destinations: 'destinos',
    // Leaderboard
    lb_cycle_prefix:     'Mes ·',
    // Business
    biz_website_label:      'Sitio web',
    biz_reward_placeholder: 'Ej: Café gratis, 10% descuento...',
    biz_reward_placeholder_en: 'E.g.: Free coffee, 10% off... (optional)',
    biz_goal_placeholder:   'Ej: 5',
    // Auth CTA (home hero)
    auth_cta:            'Inicia sesión o regístrate',
    // Business — logout PIN confirmation
    biz_logout_pin_sub:  'Confirma tu PIN para cerrar sesión de forma segura.',
    // Stats
    biz_stats_cta:       'Mi Negocio',
    biz_stats_title:     'Mi Negocio',
    biz_stats_week:      'Visitas última semana',
    biz_stats_hours:     'Horarios pico',
    biz_cmd_center:      'Panel del Negocio',
    biz_insight_moment:  'Insight del momento',
    biz_pin_gate_title:  'Acceso restringido',
    biz_pin_gate_sub:    'Confirma tu PIN de negocio para gestionar tu negocio.',
    biz_pin_enter:       'Acceder',
    biz_peak_label:      'Hora Pico',
    biz_opportunity_title:'Oportunidad detectada',
    biz_opportunity_low: 'Tu bloque de {{slot}}h tiene baja afluencia. Prueba una promoción en este horario.',
    biz_opportunity_growth:'¡Tu bloque de {{slot}}h está en tendencia alcista! Considera reforzar tu equipo en este horario.',
    biz_filter_all:      'Todos',
    biz_filter_top:      'Top',
    biz_filter_recent:   'Recientes',
    biz_days_short:      'Dom,Lun,Mar,Mié,Jue,Vie,Sáb',
    biz_insight_growing:  '¡Negocio en alza! La actividad reciente supera en un {{pct}}% la del inicio de semana.',
    biz_insight_flat:     'Flujo constante esta semana ({{n}} visitas), pero sin crecimiento. ¿Consideras lanzar una oferta?',
    biz_insight_loyal:    'Base sólida: {{freq}} clientes frecuentes, pero pocos nuevos. Prueba una promo de "Trae a un amigo".',
    biz_insight_declining:'Actividad menor esta semana. Contacta a tus clientes frecuentes para reactivar el flujo.',
    biz_insight_empty:    'Aún sin actividad registrada. Comparte tu QR para empezar a crecer.',
    biz_tag_topfan:       'Top Fan',
    biz_tag_frequent:     'Visitante Frecuente',
    biz_tag_recent:       'Reciente',
    biz_si_growth_f:       '{{pct}}% más visitas en los últimos días vs. inicio de semana.',
    biz_si_growth_a:       'Hora pico activa: {{slot}}h. Garantiza equipo y stock en ese bloque.',
    biz_si_decline_f:      'Actividad bajó {{pct}}% en los últimos días vs. inicio de semana.',
    biz_si_decline_a_freq: 'Reactiva a tus {{freq}} clientes frecuentes con una oferta directa.',
    biz_si_decline_a_nofq: 'Verifica que tu horario de apertura coincida con el bloque de mayor tráfico ({{slot}}h).',
    biz_si_peak_f:         '{{n}} visitas esta semana — {{peakPct}}% concentradas en el bloque {{slot}}h.',
    biz_si_peak_a:         'Mantén equipo completo en {{slot}}h. Evalúa un incentivo para los bloques de menor tráfico.',
    biz_si_loyal_f:        '{{freq}} clientes frecuentes concentran el {{loyalPct}}% de las visitas totales.',
    biz_si_loyal_a:        '{{new}} clientes nuevos esta semana. Activa captación con una promo dirigida.',
    biz_si_empty_f:        'Sin visitas registradas en los últimos 7 días.',
    biz_si_empty_a:        'Ubica tu QR en la zona más visible del local para capturar leads.',
    biz_si_wow_up_f:       '{{pct}}% más visitas vs. la semana anterior.',
    biz_si_wow_up_a:       'Hora pico activa: {{slot}}h. Mantén equipo y stock en ese bloque.',
    biz_si_wow_dn_f:       '{{pct}}% menos visitas vs. la semana anterior.',
    biz_si_wow_dn_a:       'Identifica los días de menor afluencia y activa una oferta dirigida.',
    biz_legend_current:    'Esta semana',
    biz_legend_prev:       'Semana anterior',
    biz_view_menu:       'Ver Menú',
    biz_view_services:   'Ver Servicios',
    // Shared
    img_alt_fallback:    'imagen',
  },

  en: {
    nav_explore:    'Explore',
    nav_map:        'Map',
    nav_passport:   'Passport',
    nav_ranking:    'Leaderboard',

    zone_eyebrow:   'Your zone',
    zone_use_loc:   '📍 Use my location',
    zone_title:     'Where are you exploring from?',
    zone_subtitle:  'Pick your destination and we\'ll show you the best verified spots nearby.',
    zone_soon:      'Coming soon',

    reg_title_register: 'Create account',
    reg_title_activate: 'Activate your Passport',
    reg_title_login:    'Sign in',
    reg_subtitle_register: 'Three things and you\'re in. Traveler\'s promise: no spam, no nonsense.',
    reg_subtitle_login:    'Welcome back — let\'s get rolling.',
    reg_tab_register:   'Sign up',
    reg_tab_login:      'Sign in',
    reg_placeholder_name:  'Your name',
    reg_placeholder_phone: 'Phone number',
    reg_placeholder_pin:   '4-digit PIN',
    reg_forgot_pin:     'Forgot your PIN? Email us at',
    reg_cta_activate:   'Activate Passport',
    reg_cta_login:      'Sign in',
    reg_footer:         'Your data is stored on your phone.',
    reg_mailto_subject: 'Forgot my Helix Passport PIN',
    reg_mailto_body:    'Hi, I forgot my PIN. My phone number is: ',

    biz_vip_eyebrow:    'VIP Perk',
    biz_vip_every:      'every',
    biz_vip_visits:     'visits',
    biz_catalog_title:  'Catalog',
    biz_catalog_book:   'Book',
    biz_social_title:   'Find us on',
    biz_see_map:        '🗺️ View on map',
    biz_stamp:          'Log visit',

    reward_unlocked:    'Reward unlocked',
    reward_achieved:    'You did it at',
    reward_great:       'Awesome!',

    rewards_title:      'Rewards',

    coupon_show_qr:     'Redeem',
    coupon_show_local:  'Show this QR to the venue',
    coupon_waiting:     'Waiting for the venue to scan...',
    coupon_redeemed:    'Reward redeemed!',
    coupon_enjoy:       'Enjoy your',

    home_geo_banner: 'Enable location for a more personalized experience.',
    home_period:        'Month · May/Jun',
    home_hero_h1_a:     'The city is',
    home_hero_h1_b:     'your destination.',
    home_hero_sub_a:    'Explore the best spots in',
    home_hero_sub_b:    'Stamp your passport. Win.',
    home_cta_explore:   'Explore spots',
    home_cta_business:  'Own a business? Join →',

    home_spot_badge:    'Spot of the month',
    home_see_more:      'See more',
    home_verified:      'Verified spots · current month',
    home_prize_badge:   '🎰 Big prize of the month',
    home_prize_empty:   'Collect as many stamps as you can.',
    home_cat_title:     'Best spots by category',
    home_see_map:       'View all on map',
    home_champion:      'Winner',
    home_explorers:     'Explorers of the month',
    home_full_table:    'View full table',
    home_spots_singular:'spot',
    home_spots_plural:  'spots',
    home_visits:        'visits',

    footer_tagline:     'Made in BCS.\nFor those who move.',
    footer_web_cta:     'Like our web? Get a quote →',
    footer_copy:        '© 2025 Helix Passport · La Paz, BCS · v1.0',
    passport_title:         'My Passport',
    passport_no_user_eyebrow: 'Not activated',
    passport_no_user_h:     'Your passport is still',
    passport_no_user_h2:    'blank.',
    passport_no_user_sub:   'Every visit is a stamp. Every stamp brings you closer to a real reward.',
    passport_activate:      'Activate your Passport',
    passport_explorer:      'Explorer',
    passport_id_label:      'Passport',
    passport_bday_title:    '🎂 It\'s your birthday month!',
    passport_bday_body:     'Show your ID [{{id}}] and a valid government ID at participating venues to claim your complimentary gifts, subject to each venue\'s terms.',
    passport_auth_title:    'Birthday Authorization',
    passport_auth_body:     '{{biz}} is initiating your birthday gift. Do you authorize this redemption?',
    passport_auth_approve:  'Authorize',
    passport_auth_reject:   'Decline',
    passport_auth_pin_label: 'Your passport PIN',
    passport_logout:        'Sign out',
    passport_tab_gv:        'Grand Traveler',
    passport_tab_vip:       'VIP Member',
    passport_change_zone:   'Change zone',
    passport_loading:       'Loading...',
    passport_stamps_label:  'Monthly stamps',
    passport_visit_s:       'visit',
    passport_visit_p:       'visits',
    passport_all_done:      'You visited all spots! You\'re in the running for the grand prize.',
    passport_visit_more_pre:'Visit',
    passport_visit_more_post:'more to complete this month\'s spots.',
    passport_visited_pre:    'You\'ve visited',
    passport_visited_post_s: 'unique this month.',
    passport_visited_post_p: 'unique this month.',
    passport_progress:      'Progress by business',
    passport_reward_pending_1: '1 reward pending',
    passport_reward_pending_n: 'rewards pending',
    lb_active_month:  'Active month',
    lb_title_a:       'Explorers',
    lb_title_b:       'of the month.',
    lb_subtitle:      'Top explorers. The ones who know the city.',
    lb_silver:        'Silver',
    lb_gold:          'Gold',
    lb_bronze:        'Bronze',
    lb_full_table:    'Full table',
    lb_you:           'You',
    lb_prize_eyebrow: 'Prize of the month',
    lb_prize_text:    'Explorer #1 takes home:',
    lb_prize_soon:    'Prize coming soon',
    app_coming_soon_title: 'Coming soon to this zone',
    app_coming_soon_sub:   'We\'re adding businesses near you.',
    app_coming_soon_btn:   'View available zones',
    app_winner_title:       'You won the month!',
    app_winner_sub_a:       'Congrats',
    app_winner_sub_b:       'you were explorer #1 in',
    app_winner_sub_c:       'A Helix representative will contact you soon to deliver your prize.',
    app_winner_btn:         'Got it!',
    app_register_ctx_scan:     'To log your visit',
    app_register_ctx_passport: 'To activate your passport',
    // Mapa /
    map_title:'Spots Map',
    map_directions:'Get directions',
    map_featured_badge: 'Featured',
    map_search_placeholder: 'Search business...',
    map_nearby:'Near you',
    map_empty:'No spots in this category. For now.',
    map_featured: 'Featured spots',
    map_geo_banner: 'Enable location to see spots closest to you.',
    map_geo_cta: 'Enable',
    cat_all:'All',
    cat_food:'Food',
    cat_adventure:'Adventure',
    cat_grooming:'Grooming',
    cat_lifestyle:'Lifestyle',
    //Scanner
    scan_title:      'Log visit',
    scan_cam_error:  'Could not access camera. Check your permissions.',
    scan_back:       'Go back',
    scan_aim:        'Point at the venue\'s QR code',
    scan_cancel:     'Cancel',
    scan_hint:       'Scan the venue\'s static QR code',
    scan_about_to:   'Checking in at',
    scan_step0_h:    'Log your visit',
    scan_step0_sub:  'Find the QR code at the register. Make sure you\'re physically inside the venue.',
    scan_step0_cta:  'Scan register code',
    scan_tip_label:  'Tip:',
    scan_tip_body:   'The register QR is static; the QR you generate in step 2 is unique and temporary.',
    scan_step2_h:    'Code verified!',
    scan_step2_sub:  'Show this code to the staff to complete your visit.',
    scan_generating: 'Generating...',
    scan_expires:    'This code expires in',
    scan_waiting:    'Waiting for the venue to scan your code...',
    //Business
    biz_cam_error:    'Could not access camera',
    biz_visit_ok:     '✓ Visit logged',
    biz_reward_ok:    '✓ Reward redeemed:',
    biz_conn_error:   'Connection error',
    biz_scan_cta:     'Scan customer QR',
    biz_scan_another: 'Scan another',
    biz_qr_label:     'Your venue QR — print it',
    biz_clients:      'Customers',
    biz_hide:         'Hide',
    biz_see:          'View',
    biz_no_visits:    'No visits logged yet.',
    biz_no_reward:    'Not set',
    biz_promo_updated:'✓ Promo updated',
    biz_edit:         'Edit',
    biz_reward_label: 'Reward',
    biz_goal_label:   'Visit goal (2–50)',
    biz_pin_label:    'Confirm PIN',
    biz_saving:       'Saving...',
    biz_save_promo:   'Save promo',
    biz_promo_section:         'Promotions',
    biz_birthday_title:        'Birthday Gift',
    biz_birthday_on:           'Active',
    biz_birthday_off:          'Inactive',
    biz_birthday_gift_label:   'Gift description',
    biz_birthday_gift_ph:      'E.g.: Free glass of wine',
    biz_birthday_auth_label:   'Authorizer name',
    biz_birthday_auth_ph:      'E.g.: Carlos Martínez',
    biz_birthday_not_set:      'Not configured',
    biz_birthday_saved:        '✓ Configuration saved',
    biz_redeem_btn:            'Redeem Birthday Gift',
    biz_redeem_title:          'Birthday Gift',
    biz_redeem_ine_title:      '⚠ Verify ID',
    biz_redeem_ine_body:       'Request a valid government-issued ID from the customer. Foreign customers are accepted.',
    biz_redeem_ine_check:      'I have verified the customer\'s ID',
    biz_redeem_auth_label:     'Authorizer Name',
    biz_redeem_pin_label:      'Redemption PIN',
    biz_redeem_pin_ph:         '4 digits',
    biz_redeem_continue:       'Continue',
    biz_redeem_passport_label: 'Passport Number',
    biz_redeem_passport_ph:    'E.g.: 00001',
    biz_redeem_month_label:    'Birth Month (from ID)',
    biz_redeem_verify_btn:     'Verify Customer',
    biz_redeem_waiting_title:  'Waiting for customer authorization',
    biz_redeem_waiting_body:   'The customer must accept the redemption on their device.',
    biz_redeem_err_rejected:   'The customer declined the authorization',
    biz_redeem_err_expired:    'Request expired. Please try again.',
    biz_redeem_confirm_btn:    'Confirm & Register',
    biz_redeem_success_title:  'Gift Registered!',
    biz_redeem_success_sub:    'Gift given to',
    biz_redeem_err_window:     'Outside window. Registered birth month: month {{n}}.',
    biz_redeem_err_24h:        'Blocked: less than 24 h since last registration.',
    biz_redeem_err_annual:     'Blocked: already registered this year at this location.',
    biz_month_names:           'January,February,March,April,May,June,July,August,September,October,November,December',
    biz_promo_pin_sub:         'Enter your PIN to access Promotions',
    biz_birthday_edit:         'Edit',
    biz_birthday_terms_label:  'Terms & Conditions',
    biz_birthday_terms_ph:     'E.g.: Valid during your birthday month only. Present valid ID.',
    biz_birthday_redeem_pin_label: 'Redemption PIN (4 digits)',
    biz_birthday_redeem_pin_ph: 'E.g.: 1234',
    biz_birthday_pin_required: 'Redemption PIN is required when the program is active.',
    biz_birthday_pin_hint:     'Leave blank to keep the current PIN.',
    map_filter_birthday:       '🎁 Birthday',
    map_bday_redeemed:         'Already redeemed this year',
    map_bday_terms_label:      'Terms',
    map_bday_available:        'Available this month',
    map_filter_promo:          '🔥 Promo Today',
    map_promo_badge:           'Promo today',
    scan_promo_h:              'Daily promo unlocked!',
    scan_promo_sub:            'Show this screen to the staff to get your benefit applied.',
    scan_promo_done:           'Done, continue',
    biz_daily_promos_title:    'Daily Promos',
    biz_daily_promos_sub:      'Customers will see it when they check in on that day of the week.',
    biz_daily_promo_ph_es:     'E.g.: 2-for-1 drinks',
    biz_daily_promo_ph_en:     'E.g.: 2-for-1 drinks (optional)',
    biz_daily_promo_saved:     '✓ Saved',
    biz_logout:       'Sign out of business',
    biz_reward_every: 'Reward every',
    biz_panel_title:'Business Dashboard',
    biz_access_eyebrow:'Exclusive access',
    biz_access_h:'Sign in to your dashboard',
    biz_code_placeholder:'Code HELIX-XXX-0000',
    biz_pin6_placeholder:'6-digit PIN',
    biz_verifying:'Verifying...',
    biz_enter:'Enter',
    biz_total_visits:'Total visits',
    biz_unique_clients:'Unique customers',
    biz_verify_section:'Verify customer visit',
    //Month prize
    prize_see_details:   'See details',
    prize_value:         'Value:',
    prize_date_note:     'Delivery details are coordinated directly with the winner. You\'ll receive a message from the Helix team to claim your prize.',
    prize_meet:          'Meet',
    // Reward visit format
    reward_condition:    '{{reward}} on visit {{visits}}',
    // Map
    map_center_btn:      'Center on my location',
    // Passport
    passport_destinations: 'spots',
    // Leaderboard
    lb_cycle_prefix:     'Month ·',
    // Business
    biz_website_label:      'Website',
    biz_reward_placeholder: 'E.g., Free coffee, 10% off...',
    biz_reward_placeholder_en: 'E.g.: Free coffee, 10% off... (optional)',
    biz_goal_placeholder:   'E.g.: 5',
    // Auth CTA (home hero)
    auth_cta:            'Sign in or create account',
    // Business — logout PIN confirmation
    biz_logout_pin_sub:  'Confirm your PIN to sign out securely.',
    // Stats
    biz_stats_cta:       'My Business',
    biz_stats_title:     'My Business',
    biz_stats_week:      'Visits last 7 days',
    biz_stats_hours:     'Peak hours',
    biz_cmd_center:      'Business Panel',
    biz_insight_moment:  'Current Insight',
    biz_pin_gate_title:  'Restricted access',
    biz_pin_gate_sub:    'Confirm your business PIN to manage your business.',
    biz_pin_enter:       'Access',
    biz_peak_label:      'Peak Hour',
    biz_opportunity_title:'Opportunity detected',
    biz_opportunity_low: 'Your {{slot}}h block has low foot traffic. Consider running a promotion during this time.',
    biz_opportunity_growth:'Your {{slot}}h block is on an upward trend! Consider scheduling more staff during this time.',
    biz_filter_all:      'All',
    biz_filter_top:      'Top',
    biz_filter_recent:   'Recent',
    biz_days_short:      'Sun,Mon,Tue,Wed,Thu,Fri,Sat',
    biz_insight_growing:  'Business trending up! Recent activity is {{pct}}% above the start of the week.',
    biz_insight_flat:     'Steady traffic this week ({{n}} visits), but no growth. Consider launching a special offer.',
    biz_insight_loyal:    'Solid base: {{freq}} loyal customers, but few new ones. Try a "Bring a Friend" promo.',
    biz_insight_declining:'Traffic dipped this week. Reach out to your loyal customers to reactivate the flow.',
    biz_insight_empty:    'No activity yet. Share your QR code to start growing.',
    biz_tag_topfan:       'Top Fan',
    biz_tag_frequent:     'Frequent Visitor',
    biz_tag_recent:       'Recent',
    biz_si_growth_f:       '{{pct}}% more visits in recent days vs. start of week.',
    biz_si_growth_a:       'Active peak: {{slot}}h. Ensure team coverage and stock for that block.',
    biz_si_decline_f:      'Activity dropped {{pct}}% in recent days vs. start of week.',
    biz_si_decline_a_freq: 'Re-engage your {{freq}} loyal customers with a targeted offer.',
    biz_si_decline_a_nofq: 'Check that your opening hours align with peak traffic at {{slot}}h.',
    biz_si_peak_f:         '{{n}} visits this week — {{peakPct}}% concentrated in the {{slot}}h block.',
    biz_si_peak_a:         'Keep full staff at {{slot}}h. Consider an incentive for lower-traffic blocks.',
    biz_si_loyal_f:        '{{freq}} loyal customers account for {{loyalPct}}% of total visits.',
    biz_si_loyal_a:        '{{new}} new customers this week. Launch a targeted acquisition promo.',
    biz_si_empty_f:        'No visits recorded in the last 7 days.',
    biz_si_empty_a:        'Place your QR code in the most visible spot in your venue to capture leads.',
    biz_si_wow_up_f:       '{{pct}}% more visits vs. last week.',
    biz_si_wow_up_a:       'Active peak: {{slot}}h. Keep team and stock ready for that block.',
    biz_si_wow_dn_f:       '{{pct}}% fewer visits vs. last week.',
    biz_si_wow_dn_a:       'Identify your lowest-traffic days and activate a targeted offer.',
    biz_legend_current:    'This week',
    biz_legend_prev:       'Previous week',
    biz_view_menu:       'View Menu',
    biz_view_services:   'View Services',
    // Shared
    img_alt_fallback:    'image',
  },

  de: {
    nav_explore:    'Entdecken',
    nav_map:        'Karte',
    nav_passport:   'Pass',
    nav_ranking:    'Rangliste',

    zone_eyebrow:   'Deine Zone',
    zone_use_loc:   '📍 Standort verwenden',
    zone_title:     'Von wo aus erkundest du?',
    zone_subtitle:  'Wähle dein Ziel und wir zeigen dir die besten verifizierten Spots in der Nähe.',
    zone_soon:      'Demnächst',

    reg_title_register: 'Registrieren',
    reg_title_activate: 'Pass aktivieren',
    reg_title_login:    'Anmelden',
    reg_subtitle_register: 'Drei Angaben, fertig. Reisversprechen: kein Spam, kein Unsinn.',
    reg_subtitle_login:    'Willkommen zurück – auf geht\'s!',
    reg_tab_register:   'Registrieren',
    reg_tab_login:      'Anmelden',
    reg_placeholder_name:  'Dein Name',
    reg_placeholder_phone: 'Handynummer',
    reg_placeholder_pin:   '4-stellige PIN',
    reg_forgot_pin:     'PIN vergessen? Schreib uns an',
    reg_cta_activate:   'Pass aktivieren',
    reg_cta_login:      'Anmelden',
    reg_footer:         'Deine Daten werden auf deinem Gerät gespeichert.',
    reg_mailto_subject: 'Helix Passport PIN vergessen',
    reg_mailto_body:    'Hallo, ich habe meine PIN vergessen. Meine Nummer ist: ',

    biz_vip_eyebrow:    'VIP-Vorteil',
    biz_vip_every:      'alle',
    biz_vip_visits:     'Besuche',
    biz_catalog_title:  'Katalog',
    biz_catalog_book:   'Buchen',
    biz_social_title:   'Folge uns auf',
    biz_see_map:        '🗺️ Auf Karte anzeigen',
    biz_stamp:          'Besuch registrieren',

    reward_unlocked:    'Belohnung freigeschaltet',
    reward_achieved:    'Geschafft bei',
    reward_great:       'Super!',

    rewards_title:      'Belohnungen',

    coupon_show_qr:     'Einlösen',
    coupon_show_local:  'Zeig diesen QR dem Personal',
    coupon_waiting:     'Warten auf den Scan des Lokals...',
    coupon_redeemed:    'Belohnung eingelöst!',
    coupon_enjoy:       'Genieß dein',

    home_geo_banner: 'Aktiviere deinen Standort für ein persönlicheres Erlebnis.',
    home_period:        'Monat · Mai/Jun',
    home_hero_h1_a:     'Die Stadt ist',
    home_hero_h1_b:     'dein Ziel.',
    home_hero_sub_a:    'Entdecke die besten Spots in',
    home_hero_sub_b:    'Stempel deinen Pass. Gewinne.',
    home_cta_explore:   'Spots entdecken',
    home_cta_business:  'Hast du ein Geschäft? Mitmachen →',

    home_spot_badge:    'Spot des Monats',
    home_see_more:      'Mehr sehen',
    home_verified:      'Verifizierte Spots · aktueller Monat',
    home_prize_badge:   '🎰 Hauptpreis des Monats',
    home_prize_empty:   'Sammle so viele Stempel wie möglich.',
    home_cat_title:     'Beste Spots nach Kategorie',
    home_see_map:       'Alle auf der Karte',
    home_champion:      'Gewinner',
    home_explorers:     'Entdecker des Monats',
    home_full_table:    'Vollständige Tabelle',
    home_spots_singular:'Spot',
    home_spots_plural:  'Spots',
    home_visits:        'Besuche',

    footer_tagline:     'Gemacht in BCS.\nFür die, die sich bewegen.',
    footer_web_cta:     'Gefällt dir unsere Web? Angebot anfragen →',
    footer_copy:        '© 2025 Helix Passport · La Paz, BCS · v1.0',
    passport_title:         'Mein Pass',
    passport_no_user_eyebrow: 'Nicht aktiviert',
    passport_no_user_h:     'Dein Pass ist noch',
    passport_no_user_h2:    'leer.',
    passport_no_user_sub:   'Jeder Besuch ist ein Stempel. Jeder Stempel bringt dich einer echten Belohnung näher.',
    passport_activate:      'Pass aktivieren',
    passport_explorer:      'Entdecker',
    passport_id_label:      'Reisepass',
    passport_bday_title:    '🎂 Dein Geburtstagsmonat!',
    passport_bday_body:     'Zeige deine ID [{{id}}] und einen gültigen Ausweis in teilnehmenden Lokalen, um deine Gratisleistungen gemäß deren Bedingungen einzulösen.',
    passport_auth_title:    'Geburtstags-Autorisierung',
    passport_auth_body:     '{{biz}} startet dein Geburtstagsgeschenk. Autorisierst du diesen Einlösevorgang?',
    passport_auth_approve:  'Autorisieren',
    passport_auth_reject:   'Ablehnen',
    passport_auth_pin_label: 'Deine Passwort-PIN',
    passport_logout:        'Abmelden',
    passport_tab_gv:        'Großer Reisender',
    passport_tab_vip:       'VIP-Mitglied',
    passport_change_zone:   'Zone wechseln',
    passport_loading:       'Laden...',
    passport_stamps_label:  'Stempel des Monats',
    passport_visit_s:       'Besuch',
    passport_visit_p:       'Besuche',
    passport_all_done:      'Du hast alle Spots besucht! Du bist im Rennen um den Hauptpreis.',
    passport_visit_more_pre:'Besuche',
    passport_visit_more_post:'weitere, um alle Spots des Monats zu vervollständigen.',
    passport_visited_pre:    'Du hast',
    passport_visited_post_s: 'diesen Monat besucht.',
    passport_visited_post_p: 'diesen Monat besucht.',
    passport_progress:      'Fortschritt pro Geschäft',
    passport_reward_pending_1: '1 Belohnung ausstehend',
    passport_reward_pending_n: 'Belohnungen ausstehend',
    lb_active_month:  'Aktiver Monat',
    lb_title_a:       'Entdecker',
    lb_title_b:       'des Monats.',
    lb_subtitle:      'Die aktivsten Entdecker. Die, die ihre Stadt kennen.',
    lb_silver:        'Silber',
    lb_gold:          'Gold',
    lb_bronze:        'Bronze',
    lb_full_table:    'Vollständige Tabelle',
    lb_you:           'Du',
    lb_prize_eyebrow: 'Preis des Monats',
    lb_prize_text:    'Entdecker #1 gewinnt:',
    lb_prize_soon:    'Preis demnächst',
    app_coming_soon_title: 'Demnächst in dieser Zone',
    app_coming_soon_sub:   'Wir fügen Geschäfte in deiner Nähe hinzu.',
    app_coming_soon_btn:   'Verfügbare Zonen anzeigen',
    app_winner_title:       'Du hast den Monat gewonnen!',
    app_winner_sub_a:       'Glückwunsch',
    app_winner_sub_b:       'du warst Entdecker #1 in',
    app_winner_sub_c:       'Ein Helix-Vertreter wird dich bald kontaktieren, um dir deinen Preis zu übergeben.',
    app_winner_btn:         'Verstanden!',
    app_register_ctx_scan:     'Um deinen Besuch zu erfassen',
    app_register_ctx_passport: 'Um deinen Pass zu aktivieren',
    // Mapa /
    map_title:'Spots-Karte',
    map_directions:'Route',
    map_featured_badge: 'Empfohlen',
    map_search_placeholder: 'Betrieb suchen...',
    map_nearby:'In deiner Nähe',
    map_empty:'Keine Spots in dieser Kategorie. Noch nicht.',
    map_featured: 'Empfohlene Spots',
    map_geo_banner: 'Aktiviere deinen Standort für die nächsten Spots.',
    map_geo_cta: 'Aktivieren',
    cat_all:'Alle',
    cat_food:'Essen',
    cat_adventure:'Abenteuer',
    cat_grooming:'Pflege',
    cat_lifestyle:'Lifestyle',
    // Scanner
    scan_title:      'Besuch erfassen',
    scan_cam_error:  'Kamera nicht verfügbar. Überprüfe die Berechtigungen.',
    scan_back:       'Zurück',
    scan_aim:        'Auf den QR-Code des Lokals richten',
    scan_cancel:     'Abbrechen',
    scan_hint:       'Scanne den statischen QR-Code des Lokals',
    scan_about_to:   'Check-in bei',
    scan_step0_h:    'Besuch erfassen',
    scan_step0_sub:  'Finde den QR-Code an der Kasse. Stelle sicher, dass du dich im Lokal befindest.',
    scan_step0_cta:  'Kassen-QR scannen',
    scan_tip_label:  'Tipp:',
    scan_tip_body:   'Der Kassen-QR ist statisch; der QR in Schritt 2 ist einmalig und temporär.',
    scan_step2_h:    'Code bestätigt!',
    scan_step2_sub:  'Zeige diesen Code dem Personal, um deinen Besuch abzuschließen.',
    scan_generating: 'Wird generiert...',
    scan_expires:    'Dieser Code läuft ab in',
    scan_waiting:    'Warte darauf, dass das Lokal deinen Code scannt...',
    //Business
    biz_cam_error:    'Kamera nicht verfügbar',
    biz_visit_ok:     '✓ Besuch erfasst',
    biz_reward_ok:    '✓ Belohnung eingelöst:',
    biz_conn_error:   'Verbindungsfehler',
    biz_scan_cta:     'Kunden-QR scannen',
    biz_scan_another: 'Weiteren scannen',
    biz_qr_label:     'QR deines Lokals — zum Drucken',
    biz_clients:      'Kunden',
    biz_hide:         'Ausblenden',
    biz_see:          'Anzeigen',
    biz_no_visits:    'Noch keine Besuche erfasst.',
    biz_no_reward:    'Nicht festgelegt',
    biz_promo_updated:'✓ Promo aktualisiert',
    biz_edit:         'Bearbeiten',
    biz_reward_label: 'Belohnung',
    biz_goal_label:   'Besuchsziel (2–50)',
    biz_pin_label:    'PIN bestätigen',
    biz_saving:       'Speichern...',
    biz_save_promo:   'Promo speichern',
    biz_promo_section:         'Aktionen',
    biz_birthday_title:        'Geburtstagsgeschenk',
    biz_birthday_on:           'Aktiv',
    biz_birthday_off:          'Inaktiv',
    biz_birthday_gift_label:   'Geschenkbeschreibung',
    biz_birthday_gift_ph:      'z. B.: Gratis Glas Wein',
    biz_birthday_auth_label:   'Name des Autorisierenden',
    biz_birthday_auth_ph:      'z. B.: Carlos Martínez',
    biz_birthday_not_set:      'Nicht konfiguriert',
    biz_birthday_saved:        '✓ Konfiguration gespeichert',
    biz_redeem_btn:            'Geburtstagsgeschenk einlösen',
    biz_redeem_title:          'Geburtstagsgeschenk',
    biz_redeem_ine_title:      '⚠ Ausweis prüfen',
    biz_redeem_ine_body:       'Bitte prüfe vor dem Fortfahren den gültigen Ausweis des Kunden. Ausländische Kunden sind willkommen.',
    biz_redeem_ine_check:      'Ich habe den Ausweis des Kunden geprüft',
    biz_redeem_auth_label:     'Name des Autorisierenden',
    biz_redeem_pin_label:      'Einlöse-PIN',
    biz_redeem_pin_ph:         '4 Ziffern',
    biz_redeem_continue:       'Weiter',
    biz_redeem_passport_label: 'Passnummer',
    biz_redeem_passport_ph:    'z. B.: 00001',
    biz_redeem_month_label:    'Geburtsmonat (laut Ausweis)',
    biz_redeem_verify_btn:     'Kunden prüfen',
    biz_redeem_waiting_title:  'Warte auf Kundengenehmigung',
    biz_redeem_waiting_body:   'Der Kunde muss die Einlösung auf seinem Gerät bestätigen.',
    biz_redeem_err_rejected:   'Der Kunde hat die Genehmigung abgelehnt',
    biz_redeem_err_expired:    'Anfrage abgelaufen. Bitte erneut versuchen.',
    biz_redeem_confirm_btn:    'Bestätigen & Registrieren',
    biz_redeem_success_title:  'Einlösung registriert!',
    biz_redeem_success_sub:    'Geschenk übergeben an',
    biz_redeem_err_window:     'Außerhalb des Fensters. Geburtsmonat: Monat {{n}}.',
    biz_redeem_err_24h:        'Gesperrt: weniger als 24 Std. seit letzter Registrierung.',
    biz_redeem_err_annual:     'Gesperrt: In diesem Jahr an diesem Standort bereits registriert.',
    biz_month_names:           'Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember',
    biz_promo_pin_sub:         'PIN eingeben, um auf Aktionen zuzugreifen',
    biz_birthday_edit:         'Bearbeiten',
    biz_birthday_terms_label:  'AGB',
    biz_birthday_terms_ph:     'z. B.: Nur im Geburtsmonat gültig. Gültigen Ausweis vorzeigen.',
    biz_birthday_redeem_pin_label: 'Einlöse-PIN (4 Ziffern)',
    biz_birthday_redeem_pin_ph: 'z. B.: 1234',
    biz_birthday_pin_required: 'Der Einlöse-PIN ist erforderlich, wenn das Programm aktiv ist.',
    biz_birthday_pin_hint:     'Leer lassen, um den aktuellen PIN beizubehalten.',
    map_filter_birthday:       '🎁 Geburtstag',
    map_bday_redeemed:         'Dieses Jahr eingelöst',
    map_bday_terms_label:      'Bedingungen',
    map_bday_available:        'Diesen Monat verfügbar',
    map_filter_promo:          '🔥 Promo Heute',
    map_promo_badge:           'Promo heute',
    scan_promo_h:              'Tagespromo freigeschaltet!',
    scan_promo_sub:            'Zeige diesen Bildschirm dem Personal, um deinen Vorteil zu erhalten.',
    scan_promo_done:           'Fertig, weiter',
    biz_daily_promos_title:    'Tagespromos',
    biz_daily_promos_sub:      'Kunden sehen dies beim Check-in an diesem Wochentag.',
    biz_daily_promo_ph_es:     'z. B.: 2-für-1 Getränke',
    biz_daily_promo_ph_en:     'E.g.: 2-for-1 drinks (optional)',
    biz_daily_promo_saved:     '✓ Gespeichert',
    biz_logout:       'Vom Geschäft abmelden',
    biz_reward_every: 'Belohnung alle',
    biz_panel_title:'Business-Panel',
    biz_access_eyebrow:'Exklusiver Zugang',
    biz_access_h:'Zum Dashboard anmelden',
    biz_code_placeholder:'Code HELIX-XXX-0000',
    biz_pin6_placeholder:'6-stellige PIN',
    biz_verifying:'Wird geprüft...',
    biz_enter:'Anmelden',
    biz_total_visits:'Besuche gesamt',
    biz_unique_clients:'Einzigartige Kunden',
    biz_verify_section:'Kundenbesuch verifizieren',
    //Month prize
    prize_see_details:   'Details anzeigen',
    prize_value:         'Wert:',
    prize_date_note:     'Die Details werden direkt mit dem Gewinner abgestimmt. Du erhältst eine Nachricht vom Helix-Team, um deinen Preis zu erhalten.',
    prize_meet:          'Entdecke',
    // Reward visit format
    reward_condition:    '{{reward}} beim {{visits}}. Besuch',
    // Map
    map_center_btn:      'Meinen Standort zentrieren',
    // Passport
    passport_destinations: 'Ziele',
    // Leaderboard
    lb_cycle_prefix:     'Monat ·',
    // Business
    biz_website_label:      'Website',
    biz_reward_placeholder: 'Z.B.: Kaffee gratis, 10% Rabatt...',
    biz_reward_placeholder_en: 'E.g.: Free coffee, 10% off... (optional)',
    biz_goal_placeholder:   'Z.B.: 5',
    // Auth CTA (home hero)
    auth_cta:            'Anmelden oder registrieren',
    // Business — logout PIN confirmation
    biz_logout_pin_sub:  'Bestätige deine PIN, um dich sicher abzumelden.',
    // Stats
    biz_stats_cta:       'Mein Betrieb',
    biz_stats_title:     'Mein Betrieb',
    biz_stats_week:      'Besuche letzte 7 Tage',
    biz_stats_hours:     'Stoßzeiten',
    biz_cmd_center:      'Geschäftspanel',
    biz_insight_moment:  'Aktueller Einblick',
    biz_pin_gate_title:  'Zugang beschränkt',
    biz_pin_gate_sub:    'Bestätige deine Geschäfts-PIN, um deinen Betrieb zu verwalten.',
    biz_pin_enter:       'Zugang',
    biz_peak_label:      'Stoßzeit',
    biz_opportunity_title:'Chance erkannt',
    biz_opportunity_low: 'Dein {{slot}}h-Block hat wenig Laufkundschaft. Probiere eine Aktion in diesem Zeitraum.',
    biz_opportunity_growth:'Dein {{slot}}h-Block ist im Aufwärtstrend! Erwäge, das Team in dieser Zeit zu verstärken.',
    biz_filter_all:      'Alle',
    biz_filter_top:      'Top',
    biz_filter_recent:   'Aktuell',
    biz_days_short:      'So,Mo,Di,Mi,Do,Fr,Sa',
    biz_insight_growing:  'Aufwärtstrend! Aktuelle Aktivität liegt {{pct}}% über dem Wochenanfang.',
    biz_insight_flat:     'Stabiler Verkehr diese Woche ({{n}} Besuche), aber kein Wachstum. Eine Aktion könnte helfen.',
    biz_insight_loyal:    'Starke Basis: {{freq}} Stammkunden, aber wenige Neue. Probiere eine "Bring einen Freund"-Aktion.',
    biz_insight_declining:'Weniger Aktivität diese Woche. Kontaktiere deine Stammkunden, um den Fluss zu reaktivieren.',
    biz_insight_empty:    'Noch keine Aktivität. Teile deinen QR-Code, um zu starten.',
    biz_tag_topfan:       'Top Fan',
    biz_tag_frequent:     'Stammkunde',
    biz_tag_recent:       'Aktuell',
    biz_si_growth_f:       '{{pct}}% mehr Besuche in den letzten Tagen vs. Wochenanfang.',
    biz_si_growth_a:       'Aktive Stoßzeit: {{slot}}h. Stelle Teamabdeckung und Vorräte für diesen Block sicher.',
    biz_si_decline_f:      'Aktivität sank {{pct}}% in den letzten Tagen vs. Wochenanfang.',
    biz_si_decline_a_freq: 'Reaktiviere deine {{freq}} Stammkunden mit einem gezielten Angebot.',
    biz_si_decline_a_nofq: 'Prüfe, ob deine Öffnungszeiten mit dem Hauptverkehr ({{slot}}h) übereinstimmen.',
    biz_si_peak_f:         '{{n}} Besuche diese Woche — {{peakPct}}% im Block {{slot}}h konzentriert.',
    biz_si_peak_a:         'Halte volles Team um {{slot}}h. Erwäge einen Anreiz für schwächere Blöcke.',
    biz_si_loyal_f:        '{{freq}} Stammkunden machen {{loyalPct}}% der Gesamtbesuche aus.',
    biz_si_loyal_a:        '{{new}} Neukunden diese Woche. Starte eine gezielte Akquisitionsaktion.',
    biz_si_empty_f:        'Keine Besuche in den letzten 7 Tagen erfasst.',
    biz_si_empty_a:        'Platziere deinen QR-Code an der sichtbarsten Stelle des Lokals.',
    biz_si_wow_up_f:       '{{pct}}% mehr Besuche vs. letzte Woche.',
    biz_si_wow_up_a:       'Aktive Stoßzeit: {{slot}}h. Halte Team und Vorräte für diesen Block bereit.',
    biz_si_wow_dn_f:       '{{pct}}% weniger Besuche vs. letzte Woche.',
    biz_si_wow_dn_a:       'Identifiziere deine schwächsten Tage und starte ein gezieltes Angebot.',
    biz_legend_current:    'Diese Woche',
    biz_legend_prev:       'Vorwoche',
    biz_view_menu:       'Menü ansehen',
    biz_view_services:   'Dienste ansehen',
    // Shared
    img_alt_fallback:    'Bild',
  },

  fr: {
    nav_explore:    'Explorer',
    nav_map:        'Carte',
    nav_passport:   'Passeport',
    nav_ranking:    'Classement',

    zone_eyebrow:   'Ta zone',
    zone_use_loc:   '📍 Utiliser ma position',
    zone_title:     'D\'où explores-tu ?',
    zone_subtitle:  'Choisis ta destination et on t\'affiche les meilleurs spots vérifiés près de toi.',
    zone_soon:      'Prochainement',

    reg_title_register: 'S\'inscrire',
    reg_title_activate: 'Activer ton Passeport',
    reg_title_login:    'Se connecter',
    reg_subtitle_register: 'Trois infos et c\'est parti. Promesse de voyageur : pas de spam, pas de prise de tête.',
    reg_subtitle_login:    'Bon retour — en route !',
    reg_tab_register:   'Inscription',
    reg_tab_login:      'Connexion',
    reg_placeholder_name:  'Ton prénom',
    reg_placeholder_phone: 'Numéro de téléphone',
    reg_placeholder_pin:   'PIN à 4 chiffres',
    reg_forgot_pin:     'PIN oublié ? Écris-nous à',
    reg_cta_activate:   'Activer le Passeport',
    reg_cta_login:      'Se connecter',
    reg_footer:         'Tes données sont stockées sur ton téléphone.',
    reg_mailto_subject: 'PIN Helix Passport oublié',
    reg_mailto_body:    'Bonjour, j\'ai oublié mon PIN. Mon numéro est : ',

    biz_vip_eyebrow:    'Avantage VIP',
    biz_vip_every:      'tous les',
    biz_vip_visits:     'visites',
    biz_catalog_title:  'Catalogue',
    biz_catalog_book:   'Réserver',
    biz_social_title:   'Retrouve-nous sur',
    biz_see_map:        '🗺️ Voir sur la carte',
    biz_stamp:          'Enregistrer la visite',

    reward_unlocked:    'Récompense débloquée',
    reward_achieved:    'Tu l\'as fait chez',
    reward_great:       'Super !',

    rewards_title:      'Récompenses',

    coupon_show_qr:     'Échanger',
    coupon_show_local:  'Montre ce QR à l\'établissement',
    coupon_waiting:     'En attente du scan de l\'établissement...',
    coupon_redeemed:    'Récompense utilisée !',
    coupon_enjoy:       'Profite de ton',

    home_geo_banner: 'Active ta position pour une expérience plus personnalisée.',
    home_period:        'Mois · Mai/Juin',
    home_hero_h1_a:     'La ville est',
    home_hero_h1_b:     'ta destination.',
    home_hero_sub_a:    'Explore les meilleurs spots de',
    home_hero_sub_b:    'Tamponne ton passeport. Gagne.',
    home_cta_explore:   'Explorer les spots',
    home_cta_business:  'Tu as un commerce ? Rejoins-nous →',

    home_spot_badge:    'Spot du mois',
    home_see_more:      'Voir plus',
    home_verified:      'Spots vérifiés · mois en cours',
    home_prize_badge:   '🎰 Grand prix du mois',
    home_prize_empty:   'Collecte le plus de tampons possible.',
    home_cat_title:     'Meilleurs spots par catégorie',
    home_see_map:       'Voir tout sur la carte',
    home_champion:      'Gagnant',
    home_explorers:     'Explorateurs du mois',
    home_full_table:    'Voir le classement complet',
    home_spots_singular:'spot',
    home_spots_plural:  'spots',
    home_visits:        'visites',

    footer_tagline:     'Fait en BCS.\nPour ceux qui bougent.',
    footer_web_cta:     'Tu aimes notre site ? Demande un devis →',
    footer_copy:        '© 2025 Helix Passport · La Paz, BCS · v1.0',
    passport_title:         'Mon Passeport',
    passport_no_user_eyebrow: 'Non activé',
    passport_no_user_h:     'Ton passeport est encore',
    passport_no_user_h2:    'vierge.',
    passport_no_user_sub:   'Chaque visite est un tampon. Chaque tampon te rapproche d\'une vraie récompense.',
    passport_activate:      'Activer le Passeport',
    passport_explorer:      'Explorateur',
    passport_id_label:      'Passeport',
    passport_bday_title:    '🎂 C\'est ton mois d\'anniversaire !',
    passport_bday_body:     'Présente ton ID [{{id}}] et une pièce d\'identité valide dans les établissements participants pour échanger tes cadeaux selon leurs conditions.',
    passport_auth_title:    'Autorisation d\'anniversaire',
    passport_auth_body:     '{{biz}} démarre ton cadeau d\'anniversaire. Autorises-tu cet échange ?',
    passport_auth_approve:  'Autoriser',
    passport_auth_reject:   'Refuser',
    passport_auth_pin_label: 'Ton code PIN passeport',
    passport_logout:        'Se déconnecter',
    passport_tab_gv:        'Grand Voyageur',
    passport_tab_vip:       'Membre VIP',
    passport_change_zone:   'Changer de zone',
    passport_loading:       'Chargement...',
    passport_stamps_label:  'Tampons du mois',
    passport_visit_s:       'visite',
    passport_visit_p:       'visites',
    passport_all_done:      'Tu as visité tous les spots ! Tu es dans la course pour le grand prix.',
    passport_visit_more_pre:'Visite',
    passport_visit_more_post:'de plus pour compléter les spots du mois.',
    passport_visited_pre:    'Tu as visité',
    passport_visited_post_s: 'spot unique ce mois-ci.',
    passport_visited_post_p: 'spots uniques ce mois-ci.',
    passport_progress:      'Progression par commerce',
    passport_reward_pending_1: '1 récompense en attente',
    passport_reward_pending_n: 'récompenses en attente',
    lb_active_month:  'Mois actif',
    lb_title_a:       'Explorateurs',
    lb_title_b:       'du mois.',
    lb_subtitle:      'Les plus curieux. Ceux qui connaissent leur ville.',
    lb_silver:        'Argent',
    lb_gold:          'Or',
    lb_bronze:        'Bronze',
    lb_full_table:    'Tableau complet',
    lb_you:           'Toi',
    lb_prize_eyebrow: 'Prix du mois',
    lb_prize_text:    'L\'explorateur #1 repart avec :',
    lb_prize_soon:    'Prix prochainement',
    app_coming_soon_title: 'Prochainement dans cette zone',
    app_coming_soon_sub:   'Nous ajoutons des commerces près de chez toi.',
    app_coming_soon_btn:   'Voir les zones disponibles',
    app_winner_title:       'Tu as gagné le mois !',
    app_winner_sub_a:       'Félicitations',
    app_winner_sub_b:       'tu étais l\'explorateur #1 de',
    app_winner_sub_c:       'Un représentant Helix te contactera bientôt pour te remettre ton prix.',
    app_winner_btn:         'Compris !',
    app_register_ctx_scan:     'Pour enregistrer ta visite',
    app_register_ctx_passport: 'Pour activer ton passeport',
    // Mapa /
    map_title:'Carte des spots',
    map_directions:'Itinéraire',
    map_featured_badge: 'En vedette',
    map_search_placeholder: 'Chercher un commerce...',
    map_nearby:'Près de toi',
    map_empty:'Aucun spot dans cette catégorie. Pour l\'instant.',
    map_featured: 'Spots à la une',
    map_geo_banner: 'Active ta position pour voir les spots les plus proches.',
    map_geo_cta: 'Activer',
    cat_all:'Tout',
    cat_food:'Cuisine',
    cat_adventure:'Aventure',
    cat_grooming:'Soins',
    cat_lifestyle:'Lifestyle',
    // Scanner
    scan_title:      'Enregistrer la visite',
    scan_cam_error:  'Impossible d\'accéder à la caméra. Vérifie les autorisations.',
    scan_back:       'Retour',
    scan_aim:        'Pointe vers le QR code de l\'établissement',
    scan_cancel:     'Annuler',
    scan_hint:       'Scanne le QR code statique de l\'établissement',
    scan_about_to:   'Check-in chez',
    scan_step0_h:    'Enregistre ta visite',
    scan_step0_sub:  'Trouve le QR code à la caisse. Assure-toi d\'être physiquement dans l\'établissement.',
    scan_step0_cta:  'Scanner le code caisse',
    scan_tip_label:  'Astuce :',
    scan_tip_body:   'Le QR caisse est statique ; le QR que tu génères à l\'étape 2 est unique et temporaire.',
    scan_step2_h:    'Code vérifié !',
    scan_step2_sub:  'Montre ce code au personnel pour finaliser ta visite.',
    scan_generating: 'Génération...',
    scan_expires:    'Ce code expire dans',
    scan_waiting:    'En attente que l\'établissement scanne ton code...',
    //Business
    biz_cam_error:    'Impossible d\'accéder à la caméra',
    biz_visit_ok:     '✓ Visite enregistrée',
    biz_reward_ok:    '✓ Récompense utilisée :',
    biz_conn_error:   'Erreur de connexion',
    biz_scan_cta:     'Scanner le QR client',
    biz_scan_another: 'Scanner un autre',
    biz_qr_label:     'QR de ton établissement — à imprimer',
    biz_clients:      'Clients',
    biz_hide:         'Masquer',
    biz_see:          'Voir',
    biz_no_visits:    'Aucune visite enregistrée pour l\'instant.',
    biz_no_reward:    'Non défini',
    biz_promo_updated:'✓ Promo mise à jour',
    biz_edit:         'Modifier',
    biz_reward_label: 'Récompense',
    biz_goal_label:   'Objectif de visites (2–50)',
    biz_pin_label:    'Confirmer le PIN',
    biz_saving:       'Enregistrement...',
    biz_save_promo:   'Enregistrer la promo',
    biz_promo_section:         'Promotions',
    biz_birthday_title:        'Cadeau d\'anniversaire',
    biz_birthday_on:           'Actif',
    biz_birthday_off:          'Inactif',
    biz_birthday_gift_label:   'Description du cadeau',
    biz_birthday_gift_ph:      'Ex. : verre de vin offert',
    biz_birthday_auth_label:   'Nom de l\'autorisateur',
    biz_birthday_auth_ph:      'Ex. : Carlos Martínez',
    biz_birthday_not_set:      'Non configuré',
    biz_birthday_saved:        '✓ Configuration enregistrée',
    biz_redeem_btn:            'Échanger le cadeau d\'anniversaire',
    biz_redeem_title:          'Cadeau d\'anniversaire',
    biz_redeem_ine_title:      '⚠ Vérifier la pièce d\'identité',
    biz_redeem_ine_body:       'Demandez une pièce d\'identité officielle valide au client. Les clients étrangers sont acceptés.',
    biz_redeem_ine_check:      'J\'ai vérifié la pièce d\'identité du client',
    biz_redeem_auth_label:     'Nom de l\'autorisateur',
    biz_redeem_pin_label:      'PIN d\'échange',
    biz_redeem_pin_ph:         '4 chiffres',
    biz_redeem_continue:       'Continuer',
    biz_redeem_passport_label: 'Numéro de passeport',
    biz_redeem_passport_ph:    'Ex. : 00001',
    biz_redeem_month_label:    'Mois de naissance (selon pièce d\'identité)',
    biz_redeem_verify_btn:     'Vérifier le client',
    biz_redeem_waiting_title:  'En attente d\'autorisation du client',
    biz_redeem_waiting_body:   'Le client doit accepter l\'échange sur son appareil.',
    biz_redeem_err_rejected:   'Le client a refusé l\'autorisation',
    biz_redeem_err_expired:    'La demande a expiré. Veuillez réessayer.',
    biz_redeem_confirm_btn:    'Confirmer et enregistrer',
    biz_redeem_success_title:  'Échange enregistré !',
    biz_redeem_success_sub:    'Cadeau remis à',
    biz_redeem_err_window:     'Hors fenêtre. Mois d\'anniversaire enregistré : mois {{n}}.',
    biz_redeem_err_24h:        'Bloqué : moins de 24 h depuis le dernier enregistrement.',
    biz_redeem_err_annual:     'Bloqué : déjà enregistré cette année dans ce lieu.',
    biz_month_names:           'Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre',
    biz_promo_pin_sub:         'Saisissez votre PIN pour accéder aux Promotions',
    biz_birthday_edit:         'Modifier',
    biz_birthday_terms_label:  'Conditions',
    biz_birthday_terms_ph:     'Ex. : Valable uniquement durant votre mois d\'anniversaire. Présentez une pièce d\'identité.',
    biz_birthday_redeem_pin_label: 'PIN d\'échange (4 chiffres)',
    biz_birthday_redeem_pin_ph: 'Ex. : 1234',
    biz_birthday_pin_required: 'Le code PIN d\'échange est obligatoire lorsque le programme est actif.',
    biz_birthday_pin_hint:     'Laisser vide pour conserver le code PIN actuel.',
    map_filter_birthday:       '🎁 Anniversaire',
    map_bday_redeemed:         'Déjà échangé cette année',
    map_bday_terms_label:      'Conditions',
    map_bday_available:        'Disponible ce mois-ci',
    map_filter_promo:          '🔥 Promo du Jour',
    map_promo_badge:           'Promo du jour',
    scan_promo_h:              'Promo du jour débloquée !',
    scan_promo_sub:            'Montre cet écran au personnel pour bénéficier de l\'offre.',
    scan_promo_done:           'Terminer, continuer',
    biz_daily_promos_title:    'Promos Quotidiennes',
    biz_daily_promos_sub:      'Le client la verra lors de son enregistrement ce jour-là.',
    biz_daily_promo_ph_es:     'Ex: 2 pour 1 sur les boissons',
    biz_daily_promo_ph_en:     'E.g.: 2-for-1 drinks (optional)',
    biz_daily_promo_saved:     '✓ Enregistré',
    biz_logout:       'Déconnexion du commerce',
    biz_reward_every: 'Récompense tous les',
    biz_panel_title:'Tableau de bord',
    biz_access_eyebrow:'Accès exclusif',
    biz_access_h:'Accède à ton tableau de bord',
    biz_code_placeholder:'Code HELIX-XXX-0000',
    biz_pin6_placeholder:'PIN à 6 chiffres',
    biz_verifying:'Vérification...',
    biz_enter:'Entrer',
    biz_total_visits:'Visites totales',
    biz_unique_clients:'Clients uniques',
    biz_verify_section:'Vérifier la visite d\'un client',
    //Month prize
    prize_see_details:   'Voir les détails',
    prize_value:         'Valeur :',
    prize_date_note:     'Les détails sont coordonnés directement avec le gagnant. Tu recevras un message de l\'équipe Helix pour récupérer ton prix.',
    prize_meet:          'Découvrir',
    // Reward visit format
    reward_condition:    '{{reward}} à la {{visits}}e visite',
    // Map
    map_center_btn:      'Centrer sur ma position',
    // Passport
    passport_destinations: 'destinations',
    // Leaderboard
    lb_cycle_prefix:     'Mois ·',
    // Business
    biz_website_label:      'Site web',
    biz_reward_placeholder: 'Ex. : Café offert, 10% de remise...',
    biz_reward_placeholder_en: 'E.g.: Free coffee, 10% off... (optional)',
    biz_goal_placeholder:   'Ex. : 5',
    // Auth CTA (home hero)
    auth_cta:            'Se connecter ou s\'inscrire',
    // Business — logout PIN confirmation
    biz_logout_pin_sub:  'Confirme ton PIN pour te déconnecter en toute sécurité.',
    // Stats
    biz_stats_cta:       'Mon Commerce',
    biz_stats_title:     'Mon Commerce',
    biz_stats_week:      'Visites 7 derniers jours',
    biz_stats_hours:     'Heures de pointe',
    biz_cmd_center:      'Tableau de bord',
    biz_insight_moment:  'Insight du moment',
    biz_pin_gate_title:  'Accès restreint',
    biz_pin_gate_sub:    "Confirme ton PIN d'établissement pour gérer ton commerce.",
    biz_pin_enter:       'Accéder',
    biz_peak_label:      'Heure de pointe',
    biz_opportunity_title:'Opportunité détectée',
    biz_opportunity_low: 'Ton bloc {{slot}}h a peu de trafic. Essaie une promotion sur ce créneau.',
    biz_opportunity_growth:"Ton bloc {{slot}}h est en hausse ! Envisage de renforcer ton équipe sur ce créneau.",
    biz_filter_all:      'Tous',
    biz_filter_top:      'Top',
    biz_filter_recent:   'Récents',
    biz_days_short:      'Dim,Lun,Mar,Mer,Jeu,Ven,Sam',
    biz_insight_growing:  "En hausse ! L'activité récente dépasse de {{pct}}% le début de semaine.",
    biz_insight_flat:     'Trafic stable cette semaine ({{n}} visites), mais sans croissance. Une offre spéciale aiderait.',
    biz_insight_loyal:    'Bonne base : {{freq}} clients fidèles, mais peu de nouveaux. Essaie une promo "Amène un ami".',
    biz_insight_declining:"Activité en baisse cette semaine. Contacte tes clients fidèles pour relancer le flux.",
    biz_insight_empty:    "Pas encore d'activité. Partage ton QR code pour commencer.",
    biz_tag_topfan:       'Top Fan',
    biz_tag_frequent:     'Client fidèle',
    biz_tag_recent:       'Récent',
    biz_si_growth_f:       '{{pct}}% de visites en plus ces derniers jours vs. début de semaine.',
    biz_si_growth_a:       "Pic actif : {{slot}}h. Assure couverture d'équipe et stock sur ce créneau.",
    biz_si_decline_f:      'Activité en baisse de {{pct}}% ces derniers jours vs. début de semaine.',
    biz_si_decline_a_freq: 'Réactive tes {{freq}} clients fidèles avec une offre ciblée.',
    biz_si_decline_a_nofq: "Vérifie que tes horaires d'ouverture coïncident avec le pic de trafic ({{slot}}h).",
    biz_si_peak_f:         '{{n}} visites cette semaine — {{peakPct}}% concentrées sur le créneau {{slot}}h.',
    biz_si_peak_a:         "Maintiens l'équipe complète à {{slot}}h. Évalue une offre pour les créneaux creux.",
    biz_si_loyal_f:        '{{freq}} clients fidèles représentent {{loyalPct}}% des visites totales.',
    biz_si_loyal_a:        "{{new}} nouveaux clients cette semaine. Lance une promo d'acquisition ciblée.",
    biz_si_empty_f:        'Aucune visite enregistrée ces 7 derniers jours.',
    biz_si_empty_a:        "Place ton QR code à l'endroit le plus visible du local pour capter des leads.",
    biz_si_wow_up_f:       '{{pct}}% de visites en plus vs. la semaine dernière.',
    biz_si_wow_up_a:       "Pic actif : {{slot}}h. Maintiens équipe et stock prêts sur ce créneau.",
    biz_si_wow_dn_f:       '{{pct}}% de visites en moins vs. la semaine dernière.',
    biz_si_wow_dn_a:       "Identifie tes jours creux et active une offre ciblée.",
    biz_legend_current:    'Cette semaine',
    biz_legend_prev:       'Semaine précédente',
    biz_view_menu:       'Voir le Menu',
    biz_view_services:   'Voir les Services',
    // Shared
    img_alt_fallback:    'image',
  },
};

// ── Estado global de idioma ───────────────────────────────────────────────────
const _langListeners = new Set();
let _currentLang = localStorage.getItem('helixLang') || 'es';

const setLang = (id) => {
  _currentLang = id;
  localStorage.setItem('helixLang', id);
  document.getElementById('html-root')?.setAttribute('lang', id);
  _langListeners.forEach(fn => fn(id));
};

// _resolve — shared lookup: returns the string value or falls back to key name.
// Uses !== undefined/null check so empty strings ('') are valid translations.
const _resolve = (dict, key, vars) => {
  const val = dict[key];
  const raw = (val !== undefined && val !== null) ? String(val) : key;
  if (!vars) return raw;
  return raw.replace(/\{\{(\w+)\}\}/g, (_, k) => (vars[k] !== undefined ? String(vars[k]) : ''));
};

// t(key, vars?) — función simple, usable fuera de React
const t = (key, vars) => _resolve(TRANSLATIONS[_currentLang] || TRANSLATIONS.es, key, vars);

// useT() — hook React que re-renderiza al cambiar idioma
const useT = () => {
  const [lang, setLangState] = React.useState(_currentLang);
  React.useEffect(() => {
    const handler = (l) => setLangState(l);
    _langListeners.add(handler);
    return () => _langListeners.delete(handler);
  }, []);
  return (key, vars) => _resolve(TRANSLATIONS[lang] || TRANSLATIONS.es, key, vars);
};

// parseLocalText — safe parser for DB free-text fields stored as {"es":"...","en":"..."}
// Falls back to raw string for legacy records and to Spanish if the lang key is missing.
const parseLocalText = (value, lang) => {
  if (!value) return '';
  try {
    const obj = JSON.parse(value);
    if (obj && typeof obj === 'object') return obj[lang] || obj.es || obj[Object.keys(obj)[0]] || '';
  } catch (_) {}
  return String(value);
};

// useLang() — returns current lang string, re-renders on lang change
const useLang = () => {
  const [lang, setLangState] = React.useState(_currentLang);
  React.useEffect(() => {
    const h = l => setLangState(l);
    _langListeners.add(h);
    return () => _langListeners.delete(h);
  }, []);
  return lang;
};

// usePLT() — reactive hook, returns a (value) => string parser that updates on lang change
const usePLT = () => {
  const [lang, setLangState] = React.useState(_currentLang);
  React.useEffect(() => {
    const h = l => setLangState(l);
    _langListeners.add(h);
    return () => _langListeners.delete(h);
  }, []);
  return (value) => parseLocalText(value, lang);
};

// ── Selector de idioma ────────────────────────────────────────────────────────
const LangSelector = ({ light = false }) => {
  const [lang, setLangState] = React.useState(_currentLang);
  React.useEffect(() => {
    const handler = (l) => setLangState(l);
    _langListeners.add(handler);
    return () => _langListeners.delete(handler);
  }, []);

  return (
    <div style={{ display:'flex', gap:4, width:'100%', justifyContent:'space-around' }}>
      {LANGS.map(l => {
        const active = lang === l.id;
        return (
          <button
            key={l.id}
            onClick={() => setLang(l.id)}
            style={{
              background: active
                ? (light ? 'rgba(255,255,255,0.25)' : 'var(--ink)')
                : 'transparent',
              color: active
                ? (light ? 'white' : 'white')
                : (light ? 'rgba(255,255,255,0.55)' : 'var(--muted)'),
              border: active
                ? (light ? '1px solid rgba(255,255,255,0.4)' : '0')
                : '0',
              borderRadius: 8,
              padding: '4px 7px',
              fontSize: 11,
              fontWeight: active ? 700 : 500,
              letterSpacing: '.06em',
              cursor: 'pointer',
              backdropFilter: light ? 'blur(8px)' : 'none',
              WebkitBackdropFilter: light ? 'blur(8px)' : 'none',
              transition: 'all .15s',
              display: 'inline-flex',
              alignItems: 'center',
              gap: 4,
              lineHeight: 1,
            }}
          >
            {l.flag} {l.label}
          </button>
        );
      })}
    </div>
  );
};

Object.assign(window, { t, useT, setLang, LangSelector, LANGS, TRANSLATIONS, parseLocalText, usePLT, useLang });
