// i18n — motor de traducción con Context (re-render al cambiar idioma)
// Diccionario keyed por la cadena en español; ES = fallback (devuelve la propia clave).

const I18N = {
  en: {
    // ── Shell / navegación
    "Asistente IA": "AI Assistant",
    "Generador de Pedido": "Order Generator",
    "Inteligencia Comercial": "Market Intelligence",
    "Rutas y Prospección": "Routes & Prospecting",
    "Planogramas": "Planograms",
    "Copiloto Comercial": "Sales Copilot",
    // META subtítulos
    "Pregunta sobre stock, precios, clientes y pedidos en lenguaje natural": "Ask about stock, prices, clients and orders in natural language",
    "Crea pedidos por voz o texto — validación automática y envío a Dynamics AX": "Create orders by voice or text — automatic validation and submission to Dynamics AX",
    "Cuota de mercado, oportunidades detectadas y análisis de zona": "Market share, detected opportunities and area analysis",
    "Planifica visitas y descubre clientes potenciales en tu zona": "Plan visits and discover potential clients in your area",
    "Genera diseños 3D de expositores optimizados · Analiza lineales existentes con visión artificial": "Generate optimized 3D display designs · Analyze existing shelves with computer vision",

    // ── Asistente
    "Hola, soy tu asistente comercial Quilosa. Puedo ayudar con stock, precios, clientes, pedidos y rutas. Los datos se sincronizan desde Dynamics AX. Pregunta lo que necesites.": "Hi, I'm your Quilosa sales assistant. I can help with stock, prices, clients, orders and routes. Data syncs from Dynamics AX. Ask me anything you need.",
    "No encuentro información específica. Pruébalo con un SKU, nombre de producto o cliente (p.ej. 'stock Perfect Finish', 'precio Sintex MS-35', 'ficha OBRAMAT').": "I couldn't find specific information. Try a SKU, product name or client (e.g. 'stock Perfect Finish', 'price Sintex MS-35', 'OBRAMAT profile').",
    "Escribe tu pregunta...": "Type your question...",
    "Enviar": "Send",
    "Voz": "Voice",
    "Cliente": "Client",
    "Precio": "Price",
    "Descuento": "Discount",
    "TOTAL": "TOTAL",
    "RESERVADO": "RESERVED",
    "LIBRE": "AVAILABLE",
    "VOLUMEN": "VOLUME",
    "CLASE": "CLASS",
    "RAPPEL": "REBATE",
    "Clase": "Class",
    "⚠ Próxima entrada:": "⚠ Next delivery:",
    "Lote": "Batch",
    "uds": "units",
    // assistant response titles/bodies
    "Stock de Perfect Finish": "Perfect Finish stock",
    "Disponibilidad actual sincronizada con Dynamics AX hace 2 min.": "Current availability synced from Dynamics AX 2 min ago.",
    "Próxima reposición — Orbafoam PRO 65": "Next restock — Orbafoam PRO 65",
    "Lote L-2026-112 previsto el 25/05/2026 (5.000 uds). Stock libre actual: 120 uds.": "Batch L-2026-112 expected on 25/05/2026 (5,000 units). Current available stock: 120 units.",
    "Precio Sintex MS-35 por cliente": "Sintex MS-35 price per client",
    "Precios aplicables según escalado en AX. Confirma antes de emitir oferta.": "Prices applicable per AX tiering. Confirm before issuing a quote.",
    "Clientes activos en Rivas-Vaciamadrid": "Active clients in Rivas-Vaciamadrid",
    "3 cuentas activas. 1 con rappel próximo a alcanzar.": "3 active accounts. 1 close to reaching its rebate.",
    "Ficha de cliente — OBRAMAT Rivas": "Client profile — OBRAMAT Rivas",
    "Cuenta Clase A, volumen 187K €/año. Rappel al 95% (faltan 250 uds).": "Class A account, volume €187K/year. Rebate at 95% (250 units to go).",
    "Crear pedido por voz": "Create order by voice",
    "Redirígete al módulo Pedidos y pulsa el micrófono para dictar. Ejemplo: 'Pedido de 100 Perfect Finish y 50 Sintex MS-35 para OBRAMAT'.": "Go to the Orders module and tap the microphone to dictate. Example: 'Order 100 Perfect Finish and 50 Sintex MS-35 for OBRAMAT'.",
    // suggested questions
    "¿Stock de Perfect Finish?": "Perfect Finish stock?",
    "¿Cuándo vuelvo a tener PRO 65?": "When will PRO 65 be back?",
    "Mejor precio MS 35": "Best price MS 35",
    "Clientes en Rivas": "Clients in Rivas",
    "Ficha OBRAMAT": "OBRAMAT profile",
    "Generar pedido": "Generate order",
    "¿Dónde está la ficha técnica de Sintex MS-35?": "Where is the Sintex MS-35 data sheet?",
    "Hoja de seguridad Orbafoam PRO 65": "Orbafoam PRO 65 safety sheet",
    "Documentos encontrados": "Documents found",
    "Búsqueda semántica sobre el gestor documental (SharePoint + PIM). 3 documentos relevantes:": "Semantic search over the document manager (SharePoint + PIM). 3 relevant documents:",
    "relevancia": "relevance",
    "págs.": "pages",
    "Act.": "Upd.",
    "Abrir": "Open",
    "Ficha de producto — Sintex MS-35": "Product sheet — Sintex MS-35",
    "Características principales extraídas de la ficha técnica (PIM + TDS).": "Key characteristics extracted from the technical data sheet (PIM + TDS).",
    "Aplicaciones:": "Applications:",
    "Base química": "Chemical base",
    "Dureza Shore A": "Shore A hardness",
    "Elongación rotura": "Elongation at break",
    "Módulo 100%": "Modulus 100%",
    "Temperatura de uso": "Service temperature",
    "Formación de piel": "Skin formation",
    "Curado": "Curing",
    "Certificación": "Certification",
    "Estado del pedido PED-2026-0231": "Order status PED-2026-0231",
    "Seguimiento en tiempo real desde Dynamics AX.": "Real-time tracking from Dynamics AX.",
    "Grabado": "Recorded",
    "Validación de precios": "Price validation",
    "Aprobación interna (crédito)": "Internal approval (credit)",
    "Lanzado a almacén": "Released to warehouse",
    "Facturado": "Invoiced",
    "Campañas de marketing activas": "Active marketing campaigns",
    "Campañas vigentes con material de apoyo y condiciones asociadas.": "Current campaigns with support material and associated terms.",
    "activa": "active",
    "Ventaja:": "Benefit:",
    "Material:": "Material:",
    "Ficha de Sintex MS-35": "Sintex MS-35 sheet",
    "Estado del pedido PED-2026-0231": "Order status PED-2026-0231",
    "Campañas de marketing activas": "Active marketing campaigns",
    "Conexión con los sistemas de Quilosa": "Connection with Quilosa systems",
    "Datos en Azure (UE) · cifrado · solo lectura · sin uso para entrenamiento": "Data in Azure (EU) · encrypted · read-only · not used for training",
    "ERP · pedidos, stock, precios": "ERP · orders, stock, prices",
    "Fichas técnicas, SDS, DoP": "Data sheets, SDS, DoP",
    "Catálogo, expositores, campañas": "Catalog, displays, campaigns",
    "Prospección y riesgo": "Prospecting & risk",
    "El agente combina consultas estructuradas al ERP (vía Data Warehouse) con búsqueda semántica RAG sobre la documentación. Toda respuesta cita su origen y se sincroniza en tiempo casi real.": "The agent combines structured ERP queries (via Data Warehouse) with semantic RAG search over the documentation. Every answer cites its source and syncs in near real time.",

    // ── Pedidos
    "Crear Pedido por Voz": "Create Order by Voice",
    "Pulsa el micrófono y di algo como:": "Tap the microphone and say something like:",
    "\"Genérame un pedido de 100 unidades de Perfect Finish y 50 de Sintex MS-35 para OBRAMAT\"": "\"Create an order for 100 units of Perfect Finish and 50 of Sintex MS-35 for OBRAMAT\"",
    "Escuchando...": "Listening...",
    "✓ Pedido capturado": "✓ Order captured",
    "Pulsa para iniciar": "Tap to start",
    "Revisar pedido dictado": "Review dictated order",
    "Descartar": "Discard",
    "Confirmar y enviar": "Confirm and send",
    "Producto": "Product",
    "Cantidad": "Quantity",
    "Total": "Total",
    "Todos": "All",
    "Facturados": "Invoiced",
    "Lanzados": "Released",
    "Retenidos": "On hold",
    "En validación": "In validation",
    "N.º Pedido": "Order No.",
    "Fecha": "Date",
    "Importe": "Amount",
    "Estado": "Status",
    "Progreso": "Progress",
    "Ver": "View",
    "Facturado": "Invoiced",
    "Lanzado": "Released",
    "Retenido": "On hold",
    "Validación": "Validation",
    "CLIENTE": "CLIENT",

    // ── Inteligencia
    "CUOTA DE MERCADO": "MARKET SHARE",
    "+1.2% vs trimestre ant.": "+1.2% vs prev. quarter",
    "ALMACENES CONSTRUCCIÓN ES": "CONSTRUCTION STORES ES",
    "2.847 en zona activa": "2,847 in active area",
    "SCORE RIESGO SECTOR": "SECTOR RISK SCORE",
    "Riesgo bajo-medio": "Low-medium risk",
    "OPORTUNIDADES DETECTADAS": "DETECTED OPPORTUNITIES",
    "6 alta prioridad": "6 high priority",
    "NUEVAS CONSTITUCIONES": "NEW COMPANIES",
    "Sector construcción Q2": "Construction sector Q2",
    "FUENTES DE DATOS:": "DATA SOURCES:",
    "Últ. actualización: hoy 08:30": "Last update: today 08:30",
    "Cuota de Mercado por Competidor — Selladores": "Market Share by Competitor — Sealants",
    "Fuente: datos estimados sector construcción España Q4 2025": "Source: estimated data, Spanish construction sector Q4 2025",
    "Heat Map de Ventas por Zona": "Sales Heat Map by Area",
    "Oportunidades Detectadas": "Detected Opportunities",
    "Cliente / Prospecto": "Client / Prospect",
    "Tipo": "Type",
    "Potencial": "Potential",
    "Motivo": "Reason",
    "Cross-sell": "Cross-sell",
    "Up-sell": "Up-sell",
    "Prospecto": "Prospect",
    "Riesgo fuga": "Churn risk",
    "Compra selladores, no compra espumas PU": "Buys sealants, not PU foams",
    "Consumo creciente 18% YoY, sin rappel activo": "Consumption +18% YoY, no active rebate",
    "No captado, empresa con CNAE 4120 y 25 emp.": "Not acquired, company with NACE 4120 and 25 empl.",
    "Caída pedidos 32% en últimos 60 días": "Orders down 32% in last 60 days",
    "Ventas": "Sales",

    // ── Rutas
    "Selecciona Zona": "Select Area",
    "Clientes Potenciales (Fuente: SABI)": "Potential Clients (Source: SABI)",
    "Empresas del sector construcción en la zona no captadas": "Construction companies in the area not yet acquired",
    "PROSPECTO": "PROSPECT",
    "empleados": "employees",
    "Fact:": "Rev:",
    "Ver ficha": "View profile",
    "Sin prospectos en esta zona": "No prospects in this area",
    "Priorizar por": "Prioritize by",
    "Potencial €": "Potential €",
    "Cercanía": "Proximity",
    "Últ. Visita": "Last Visit",
    "Clientes en la Zona": "Clients in the Area",
    "Ruta Optimizada": "Optimized Route",
    "distancia": "distance",
    "tiempo": "time",
    "potencial €": "potential €",
    "Iniciar Navegación": "Start Navigation",
    "Madrid, España": "Madrid, Spain",
    "{n} clientes seleccionados": "{n} clients selected",

    // ── Planogramas
    "🗂 Generador de Planograma 3D": "🗂 3D Planogram Generator",
    "📸 Análisis de Lineal (VA + Slotting)": "📸 Shelf Analysis (CV + Slotting)",
    "Selecciona cliente...": "Select client...",
    "Top:": "Top:",
    "Tipo de Expositor": "Display Type",
    "(22 tipos en PIM)": "(22 types in PIM)",
    "Estantes:": "Shelves:",
    "Columnas:": "Columns:",
    "Capacidad:": "Capacity:",
    "Medidas:": "Dimensions:",
    "Canal:": "Channel:",
    "Generar Planograma IA": "Generate AI Planogram",
    "Optimizando...": "Optimizing...",
    "Selecciona cliente y expositor": "Select client and display",
    "El sistema optimizará el planograma basándose en ventas, campañas activas y características de los productos.": "The system will optimize the planogram based on sales, active campaigns and product characteristics.",
    "Optimizando planograma...": "Optimizing planogram...",
    "Analizando ventas · Aplicando reglas de slotting · Priorizando campañas": "Analyzing sales · Applying slotting rules · Prioritizing campaigns",
    "Compartir": "Share",
    "Exportar PDF": "Export PDF",
    "CAPACIDAD USADA": "CAPACITY USED",
    "{n} de {cap} slots": "{n} of {cap} slots",
    "FAMILIAS": "FAMILIES",
    "categorías activas": "active categories",
    "EN CAMPAÑA ★": "IN CAMPAIGN ★",
    "posiciones": "positions",
    "EYE LEVEL": "EYE LEVEL",
    "posiciones premium": "premium positions",
    "Criterios de optimización aplicados": "Applied optimization criteria",
    "Campañas activas en posición eye-level (estante central)": "Active campaigns at eye-level (center shelf)",
    "Top productos del cliente priorizados frente a categoría general": "Client's top products prioritized over general category",
    "Productos agrupados por familia para facilitar la compra": "Products grouped by family to ease shopping",
    "Productos de mayor volumen/peso en estantes bajos": "Higher volume/weight products on lower shelves",
    "Arrastra o sube una foto del lineal": "Drag or upload a shelf photo",
    "El sistema detectará los productos y posiciones usando visión artificial + optimización de slotting": "The system will detect products and positions using computer vision + slotting optimization",
    "JPG, PNG, HEIC · Máx. 20MB": "JPG, PNG, HEIC · Max. 20MB",
    "Ver demo sin foto": "View demo without photo",
    "subido correctamente": "uploaded successfully",
    "El análisis combinará visión artificial (Azure Computer Vision) con optimización de slotting para identificar cada producto en su posición y comparar con el planograma óptimo.": "The analysis will combine computer vision (Azure Computer Vision) with slotting optimization to identify each product in its position and compare against the optimal planogram.",
    "Analizar con IA": "Analyze with AI",
    "Analizando lineal...": "Analyzing shelf...",
    "Detección de objetos con Azure Computer Vision": "Object detection with Azure Computer Vision",
    "Clasificación de productos por packaging + etiqueta": "Product classification by packaging + label",
    "Cálculo de score vs planograma óptimo": "Score calculation vs optimal planogram",
    "EFICIENCIA ACTUAL": "CURRENT EFFICIENCY",
    "Vs. 94% óptimo": "Vs. 94% optimal",
    "HUECOS VACÍOS": "EMPTY SLOTS",
    "13% del espacio": "13% of the space",
    "MAL POSICIONADOS": "MISPLACED",
    "productos fuera de zona": "products out of zone",
    "POTENCIAL VENTAS": "SALES POTENTIAL",
    "Con planograma óptimo": "With optimal planogram",
    "📸 Estado actual detectado": "📸 Current detected state",
    "3 estantes · 8 posiciones · Confianza detección: 91%": "3 shelves · 8 positions · Detection confidence: 91%",
    "Hueco vacío": "Empty slot",
    "Falta producto": "Missing product",
    "VACÍO": "EMPTY",
    "✅ Planograma óptimo recomendado": "✅ Recommended optimal planogram",
    "Basado en ventas + campañas · Generado por IA": "Based on sales + campaigns · AI generated",
    "Acciones recomendadas": "Recommended actions",
    "Reubicar Perfect Finish a estante central (eye-level). Actualmente en fila inferior.": "Move Perfect Finish to the center shelf (eye-level). Currently on the bottom row.",
    "Cubrir 7 huecos vacíos: añadir Orbasil N-39 (×2) y Sintex DM-30 (×2) — disponibles en almacén.": "Fill 7 empty slots: add Orbasil N-39 (×2) and Sintex DM-30 (×2) — available in warehouse.",
    "Separar Sintex N-25 Color del bloque de espumas PU — mejorar visualización por familia.": "Separate Sintex N-25 Color from the PU foam block — improve family-based display.",
    "Añadir cartel de campaña ★ en Perfect Finish, Sintex MS-35 y Orbafoam PRO 65.": "Add campaign tag ★ on Perfect Finish, Sintex MS-35 and Orbafoam PRO 65.",
    "Analizar otro lineal": "Analyze another shelf",
    "Exportar informe": "Export report",
    "Pág.": "Page",

    // ── Familias de producto
    "Selladores": "Sealants",
    "Selladores MS": "MS Sealants",
    "Siliconas": "Silicones",
    "Espumas PU": "PU Foams",
    "Adhesivos": "Adhesives",
    "Adhesivos MS": "MS Adhesives",
    "Impermeab.": "Waterproofing",
    "Otros": "Others",
    "Conectado a Dynamics AX": "Connected to Dynamics AX",

    // ── Módulos nuevos (nav + META)
    "Recomendaciones de Venta": "Sales Recommendations",
    "Predicción de Stocks": "Stock Forecast",
    "Predicción de Fuga": "Churn Prediction",
    "Predicción de Fuga de Clientes": "Customer Churn Prediction",
    "Generador de Pedido": "Order Generator",
    "Motor de recomendación personalizado por cliente basado en clientes similares e histórico": "Personalized recommendation engine per client based on similar clients and history",
    "Anticipa el agotamiento de stock de cada cliente y prioriza la reposición": "Anticipate each client's stock depletion and prioritize replenishment",
    "Detecta clientes y tiendas en riesgo de fuga con acción de retención recomendada": "Detect clients and stores at churn risk with recommended retention action",

    // ── Recomendaciones de Venta
    "Cliente mayorista": "Wholesale client",
    "Basado en clientes similares e histórico de ventas": "Based on similar clients and sales history",
    "Argumentario de venta": "Sales pitch",
    "Clientes similares:": "Similar clients:",
    "Artículos recomendados": "Recommended items",
    "Alta afinidad": "High affinity",
    "Oferta / promoción sugerida": "Suggested offer / promotion",
    "Condiciones sugeridas": "Suggested terms",
    "Precio sugerido": "Suggested price",
    "Descuento sugerido": "Suggested discount",
    "Lote/formato sugerido": "Suggested batch/format",
    "Generar argumentario PDF": "Generate pitch PDF",
    "Crear pedido con recomendación": "Create order from recommendation",
    "Cliente con alto consumo de espumas PU, sin rappel activo; oportunidad de upsell en selladores": "Client with high PU foam consumption, no active rebate; upsell opportunity in sealants",
    "Cliente Clase A con alto consumo de selladores MS pero sin apenas rotación de espumas PU. Rappel al 95% — a 250 uds de cerrar el 5%. Oportunidad clara de upsell en espumas y cierre de rappel este mes.": "Class A client with high MS sealant consumption but little PU foam rotation. Rebate at 95% — 250 units from closing the 5%. Clear upsell opportunity in foams and rebate closing this month.",
    "Pack Espumas Q3 — 8% dto. en pedidos ≥ 100 uds": "PU Foam Pack Q3 — 8% off on orders ≥ 100 units",
    "8% + rappel 5% al cierre": "8% + 5% rebate at closing",
    "Palet completo (48 cajas) — porte incluido": "Full pallet (48 boxes) — shipping included",
    "Gran superficie DIY con fuerte rotación de espumas y consumo creciente 18% YoY. No tiene rappel activo pese al volumen — riesgo de que la competencia entre por precio. Priorizar activación de rappel.": "DIY big-box with strong foam rotation and consumption +18% YoY. No active rebate despite volume — risk of competitors entering on price. Prioritize rebate activation.",
    "Activación rappel escalado 3/5/8% por volumen trimestral": "Tiered rebate activation 3/5/8% by quarterly volume",
    "12% (Clase A gran superficie)": "12% (Class A big-box)",
    "Multipalet — reposición quincenal programada": "Multi-pallet — scheduled biweekly replenishment",
    "Almacén de construcción con buen mix pero pedido retenido en finanzas. Consumo estable de adhesivos MS. Oportunidad de cross-sell en impermeabilizantes, categoría que aún no trabaja.": "Construction store with good mix but order held in finance. Stable MS adhesive consumption. Cross-sell opportunity in waterproofing, a category not yet worked.",
    "Lanzamiento Aqua Protect — 15% dto. introductorio": "Aqua Protect launch — 15% introductory discount",
    "10% + muestra gratuita": "10% + free sample",
    "Media paleta (24 cajas)": "Half pallet (24 boxes)",
    "Ferretería profesional con caída de pedidos del 32% en 60 días — riesgo de fuga. Consumo histórico centrado en siliconas y adhesivos. Recomendada oferta de reactivación antes de perder la cuenta.": "Professional hardware store with orders down 32% in 60 days — churn risk. Historical consumption focused on silicones and adhesives. Reactivation offer recommended before losing the account.",
    "Oferta reactivación — 10% dto. primer pedido tras 60 días": "Reactivation offer — 10% off first order after 60 days",
    "10% reactivación": "10% reactivation",
    "Caja individual (12 uds) — sin mínimo": "Single box (12 units) — no minimum",
    "Distribuidor profesional con rappel al 55% y crecimiento sostenido. Base sólida de selladores. Margen para introducir gama premium de siliconas neutras.": "Professional distributor with rebate at 55% and steady growth. Solid sealant base. Room to introduce premium neutral silicone range.",
    "Gama premium siliconas — 6% dto. cartera": "Premium silicone range — 6% portfolio discount",
    "Palet mixto configurable": "Configurable mixed pallet",

    // ── Predicción de Stocks
    "Predicción basada en histórico de ventas del cliente": "Forecast based on the client's sales history",
    "Acotado a Selena Iberia (~3.000 clientes activos, mayoristas y retailers)": "Scoped to Selena Iberia (~3,000 active clients, wholesalers and retailers)",
    "Predicción de agotamiento": "Depletion forecast",
    "STOCK ESTIMADO": "ESTIMATED STOCK",
    "uds en cliente": "units at client",
    "RITMO CONSUMO": "CONSUMPTION RATE",
    "uds/mes": "units/month",
    "DÍAS RESTANTES": "DAYS REMAINING",
    "hasta rotura": "until stockout",
    "Producto principal:": "Main product:",
    "Agotamiento estimado:": "Estimated depletion:",
    "Hoy": "Today",
    "días": "days",
    "Reposición urgente recomendada. El cliente agotará stock antes de la próxima visita programada.": "Urgent replenishment recommended. The client will run out of stock before the next scheduled visit.",
    "Vigilar. Incluir en la próxima ruta comercial para valorar reposición.": "Monitor. Include in the next sales route to assess replenishment.",
    "Stock holgado. Sin acción inmediata requerida.": "Ample stock. No immediate action required.",
    "Generar pedido de reposición": "Generate replenishment order",
    "Riesgo de rotura de stock por cliente": "Stockout risk by client",
    "Por riesgo": "By risk",
    "Por días restantes": "By days remaining",
    "Producto principal": "Main product",
    "Stock est.": "Est. stock",
    "Días restantes": "Days remaining",
    "Agotamiento": "Depletion",
    "Riesgo rotura": "Stockout risk",
    "Sugerir reposición": "Suggest replenishment",
    "Riesgo de rotura": "Stockout risk",
    "Previsión de consumo y agotamiento": "Consumption & depletion forecast",
    "Stock previsto": "Forecast stock",
    "Punto de reposición": "Reorder point",
    "Agotamiento estimado": "Estimated depletion",
    "Score de fuga por cliente": "Churn score by client",
    "Predicción del modelo de churn sobre histórico de comportamiento": "Churn model prediction over behavioral history",
    "Umbral riesgo alto": "High-risk threshold",

    // ── Predicción de Fuga
    "RIESGO ALTO": "HIGH RISK",
    "clientes en fuga inminente": "clients about to churn",
    "RIESGO MEDIO": "MEDIUM RISK",
    "a vigilar": "to monitor",
    "TIENDAS EN RIESGO": "STORES AT RISK",
    "puntos de venta minoristas": "retail points of sale",
    "MODELO CHURN": "CHURN MODEL",
    "precisión histórica": "historical accuracy",
    "Mayoristas": "Wholesalers",
    "Minoristas / Tiendas": "Retailers / Stores",
    "Score fuga": "Churn score",
    "Riesgo": "Risk",
    "Motivo detectado": "Detected reason",
    "Competidor origen": "Source competitor",
    "Acción recomendada": "Recommended action",
    "Mayorista": "Wholesaler",
    "Minorista": "Retailer",
    "Alto": "High",
    "Medio": "Medium",
    "Bajo": "Low",
    "Caída de pedidos 32% en últimos 60 días": "Orders down 32% in last 60 days",
    "Sin pedidos en 90 días": "No orders in 90 days",
    "Pasó a comprar a la competencia por precio": "Switched to competitor on price",
    "Frecuencia de pedido bajó de mensual a trimestral": "Order frequency dropped from monthly to quarterly",
    "Ticket medio −18% en 3 meses": "Average ticket −18% in 3 months",
    "Comportamiento estable, ligera bajada estacional": "Stable behavior, slight seasonal dip",
    "Pedido retenido puntual (finanzas), relación sana": "One-off held order (finance), healthy relationship",
    "Ofrecer descuento de reactivación 10%": "Offer 10% reactivation discount",
    "Visita comercial urgente": "Urgent sales visit",
    "Igualar oferta + soporte técnico": "Match offer + technical support",
    "Llamada de seguimiento + catálogo Q3": "Follow-up call + Q3 catalog",
    "Promo cruzada adhesivos + siliconas": "Cross promo adhesives + silicones",
    "Sin acción — monitorizar": "No action — monitor",
    "Resolver retención de pago": "Resolve payment hold",
  },

  pt: {
    // ── Shell / navegação
    "Asistente IA": "Assistente IA",
    "Generador de Pedido": "Gerador de Pedido",
    "Inteligencia Comercial": "Inteligência Comercial",
    "Rutas y Prospección": "Rotas e Prospeção",
    "Planogramas": "Planogramas",
    "Copiloto Comercial": "Copiloto Comercial",
    "Pregunta sobre stock, precios, clientes y pedidos en lenguaje natural": "Pergunte sobre stock, preços, clientes e pedidos em linguagem natural",
    "Crea pedidos por voz o texto — validación automática y envío a Dynamics AX": "Crie pedidos por voz ou texto — validação automática e envio para o Dynamics AX",
    "Cuota de mercado, oportunidades detectadas y análisis de zona": "Quota de mercado, oportunidades detetadas e análise de zona",
    "Planifica visitas y descubre clientes potenciales en tu zona": "Planeie visitas e descubra clientes potenciais na sua zona",
    "Genera diseños 3D de expositores optimizados · Analiza lineales existentes con visión artificial": "Gere designs 3D de expositores otimizados · Analise lineares existentes com visão computacional",

    // ── Asistente
    "Hola, soy tu asistente comercial Quilosa. Puedo ayudar con stock, precios, clientes, pedidos y rutas. Los datos se sincronizan desde Dynamics AX. Pregunta lo que necesites.": "Olá, sou o seu assistente comercial Quilosa. Posso ajudar com stock, preços, clientes, pedidos e rotas. Os dados sincronizam a partir do Dynamics AX. Pergunte o que precisar.",
    "No encuentro información específica. Pruébalo con un SKU, nombre de producto o cliente (p.ej. 'stock Perfect Finish', 'precio Sintex MS-35', 'ficha OBRAMAT').": "Não encontro informação específica. Tente um SKU, nome de produto ou cliente (ex.: 'stock Perfect Finish', 'preço Sintex MS-35', 'ficha OBRAMAT').",
    "Escribe tu pregunta...": "Escreva a sua pergunta...",
    "Enviar": "Enviar",
    "Voz": "Voz",
    "Cliente": "Cliente",
    "Precio": "Preço",
    "Descuento": "Desconto",
    "TOTAL": "TOTAL",
    "RESERVADO": "RESERVADO",
    "LIBRE": "DISPONÍVEL",
    "VOLUMEN": "VOLUME",
    "CLASE": "CLASSE",
    "RAPPEL": "RAPPEL",
    "Clase": "Classe",
    "⚠ Próxima entrada:": "⚠ Próxima entrada:",
    "Lote": "Lote",
    "uds": "uni.",
    "Stock de Perfect Finish": "Stock de Perfect Finish",
    "Disponibilidad actual sincronizada con Dynamics AX hace 2 min.": "Disponibilidade atual sincronizada do Dynamics AX há 2 min.",
    "Próxima reposición — Orbafoam PRO 65": "Próxima reposição — Orbafoam PRO 65",
    "Lote L-2026-112 previsto el 25/05/2026 (5.000 uds). Stock libre actual: 120 uds.": "Lote L-2026-112 previsto para 25/05/2026 (5.000 uni.). Stock disponível atual: 120 uni.",
    "Precio Sintex MS-35 por cliente": "Preço Sintex MS-35 por cliente",
    "Precios aplicables según escalado en AX. Confirma antes de emitir oferta.": "Preços aplicáveis conforme escalonamento no AX. Confirme antes de emitir proposta.",
    "Clientes activos en Rivas-Vaciamadrid": "Clientes ativos em Rivas-Vaciamadrid",
    "3 cuentas activas. 1 con rappel próximo a alcanzar.": "3 contas ativas. 1 perto de atingir o rappel.",
    "Ficha de cliente — OBRAMAT Rivas": "Ficha de cliente — OBRAMAT Rivas",
    "Cuenta Clase A, volumen 187K €/año. Rappel al 95% (faltan 250 uds).": "Conta Classe A, volume 187K €/ano. Rappel a 95% (faltam 250 uni.).",
    "Crear pedido por voz": "Criar pedido por voz",
    "Redirígete al módulo Pedidos y pulsa el micrófono para dictar. Ejemplo: 'Pedido de 100 Perfect Finish y 50 Sintex MS-35 para OBRAMAT'.": "Vá ao módulo Pedidos e toque no microfone para ditar. Exemplo: 'Pedido de 100 Perfect Finish e 50 Sintex MS-35 para OBRAMAT'.",
    "¿Stock de Perfect Finish?": "Stock de Perfect Finish?",
    "¿Cuándo vuelvo a tener PRO 65?": "Quando volto a ter PRO 65?",
    "Mejor precio MS 35": "Melhor preço MS 35",
    "Clientes en Rivas": "Clientes em Rivas",
    "Ficha OBRAMAT": "Ficha OBRAMAT",
    "Generar pedido": "Gerar pedido",
    "¿Dónde está la ficha técnica de Sintex MS-35?": "Onde está a ficha técnica do Sintex MS-35?",
    "Hoja de seguridad Orbafoam PRO 65": "Ficha de segurança Orbafoam PRO 65",
    "Documentos encontrados": "Documentos encontrados",
    "Búsqueda semántica sobre el gestor documental (SharePoint + PIM). 3 documentos relevantes:": "Pesquisa semântica no gestor documental (SharePoint + PIM). 3 documentos relevantes:",
    "relevancia": "relevância",
    "págs.": "págs.",
    "Act.": "Atual.",
    "Abrir": "Abrir",
    "Ficha de producto — Sintex MS-35": "Ficha de produto — Sintex MS-35",
    "Características principales extraídas de la ficha técnica (PIM + TDS).": "Características principais extraídas da ficha técnica (PIM + TDS).",
    "Aplicaciones:": "Aplicações:",
    "Base química": "Base química",
    "Dureza Shore A": "Dureza Shore A",
    "Elongación rotura": "Alongamento na rutura",
    "Módulo 100%": "Módulo 100%",
    "Temperatura de uso": "Temperatura de uso",
    "Formación de piel": "Formação de pele",
    "Curado": "Cura",
    "Certificación": "Certificação",
    "Seguimiento en tiempo real desde Dynamics AX.": "Seguimento em tempo real a partir do Dynamics AX.",
    "Grabado": "Registado",
    "Validación de precios": "Validação de preços",
    "Aprobación interna (crédito)": "Aprovação interna (crédito)",
    "Lanzado a almacén": "Lançado para armazém",
    "Campañas vigentes con material de apoyo y condiciones asociadas.": "Campanhas em vigor com material de apoio e condições associadas.",
    "activa": "ativa",
    "Ventaja:": "Vantagem:",
    "Material:": "Material:",
    "Ficha de Sintex MS-35": "Ficha de Sintex MS-35",
    "Estado del pedido PED-2026-0231": "Estado do pedido PED-2026-0231",
    "Campañas de marketing activas": "Campanhas de marketing ativas",
    "Conexión con los sistemas de Quilosa": "Ligação com os sistemas da Quilosa",
    "Datos en Azure (UE) · cifrado · solo lectura · sin uso para entrenamiento": "Dados no Azure (UE) · cifrado · apenas leitura · sem uso para treino",
    "ERP · pedidos, stock, precios": "ERP · pedidos, stock, preços",
    "Fichas técnicas, SDS, DoP": "Fichas técnicas, SDS, DoP",
    "Catálogo, expositores, campañas": "Catálogo, expositores, campanhas",
    "Prospección y riesgo": "Prospeção e risco",
    "El agente combina consultas estructuradas al ERP (vía Data Warehouse) con búsqueda semántica RAG sobre la documentación. Toda respuesta cita su origen y se sincroniza en tiempo casi real.": "O agente combina consultas estruturadas ao ERP (via Data Warehouse) com pesquisa semântica RAG sobre a documentação. Cada resposta cita a sua origem e sincroniza em tempo quase real.",

    // ── Pedidos
    "Crear Pedido por Voz": "Criar Pedido por Voz",
    "Pulsa el micrófono y di algo como:": "Toque no microfone e diga algo como:",
    "\"Genérame un pedido de 100 unidades de Perfect Finish y 50 de Sintex MS-35 para OBRAMAT\"": "\"Cria-me um pedido de 100 unidades de Perfect Finish e 50 de Sintex MS-35 para OBRAMAT\"",
    "Escuchando...": "A ouvir...",
    "✓ Pedido capturado": "✓ Pedido capturado",
    "Pulsa para iniciar": "Toque para iniciar",
    "Revisar pedido dictado": "Rever pedido ditado",
    "Descartar": "Descartar",
    "Confirmar y enviar": "Confirmar e enviar",
    "Producto": "Produto",
    "Cantidad": "Quantidade",
    "Total": "Total",
    "Todos": "Todos",
    "Facturados": "Faturados",
    "Lanzados": "Lançados",
    "Retenidos": "Retidos",
    "En validación": "Em validação",
    "N.º Pedido": "N.º Pedido",
    "Fecha": "Data",
    "Importe": "Valor",
    "Estado": "Estado",
    "Progreso": "Progresso",
    "Ver": "Ver",
    "Facturado": "Faturado",
    "Lanzado": "Lançado",
    "Retenido": "Retido",
    "Validación": "Validação",
    "CLIENTE": "CLIENTE",

    // ── Inteligencia
    "CUOTA DE MERCADO": "QUOTA DE MERCADO",
    "+1.2% vs trimestre ant.": "+1,2% vs trimestre ant.",
    "ALMACENES CONSTRUCCIÓN ES": "ARMAZÉNS CONSTRUÇÃO ES",
    "2.847 en zona activa": "2.847 na zona ativa",
    "SCORE RIESGO SECTOR": "SCORE RISCO SETOR",
    "Riesgo bajo-medio": "Risco baixo-médio",
    "OPORTUNIDADES DETECTADAS": "OPORTUNIDADES DETETADAS",
    "6 alta prioridad": "6 alta prioridade",
    "NUEVAS CONSTITUCIONES": "NOVAS EMPRESAS",
    "Sector construcción Q2": "Setor construção T2",
    "FUENTES DE DATOS:": "FONTES DE DADOS:",
    "Últ. actualización: hoy 08:30": "Últ. atualização: hoje 08:30",
    "Cuota de Mercado por Competidor — Selladores": "Quota de Mercado por Concorrente — Vedantes",
    "Fuente: datos estimados sector construcción España Q4 2025": "Fonte: dados estimados do setor da construção em Espanha T4 2025",
    "Heat Map de Ventas por Zona": "Mapa de Calor de Vendas por Zona",
    "Oportunidades Detectadas": "Oportunidades Detetadas",
    "Cliente / Prospecto": "Cliente / Potencial",
    "Tipo": "Tipo",
    "Potencial": "Potencial",
    "Motivo": "Motivo",
    "Cross-sell": "Cross-sell",
    "Up-sell": "Up-sell",
    "Prospecto": "Potencial",
    "Riesgo fuga": "Risco de perda",
    "Compra selladores, no compra espumas PU": "Compra vedantes, não compra espumas PU",
    "Consumo creciente 18% YoY, sin rappel activo": "Consumo +18% YoY, sem rappel ativo",
    "No captado, empresa con CNAE 4120 y 25 emp.": "Não captado, empresa com CAE 4120 e 25 func.",
    "Caída pedidos 32% en últimos 60 días": "Quebra de pedidos 32% nos últimos 60 dias",
    "Ventas": "Vendas",

    // ── Rutas
    "Selecciona Zona": "Selecione a Zona",
    "Clientes Potenciales (Fuente: SABI)": "Clientes Potenciais (Fonte: SABI)",
    "Empresas del sector construcción en la zona no captadas": "Empresas do setor da construção na zona ainda não captadas",
    "PROSPECTO": "POTENCIAL",
    "empleados": "funcionários",
    "Fact:": "Fat:",
    "Ver ficha": "Ver ficha",
    "Sin prospectos en esta zona": "Sem clientes potenciais nesta zona",
    "Priorizar por": "Priorizar por",
    "Potencial €": "Potencial €",
    "Cercanía": "Proximidade",
    "Últ. Visita": "Últ. Visita",
    "Clientes en la Zona": "Clientes na Zona",
    "Ruta Optimizada": "Rota Otimizada",
    "distancia": "distância",
    "tiempo": "tempo",
    "potencial €": "potencial €",
    "Iniciar Navegación": "Iniciar Navegação",
    "Madrid, España": "Madrid, Espanha",
    "{n} clientes seleccionados": "{n} clientes selecionados",

    // ── Planogramas
    "🗂 Generador de Planograma 3D": "🗂 Gerador de Planograma 3D",
    "📸 Análisis de Lineal (VA + Slotting)": "📸 Análise de Linear (VC + Slotting)",
    "Selecciona cliente...": "Selecione cliente...",
    "Top:": "Top:",
    "Tipo de Expositor": "Tipo de Expositor",
    "(22 tipos en PIM)": "(22 tipos no PIM)",
    "Estantes:": "Prateleiras:",
    "Columnas:": "Colunas:",
    "Capacidad:": "Capacidade:",
    "Medidas:": "Dimensões:",
    "Canal:": "Canal:",
    "Generar Planograma IA": "Gerar Planograma IA",
    "Optimizando...": "A otimizar...",
    "Selecciona cliente y expositor": "Selecione cliente e expositor",
    "El sistema optimizará el planograma basándose en ventas, campañas activas y características de los productos.": "O sistema otimizará o planograma com base em vendas, campanhas ativas e características dos produtos.",
    "Optimizando planograma...": "A otimizar planograma...",
    "Analizando ventas · Aplicando reglas de slotting · Priorizando campañas": "A analisar vendas · A aplicar regras de slotting · A priorizar campanhas",
    "Compartir": "Partilhar",
    "Exportar PDF": "Exportar PDF",
    "CAPACIDAD USADA": "CAPACIDADE USADA",
    "{n} de {cap} slots": "{n} de {cap} slots",
    "FAMILIAS": "FAMÍLIAS",
    "categorías activas": "categorias ativas",
    "EN CAMPAÑA ★": "EM CAMPANHA ★",
    "posiciones": "posições",
    "EYE LEVEL": "EYE LEVEL",
    "posiciones premium": "posições premium",
    "Criterios de optimización aplicados": "Critérios de otimização aplicados",
    "Campañas activas en posición eye-level (estante central)": "Campanhas ativas em posição eye-level (prateleira central)",
    "Top productos del cliente priorizados frente a categoría general": "Top produtos do cliente priorizados face à categoria geral",
    "Productos agrupados por familia para facilitar la compra": "Produtos agrupados por família para facilitar a compra",
    "Productos de mayor volumen/peso en estantes bajos": "Produtos de maior volume/peso nas prateleiras inferiores",
    "Arrastra o sube una foto del lineal": "Arraste ou carregue uma foto do linear",
    "El sistema detectará los productos y posiciones usando visión artificial + optimización de slotting": "O sistema detetará os produtos e posições usando visão computacional + otimização de slotting",
    "JPG, PNG, HEIC · Máx. 20MB": "JPG, PNG, HEIC · Máx. 20MB",
    "Ver demo sin foto": "Ver demo sem foto",
    "subido correctamente": "carregado com sucesso",
    "El análisis combinará visión artificial (Azure Computer Vision) con optimización de slotting para identificar cada producto en su posición y comparar con el planograma óptimo.": "A análise combinará visão computacional (Azure Computer Vision) com otimização de slotting para identificar cada produto na sua posição e comparar com o planograma ótimo.",
    "Analizar con IA": "Analisar com IA",
    "Analizando lineal...": "A analisar linear...",
    "Detección de objetos con Azure Computer Vision": "Deteção de objetos com Azure Computer Vision",
    "Clasificación de productos por packaging + etiqueta": "Classificação de produtos por embalagem + etiqueta",
    "Cálculo de score vs planograma óptimo": "Cálculo de score vs planograma ótimo",
    "EFICIENCIA ACTUAL": "EFICIÊNCIA ATUAL",
    "Vs. 94% óptimo": "Vs. 94% ótimo",
    "HUECOS VACÍOS": "ESPAÇOS VAZIOS",
    "13% del espacio": "13% do espaço",
    "MAL POSICIONADOS": "MAL POSICIONADOS",
    "productos fuera de zona": "produtos fora de zona",
    "POTENCIAL VENTAS": "POTENCIAL VENDAS",
    "Con planograma óptimo": "Com planograma ótimo",
    "📸 Estado actual detectado": "📸 Estado atual detetado",
    "3 estantes · 8 posiciones · Confianza detección: 91%": "3 prateleiras · 8 posições · Confiança de deteção: 91%",
    "Hueco vacío": "Espaço vazio",
    "Falta producto": "Falta produto",
    "VACÍO": "VAZIO",
    "✅ Planograma óptimo recomendado": "✅ Planograma ótimo recomendado",
    "Basado en ventas + campañas · Generado por IA": "Com base em vendas + campanhas · Gerado por IA",
    "Acciones recomendadas": "Ações recomendadas",
    "Reubicar Perfect Finish a estante central (eye-level). Actualmente en fila inferior.": "Reposicionar Perfect Finish para a prateleira central (eye-level). Atualmente na fila inferior.",
    "Cubrir 7 huecos vacíos: añadir Orbasil N-39 (×2) y Sintex DM-30 (×2) — disponibles en almacén.": "Preencher 7 espaços vazios: adicionar Orbasil N-39 (×2) e Sintex DM-30 (×2) — disponíveis em armazém.",
    "Separar Sintex N-25 Color del bloque de espumas PU — mejorar visualización por familia.": "Separar Sintex N-25 Color do bloco de espumas PU — melhorar visualização por família.",
    "Añadir cartel de campaña ★ en Perfect Finish, Sintex MS-35 y Orbafoam PRO 65.": "Adicionar cartaz de campanha ★ em Perfect Finish, Sintex MS-35 e Orbafoam PRO 65.",
    "Analizar otro lineal": "Analisar outro linear",
    "Exportar informe": "Exportar relatório",
    "Pág.": "Pág.",

    // ── Famílias de produto
    "Selladores": "Vedantes",
    "Selladores MS": "Vedantes MS",
    "Siliconas": "Silicones",
    "Espumas PU": "Espumas PU",
    "Adhesivos": "Adesivos",
    "Adhesivos MS": "Adesivos MS",
    "Impermeab.": "Impermeab.",
    "Otros": "Outros",
    "Conectado a Dynamics AX": "Ligado ao Dynamics AX",

    // ── Módulos novos (nav + META)
    "Recomendaciones de Venta": "Recomendações de Venda",
    "Predicción de Stocks": "Previsão de Stocks",
    "Predicción de Fuga": "Previsão de Perda",
    "Predicción de Fuga de Clientes": "Previsão de Perda de Clientes",
    "Generador de Pedido": "Gerador de Pedido",
    "Motor de recomendación personalizado por cliente basado en clientes similares e histórico": "Motor de recomendação personalizado por cliente com base em clientes semelhantes e histórico",
    "Anticipa el agotamiento de stock de cada cliente y prioriza la reposición": "Antecipa o esgotamento de stock de cada cliente e prioriza a reposição",
    "Detecta clientes y tiendas en riesgo de fuga con acción de retención recomendada": "Deteta clientes e lojas em risco de perda com ação de retenção recomendada",

    // ── Recomendações de Venda
    "Cliente mayorista": "Cliente grossista",
    "Basado en clientes similares e histórico de ventas": "Com base em clientes semelhantes e histórico de vendas",
    "Argumentario de venta": "Argumentário de venda",
    "Clientes similares:": "Clientes semelhantes:",
    "Artículos recomendados": "Artigos recomendados",
    "Alta afinidad": "Alta afinidade",
    "Oferta / promoción sugerida": "Oferta / promoção sugerida",
    "Condiciones sugeridas": "Condições sugeridas",
    "Precio sugerido": "Preço sugerido",
    "Descuento sugerido": "Desconto sugerido",
    "Lote/formato sugerido": "Lote/formato sugerido",
    "Generar argumentario PDF": "Gerar argumentário PDF",
    "Crear pedido con recomendación": "Criar pedido com recomendação",
    "Cliente Clase A con alto consumo de selladores MS pero sin apenas rotación de espumas PU. Rappel al 95% — a 250 uds de cerrar el 5%. Oportunidad clara de upsell en espumas y cierre de rappel este mes.": "Cliente Classe A com alto consumo de vedantes MS mas pouca rotação de espumas PU. Rappel a 95% — a 250 uni. de fechar os 5%. Oportunidade clara de upsell em espumas e fecho de rappel este mês.",
    "Pack Espumas Q3 — 8% dto. en pedidos ≥ 100 uds": "Pack Espumas T3 — 8% desc. em pedidos ≥ 100 uni.",
    "8% + rappel 5% al cierre": "8% + rappel 5% no fecho",
    "Palet completo (48 cajas) — porte incluido": "Palete completa (48 caixas) — porte incluído",
    "Gran superficie DIY con fuerte rotación de espumas y consumo creciente 18% YoY. No tiene rappel activo pese al volumen — riesgo de que la competencia entre por precio. Priorizar activación de rappel.": "Grande superfície DIY com forte rotação de espumas e consumo +18% YoY. Sem rappel ativo apesar do volume — risco de a concorrência entrar por preço. Priorizar ativação de rappel.",
    "Activación rappel escalado 3/5/8% por volumen trimestral": "Ativação de rappel escalonado 3/5/8% por volume trimestral",
    "12% (Clase A gran superficie)": "12% (Classe A grande superfície)",
    "Multipalet — reposición quincenal programada": "Multipalete — reposição quinzenal programada",
    "Almacén de construcción con buen mix pero pedido retenido en finanzas. Consumo estable de adhesivos MS. Oportunidad de cross-sell en impermeabilizantes, categoría que aún no trabaja.": "Armazém de construção com bom mix mas pedido retido em finanças. Consumo estável de adesivos MS. Oportunidade de cross-sell em impermeabilizantes, categoria ainda não trabalhada.",
    "Lanzamiento Aqua Protect — 15% dto. introductorio": "Lançamento Aqua Protect — 15% desc. introdutório",
    "10% + muestra gratuita": "10% + amostra gratuita",
    "Media paleta (24 cajas)": "Meia palete (24 caixas)",
    "Ferretería profesional con caída de pedidos del 32% en 60 días — riesgo de fuga. Consumo histórico centrado en siliconas y adhesivos. Recomendada oferta de reactivación antes de perder la cuenta.": "Ferragem profissional com quebra de pedidos de 32% em 60 dias — risco de perda. Consumo histórico centrado em silicones e adesivos. Recomendada oferta de reativação antes de perder a conta.",
    "Oferta reactivación — 10% dto. primer pedido tras 60 días": "Oferta reativação — 10% desc. primeiro pedido após 60 dias",
    "10% reactivación": "10% reativação",
    "Caja individual (12 uds) — sin mínimo": "Caixa individual (12 uni.) — sem mínimo",
    "Distribuidor profesional con rappel al 55% y crecimiento sostenido. Base sólida de selladores. Margen para introducir gama premium de siliconas neutras.": "Distribuidor profissional com rappel a 55% e crescimento sustentado. Base sólida de vedantes. Margem para introduzir gama premium de silicones neutros.",
    "Gama premium siliconas — 6% dto. cartera": "Gama premium silicones — 6% desc. carteira",
    "Palet mixto configurable": "Palete mista configurável",

    // ── Previsão de Stocks
    "Predicción basada en histórico de ventas del cliente": "Previsão baseada no histórico de vendas do cliente",
    "Acotado a Selena Iberia (~3.000 clientes activos, mayoristas y retailers)": "Limitado à Selena Iberia (~3.000 clientes ativos, grossistas e retalhistas)",
    "Predicción de agotamiento": "Previsão de esgotamento",
    "STOCK ESTIMADO": "STOCK ESTIMADO",
    "uds en cliente": "uni. no cliente",
    "RITMO CONSUMO": "RITMO CONSUMO",
    "uds/mes": "uni./mês",
    "DÍAS RESTANTES": "DIAS RESTANTES",
    "hasta rotura": "até rutura",
    "Producto principal:": "Produto principal:",
    "Agotamiento estimado:": "Esgotamento estimado:",
    "Hoy": "Hoje",
    "días": "dias",
    "Reposición urgente recomendada. El cliente agotará stock antes de la próxima visita programada.": "Reposição urgente recomendada. O cliente esgotará o stock antes da próxima visita programada.",
    "Vigilar. Incluir en la próxima ruta comercial para valorar reposición.": "Vigiar. Incluir na próxima rota comercial para avaliar reposição.",
    "Stock holgado. Sin acción inmediata requerida.": "Stock folgado. Sem ação imediata necessária.",
    "Generar pedido de reposición": "Gerar pedido de reposição",
    "Riesgo de rotura de stock por cliente": "Risco de rutura de stock por cliente",
    "Por riesgo": "Por risco",
    "Por días restantes": "Por dias restantes",
    "Producto principal": "Produto principal",
    "Stock est.": "Stock est.",
    "Días restantes": "Dias restantes",
    "Agotamiento": "Esgotamento",
    "Riesgo rotura": "Risco rutura",
    "Sugerir reposición": "Sugerir reposição",
    "Riesgo de rotura": "Risco de rutura",
    "Previsión de consumo y agotamiento": "Previsão de consumo e esgotamento",
    "Stock previsto": "Stock previsto",
    "Punto de reposición": "Ponto de reposição",
    "Agotamiento estimado": "Esgotamento estimado",
    "Score de fuga por cliente": "Score de perda por cliente",
    "Predicción del modelo de churn sobre histórico de comportamiento": "Previsão do modelo de churn sobre histórico de comportamento",
    "Umbral riesgo alto": "Limiar risco alto",

    // ── Previsão de Perda
    "RIESGO ALTO": "RISCO ALTO",
    "clientes en fuga inminente": "clientes em perda iminente",
    "RIESGO MEDIO": "RISCO MÉDIO",
    "a vigilar": "a vigiar",
    "TIENDAS EN RIESGO": "LOJAS EM RISCO",
    "puntos de venta minoristas": "pontos de venda retalhistas",
    "MODELO CHURN": "MODELO CHURN",
    "precisión histórica": "precisão histórica",
    "Mayoristas": "Grossistas",
    "Minoristas / Tiendas": "Retalhistas / Lojas",
    "Score fuga": "Score perda",
    "Riesgo": "Risco",
    "Motivo detectado": "Motivo detetado",
    "Competidor origen": "Concorrente origem",
    "Acción recomendada": "Ação recomendada",
    "Mayorista": "Grossista",
    "Minorista": "Retalhista",
    "Alto": "Alto",
    "Medio": "Médio",
    "Bajo": "Baixo",
    "Caída de pedidos 32% en últimos 60 días": "Quebra de pedidos 32% nos últimos 60 dias",
    "Sin pedidos en 90 días": "Sem pedidos em 90 dias",
    "Pasó a comprar a la competencia por precio": "Passou a comprar à concorrência por preço",
    "Frecuencia de pedido bajó de mensual a trimestral": "Frequência de pedido baixou de mensal para trimestral",
    "Ticket medio −18% en 3 meses": "Ticket médio −18% em 3 meses",
    "Comportamiento estable, ligera bajada estacional": "Comportamento estável, ligeira quebra sazonal",
    "Pedido retenido puntual (finanzas), relación sana": "Pedido retido pontual (finanças), relação saudável",
    "Ofrecer descuento de reactivación 10%": "Oferecer desconto de reativação 10%",
    "Visita comercial urgente": "Visita comercial urgente",
    "Igualar oferta + soporte técnico": "Igualar oferta + suporte técnico",
    "Llamada de seguimiento + catálogo Q3": "Chamada de seguimento + catálogo T3",
    "Promo cruzada adhesivos + siliconas": "Promo cruzada adesivos + silicones",
    "Sin acción — monitorizar": "Sem ação — monitorizar",
    "Resolver retención de pago": "Resolver retenção de pagamento",
  },
};

const LangContext = React.createContext({ lang: "ES", setLang: () => {} });

function LangProvider({ children }) {
  const [lang, setLang] = React.useState(() => localStorage.getItem("quilosa-v3-lang") || "ES");
  React.useEffect(() => { localStorage.setItem("quilosa-v3-lang", lang); }, [lang]);
  return <LangContext.Provider value={{ lang, setLang }}>{children}</LangContext.Provider>;
}

function useLang() {
  const ctx = React.useContext(LangContext);
  const t = (s, vars) => {
    let out = s;
    if (ctx.lang !== "ES") {
      const table = I18N[ctx.lang.toLowerCase()];
      if (table && table[s] != null) out = table[s];
    }
    if (vars) for (const k in vars) out = out.split("{" + k + "}").join(vars[k]);
    return out;
  };
  return { lang: ctx.lang, setLang: ctx.setLang, t };
}

Object.assign(window, { LangProvider, useLang, LangContext });
