{
  "commandPalette": {
    "placeholder": "Buscar páginas, hoteles, habitaciones...",
    "buildingIndex": "Construyendo índice de búsqueda...",
    "noResults": "No hay resultados para \"{{query}}\"",
    "footer": {
      "navigate": "navegar",
      "select": "seleccionar",
      "close": "cerrar"
    }
  },
  "app": {
    "selectHotel": "Seleccionar hotel",
    "logout": "Cerrar sesión",
    "theme": {
      "label": "Cambiar tema",
      "light": "Claro",
      "dark": "Oscuro",
      "system": "Sistema"
    }
  },
  "guestApp": {
    "handoff": {
      "signingIn": "Iniciando sesión…",
      "errorTitle": "Error al iniciar sesión",
      "invalidTicket": "Este enlace de acceso ha caducado o no es válido. Vuelve a entrar desde el portal de tu hotel.",
      "staffNoticeTitle": "Acceso para personal",
      "staffNoticeMessage": "El personal del hotel debe iniciar sesión a través del portal de su hotel (ej. hotel-slug.minibar360.com).",
      "staffSignIn": "Iniciar sesión"
    },
    "minibarCard": {
      "minibarNotFoundTitle": "Minibar no encontrado",
      "minibarNotFoundMessage": "Esta habitación no tiene ningún minibar configurado.",
      "thankYouTitle": "¡Gracias!",
      "thankYouMessage": "¡Listo! Tu pedido está registrado y cobrado.",
      "requestInvoicePart1": "Solicita tu factura enviando un correo a ",
      "requestInvoicePart2": " con tus datos de facturación.",
      "continueShopping": "Seguir comprando",
      "completePaymentTitle": "Completar pago",
      "payYourWay": "Paga {{ amount }} {{ currency }} a tu manera.",
      "orPayAnotherWay": "o elige otra forma de pago",
      "paymentMethodsTitle": "Elige cómo pagar",
      "stripeTitle": "Tarjeta",
      "stripeSubtitle": "Débito o crédito, pago seguro",
      "bizumTitle": "Bizum",
      "bizumSubtitle": "Pago móvil instantáneo",
      "processing": "Procesando…",
      "payAmount": "Pagar {{ amount }}",
      "back": "Atrás",
      "discountApplied": "Descuento aplicado",
      "tapEachItem": "Marca lo que has consumido.",
      "leaveSuggestion": "Deja una sugerencia",
      "item": "artículo",
      "items": "artículos",
      "subtotal": "Subtotal",
      "appDiscount": "Descuento en la app",
      "total": "Total",
      "loadingMinibar": "Cargando tu minibar…",
      "paymentNotCompleted": "No se ha podido completar el pago.",
      "couldNotStartCheckout": "No hemos podido iniciar el pago. Inténtalo de nuevo.",
      "paymentFailed": "No se ha podido procesar el pago. Inténtalo de nuevo o elige otro método.",
      "paymentCollectedButNotConfirmed": "Hemos recibido el pago, pero hubo un problema al confirmar tu pedido.",
      "retryConfirmation": "Reintentar confirmación",
      "paymentDeclined": "Tu banco ha rechazado el pago. Inténtalo de nuevo o elige otro método.",
      "couldNotLoadStripe": "No se ha podido cargar la pasarela de pago.",
      "privacyNotice": "Cómo tratamos tus datos",
      "orderSummary": "Resumen del pedido",
      "chargeConfirmed": "Cargo registrado automáticamente",
      "sslTrust": "Encriptación SSL bancaria · Stripe",
      "securePaymentSubtitle": "Paga al instante, sin pasar por recepción",
      "roomBadge": "Habitación {{ room }}",
      "discountTag": "-{{ discount }}% dto.",
      "savingsNotice": "Ahorras un {{ percent }}% en la app",
      "retry": "Volver a intentar",
      "vatIncluded": "IVA incluido",
      "couldNotLoadTitle": "No hemos podido cargar tu minibar",
      "couldNotLoadMessage": "Comprueba tu conexión y vuelve a intentarlo.",
      "paymentOutcomeUnknown": "No hemos podido comprobar si el pago se ha completado. No vuelvas a pagar: pulsa «Reintentar confirmación» para comprobarlo.",
      "paymentProcessing": "Tu banco todavía está procesando el pago. Confirmaremos tu pedido en cuanto se complete; no vuelvas a pagar.",
      "paymentNotTaken": "El pago no se ha completado y no se ha realizado ningún cargo. Puedes intentarlo de nuevo.",
      "paymentReceivedTitle": "Hemos recibido tu pago",
      "paymentReceivedConfirming": "Estamos registrando tu pedido…",
      "paymentReturnUnresolvedTitle": "Estamos comprobando tu pago",
      "paymentReturnUnresolvedMessage": "Si tu banco ha completado el cobro, registraremos tu pedido automáticamente. No vuelvas a pagar; si tienes dudas, consulta en recepción.",
      "connectionProblem": "La conexión está tardando demasiado. Comprueba tu conexión e inténtalo de nuevo.",
      "belowPaymentMinimum": "El pago en la app requiere un importe mínimo de {{ amount }}. Añade otro producto para continuar.",
      "discountNoLongerAvailable": "El descuento de la encuesta ya no está disponible para este pedido. Hemos aplicado el descuento base: revisa el total e inténtalo de nuevo.",
      "productsUnavailable": "Algunos productos de tu pedido ya no están disponibles o superan las unidades del minibar. Revisa tu pedido e inténtalo de nuevo.",
      "paymentInProgress": "Ya hay un pago en curso para esta habitación. Espera unos segundos y vuelve a intentarlo.",
      "methodCard": "tarjeta",
      "paymentMethodsAvailable": "Puedes pagar con {{ methods }}.",
      "orJoin": "o"
    },
    "categories": {
      "Drinks": "Bebidas",
      "Alcohol": "Alcohol",
      "Snacks": "Snacks",
      "Sweets": "Dulces",
      "HealthySnacks": "Snacks saludables",
      "Miscellaneous": "Otros",
      "HotBeverages": "Bebidas calientes",
      "ConvenienceFoods": "Comida preparada",
      "PersonalCare": "Cuidado personal",
      "Pharmacy": "Farmacia",
      "BabyProducts": "Productos para bebés",
      "LuxuryItems": "Artículos de lujo",
      "LocalProducts": "Productos locales",
      "ElectronicsAccessories": "Electrónica y accesorios",
      "Recommended": "Recomendaciones",
      "Packs": "Packs"
    },
    "poll": {
      "title": "¿Qué tendría tu minibar ideal?",
      "subtitle": "Elige todos los que quieras. Tus respuestas desbloquean el {{ percent }}% de descuento.",
      "suggestionLabel": "¿Echas algo en falta?",
      "suggestionPlaceholder": "Cuéntanos qué añadirías…",
      "suggestionTooLong": "Por favor, no superes los {{ max }} caracteres.",
      "submit": "Enviar y desbloquear el {{ percent }}%",
      "skip": "Volver sin responder",
      "submitting": "Enviando…",
      "loadFailed": "No hemos podido cargar los productos. Inténtalo de nuevo.",
      "submitFailed": "No hemos podido guardar tus respuestas. Inténtalo de nuevo.",
      "referencePriceLabel": "Precio de referencia de la encuesta",
      "aboutYou": {
        "title": "Sobre ti",
        "note": "Estas preguntas son opcionales y solo usamos tus respuestas para estadísticas anónimas.",
        "nationalityLabel": "Nacionalidad",
        "nationalityPlaceholder": "Elige tu nacionalidad",
        "guestTypeLabel": "¿Con quién viajas?",
        "guestTypes": {
          "Single": "Viajo solo/a",
          "Couple": "En pareja",
          "Family": "En familia"
        },
        "skip": "Prefiero no responder",
        "skipped": "Has elegido no responder a estas preguntas.",
        "answer": "Responder",
        "invalidNationality": "No hemos podido guardar esa nacionalidad. Elige otra o toca «Prefiero no responder».",
        "invalidGuestType": "No hemos podido guardar con quién viajas. Elige otra opción o toca «Prefiero no responder»."
      },
      "subtitleNoDiscount": "Elige todos los que quieras.",
      "submitNoDiscount": "Enviar respuestas"
    },
    "shop": {
      "upgradeCta": "Quiero el {{ percent }}%",
      "cartLocked": "Tienes un pago pendiente de confirmar. Hasta que lo comprobemos, no puedes cambiar tu pedido.",
      "packBadge": "Pack",
      "soldOut": "Agotado",
      "categoriesLabel": "Categorías",
      "unavailableTitle": "Algo se ha agotado",
      "unavailableNotice": "Hemos ajustado tu pedido a lo que queda en el minibar: {{ names }}.",
      "unavailableDismiss": "Entendido",
      "emptyTitle": "Este minibar no tiene nada a la venta ahora mismo",
      "emptyMessage": "Si necesitas algo, pregunta en recepción."
    },
    "privacy": {
      "title": "Aviso de privacidad",
      "aboutTitle": "Sobre este aviso",
      "aboutBody": "Este aviso explica cómo se recogen y utilizan tus datos personales cuando usas la plataforma de minibar en autoservicio de este hotel. El hotel es el responsable del tratamiento de tus datos personales. Self Minibar SL opera la plataforma por cuenta del hotel como encargado del tratamiento.",
      "collectTitle": "Qué datos recogemos",
      "collectRoom": "Número de habitación — al escanear el código QR de tu habitación",
      "collectProducts": "Productos que compras — al seleccionar artículos y completar el pago",
      "collectPayment": "Importe del pago — al completar el pago a través de Stripe",
      "collectPreferences": "Preferencias alimentarias — las registra la recepción del hotel para tu comodidad",
      "collectFeedback": "Respuestas y sugerencias de la encuesta — solo si decides rellenar la encuesta del minibar",
      "collectNot": "No recogemos tu nombre, dirección postal, correo electrónico, datos de tu tarjeta (van directamente a Stripe), información de salud, ubicación ni historial de navegación.",
      "useTitle": "Para qué usamos tus datos",
      "useShow": "Mostrarte los productos del minibar de tu habitación",
      "usePayment": "Procesar tu pago (a través de Stripe)",
      "useExclusions": "Excluir los productos que no puedes consumir (por tu seguridad)",
      "useStatistics": "Generar estadísticas anónimas para el hotel",
      "shareTitle": "Con quién compartimos tus datos",
      "shareStripe": "Stripe — procesamiento de pagos (certificado bajo el Marco de Privacidad de Datos UE-EE. UU.)",
      "shareHosting": "Nuestro proveedor de alojamiento — almacenamiento seguro de datos en la Unión Europea",
      "shareHotel": "El hotel — datos de consumo para facturación y operaciones",
      "shareNoSale": "No vendemos tus datos personales a nadie.",
      "retentionTitle": "Cuánto tiempo conservamos tus datos",
      "retentionOrders": "Historial de pedidos — se anonimiza a los 90 días; las estadísticas se conservan de forma indefinida",
      "retentionPreferences": "Preferencias alimentarias — hasta que el hotel las elimina (normalmente al hacer el check-out)",
      "rightsTitle": "Tus derechos",
      "rightsBody": "Tienes derecho a acceder a tus datos, rectificarlos, suprimirlos, limitar su tratamiento, exportarlos y oponerte a su tratamiento. Para ejercerlos, contacta con la recepción del hotel.",
      "rightsComplaint": "También puedes presentar una reclamación ante tu autoridad de protección de datos (en España:",
      "rightsAuthority": "Agencia Española de Protección de Datos",
      "cookiesTitle": "Cookies y almacenamiento",
      "cookiesBody": "Esta aplicación utiliza almacenamiento local esencial para la autenticación, tu elección de descuento y recordar tu consentimiento. No se usan cookies de seguimiento, publicidad ni analítica.",
      "contactTitle": "Contacto",
      "contactController": "Responsable del tratamiento: tu hotel — contacta con recepción o con el delegado de protección de datos.",
      "contactProcessor": "Encargado del tratamiento: Self Minibar SL —",
      "lastUpdated": "Última actualización: septiembre de 2026"
    },
    "kpiDashboard": {
      "title": "Mi rendimiento"
    },
    "pay": {
      "editHint": "Puedes ajustar tu pedido antes de pagar",
      "increaseQuantity": "Añadir una unidad de {{ name }}",
      "decreaseQuantity": "Quitar una unidad de {{ name }}",
      "removeItem": "Quitar",
      "reassurance": "Pago cifrado de extremo a extremo y confirmación al instante. Si algo falla, puedes reintentarlo aquí mismo.",
      "unavailableTitle": "Todavía no hay nada que pagar",
      "unavailableMessage": "No hemos podido recuperar tu pedido. Vuelve a elegir tus productos y estarás aquí de nuevo en un momento. No se ha cobrado nada.",
      "backToShop": "Volver al minibar",
      "conditionsTitle": "Antes de pagar",
      "conditionCharge": "Se cobra al confirmar el pago, por el total de arriba.",
      "conditionSurcharge": "Lo que tomes y no pagues aquí, el hotel te lo cobrará después con un {{ percent }}% extra.",
      "statePendingTitle": "Comprobando tu pago",
      "stateFailedTitle": "No se ha completado el pago",
      "suggestionsTitle": "También te puede apetecer"
    },
    "funnel": {
      "back": "Atrás",
      "roomLabel": "Habitación ",
      "welcomeTitle": "Disfruta de tu minibar"
    },
    "benefit": {
      "earn": "Ahorra contándonos tu minibar ideal"
    },
    "header": {
      "language": "Idioma"
    },
    "help": {
      "open": "Ayuda",
      "title": "Ayuda",
      "howTitle": "Cómo funciona",
      "step1": "Toma del minibar lo que te apetezca.",
      "step2": "Márcalo aquí y paga desde tu móvil.",
      "step3": "Verás la confirmación del pago al momento.",
      "invoiceTitle": "¿Necesitas factura?"
    },
    "packs": {
      "featuredTitle": "Packs destacados",
      "seeAll": "Ver todos ({{ count }})",
      "saving": "Ahorras {{ amount }}",
      "contents": "Contenido del pack"
    },
    "detail": {
      "add": "Añadir · {{ amount }}",
      "update": "Actualizar · {{ amount }}",
      "remove": "Quitar del pedido",
      "contains": "Incluye",
      "quantity": "Cantidad"
    },
    "cartBar": {
      "review": "Ver y pagar",
      "label": "Ver y pagar: {{ count }} {{ noun }}, {{ amount }}"
    },
    "receipt": {
      "title": "Justificante",
      "reference": "Referencia",
      "date": "Fecha",
      "room": "Habitación"
    }
  },
  "restock": {
    "ai_verification": "Verificación por foto",
    "analyzing_photo": "Analizando foto del minibar...",
    "confidence": "confianza",
    "detected_items": "Elementos detectados",
    "detected_units": "Unidades detectadas",
    "detection_result": "Resultado del análisis",
    "reason_placeholder": "Explica por qué omites la foto...",
    "retake_photo": "Repetir foto",
    "skip_photo": "Omitir foto",
    "skip_photo_reason": "¿Por qué omites la foto?",
    "upload_minibar_photo": "Subir foto del minibar",
    "missing_items": "Artículos que faltan",
    "completing": "Completando…",
    "room": "Habitación",
    "inventory_check": "Control de inventario",
    "view_reference_photo": "Toca para ver la foto de referencia",
    "close_reference": "Cerrar",
    "guest_exclusion": "Retirar — exclusión de huésped",
    "units": "unidades",
    "unit": "Unidad {{number}} de {{total}}",
    "reasons": {
      "consumed": "Consumido",
      "expired": "Caducado",
      "broken": "Roto",
      "other": "Otro"
    },
    "saved_offline_sync": "Guardado sin conexión — se sincronizará cuando vuelvas a tener red",
    "summary_restocked": "Repuesto",
    "summary_missing": "Falta",
    "summary_present": "Presente",
    "next_room": "Siguiente habitación",
    "incidents": {
      "damaged_product": "Producto dañado",
      "tampered_minibar": "Minibar manipulado",
      "room_access_problem": "Problema de acceso a la habitación",
      "missing_products": "Productos faltantes",
      "temperature_issue": "Problema de temperatura"
    },
    "reported": "Reportado",
    "report_incident": "Reportar una incidencia",
    "incident_type": "Tipo de incidencia",
    "no_incident": "Sin incidencias",
    "description_optional": "Descripción (opcional)",
    "incident_placeholder": "Describe lo sucedido...",
    "my_performance": "Mi rendimiento",
    "performance_stats": "Tus estadísticas de reposición",
    "failed_load_performance": "No hemos podido cargar los datos de rendimiento.",
    "retry": "Reintentar",
    "today": "Hoy",
    "rooms_reviewed": "Habitaciones revisadas",
    "rooms_restocked": "Habitaciones repuestas",
    "avg_time_room": "Tiempo medio / habitación",
    "this_week": "Esta semana",
    "accuracy_rate": "Tasa de precisión",
    "rooms_summary_header": "{{rooms}} habitaciones en {{floors}} plantas",
    "floor": "Planta",
    "rooms": "habitaciones",
    "estimated_products": "Productos estimados",
    "no_estimates": "No hay estimaciones de productos disponibles.",
    "notes_reception": "Notas de recepción",
    "guest_alerts": "Alertas de huéspedes",
    "no_rooms_filter": "Ninguna habitación coincide con este filtro.",
    "check_again": "Comprobar de nuevo",
    "inspect_minibar": "Inspeccionar minibar",
    "complete_inspection": "Completar inspección",
    "inspection_complete_msg": "Inspección completada. Puedes inspeccionar otra habitación.",
    "read_only_restock": "Lista de reposición de solo lectura",
    "ready_room_warning_title": "No es necesario supervisar",
    "ready_room_restock_warning_title": "No es necesario reponer",
    "ready_room_warning_desc": "El minibar no se ha abierto desde la última reposición el {{time}}.",
    "ready_room_warning_desc_no_time": "El minibar no se ha abierto desde la última reposición.",
    "skip_room": "Omitir habitación",
    "proceed_anyway": "Continuar de todos modos",
    "loading_room_inventory": "Cargando inventario de la habitación…",
    "cannot_open_room": "No se puede abrir la habitación",
    "restock_complete": "Reposición completada",
    "restock_complete_msg": "Reposición completada. El minibar está listo.",
    "restock_reference_desc": "Repón el minibar según la referencia.",
    "tap_view_reference": "Toca para ver la referencia",
    "expected_missing": "esperado {{expected}} · falta {{missing}}",
    "missing_count": "falta {{count}}",
    "ai_suggested_more": "La IA ve {{count}} más de las marcadas; compruébalo en el estante",
    "add_missing_item": "Falta algo más",
    "cancel": "Cancelar",
    "add_item_confirm": "Añadir a la lista",
    "self_flagged_title": "Marcado por ti",
    "self_flagged_badge": "marcado por ti",
    "remove": "Quitar",
    "remove_self_flagged": "Quitar artículo marcado",
    "room_not_found_minibar": "Habitación no encontrada o sin minibar configurado.",
    "cannot_complete_restock": "No se ha podido completar la reposición.",
    "cannot_inspect_room": "No se puede inspeccionar la habitación",
    "confirm_missing_desc": "Revisa los artículos que faltan e indica el motivo.",
    "saving": "Guardando…",
    "cannot_complete_inspection": "No se ha podido completar la inspección.",
    "take_minibar_photo_desc": "Haz una foto del minibar para que la IA lo analice",
    "tap_to_capture": "Toca para hacer la foto",
    "take_photo": "Hacer foto",
    "analyze_with_ai": "Analizar con IA",
    "analyzing": "Analizando...",
    "ai_inspecting_desc": "Inspeccionando el minibar",
    "elapsed": "Transcurrido: {{seconds}}s",
    "auto_approved": "Aprobado automáticamente",
    "review_needed": "Revisión necesaria",
    "escalated": "Escalado",
    "confidence_score": "Confianza: {{score}}%",
    "found_qty": "Encontrado {{detected}}/{{expected}}",
    "found": "Encontrado",
    "confirm_all_results": "Confirmar todos los resultados",
    "correct_some": "Corregir algunos",
    "confirm_results": "Confirmar resultados",
    "tap_product_toggle": "Toca un producto para cambiar el resultado de la IA",
    "corrected": "Corregido",
    "done": "Hecho",
    "inspection_complete": "Inspección completada",
    "continue_manual": "Continuar con inspección manual",
    "missing": "Falta",
    "submit": "Enviar",
    "select_from_gallery": "Elegir una foto de la galería",
    "minibar_photo_preview_alt": "Vista previa de la foto del minibar",
    "scanner_starting": "Activando la cámara…",
    "scanner_active_hint": "Encuadra el código QR del minibar",
    "scanner_video_label": "Vista de la cámara para escanear el código QR del minibar",
    "scanner_denied_title": "Sin acceso a la cámara",
    "scanner_denied_desc": "Tu navegador ha bloqueado la cámara. Activa el permiso desde el icono del candado en la barra de direcciones y vuelve a intentarlo.",
    "scanner_unavailable_title": "No hemos podido abrir la cámara",
    "scanner_unavailable_desc": "Puede que otro proceso la esté usando o que el dispositivo no tenga cámara. Cierra otras aplicaciones y vuelve a intentarlo.",
    "scan_next_room": "Escanear otra habitación",
    "ai_analysis_failed": "No hemos podido analizar la foto. Puedes continuar con la revisión manual.",
    "layout_upload_failed": "No hemos podido subir la foto de verificación. Repite la foto e inténtalo de nuevo.",
    "back_to_rounds": "Volver a habitaciones",
    "room_locked_title": "Esta habitación no está disponible ahora",
    "connection_problem": "No hemos podido conectar con el servidor. Comprueba tu conexión e inténtalo de nuevo.",
    "already_completed": "Esta habitación ya se había completado. No se ha perdido nada.",
    "queued_offline": "Estás sin conexión. La revisión queda guardada y se enviará automáticamente cuando vuelva la conexión.",
    "queued_offline_storage_at_risk": "Estás sin conexión. Lo que has hecho queda guardado en este móvil, pero el navegador podría borrarlo si se queda sin espacio: abre la app con conexión en cuanto puedas para que se envíe.",
    "nothing_flagged_hint": "No hay nada marcado para esta habitación. Si encuentras productos que faltan, añádelos abajo.",
    "reference_photo_alt": "Foto de referencia del minibar lleno",
    "missing_reason": "Motivo",
    "reason_consumed": "Consumido",
    "reason_expired": "Caducado",
    "reason_broken": "Roto",
    "reason_other": "Otro",
    "scan_room_qr": "Escanear QR de habitación",
    "filter_all": "Todas",
    "filter_pending": "Por hacer",
    "filter_done": "Hechas",
    "status_pending": "Por revisar",
    "status_in_progress": "En curso",
    "status_done": "Hecha",
    "status_incident": "Incidencia",
    "account_not_linked": "Tu cuenta no está vinculada a ningún hotel. Pide a Recepción que revise tu usuario.",
    "loading_pending_reviews": "Cargando habitaciones…",
    "pending_reviews_empty": "¡Todo al día! No hay habitaciones pendientes de revisar.",
    "pending_reviews_failed": "No hemos podido cargar las habitaciones por revisar.",
    "tab_by_room": "Por habitación",
    "tab_trolley": "Carrito de reposición",
    "trolley_total_units": "{{ total }} unidades en total",
    "trolley_empty": "No hay productos para reponer en el carrito.",
    "trolley_summary": "Total de productos necesarios para abastecer las habitaciones pendientes.",
    "review_reason_Inspected": "Ya revisada",
    "review_reason_Consumption": "Ha habido consumo",
    "review_reason_DoorOpened": "Minibar abierto",
    "review_reason_NeedsRestock": "Falta reponer",
    "review_reason_InspectionInProgress": "Revisión a medias",
    "rooms_pending_review": "Habitaciones pendientes",
    "pending_review_products_unknown": "Productos por confirmar en la habitación",
    "add_incident_photo": "Añadir una foto",
    "uploading_photo": "Subiendo foto…",
    "incident_photo_failed": "No se ha podido subir la foto. Inténtalo de nuevo.",
    "incident_photo_alt": "Foto de la incidencia",
    "back_to_scanner": "Volver al escáner",
    "incident_photo_too_large": "La foto es demasiado grande. El tamaño máximo es de 10 MB.",
    "incident_photo_unsupported_type": "Ese tipo de archivo no es compatible. Usa una foto JPEG, PNG o WebP.",
    "offline_save_failed": "No hemos podido guardar esta revisión en el dispositivo. Comprueba la conexión e inténtalo de nuevo.",
    "remove_incident_photo": "Quitar foto",
    "step_photo_title": "Fotografía el minibar",
    "take_photo_hint": "La IA lee el estante desde tu foto y marca lo que parece faltar.",
    "photo_analysed": "Foto analizada",
    "photo_prefilled_hint": "Marcado desde la foto. Tú decides qué hay realmente — cambia lo que quieras abajo.",
    "photo_skipped_with_reason": "Foto omitida: {{ reason }}",
    "step_extra_title": "¿Qué falta en el minibar?",
    "step_extra_hint": "Revisa el estante: ¿cuántas hay de cada producto?",
    "restock_all_required_hint": "Confirma la reposición de todos los consumos pendientes antes de finalizar.",
    "ai_thinks_missing": "La IA cree que falta esto",
    "ai_nothing_missing": "La IA no ve nada que falte. Compruébalo tú abajo.",
    "reference_photo_caption": "Así debe verse este minibar lleno",
    "evidence_required": "Foto obligatoria",
    "evidence_add": "Añadir foto",
    "evidence_attached": "Foto adjunta",
    "evidence_retake": "Reemplazar",
    "evidence_uploading": "Subiendo foto…",
    "evidence_photo_alt": "Foto del producto dado de baja",
    "evidence_upload_failed": "No se pudo subir la foto. Inténtalo de nuevo.",
    "self_flag_evidence_required_hint": "Añade una foto a cada producto marcado como Roto u Otro antes de finalizar.",
    "flag_adjust_start": "¿Alguna sigue en el minibar?",
    "flag_adjust_label": "Toca las que siguen en el minibar.",
    "flag_adjust_undo": "Mantener lo marcado",
    "flag_reduction_reason": "¿Por qué faltan menos?",
    "flag_reduction_reasons": {
      "StillThere": "Sigue en el minibar",
      "NotRefilledLastTime": "Ya faltaba tras la última reposición",
      "Other": "Otro motivo"
    },
    "flag_reduction_reason_required_hint": "Indica por qué has bajado lo marcado antes de finalizar.",
    "over_capacity_hint": "Hay más unidades marcadas de las que caben en el minibar ({{products}}). Baja la cantidad antes de finalizar.",
    "incident_photo_limit": "Máximo {{max}} fotos por incidencia.",
    "server_error_not_queued": "El servidor no ha podido registrar esta revisión y no se ha guardado para más tarde. Vuelve a intentarlo en un momento: lo que has marcado se conserva.",
    "completion_rejected": "El servidor no ha aceptado esta revisión.",
    "inspection_queued_offline": "Estás sin conexión. La inspección queda guardada y se enviará automáticamente cuando vuelva la conexión.",
    "conflict_room_check": "Revisión de la habitación {{room}}",
    "conflict_inspection": "Inspección de la habitación {{room}}",
    "conflict_ai_confirmation": "Confirmación de la foto de la IA, habitación {{room}}",
    "conflict_discard_confirm": "¿Descartar esta revisión? Se borrará de este móvil y no llegará al servidor. Si no sabes por qué se ha rechazado, avisa a tu responsable antes.",
    "conflict_reason_unknown": "El servidor no ha aceptado esta revisión y no ha dado el motivo.",
    "worklist_room_queued": "Revisión guardada en este móvil, pendiente de enviar. No la repitas: se enviará sola.",
    "worklist_room_conflict": "El servidor no ha aceptado la revisión guardada. Mira el aviso de arriba antes de repetirla.",
    "reopen_queued_warning": "Esta habitación tiene una revisión guardada en este móvil que aún no se ha enviado. Se enviará sola cuando haya conexión; si la repites ahora, la guardada se rechazará. ¿Abrirla igualmente?",
    "reopen_conflict_warning": "El servidor no ha aceptado la revisión de esta habitación guardada en este móvil. Mira el aviso de la lista antes de repetirla. ¿Abrirla igualmente?",
    "server_errors": {
      "over_capacity": "Hay más unidades marcadas como que faltan de las que caben en el minibar. Revisa las cantidades.",
      "not_restocked_invalid": "Hay más unidades sin stock de las que había que reponer. Revisa lo marcado como sin stock.",
      "evidence_required": "Falta la foto de un producto marcado como Roto u Otro. Añádela antes de finalizar.",
      "photo_not_uploaded": "Una de las fotos no se ha subido desde la app. Hazla de nuevo antes de finalizar.",
      "incident_too_many_photos": "Una incidencia admite como máximo 3 fotos. Quita alguna.",
      "incident_invalid": "La incidencia no está completa. Revisa el tipo y la descripción.",
      "already_completed": "Esta habitación ya se ha completado. Vuelve a tus rondas y comprueba la lista.",
      "concurrent_update": "Alguien ha cambiado esta habitación mientras trabajabas en ella. Vuelve a intentarlo: lo que has marcado se conserva.",
      "supervision_not_found": "Esta revisión ya no existe en el servidor. Vuelve a escanear la habitación.",
      "inspection_after_restock": "La habitación ya se ha repuesto, así que no se puede inspeccionar ahora.",
      "not_authorized": "Otra persona tiene esta habitación. Pide a tu responsable que la revise.",
      "product_not_on_card": "Uno de los productos ya no está en el minibar de esta habitación. Vuelve a abrir la habitación.",
      "photo_invalid": "El archivo no es una foto válida. Usa una foto JPEG, PNG o WebP.",
      "photo_required": "Falta la foto. Hazla y vuelve a intentarlo.",
      "ai_timeout": "La IA ha tardado demasiado en analizar la foto. Repítela o revisa el minibar a mano.",
      "ai_result_stale": "La foto de la IA ya no corresponde a esta habitación. Haz una foto nueva.",
      "upload_timed_out": "La foto está tardando demasiado en subirse. Comprueba la cobertura e inténtalo de nuevo."
    },
    "logout_unsynced_warning": "Hay trabajo de esta sesión que aún no ha llegado al servidor ({{count}} pendientes). Se queda en este dispositivo y se enviará la próxima vez que inicies sesión aquí. ¿Cerrar sesión igualmente?",
    "landing_title": "Habitaciones de hoy",
    "scan_not_a_room": "Este código no es de un minibar. Escanea la pegatina del minibar.",
    "slot_missing": "{{ product }}, unidad {{ number }}: falta",
    "slot_present": "{{ product }}, unidad {{ number }}: está",
    "expected_units_label": "Debería haber",
    "observed_units_label": "¿Cuántas hay?",
    "observed_increase": "Añade una unidad de {{ product }}",
    "observed_decrease": "Quita una unidad de {{ product }}",
    "expected_units_unknown": "Sin definir",
    "missing_units_label": "¿Cuántas faltan?",
    "missing_increase": "Falta una unidad más de {{ product }}",
    "missing_decrease": "Falta una unidad menos de {{ product }}",
    "role_restocker": "reponedor",
    "role_inspector": "revisor",
    "role_maintenance": "mantenimiento",
    "slots_all_missing": "Faltan todas",
    "slots_missing_count": "Faltan {{ count }}",
    "slots_one_missing": "Falta una",
    "slots_one_present": "Está una",
    "not_consumed": "No fue consumo",
    "skip_reasons": {
      "no_light": "Sin luz",
      "camera_broken": "La cámara no funciona",
      "other": "Otro motivo"
    },
    "ai_confirm": "Confirmar",
    "ai_confirm_hint": "La IA ha marcado lo que parece faltar. Compruébalo en el estante y confirma.",
    "inspection_missing_summary": "Faltan {{ missing }} en total",
    "to_put_back": "Por reponer",
    "put_back_count": "Poner {{ count }}",
    "nothing_to_put_back": "Nada que reponer",
    "selected_badge": "Seleccionado",
    "rest_is_full": "El resto del minibar está completo.",
    "finish_with_photo": "Foto del minibar lleno",
    "complete_without_photo": "Completar sin foto",
    "add_missing_item_pick": "Toca el producto que falta.",
    "add_missing_item_hint": "Toca cada unidad que no está en el estante.",
    "add_missing_item_all_marked": "Ya marcado",
    "shortage_mark": "Sin stock",
    "shortage_units": "Sin stock: {{ count }}",
    "shortage_slots_hint": "Toca las unidades que sí has puesto.",
    "shortage_carried": "Faltaban {{ count }} de la última reposición",
    "restock_incomplete": "Reposición incompleta",
    "minibar_status_after": "Estado del minibar: {{status}}",
    "incomplete_summary_hint": "Se queda sin reponer por falta de stock:",
    "restock_incomplete_msg": "Has repuesto lo que tenías. La habitación sigue pendiente de reponer hasta que haya stock de lo que falta.",
    "review_status_pending": "Pendiente de revisar",
    "review_status_reviewed": "Revisado",
    "reviewed_today": "Revisadas hoy",
    "out_of_service": {
      "action": "Marcar como no operativo",
      "title": "¿Marcar el minibar como no operativo?",
      "description": "Elige el motivo y confirma. El minibar quedará como no operativo hasta que alguien lo reponga o lo revise.",
      "reason_label": "Motivo",
      "confirm": "Confirmar",
      "reasons": {
        "Broken": "Averiado",
        "NotCooling": "No enfría",
        "DamagedDoor": "Puerta o cierre dañado",
        "DamagedQr": "QR dañado",
        "Other": "Otro"
      },
      "errors": {
        "open_incident": "Esta habitación tiene una incidencia abierta. Recepción tiene que resolverla antes de poder marcar el minibar como no operativo: avísales y vuelve a intentarlo cuando esté resuelta.",
        "concurrent_change": "Alguien ha cambiado esta habitación a la vez que tú. Vuelve a intentarlo.",
        "invalid_reason": "El servidor no ha reconocido el motivo. Elige uno de la lista y vuelve a intentarlo.",
        "room_not_found": "No hemos encontrado esta habitación. Vuelve a escanear la pegatina del minibar.",
        "not_allowed": "Tu usuario no puede marcar este minibar como no operativo. Pide a tu responsable que lo haga."
      }
    },
    "nav": {
      "label": "Navegación del personal",
      "scan": "Escanear",
      "rooms": "Habitaciones",
      "trolley": "Carrito"
    },
    "worklist_check": "Revisar",
    "worklist_put_back": "Poner {{ count }}×",
    "help": {
      "title": "Ayuda",
      "back": "Volver",
      "intro": "Guía rápida para tu día a día, {{ role }}.",
      "intro_all_roles": "Guía rápida del personal: ves el contenido de reponedores, revisores y mantenimiento.",
      "intro_maintenance": "Guía rápida para instalar el hub, los repetidores y los sensores de tu hotel.",
      "unknownSection": "No encontramos esa sección. Elige una de la lista.",
      "accesos": {
        "title": "Accesos y entrada",
        "summary": "Cómo entrar y qué hacer si no puedes.",
        "p1": "Abre la app con el enlace del hotel y entra con tu usuario y contraseña.",
        "p2": "Si olvidas la contraseña, pide al administrador del hotel que te la restablezca.",
        "p3": "Si el enlace no funciona, comprueba que estás en la red del hotel y vuelve a intentarlo."
      },
      "glosario": {
        "title": "Glosario de términos",
        "summary": "Los conceptos del sistema, en claro.",
        "p1": "Consumo: cada producto que se registra como tomado del minibar, esté pagado o no.",
        "p2": "Abono: un consumo que el huésped ya ha pagado en la app.",
        "p3": "Abono pendiente: un consumo que todavía no se ha pagado en la app.",
        "p4": "Recobro: un importe que cobra recepción al huésped.",
        "p5": "Impagado: un consumo cuyo recobro no ha sido posible."
      },
      "incidencias": {
        "title": "Incidencias frecuentes",
        "summary": "Qué hacer cuando algo no cuadra.",
        "p1": "Cargos indebidos: repasa el recibo del huésped y avisa a recepción para anular el cobro.",
        "p2": "Errores de sincronización: la app guarda tu trabajo y lo envía cuando vuelve la conexión; no repitas la revisión.",
        "p3": "Discrepancias de inventario: cuenta lo que hay físicamente y deja que el sistema recalcule lo esperado.",
        "p4": "Datos desactualizados: cierra y vuelve a abrir la pantalla para recargar la información."
      },
      "flujos": {
        "title": "Flujos operativos",
        "summary": "Los pasos de tu jornada, uno a uno.",
        "p1": "Revisor: escanea la habitación, compara «Debería haber» con «¿Cuántas hay?» y confirma.",
        "p2": "Reponedor: escanea la habitación, repón lo que falte y confirma la reposición.",
        "p3": "Si el minibar no se puede usar, toca «Marcar como no operativo» en la habitación, elige el motivo (averiado, no enfría, puerta o cierre dañado, QR dañado u otro) y confirma. Si la habitación tiene una incidencia abierta, recepción tiene que resolverla primero."
      },
      "hub": {
        "title": "El hub",
        "summary": "Dónde ponerlo, cómo conectarlo y cómo vincularlo a tu hotel.",
        "p1": "Ponlo en el centro del hotel, en alto y lejos de metal: los armarios metálicos, las neveras, los cuadros eléctricos y los ascensores frenan la señal. Si el hub es el PC de recepción, sigue estos consejos para colocar la antena.",
        "p2": "Conecta la antena USB con su cable alargador, nunca directamente al hub ni al PC. En el Raspberry Pi, usa un puerto USB negro, no uno azul. No desconectes la antena una vez instalada: sin ella, los sensores no pueden enviar las aperturas.",
        "p3": "Raspberry Pi: si tienes un cable de red, conéctalo antes de enchufar el hub. Sin cable, a los 3 minutos la luz parpadea rápido: escanea con la cámara del móvil el QR de la etiqueta «Wifi de instalación», elige la wifi del hotel y pulsa «Conectar». La luz parpadea despacio hasta que el hub está conectado y vinculado, y se queda fija cuando todo está listo.",
        "p4": "Raspberry Pi: para vincularlo, entra en «Instalación», pulsa «Vincular un hub» y escanea el QR de la etiqueta del hub. Espera a que las tres comprobaciones estén en verde: «Conectado a internet», «Vinculado a tu hotel» y «Antena Zigbee lista». Si alguna no se pone en verde, la app te dice qué hacer.",
        "p5": "PC con Windows: en «Instalación», pulsa «Instalar en un PC con Windows» y después «Generar código». En el PC, abre minibar360.com/instalar, descarga el instalador y deja marcada la opción «Mantener el PC encendido». Al terminar, escribe el código en la página del hub y pulsa «Conectar el PC al hotel». El PC tiene que quedarse encendido día y noche."
      },
      "repetidores": {
        "title": "Repetidores",
        "summary": "Dónde ponerlos y cómo añadirlos, antes que los sensores.",
        "p1": "Los repetidores son enchufes que llevan la señal de los sensores hasta el hub. Ponlos antes que los sensores, empezando por el más cercano al hub y alejándote.",
        "p2": "Pon uno por planta, en un enchufe del pasillo, a mitad de camino entre el hub (o el repetidor anterior) y las habitaciones más lejanas. Nunca dentro de armarios metálicos ni detrás de neveras. Déjalos siempre enchufados: si se desenchufa uno, los sensores que dependían de él pierden la señal.",
        "p3": "En «Instalación», pulsa «Añadir repetidor» y después «Empezar». Cuando la app te lo pida, enchufa el repetidor. Si ya se ha usado antes, mantén pulsado su botón 5 segundos. Cuando veas «¡Repetidor añadido!», pulsa «Añadir otro repetidor» para el siguiente."
      },
      "sensores": {
        "title": "Sensores",
        "summary": "Dónde pegarlos y cómo vincularlos, habitación por habitación.",
        "p1": "Pega el sensor en el marco (la parte que no se mueve) y el imán en la puerta, con las marcas del lateral alineadas y como mucho 10 mm de separación con la puerta cerrada. Antes, limpia las dos superficies con un paño humedecido en alcohol y deja que se sequen.",
        "p2": "Nunca pongas el sensor dentro del minibar: el frío agota la pila y el metal frena la señal. Va siempre por fuera, en el marco.",
        "p3": "En «Instalación», pulsa «Vincular sensores». Elige la habitación en la lista por plantas, o pulsa «Escanear el QR del minibar» y escanea el código pegado en el minibar.",
        "p4": "Pulsa «Empezar». Cuando la app te lo pida, tira de la lengüeta de la pila del sensor. Si ya se ha usado antes, mantén pulsado su botón 5 segundos, hasta que la luz parpadee. Después pega el sensor y el imán, y abre y cierra el minibar dos veces.",
        "p5": "La app comprueba la señal. Cuando el sensor esté vinculado a la habitación, pulsa «Siguiente habitación». Si la app dice que la señal es débil, añade un repetidor más cerca de esa habitación y vuelve a vincular el sensor."
      },
      "problemas": {
        "title": "Problemas y soluciones",
        "summary": "Qué hacer cuando algo no sale.",
        "e1": {
          "title": "La luz del hub (Raspberry Pi) parpadea rápido",
          "text": "Su wifi de instalación está abierta. Conecta un cable de red, o escanea con el móvil el QR de la etiqueta «Wifi de instalación» y elige la wifi del hotel."
        },
        "e2": {
          "title": "El hub no se conecta a internet",
          "text": "Comprueba el cable de red o la wifi. Las redes que piden iniciar sesión en una página web no funcionan: usa la wifi interna del hotel o un cable. En un PC con Windows, si la red usa un proxy, configúralo en la página del hub (http://127.0.0.1:47360), en «Proxy de la red»."
        },
        "e3": {
          "title": "No se puede escanear el QR del hub",
          "text": "Pulsa «¿No se puede escanear? Escribe el código de la etiqueta» y escribe el código impreso en la etiqueta del hub."
        },
        "e4": {
          "title": "La app dice que falta la antena",
          "text": "Conecta la antena USB con su cable alargador. En un PC con Windows, si el Administrador de dispositivos muestra el error 28, instala el controlador de la antena (CH9102 o CP2102) y vuelve a conectarla."
        },
        "e5": {
          "title": "Un sensor no se vincula",
          "text": "Tira de la lengüeta de la pila. Si el sensor ya se ha usado antes, mantén pulsado su botón 5 segundos, hasta que la luz parpadee. Quédate cerca del hub o de un repetidor y empieza otra vez."
        },
        "e6": {
          "title": "La señal es débil",
          "text": "Añade un repetidor más cerca de esa habitación y vuelve a vincular el sensor."
        },
        "e7": {
          "title": "Recepción recibe un aviso de un sensor",
          "text": "«Sin señal» (lleva un día sin dar señal): comprueba que sigue pegado y cámbiale la pila. «Manipulado» (se ha despegado o se ha abierto): vuelve a pegarlo. «Batería baja»: cámbiale la pila."
        },
        "e8": {
          "title": "El código del PC no funciona",
          "text": "Cada código dura 24 horas y sirve para un solo PC. Genera otro en «Instalar en un PC con Windows»."
        }
      },
      "guides": {
        "title": "Guías de instalación (PDF)",
        "pi": "Guía para Raspberry Pi",
        "windows": "Guía para PC con Windows"
      }
    }
  },
  "installation": {
    "home": {
      "title": "Instalación",
      "intro": "Desde aquí instalarás el hub de tu hotel, los repetidores y un sensor en la puerta de cada minibar.",
      "empty": "Todavía no hay ningún hub conectado a tu hotel.",
      "loading": "Cargando los hubs…",
      "hubs_title": "Hubs del hotel",
      "claim_hub": "Vincular un hub",
      "state": {
        "ready": "Listo",
        "attention": "Necesita atención",
        "preparing": "Preparando"
      },
      "repeaters_title": "Repetidores",
      "repeaters_label": "Repetidores en la red Zigbee",
      "add_repeater": "Añadir repetidor",
      "sensors_title": "Sensores de puerta",
      "sensors_count": "{{linked}} de {{total}} habitaciones",
      "link_sensors": "Vincular sensores",
      "devices_hint": "Vincula un hub y espera a que esté listo para añadir repetidores y sensores.",
      "windows": "Instalar en un PC con Windows",
      "guide": "Guía de instalación"
    },
    "back_home": "Volver a Instalación",
    "windows": {
      "title": "Instalar en un PC con Windows",
      "intro": "El PC de recepción puede hacer de hub. Genera un código y escríbelo en ese PC cuando te lo pida: quedará conectado a tu hotel.",
      "generate": "Generar código",
      "generate_another": "Generar otro código",
      "generating": "Generando el código…",
      "code_label": "Código de instalación",
      "expires": "Válido hasta el {{when}}, para un solo PC.",
      "steps": {
        "open": "En el PC de recepción, abre minibar360.com/instalar.",
        "download": "Descarga el instalador y ábrelo.",
        "type": "Cuando el PC lo pida, escribe este código."
      },
      "waiting": "Esperando a que el PC use el código…",
      "connected": "El PC «{{label}}» ya está conectado al hotel.",
      "hub_status": "Ver estado",
      "lapsed": "Este código ya no sirve: ha caducado o se ha anulado. Genera otro para instalar el PC.",
      "active_title": "Otros códigos activos",
      "active_code": "Código …{{hint}}",
      "active_expires": "Caduca el {{when}}",
      "revoke": "Anular",
      "revoke_label": "Anular el código …{{hint}}",
      "revoke_confirm": {
        "title": "¿Anular el código …{{hint}}?",
        "message": "Ya no servirá para instalar ningún PC. Si lo necesitas, puedes generar otro.",
        "confirm": "Anular código",
        "cancel": "Cancelar"
      }
    },
    "rooms": {
      "title": "Sensores de puerta",
      "progress": "{{linked}} de {{total}} habitaciones con sensor",
      "scan": "Escanear el QR del minibar",
      "scanner_hint": "Encuadra el código QR del minibar",
      "close_scanner": "Cerrar el escáner",
      "finding": "Buscando la habitación…",
      "scan_hub": "Este código es de un hub, no de un minibar. Escanea el QR pegado en el minibar.",
      "scan_not_found": "Este minibar no es de ninguna habitación de tu hotel.",
      "scan_other": "Este código no es de un minibar. Busca el QR pegado en el minibar.",
      "loading": "Cargando las habitaciones…",
      "empty": "Tu hotel todavía no tiene habitaciones.",
      "no_floor": "Sin planta",
      "room": "Habitación",
      "with_sensor": "Con sensor",
      "without_sensor": "Sin sensor"
    },
    "sensor": {
      "title": "Habitación {{number}}",
      "title_loading": "Sensor de puerta",
      "subtitle": "Sensor de puerta",
      "back": "Volver a las habitaciones",
      "needs": {
        "sensor": "El sensor de puerta, con su imán y sus adhesivos.",
        "minibar": "Estar delante del minibar de la habitación {{number}}."
      },
      "replaces": "Esta habitación ya tiene un sensor. El nuevo lo sustituirá.",
      "hints": {
        "activate": "Tira de la lengüeta de la pila. Si el sensor ya se ha usado antes, mantén pulsado su botón 5 segundos, hasta que la luz parpadee.",
        "identifying": "Sensor detectado. Identificándolo…",
        "door_test": "Pega el sensor en el marco y el imán en la puerta, con las marcas alineadas. Después abre y cierra el minibar dos veces."
      },
      "openings": "Aperturas: {{count}} de {{total}}",
      "done": "¡Sensor vinculado a la habitación {{number}}!",
      "next_room": "Siguiente habitación"
    },
    "repeater": {
      "title": "Añadir repetidor",
      "needs": {
        "plug": "Un enchufe inteligente Zigbee, que hará de repetidor.",
        "socket": "Un enchufe libre en el pasillo, entre el hub y las habitaciones más lejanas."
      },
      "hints": {
        "plug": "Enchúfalo en un enchufe del pasillo, entre el hub y las habitaciones más lejanas. Si ya se ha usado antes, mantén pulsado su botón 5 segundos.",
        "identifying": "Repetidor detectado. Identificándolo…"
      },
      "done": "¡Repetidor añadido!",
      "another": "Añadir otro repetidor"
    },
    "claim": {
      "title": "Vincular un hub",
      "intro": "Escanea el código QR de la etiqueta pegada en el hub.",
      "scanner_hint": "Encuadra el código QR de la etiqueta del hub",
      "scan_room": "Este código es de un minibar, no de un hub. Busca la etiqueta pegada en el hub.",
      "scan_other": "Este código no es de un hub. Busca la etiqueta pegada en el hub.",
      "type_code": "¿No se puede escanear? Escribe el código de la etiqueta",
      "submit": "Vincular"
    },
    "link": {
      "claiming": "Vinculando el hub…",
      "retry": "Escanear o escribir el código otra vez",
      "needs_title": "Lo que necesitas",
      "needs_note": "El móvil te dirá qué hacer en cada momento.",
      "start": "Empezar",
      "preparing": "Preparando…",
      "reconnecting": "Sin conexión. Seguimos intentándolo…",
      "steps": {
        "joining": "Abriendo la red Zigbee",
        "activate": "Activa el sensor",
        "door_test": "Prueba la puerta",
        "signal": "Señal",
        "plug": "Enchufa el repetidor"
      },
      "step_state": {
        "done": "Hecho",
        "current": "En curso",
        "later": "Pendiente"
      },
      "hints": {
        "joining": "El hub se está preparando. Espera unos segundos…"
      },
      "signal": {
        "title": "Señal:",
        "good": "Buena ({{value}})",
        "weak": "Débil ({{value}})"
      },
      "failures": {
        "no_device_sensor": "No ha aparecido ningún sensor. Abre la red otra vez y activa el sensor cuando te lo pida.",
        "no_device_repeater": "No ha aparecido ningún repetidor. Abre la red otra vez y enchúfalo cuando te lo pida.",
        "joining_failed": "El hub no ha podido abrir la red Zigbee. Comprueba que el hub está listo y vuelve a intentarlo.",
        "unexpected_device_sensor": "Se ha conectado otro tipo de dispositivo ({{model}}). Vuelve a intentarlo con el sensor de puerta.",
        "unexpected_device_repeater": "Se ha conectado otro tipo de dispositivo ({{model}}). Vuelve a intentarlo con el repetidor.",
        "interview_failed": "No se ha podido identificar el dispositivo. Mantén pulsado su botón 5 segundos y vuelve a intentarlo.",
        "weak_signal": "La señal es débil ({{value}}). Añade un repetidor más cerca de esta habitación y vuelve a vincular el sensor.",
        "expired": "Ha pasado demasiado tiempo. Empieza otra vez.",
        "cancelled": "Esta vinculación se ha cancelado. Empieza otra vez.",
        "unknown": "No se ha podido vincular el dispositivo. Vuelve a intentarlo."
      },
      "actions": {
        "reopen": "Abrir la red otra vez",
        "retry": "Volver a intentarlo",
        "start_again": "Empezar otra vez",
        "add_repeater": "Añadir repetidor",
        "hub_status": "Ver el estado del hub",
        "home": "Volver al inicio"
      }
    },
    "status": {
      "title": "Hub",
      "loading": "Comprobando el hub…",
      "banner_new": "Hub vinculado a tu hotel.",
      "banner_already": "Este hub ya estaba vinculado a tu hotel.",
      "checks": {
        "internet": "Conectado a internet",
        "hotel": "Vinculado a tu hotel",
        "zigbee": "Antena Zigbee lista"
      },
      "internet": {
        "never": "Enchufa el hub y conéctalo a la red con el cable o el wifi. Puede tardar un par de minutos.",
        "offline": "El hub no se conecta desde {{since}}. Comprueba que está enchufado y que tiene red."
      },
      "zigbee": {
        "waiting": "Esperando a que el hub se conecte.",
        "no_adapter": "Conecta la antena USB al hub con el cable alargador.",
        "no_adapter_windows": "Conecta la antena USB al PC con el cable alargador. Si ya está conectada, mira la página del hub en el PC: puede que falte su controlador.",
        "offline": "La red Zigbee se ha detenido. Desenchufa el hub, espera 10 segundos y vuelve a enchufarlo.",
        "offline_windows": "La red Zigbee se ha detenido. Desconecta la antena USB del PC, espera 10 segundos y vuelve a conectarla.",
        "preparing": "Preparando la red Zigbee. Puede tardar un minuto."
      },
      "ready": "¡Todo listo! El hub está preparado para los sensores."
    },
    "errors": {
      "invalid_code": "Ese código no es válido. Revisa la etiqueta: son 12 letras y números.",
      "not_found": "No hay ningún hub con ese código. Revisa la etiqueta e inténtalo de nuevo.",
      "claimed_elsewhere": "Este hub pertenece a otro hotel. Contacta con el soporte de Minibar360.",
      "too_many_attempts": "Has hecho muchos intentos seguidos. Espera un minuto e inténtalo de nuevo.",
      "connection": "No hay conexión. Comprueba la red e inténtalo de nuevo.",
      "no_hotel": "Para instalar, entra con la cuenta de mantenimiento del hotel.",
      "hotel_not_found": "No encontramos tu hotel. Cierra sesión y vuelve a entrar.",
      "not_allowed": "Tu cuenta no puede instalar en este hotel.",
      "hub_not_found": "Este hub no está vinculado a tu hotel.",
      "link_session_in_progress": "Otra persona está vinculando un dispositivo en tu hotel. Espera a que termine y vuelve a intentarlo.",
      "no_hub_ready": "Ningún hub está listo. Revisa el estado del hub y vuelve a intentarlo.",
      "room_not_found": "No encontramos esta habitación en tu hotel.",
      "link_session_not_waiting": "Esta vinculación ya no espera ningún dispositivo.",
      "link_session_not_found": "No encontramos esta vinculación. Empieza otra vez.",
      "invalid_link_session": "No se puede vincular así. Vuelve al inicio y empieza otra vez.",
      "too_many_codes": "Tu hotel ya tiene demasiados códigos activos. Anula alguno que no vayas a usar y vuelve a intentarlo.",
      "code_not_active": "Este código ya no está activo: se ha usado, ha caducado o alguien lo ha anulado.",
      "code_not_found": "No encontramos este código en tu hotel. Puede que ya no exista."
    }
  },
  "ui": {
    "offline_banner": "Estás sin conexión — los cambios se sincronizarán en cuanto recuperes la red",
    "syncing_actions": "Sincronizando {{count}} acción(es)…",
    "all_saved": "Todos los cambios guardados",
    "cookie_consent": "Solo usamos cookies esenciales. Consulta la",
    "privacy_policy": "política de privacidad",
    "accept": "Aceptar",
    "sync_conflict": "Conflicto de sincronización",
    "conflict_desc": "Las siguientes habitaciones no se pudieron sincronizar automáticamente. Comprueba los datos cuando vuelvas a tener red:",
    "retry": "Reintentar",
    "discard": "Descartar",
    "sync_conflict_count": "Conflicto de sincronización ({{count}} elemento(s) sin resolver)"
  },
  "common": {
    "close": "Cerrar",
    "loading": "Cargando..."
  },
  "crud": {
    "unexpectedError": "Ha ocurrido un error inesperado. Inténtalo de nuevo."
  },
  "reception": {
    "errorLoadHotel": "No hemos podido cargar los datos de tu hotel. Recarga la página o vuelve a iniciar sesión.",
    "errorLoadHotels": "No hemos podido cargar la lista de hoteles. Recarga la página para intentarlo de nuevo.",
    "minibarStatus": {
      "Restocked": "OK · Repuesto",
      "Reviewed": "OK · Revisado",
      "DoorOpened": "Puerta abierta. Revisar si hay consumos",
      "ConsumptionToReview": "Con consumo · Reponer y revisar",
      "Inspecting": "En revisión",
      "StockShort": "Stock faltante",
      "ReviewedPendingRestock": "Revisado · Pendiente de reponer",
      "Incident": "Con incidencia",
      "OutOfService": "No operativo"
    },
    "chargesStatus": {
      "PendingConfirmation": "Abonos pendientes de confirmar",
      "PendingPayment": "Abonos pendientes",
      "Unpaid": "Impagado",
      "Recovered": "Recobrado · Sin pendientes",
      "AbsorbedByHotel": "Asumido por el hotel",
      "PaidToVerify": "Abonado · Por verificar",
      "ToVerify": "Por verificar",
      "PaidOk": "Consumos abonados OK",
      "NonePending": "Sin pendientes"
    }
  },
  "errors": {
    "sessionExpired": "Tu sesión ha caducado. Inicia sesión de nuevo.",
    "forbidden": "No tienes permiso para realizar esta acción.",
    "network": "Parece que no hay conexión. Comprueba tu red e inténtalo de nuevo.",
    "server": "Ha habido un problema técnico. Espera unos segundos y vuelve a intentarlo.",
    "validation": "Revisa los datos marcados e inténtalo de nuevo.",
    "notFound": "No hemos encontrado lo que buscas. Puede que ya no exista.",
    "conflict": "Estos datos han cambiado mientras tanto. Recarga la página y vuelve a intentarlo.",
    "tooManyRequests": "Demasiados intentos seguidos. Espera un momento y vuelve a intentarlo.",
    "requestFailed": "No hemos podido completar la acción. Inténtalo de nuevo.",
    "unexpected": "Algo ha fallado. Inténtalo de nuevo."
  }
}
