{
  "commandPalette": {
    "placeholder": "Search pages, hotels, rooms...",
    "buildingIndex": "Building search index...",
    "noResults": "No results found for \"{{query}}\"",
    "footer": {
      "navigate": "navigate",
      "select": "select",
      "close": "close"
    }
  },
  "app": {
    "selectHotel": "Select hotel",
    "logout": "Log out",
    "theme": {
      "label": "Change theme",
      "light": "Light",
      "dark": "Dark",
      "system": "System"
    }
  },
  "guestApp": {
    "handoff": {
      "signingIn": "Signing in…",
      "errorTitle": "Sign In Failed",
      "invalidTicket": "The sign-in link is invalid or has expired. Please sign in again from your hotel portal.",
      "staffNoticeTitle": "Staff Portal Access",
      "staffNoticeMessage": "Hotel staff must sign in via their hotel portal (e.g. hotel-slug.minibar360.com).",
      "staffSignIn": "Sign in"
    },
    "minibarCard": {
      "minibarNotFoundTitle": "Minibar not found",
      "minibarNotFoundMessage": "This room has no minibar configured.",
      "thankYouTitle": "Thank you!",
      "thankYouMessage": "Your order was recorded and charged.",
      "requestInvoicePart1": "Request an invoice by emailing ",
      "requestInvoicePart2": " with your billing details.",
      "continueShopping": "Continue shopping",
      "completePaymentTitle": "Complete payment",
      "payYourWay": "Pay {{ amount }} {{ currency }} your way.",
      "orPayAnotherWay": "or pay another way",
      "paymentMethodsTitle": "Choose how to pay",
      "stripeTitle": "Card",
      "stripeSubtitle": "Debit or credit, secure payment",
      "bizumTitle": "Bizum",
      "bizumSubtitle": "Instant mobile payment",
      "processing": "Processing…",
      "payAmount": "Pay {{ amount }}",
      "back": "Back",
      "discountApplied": "Discount applied",
      "tapEachItem": "Tap what you've taken.",
      "leaveSuggestion": "Leave a suggestion",
      "item": "item",
      "items": "items",
      "subtotal": "Subtotal",
      "appDiscount": "App discount",
      "total": "Total",
      "loadingMinibar": "Loading your minibar…",
      "paymentNotCompleted": "Payment could not be completed.",
      "couldNotStartCheckout": "Could not start checkout.",
      "paymentFailed": "Payment failed.",
      "paymentCollectedButNotConfirmed": "Payment was collected but the order could not be confirmed.",
      "retryConfirmation": "Retry confirmation",
      "paymentDeclined": "Your bank declined the payment. Try again or choose another method.",
      "couldNotLoadStripe": "Could not load Stripe.",
      "privacyNotice": "How we handle your data",
      "orderSummary": "Order Summary",
      "chargeConfirmed": "Charge confirmed automatically",
      "sslTrust": "Bank-grade SSL encryption · Stripe",
      "securePaymentSubtitle": "Pay instantly, skip the front desk",
      "roomBadge": "Room {{ room }}",
      "discountTag": "-{{ discount }}% off",
      "savingsNotice": "You save {{ percent }}% in the app",
      "retry": "Try again",
      "vatIncluded": "VAT included",
      "couldNotLoadTitle": "We could not load your minibar",
      "couldNotLoadMessage": "Check your connection and try again.",
      "paymentOutcomeUnknown": "We could not check whether the payment went through. Please do not pay again: tap “Retry confirmation” to check.",
      "paymentProcessing": "Your bank is still processing the payment. We will confirm your order as soon as it completes; please do not pay again.",
      "paymentNotTaken": "The payment was not completed and nothing has been charged. You can try again.",
      "paymentReceivedTitle": "We have received your payment",
      "paymentReceivedConfirming": "Recording your order…",
      "paymentReturnUnresolvedTitle": "We are checking your payment",
      "paymentReturnUnresolvedMessage": "If your bank completed the charge, your order will be recorded automatically. Please do not pay again; if in doubt, ask at reception.",
      "connectionProblem": "The connection is taking too long. Check your connection and try again.",
      "belowPaymentMinimum": "In-app payments need a minimum of {{ amount }}. Add another item to continue.",
      "discountNoLongerAvailable": "The survey discount is no longer available for this order. The standard discount now applies: check the total and try again.",
      "productsUnavailable": "Some items in your order are no longer available or exceed what the minibar holds. Review your order and try again.",
      "paymentInProgress": "A payment for this room is already in progress. Wait a few seconds and try again.",
      "methodCard": "card",
      "paymentMethodsAvailable": "You can pay with {{ methods }}.",
      "orJoin": "or"
    },
    "categories": {
      "Drinks": "Drinks",
      "Alcohol": "Alcohol",
      "Snacks": "Snacks",
      "Sweets": "Sweets",
      "HealthySnacks": "Healthy snacks",
      "Miscellaneous": "Other",
      "HotBeverages": "Hot beverages",
      "ConvenienceFoods": "Convenience foods",
      "PersonalCare": "Personal care",
      "Pharmacy": "Pharmacy",
      "BabyProducts": "Baby products",
      "LuxuryItems": "Luxury items",
      "LocalProducts": "Local products",
      "ElectronicsAccessories": "Electronics & accessories",
      "Recommended": "Recommended",
      "Packs": "Packs"
    },
    "poll": {
      "title": "What would your ideal minibar hold?",
      "subtitle": "Pick as many as you like. Your answers unlock the {{ percent }}% discount.",
      "suggestionLabel": "Anything missing?",
      "suggestionPlaceholder": "Tell us what you would add…",
      "suggestionTooLong": "Please keep it under {{ max }} characters.",
      "submit": "Send feedback and unlock {{ percent }}%",
      "skip": "Go back without answering",
      "submitting": "Sending…",
      "loadFailed": "We could not load the products. Please try again.",
      "submitFailed": "We could not save your feedback. Please try again.",
      "referencePriceLabel": "Survey reference price",
      "aboutYou": {
        "title": "About you",
        "note": "These questions are optional, and we only use your answers for anonymous statistics.",
        "nationalityLabel": "Nationality",
        "nationalityPlaceholder": "Choose your nationality",
        "guestTypeLabel": "Who are you travelling with?",
        "guestTypes": {
          "Single": "On my own",
          "Couple": "As a couple",
          "Family": "With family"
        },
        "skip": "I'd rather not say",
        "skipped": "You chose not to answer these questions.",
        "answer": "Answer them",
        "invalidNationality": "We could not save that nationality. Choose another one or tap “I'd rather not say”.",
        "invalidGuestType": "We could not save who you are travelling with. Choose another option or tap “I'd rather not say”."
      },
      "subtitleNoDiscount": "Pick as many as you like.",
      "submitNoDiscount": "Send feedback"
    },
    "shop": {
      "upgradeCta": "Get {{ percent }}%",
      "cartLocked": "You have a payment waiting to be confirmed. You can't change your order until we've checked it.",
      "packBadge": "Pack",
      "soldOut": "Sold out",
      "categoriesLabel": "Categories",
      "unavailableTitle": "Something sold out",
      "unavailableNotice": "We adjusted your order to what is left in the minibar: {{ names }}.",
      "unavailableDismiss": "Got it",
      "emptyTitle": "This minibar has nothing for sale right now",
      "emptyMessage": "If you need anything, ask at reception."
    },
    "privacy": {
      "title": "Privacy notice",
      "aboutTitle": "About this notice",
      "aboutBody": "This notice explains how your personal data is collected and used when you use the minibar self-service platform at this hotel. The hotel is the data controller for your personal data. Self Minibar SL operates the platform on behalf of the hotel as a data processor.",
      "collectTitle": "What data we collect",
      "collectRoom": "Room number — when you scan the QR code in your room",
      "collectProducts": "Products you purchase — when you select items and complete payment",
      "collectPayment": "Payment amount — when you complete payment via Stripe",
      "collectPreferences": "Dietary preferences — set by hotel reception for your comfort",
      "collectFeedback": "Poll answers and suggestions — only if you choose to fill in the minibar survey",
      "collectNot": "We do not collect your name, home address, email address, credit card details (these go directly to Stripe), health information, location data or browsing history.",
      "useTitle": "How we use your data",
      "useShow": "Showing you the minibar products for your room",
      "usePayment": "Processing your payment (via Stripe)",
      "useExclusions": "Excluding products you cannot consume (for your safety)",
      "useStatistics": "Generating anonymous statistics for the hotel",
      "shareTitle": "Who we share your data with",
      "shareStripe": "Stripe — payment processing (certified under the EU-US Data Privacy Framework)",
      "shareHosting": "Our hosting provider — secure data storage in the European Union",
      "shareHotel": "The hotel — consumption data for billing and operations",
      "shareNoSale": "We do not sell your personal data to anyone.",
      "retentionTitle": "How long we keep your data",
      "retentionOrders": "Order history — anonymized after 90 days; statistics kept indefinitely",
      "retentionPreferences": "Dietary preferences — until the hotel clears them (usually at checkout)",
      "rightsTitle": "Your rights",
      "rightsBody": "You have the right to access, rectify, erase, restrict the processing of and export your data, and to object to processing. Contact the hotel reception to exercise these rights.",
      "rightsComplaint": "You may also lodge a complaint with your local data protection authority (in Spain:",
      "rightsAuthority": "Agencia Española de Protección de Datos",
      "cookiesTitle": "Cookies and storage",
      "cookiesBody": "This application uses essential local storage for authentication, your discount choice and remembering your consent. No tracking, advertising or analytics cookies are used.",
      "contactTitle": "Contact",
      "contactController": "Data controller: your hotel — contact reception or the privacy officer.",
      "contactProcessor": "Data processor: Self Minibar SL —",
      "lastUpdated": "Last updated: September 2026"
    },
    "kpiDashboard": {
      "title": "My performance"
    },
    "pay": {
      "editHint": "You can adjust your order before paying",
      "increaseQuantity": "Add one unit of {{ name }}",
      "decreaseQuantity": "Remove one unit of {{ name }}",
      "removeItem": "Remove",
      "reassurance": "End-to-end encrypted payment with instant confirmation. If anything fails, you can retry right here.",
      "unavailableTitle": "There is nothing to pay for yet",
      "unavailableMessage": "We could not recover your order. Pick your items again and you will be back here in a moment. Nothing has been charged.",
      "backToShop": "Back to the minibar",
      "conditionsTitle": "Before you pay",
      "conditionCharge": "You are charged when you confirm the payment, for the total above.",
      "conditionSurcharge": "Anything you take and don't pay for here, the hotel will charge later with an extra {{ percent }}%.",
      "statePendingTitle": "Checking your payment",
      "stateFailedTitle": "The payment did not go through",
      "suggestionsTitle": "You might also like"
    },
    "funnel": {
      "back": "Back",
      "roomLabel": "Room ",
      "welcomeTitle": "Enjoy your minibar"
    },
    "benefit": {
      "earn": "Save by telling us your ideal minibar"
    },
    "header": {
      "language": "Language"
    },
    "help": {
      "open": "Help",
      "title": "Help",
      "howTitle": "How it works",
      "step1": "Take whatever you fancy from the minibar.",
      "step2": "Mark it here and pay from your phone.",
      "step3": "You'll see the payment confirmation right away.",
      "invoiceTitle": "Need an invoice?"
    },
    "packs": {
      "featuredTitle": "Featured packs",
      "seeAll": "See all ({{ count }})",
      "saving": "Save {{ amount }}",
      "contents": "Pack contents"
    },
    "detail": {
      "add": "Add · {{ amount }}",
      "update": "Update · {{ amount }}",
      "remove": "Remove from order",
      "contains": "Includes",
      "quantity": "Quantity"
    },
    "cartBar": {
      "review": "View and pay",
      "label": "View and pay: {{ count }} {{ noun }}, {{ amount }}"
    },
    "receipt": {
      "title": "Receipt",
      "reference": "Reference",
      "date": "Date",
      "room": "Room"
    }
  },
  "restock": {
    "ai_verification": "Photo Verification",
    "analyzing_photo": "Analyzing minibar photo...",
    "confidence": "confidence",
    "detected_items": "Detected Items",
    "detected_units": "Detected Units",
    "detection_result": "Detection Result",
    "reason_placeholder": "Explain why photo is skipped...",
    "retake_photo": "Retake Photo",
    "skip_photo": "Skip Photo",
    "skip_photo_reason": "Why are you skipping the photo?",
    "upload_minibar_photo": "Upload Minibar Photo",
    "missing_items": "Missing items",
    "completing": "Completing…",
    "room": "Room",
    "inventory_check": "Inventory check",
    "view_reference_photo": "Tap to view reference photo",
    "close_reference": "Close",
    "guest_exclusion": "Remove — guest exclusion",
    "units": "units",
    "unit": "Unit {{number}} of {{total}}",
    "reasons": {
      "consumed": "Consumed",
      "expired": "Expired",
      "broken": "Broken",
      "other": "Other"
    },
    "saved_offline_sync": "Saved offline — will sync when connected",
    "summary_restocked": "Restocked",
    "summary_missing": "Missing",
    "summary_present": "Present",
    "next_room": "Next room",
    "incidents": {
      "damaged_product": "Damaged Product",
      "tampered_minibar": "Tampered Minibar",
      "room_access_problem": "Room Access Problem",
      "missing_products": "Missing Products",
      "temperature_issue": "Temperature Issue"
    },
    "reported": "Reported",
    "report_incident": "Report an incident",
    "incident_type": "Incident Type",
    "no_incident": "No incident",
    "description_optional": "Description (optional)",
    "incident_placeholder": "Describe what happened...",
    "my_performance": "My Performance",
    "performance_stats": "Your restocking stats",
    "failed_load_performance": "Failed to load performance data.",
    "retry": "Retry",
    "today": "Today",
    "rooms_reviewed": "Rooms Reviewed",
    "rooms_restocked": "Rooms Restocked",
    "avg_time_room": "Avg. Time / Room",
    "this_week": "This Week",
    "accuracy_rate": "Accuracy Rate",
    "rooms_summary_header": "{{rooms}} rooms across {{floors}} floors",
    "floor": "Floor",
    "rooms": "rooms",
    "estimated_products": "Estimated Products",
    "no_estimates": "No product estimates available.",
    "notes_reception": "Notes from Reception",
    "guest_alerts": "Guest Alerts",
    "no_rooms_filter": "No rooms match this filter.",
    "check_again": "Check again",
    "inspect_minibar": "Inspect Minibar",
    "complete_inspection": "Complete inspection",
    "inspection_complete_msg": "Inspection complete. You can inspect another room.",
    "read_only_restock": "Read-only restock list",
    "ready_room_warning_title": "No need for supervision",
    "ready_room_restock_warning_title": "No need to restock",
    "ready_room_warning_desc": "The minibar hasn't been opened since the last restock on {{time}}.",
    "ready_room_warning_desc_no_time": "The minibar hasn't been opened since the last restock.",
    "skip_room": "Skip Room",
    "proceed_anyway": "Proceed anyway",
    "loading_room_inventory": "Loading room inventory…",
    "cannot_open_room": "Cannot open room",
    "restock_complete": "Restock complete",
    "restock_complete_msg": "Restock complete. The minibar is ready.",
    "restock_reference_desc": "Restock the minibar according to the reference.",
    "tap_view_reference": "Tap to view reference",
    "expected_missing": "expected {{expected}} · missing {{missing}}",
    "missing_count": "Missing {{count}}",
    "ai_suggested_more": "The AI photo sees {{count}} more than marked — check the shelf",
    "add_missing_item": "Something else is missing",
    "cancel": "Cancel",
    "add_item_confirm": "Add to list",
    "self_flagged_title": "Flagged by you",
    "self_flagged_badge": "flagged by you",
    "remove": "Remove",
    "remove_self_flagged": "Remove flagged item",
    "room_not_found_minibar": "Room not found or has no configured minibar.",
    "cannot_complete_restock": "Could not complete the restock.",
    "cannot_inspect_room": "Cannot inspect room",
    "confirm_missing_desc": "Confirm missing items and assign a reason.",
    "saving": "Saving…",
    "cannot_complete_inspection": "Could not complete the inspection.",
    "take_minibar_photo_desc": "Take a photo of the minibar for AI analysis",
    "tap_to_capture": "Tap to capture photo",
    "take_photo": "Take Photo",
    "analyze_with_ai": "Analyze with AI",
    "analyzing": "Analyzing...",
    "ai_inspecting_desc": "Inspecting the minibar",
    "elapsed": "Elapsed: {{seconds}}s",
    "auto_approved": "Auto-Approved",
    "review_needed": "Review Needed",
    "escalated": "Escalated",
    "confidence_score": "Confidence: {{score}}%",
    "found_qty": "Found {{detected}}/{{expected}}",
    "found": "Found",
    "confirm_all_results": "Confirm All Results",
    "correct_some": "Correct Some",
    "confirm_results": "Confirm Results",
    "tap_product_toggle": "Tap a product to toggle AI's finding",
    "corrected": "Corrected",
    "done": "Done",
    "inspection_complete": "Inspection complete",
    "continue_manual": "Continue with Manual Inspection",
    "missing": "Missing",
    "submit": "Submit",
    "select_from_gallery": "Choose a picture from the gallery",
    "minibar_photo_preview_alt": "Minibar photo preview",
    "scanner_starting": "Starting the camera…",
    "scanner_active_hint": "Frame the minibar QR code",
    "scanner_video_label": "Camera view to scan the minibar QR code",
    "scanner_denied_title": "No camera access",
    "scanner_denied_desc": "Your browser has blocked the camera. Allow camera access from the padlock icon in the address bar, then try again.",
    "scanner_unavailable_title": "We couldn't open the camera",
    "scanner_unavailable_desc": "It may be in use by another app or unavailable on this device. Close other apps and try again.",
    "scan_next_room": "Scan another room",
    "ai_analysis_failed": "We couldn't analyze the photo. You can continue with the manual review.",
    "layout_upload_failed": "We couldn't upload the verification photo. Retake it and try again.",
    "back_to_rounds": "Back to rooms",
    "room_locked_title": "This room is not available right now",
    "connection_problem": "We could not reach the server. Check your connection and try again.",
    "already_completed": "This room had already been completed. Nothing was lost.",
    "queued_offline": "You are offline. The check is saved and will be sent automatically when the connection returns.",
    "queued_offline_storage_at_risk": "You are offline. Your work is saved on this phone, but the browser may clear it if it runs out of space: open the app with a connection as soon as you can so it is sent.",
    "nothing_flagged_hint": "Nothing has been flagged for this room. If you find missing items, add them below.",
    "reference_photo_alt": "Reference photo of the full minibar",
    "missing_reason": "Reason",
    "reason_consumed": "Consumed",
    "reason_expired": "Expired",
    "reason_broken": "Broken",
    "reason_other": "Other",
    "scan_room_qr": "Scan a room QR",
    "filter_all": "All",
    "filter_pending": "To do",
    "filter_done": "Done",
    "status_pending": "To check",
    "status_in_progress": "In progress",
    "status_done": "Done",
    "status_incident": "Incident",
    "account_not_linked": "Your account is not linked to a hotel. Ask Reception to fix your user.",
    "loading_pending_reviews": "Loading rooms…",
    "pending_reviews_empty": "All caught up! No rooms pending review.",
    "pending_reviews_failed": "We could not load the rooms to review.",
    "tab_by_room": "By room",
    "tab_trolley": "Restock trolley",
    "trolley_total_units": "{{ total }} total units",
    "trolley_empty": "No items to restock in the trolley.",
    "trolley_summary": "Total items required to restock pending rooms.",
    "review_reason_Inspected": "Already checked",
    "review_reason_Consumption": "Something was taken",
    "review_reason_DoorOpened": "Minibar opened",
    "review_reason_NeedsRestock": "Needs restocking",
    "review_reason_InspectionInProgress": "Check left half-done",
    "rooms_pending_review": "Rooms still waiting",
    "pending_review_products_unknown": "Products to confirm in the room",
    "add_incident_photo": "Add a photo",
    "uploading_photo": "Uploading photo…",
    "incident_photo_failed": "The photo could not be uploaded. Try again.",
    "incident_photo_alt": "Incident photo",
    "back_to_scanner": "Back to the scanner",
    "incident_photo_too_large": "That photo is too large. The maximum size is 10 MB.",
    "incident_photo_unsupported_type": "That file type is not supported. Use a JPEG, PNG or WebP photo.",
    "offline_save_failed": "We could not save this check on your device. Check your connection and try again.",
    "remove_incident_photo": "Remove photo",
    "step_photo_title": "Photograph the minibar",
    "take_photo_hint": "The AI reads the shelf from your photo and pre-fills what looks missing.",
    "photo_analysed": "Photo analysed",
    "photo_prefilled_hint": "Pre-filled from the photo. You decide what is actually there — change anything below.",
    "photo_skipped_with_reason": "Photo skipped: {{ reason }}",
    "step_extra_title": "What is missing from the minibar?",
    "step_extra_hint": "Check the shelf: how many of each product are there?",
    "restock_all_required_hint": "Please confirm replenishment of all pending items before completing.",
    "ai_thinks_missing": "The AI thinks these are missing",
    "ai_nothing_missing": "The AI sees nothing missing. Check it yourself below.",
    "reference_photo_caption": "How this minibar should look when full",
    "evidence_required": "Photo required",
    "evidence_add": "Add a photo",
    "evidence_attached": "Photo attached",
    "evidence_retake": "Replace",
    "evidence_uploading": "Uploading photo…",
    "evidence_photo_alt": "Photo of the written-off product",
    "evidence_upload_failed": "The photo could not be uploaded. Try again.",
    "self_flag_evidence_required_hint": "Add a photo to every item marked Broken or Other before completing.",
    "flag_adjust_start": "Is any still in the minibar?",
    "flag_adjust_label": "Tap the ones still in the minibar.",
    "flag_adjust_undo": "Keep the flagged count",
    "flag_reduction_reason": "Why fewer?",
    "flag_reduction_reasons": {
      "StillThere": "Still in the minibar",
      "NotRefilledLastTime": "Already missing after the last restock",
      "Other": "Other reason"
    },
    "flag_reduction_reason_required_hint": "Say why you lowered a flagged count before completing.",
    "over_capacity_hint": "More units are marked missing than the minibar holds ({{products}}). Lower the count before completing.",
    "incident_photo_limit": "Up to {{max}} photos per incident.",
    "server_error_not_queued": "The server could not record this check and it has not been saved for later. Try again in a moment: what you marked is kept.",
    "completion_rejected": "The server did not accept this check.",
    "inspection_queued_offline": "You are offline. The inspection is saved and will be sent automatically when the connection returns.",
    "conflict_room_check": "Room check, room {{room}}",
    "conflict_inspection": "Inspection, room {{room}}",
    "conflict_ai_confirmation": "AI photo confirmation, room {{room}}",
    "conflict_discard_confirm": "Discard this check? It will be deleted from this phone and will never reach the server. If you are not sure why it was refused, tell your manager first.",
    "conflict_reason_unknown": "The server did not accept this check and gave no reason.",
    "worklist_room_queued": "Check saved on this phone, waiting to be sent. Don't redo it: it will be sent on its own.",
    "worklist_room_conflict": "The server did not accept the saved check. See the notice above before redoing it.",
    "reopen_queued_warning": "This room has a check saved on this phone that hasn't been sent yet. It will be sent on its own when there is a connection; if you redo it now, the saved one will be refused. Open it anyway?",
    "reopen_conflict_warning": "The server did not accept this room's check saved on this phone. See the notice on the list before redoing it. Open it anyway?",
    "server_errors": {
      "over_capacity": "More units are marked missing than the minibar holds. Check the counts.",
      "not_restocked_invalid": "More units are marked out of stock than there were to put back. Check what you marked as out of stock.",
      "evidence_required": "A product marked Broken or Other has no photo. Add it before completing.",
      "photo_not_uploaded": "One of the photos was not uploaded through the app. Take it again before completing.",
      "incident_too_many_photos": "An incident takes at most 3 photos. Remove one.",
      "incident_invalid": "The incident is incomplete. Check its type and description.",
      "already_completed": "This room has already been completed. Go back to your rounds and check the list.",
      "concurrent_update": "Someone changed this room while you were working on it. Try again: what you marked is kept.",
      "supervision_not_found": "This check no longer exists on the server. Scan the room again.",
      "inspection_after_restock": "The room has already been restocked, so it can't be inspected now.",
      "not_authorized": "Someone else has this room. Ask your manager to check it.",
      "product_not_on_card": "One of the products is no longer in this room's minibar. Open the room again.",
      "photo_invalid": "The file is not a valid photo. Use a JPEG, PNG or WebP photo.",
      "photo_required": "The photo is missing. Take it and try again.",
      "ai_timeout": "The AI took too long to analyse the photo. Retake it or check the minibar by hand.",
      "ai_result_stale": "The AI photo no longer matches this room. Take a new one.",
      "upload_timed_out": "The photo is taking too long to upload. Check your signal and try again."
    },
    "logout_unsynced_warning": "Work from this session has not reached the server yet ({{count}} pending). It stays on this device and is sent the next time you sign in here. Sign out anyway?",
    "landing_title": "Rooms today",
    "scan_not_a_room": "This code is not a minibar code. Scan the sticker on the minibar.",
    "slot_missing": "{{ product }}, unit {{ number }}: missing",
    "slot_present": "{{ product }}, unit {{ number }}: there",
    "expected_units_label": "Should be",
    "observed_units_label": "How many are there?",
    "observed_increase": "Add one unit of {{ product }}",
    "observed_decrease": "Remove one unit of {{ product }}",
    "expected_units_unknown": "Not set",
    "missing_units_label": "How many are missing?",
    "missing_increase": "One more {{ product }} missing",
    "missing_decrease": "One fewer {{ product }} missing",
    "role_restocker": "restocker",
    "role_inspector": "inspector",
    "role_maintenance": "maintenance",
    "slots_all_missing": "All missing",
    "slots_missing_count": "{{ count }} missing",
    "slots_one_missing": "One missing",
    "slots_one_present": "One is there",
    "not_consumed": "Not consumed",
    "skip_reasons": {
      "no_light": "No light",
      "camera_broken": "The camera is not working",
      "other": "Other reason"
    },
    "ai_confirm": "Confirm",
    "ai_confirm_hint": "The AI marked what seems to be missing. Check it on the shelf and confirm.",
    "inspection_missing_summary": "{{ missing }} missing in total",
    "to_put_back": "To put back",
    "put_back_count": "Put back {{ count }}",
    "nothing_to_put_back": "Nothing to put back",
    "selected_badge": "Selected",
    "rest_is_full": "The rest of the minibar is full.",
    "finish_with_photo": "Photo of the full minibar",
    "complete_without_photo": "Complete without a photo",
    "add_missing_item_pick": "Tap the product that is missing.",
    "add_missing_item_hint": "Tap each unit that is not on the shelf.",
    "add_missing_item_all_marked": "Already marked",
    "shortage_mark": "Out of stock",
    "shortage_units": "Out of stock: {{ count }}",
    "shortage_slots_hint": "Tap the units you did put back.",
    "shortage_carried": "{{ count }} left short at the last restock",
    "restock_incomplete": "Incomplete restock",
    "minibar_status_after": "Minibar status: {{status}}",
    "incomplete_summary_hint": "Not put back for lack of stock:",
    "restock_incomplete_msg": "You have put back what you had. The room stays pending restock until the missing products are in stock.",
    "review_status_pending": "Awaiting review",
    "review_status_reviewed": "Reviewed",
    "reviewed_today": "Reviewed today",
    "out_of_service": {
      "action": "Mark as out of service",
      "title": "Mark the minibar as out of service?",
      "description": "Pick the reason and confirm. The minibar stays out of service until someone restocks or reviews it.",
      "reason_label": "Reason",
      "confirm": "Confirm",
      "reasons": {
        "Broken": "Broken",
        "NotCooling": "Not cooling",
        "DamagedDoor": "Damaged door or lock",
        "DamagedQr": "Damaged QR",
        "Other": "Other"
      },
      "errors": {
        "open_incident": "This room has an open incident. Reception has to resolve it before the minibar can be marked out of service: let them know and try again once it's resolved.",
        "concurrent_change": "Someone changed this room at the same time as you. Try again.",
        "invalid_reason": "The server didn't recognise the reason. Pick one from the list and try again.",
        "room_not_found": "We couldn't find this room. Scan the minibar sticker again.",
        "not_allowed": "Your user can't mark this minibar as out of service. Ask your manager to do it."
      }
    },
    "nav": {
      "label": "Staff navigation",
      "scan": "Scan",
      "rooms": "Rooms",
      "trolley": "Trolley"
    },
    "worklist_check": "Check",
    "worklist_put_back": "Put back {{ count }}×",
    "help": {
      "title": "Help",
      "back": "Back",
      "intro": "A quick guide for your day to day, {{ role }}.",
      "intro_all_roles": "A quick staff guide: you see the content for restockers, inspectors and maintenance.",
      "intro_maintenance": "A quick guide to installing your hotel's hub, repeaters and sensors.",
      "unknownSection": "We couldn't find that section. Pick one from the list.",
      "accesos": {
        "title": "Access and sign-in",
        "summary": "How to get in and what to do if you can't.",
        "p1": "Open the app with the hotel link and sign in with your username and password.",
        "p2": "If you forget your password, ask the hotel administrator to reset it.",
        "p3": "If the link doesn't work, check that you're on the hotel network and try again."
      },
      "glosario": {
        "title": "Glossary of terms",
        "summary": "The system's concepts, in plain language.",
        "p1": "Consumption: every product recorded as taken from the minibar, whether paid or not.",
        "p2": "Payment: a consumption the guest has already paid for in the app.",
        "p3": "Pending payment: a consumption not yet paid for in the app.",
        "p4": "Recovery charge: an amount reception charges to the guest.",
        "p5": "Unpaid: a consumption whose recovery charge was not possible."
      },
      "incidencias": {
        "title": "Common incidents",
        "summary": "What to do when something doesn't add up.",
        "p1": "Wrong charges: check the guest's receipt and tell reception to cancel the charge.",
        "p2": "Sync errors: the app saves your work and sends it when the connection returns; don't repeat the check.",
        "p3": "Inventory discrepancies: count what is physically there and let the system recalculate the expected amount.",
        "p4": "Outdated data: close and reopen the screen to reload the information."
      },
      "flujos": {
        "title": "Operational flows",
        "summary": "The steps of your shift, one by one.",
        "p1": "Inspector: scan the room, compare “Should be” with “How many are there?” and confirm.",
        "p2": "Restocker: scan the room, restock what is missing and confirm the restock.",
        "p3": "If the minibar can't be used, tap “Mark as out of service” in the room, pick the reason (broken, not cooling, damaged door or lock, damaged QR or other) and confirm. If the room has an open incident, reception has to resolve it first."
      },
      "hub": {
        "title": "The hub",
        "summary": "Where to put it, how to connect it and how to link it to your hotel.",
        "p1": "Put it in the middle of the hotel, high up and away from metal: metal cabinets, fridges, electrical panels and lifts block the signal. If the hub is the reception PC, follow this advice to place the antenna.",
        "p2": "Connect the USB antenna with its extension cable, never directly to the hub or the PC. On the Raspberry Pi, use a black USB port, not a blue one. Do not unplug the antenna once installed: without it, the sensors cannot report openings.",
        "p3": "Raspberry Pi: if you have a network cable, connect it before plugging in the hub. Without a cable, after 3 minutes the light blinks fast: with your phone's camera, scan the QR on the “Setup Wi-Fi” label, choose the hotel's Wi-Fi and tap “Conectar” (Connect). The light blinks slowly until the hub is connected and linked, and stays steady when all is ready.",
        "p4": "Raspberry Pi: to link it, open “Installation”, tap “Link a hub” and scan the QR on the hub's label. Wait until the three checks are green: “Connected to the internet”, “Linked to your hotel” and “Zigbee antenna ready”. If one does not turn green, the app tells you what to do.",
        "p5": "Windows PC: in “Installation”, tap “Install on a Windows PC” and then “Generate code”. On the PC, open minibar360.com/instalar, download the installer and keep the “Keep the PC awake” option ticked. When it finishes, type the code on the hub's page and click “Conectar el PC al hotel” (Connect the PC to the hotel). The PC must stay on day and night."
      },
      "repetidores": {
        "title": "Repeaters",
        "summary": "Where to put them and how to add them, before the sensors.",
        "p1": "Repeaters are plugs that carry the sensors' signal to the hub. Place them before the sensors, starting with the one closest to the hub and moving outwards.",
        "p2": "Put one per floor, in a corridor socket, halfway between the hub (or the previous repeater) and the furthest rooms. Never inside metal cabinets or behind fridges. Keep them plugged in: if one is unplugged, the sensors that relied on it lose their signal.",
        "p3": "In “Installation”, tap “Add a repeater” and then “Start”. When the app asks you, plug in the repeater. If it has been used before, hold its button for 5 seconds. When you see “Repeater added!”, tap “Add another repeater” for the next one."
      },
      "sensores": {
        "title": "Sensors",
        "summary": "Where to stick them and how to link them, room by room.",
        "p1": "Stick the sensor on the frame (the part that does not move) and the magnet on the door, with the marks on their sides aligned and at most 10 mm apart with the door closed. First, clean both surfaces with a cloth dampened with alcohol and let them dry.",
        "p2": "Never put the sensor inside the minibar: the cold drains the battery and the metal blocks the signal. It always goes outside, on the frame.",
        "p3": "In “Installation”, tap “Link sensors”. Choose the room in the list by floor, or tap “Scan the minibar's QR” and scan the code on the minibar.",
        "p4": "Tap “Start”. When the app asks you, pull the sensor's battery tab. If it has been used before, hold its button for 5 seconds until the light blinks. Then stick the sensor and the magnet, and open and close the minibar twice.",
        "p5": "The app checks the signal. Once the sensor is linked to the room, tap “Next room”. If the app says the signal is weak, add a repeater closer to that room and link the sensor again."
      },
      "problemas": {
        "title": "Problems and solutions",
        "summary": "What to do when something goes wrong.",
        "e1": {
          "title": "The hub's light (Raspberry Pi) blinks fast",
          "text": "Its setup Wi-Fi is open. Connect a network cable, or scan the QR on the “Setup Wi-Fi” label with your phone and choose the hotel's Wi-Fi."
        },
        "e2": {
          "title": "The hub does not connect to the internet",
          "text": "Check the network cable or the Wi-Fi. Networks that ask you to sign in on a web page do not work: use the hotel's internal Wi-Fi or a cable. On a Windows PC, if the network uses a proxy, set it on the hub's page (http://127.0.0.1:47360), under “Proxy de la red” (Network proxy)."
        },
        "e3": {
          "title": "The hub's QR cannot be scanned",
          "text": "Tap “Can't scan it? Type the code on the label” and type the code printed on the hub's label."
        },
        "e4": {
          "title": "The app says the antenna is missing",
          "text": "Plug the USB antenna in with its extension cable. On a Windows PC, if Device Manager shows error 28, install the antenna's driver (CH9102 or CP2102) and plug it in again."
        },
        "e5": {
          "title": "A sensor does not link",
          "text": "Pull its battery tab. If the sensor has been used before, hold its button for 5 seconds until the light blinks. Stay near the hub or a repeater and start again."
        },
        "e6": {
          "title": "The signal is weak",
          "text": "Add a repeater closer to that room and link the sensor again."
        },
        "e7": {
          "title": "Reception gets a sensor alert",
          "text": "“No signal” (silent for a day): check that it is still stuck on and replace its battery. “Tampered” (it came off or was opened): stick it back. “Low battery”: replace its battery."
        },
        "e8": {
          "title": "The PC's code does not work",
          "text": "Each code lasts 24 hours and works on one PC only. Generate another one in “Install on a Windows PC”."
        }
      },
      "guides": {
        "title": "Installation guides (PDF)",
        "pi": "Guide for Raspberry Pi",
        "windows": "Guide for a Windows PC"
      }
    }
  },
  "installation": {
    "home": {
      "title": "Installation",
      "intro": "From here you'll install your hotel's hub, the repeaters and a sensor on the door of each minibar.",
      "empty": "No hub is connected to your hotel yet.",
      "loading": "Loading the hubs…",
      "hubs_title": "The hotel's hubs",
      "claim_hub": "Link a hub",
      "state": {
        "ready": "Ready",
        "attention": "Needs attention",
        "preparing": "Preparing"
      },
      "repeaters_title": "Repeaters",
      "repeaters_label": "Repeaters on the Zigbee network",
      "add_repeater": "Add a repeater",
      "sensors_title": "Door sensors",
      "sensors_count": "{{linked}} of {{total}} rooms",
      "link_sensors": "Link sensors",
      "devices_hint": "Link a hub and wait until it is ready to add repeaters and sensors.",
      "windows": "Install on a Windows PC",
      "guide": "Installation guide"
    },
    "back_home": "Back to Installation",
    "windows": {
      "title": "Install on a Windows PC",
      "intro": "The reception PC can act as the hub. Generate a code and type it on that PC when it asks: it will join your hotel.",
      "generate": "Generate code",
      "generate_another": "Generate another code",
      "generating": "Generating the code…",
      "code_label": "Install code",
      "expires": "Valid until {{when}}, for one PC only.",
      "steps": {
        "open": "On the reception PC, open minibar360.com/instalar.",
        "download": "Download the installer and open it.",
        "type": "When the PC asks for it, type this code."
      },
      "waiting": "Waiting for the PC to use the code…",
      "connected": "The PC “{{label}}” is now connected to the hotel.",
      "hub_status": "View status",
      "lapsed": "This code no longer works: it expired or was revoked. Generate another one to install the PC.",
      "active_title": "Other active codes",
      "active_code": "Code …{{hint}}",
      "active_expires": "Expires {{when}}",
      "revoke": "Revoke",
      "revoke_label": "Revoke code …{{hint}}",
      "revoke_confirm": {
        "title": "Revoke code …{{hint}}?",
        "message": "It will no longer install any PC. You can generate another one if you need it.",
        "confirm": "Revoke code",
        "cancel": "Cancel"
      }
    },
    "rooms": {
      "title": "Door sensors",
      "progress": "{{linked}} of {{total}} rooms with a sensor",
      "scan": "Scan the minibar's QR",
      "scanner_hint": "Frame the minibar's QR code",
      "close_scanner": "Close the scanner",
      "finding": "Looking for the room…",
      "scan_hub": "This code belongs to a hub, not a minibar. Scan the QR stuck on the minibar.",
      "scan_not_found": "This minibar does not belong to any room of your hotel.",
      "scan_other": "This code is not a minibar's. Look for the QR stuck on the minibar.",
      "loading": "Loading the rooms…",
      "empty": "Your hotel has no rooms yet.",
      "no_floor": "No floor",
      "room": "Room",
      "with_sensor": "With sensor",
      "without_sensor": "No sensor"
    },
    "sensor": {
      "title": "Room {{number}}",
      "title_loading": "Door sensor",
      "subtitle": "Door sensor",
      "back": "Back to the rooms",
      "needs": {
        "sensor": "The door sensor, with its magnet and its adhesive pads.",
        "minibar": "To be in front of the minibar of room {{number}}."
      },
      "replaces": "This room already has a sensor. The new one will replace it.",
      "hints": {
        "activate": "Pull the battery tab. If the sensor was used before, hold its button for 5 seconds, until the light blinks.",
        "identifying": "Sensor detected. Identifying it…",
        "door_test": "Stick the sensor on the frame and the magnet on the door, with the marks aligned. Then open and close the minibar twice."
      },
      "openings": "Openings: {{count}} of {{total}}",
      "done": "Sensor linked to room {{number}}!",
      "next_room": "Next room"
    },
    "repeater": {
      "title": "Add a repeater",
      "needs": {
        "plug": "A Zigbee smart plug, which will act as a repeater.",
        "socket": "A free socket in the corridor, between the hub and the farthest rooms."
      },
      "hints": {
        "plug": "Plug it into a corridor socket, between the hub and the farthest rooms. If it was used before, hold its button for 5 seconds.",
        "identifying": "Repeater detected. Identifying it…"
      },
      "done": "Repeater added!",
      "another": "Add another repeater"
    },
    "claim": {
      "title": "Link a hub",
      "intro": "Scan the QR code on the label stuck to the hub.",
      "scanner_hint": "Frame the QR code on the hub's label",
      "scan_room": "This code belongs to a minibar, not a hub. Look for the label stuck to the hub.",
      "scan_other": "This code is not a hub's. Look for the label stuck to the hub.",
      "type_code": "Can't scan it? Type the code on the label",
      "submit": "Link"
    },
    "link": {
      "claiming": "Linking the hub…",
      "retry": "Scan or type the code again",
      "needs_title": "What you need",
      "needs_note": "Your phone will tell you what to do at each moment.",
      "start": "Start",
      "preparing": "Preparing…",
      "reconnecting": "No connection. Still trying…",
      "steps": {
        "joining": "Opening the Zigbee network",
        "activate": "Activate the sensor",
        "door_test": "Test the door",
        "signal": "Signal",
        "plug": "Plug the repeater in"
      },
      "step_state": {
        "done": "Done",
        "current": "In progress",
        "later": "Pending"
      },
      "hints": {
        "joining": "The hub is getting ready. Wait a few seconds…"
      },
      "signal": {
        "title": "Signal:",
        "good": "Good ({{value}})",
        "weak": "Weak ({{value}})"
      },
      "failures": {
        "no_device_sensor": "No sensor appeared. Open the network again and activate the sensor when asked.",
        "no_device_repeater": "No repeater appeared. Open the network again and plug it in when asked.",
        "joining_failed": "The hub could not open the Zigbee network. Check that the hub is ready and try again.",
        "unexpected_device_sensor": "Another kind of device joined ({{model}}). Try again with the door sensor.",
        "unexpected_device_repeater": "Another kind of device joined ({{model}}). Try again with the repeater.",
        "interview_failed": "The device could not be identified. Hold its button for 5 seconds and try again.",
        "weak_signal": "The signal is weak ({{value}}). Add a repeater closer to this room, then link the sensor again.",
        "expired": "Too much time has passed. Start again.",
        "cancelled": "This linking was cancelled. Start again.",
        "unknown": "The device could not be linked. Try again."
      },
      "actions": {
        "reopen": "Open the network again",
        "retry": "Try again",
        "start_again": "Start again",
        "add_repeater": "Add a repeater",
        "hub_status": "See the hub's status",
        "home": "Back to the start"
      }
    },
    "status": {
      "title": "Hub",
      "loading": "Checking the hub…",
      "banner_new": "Hub linked to your hotel.",
      "banner_already": "This hub was already linked to your hotel.",
      "checks": {
        "internet": "Connected to the internet",
        "hotel": "Linked to your hotel",
        "zigbee": "Zigbee antenna ready"
      },
      "internet": {
        "never": "Plug the hub in and connect it to the network with the cable or Wi-Fi. It can take a couple of minutes.",
        "offline": "The hub has not connected since {{since}}. Check that it is plugged in and has network."
      },
      "zigbee": {
        "waiting": "Waiting for the hub to connect.",
        "no_adapter": "Plug the USB antenna into the hub with the extension cable.",
        "no_adapter_windows": "Plug the USB antenna into the PC with the extension cable. If it is already plugged in, check the hub's page on the PC: its driver may be missing.",
        "offline": "The Zigbee network has stopped. Unplug the hub, wait 10 seconds and plug it in again.",
        "offline_windows": "The Zigbee network has stopped. Unplug the USB antenna from the PC, wait 10 seconds and plug it in again.",
        "preparing": "Preparing the Zigbee network. It can take a minute."
      },
      "ready": "All set! The hub is ready for the sensors."
    },
    "errors": {
      "invalid_code": "That code is not valid. Check the label: it has 12 letters and numbers.",
      "not_found": "No hub has that code. Check the label and try again.",
      "claimed_elsewhere": "This hub belongs to another hotel. Contact Minibar360 support.",
      "too_many_attempts": "You have made many attempts in a row. Wait a minute and try again.",
      "connection": "No connection. Check the network and try again.",
      "no_hotel": "To install, sign in with the hotel's maintenance account.",
      "hotel_not_found": "We could not find your hotel. Sign out and sign in again.",
      "not_allowed": "Your account cannot install in this hotel.",
      "hub_not_found": "This hub is not linked to your hotel.",
      "link_session_in_progress": "Someone else is linking a device in your hotel. Wait until they finish and try again.",
      "no_hub_ready": "No hub is ready. Check the hub's status and try again.",
      "room_not_found": "We could not find this room in your hotel.",
      "link_session_not_waiting": "This linking is no longer waiting for a device.",
      "link_session_not_found": "We could not find this linking. Start again.",
      "invalid_link_session": "This cannot be linked that way. Go back to the start and begin again.",
      "too_many_codes": "Your hotel already has too many active codes. Revoke one you will not use and try again.",
      "code_not_active": "This code is no longer active: it was used, it expired or someone revoked it.",
      "code_not_found": "We could not find this code in your hotel. It may no longer exist."
    }
  },
  "ui": {
    "offline_banner": "You are offline — changes will sync when you reconnect",
    "syncing_actions": "Syncing {{count}} action(s)…",
    "all_saved": "All changes saved",
    "cookie_consent": "We only use essential cookies. See our",
    "privacy_policy": "privacy policy",
    "accept": "Accept",
    "sync_conflict": "Sync conflict",
    "conflict_desc": "The following rooms could not sync automatically. Please re-check them while online:",
    "retry": "Retry",
    "discard": "Discard",
    "sync_conflict_count": "Sync conflict ({{count}} item(s) unresolved)"
  },
  "common": {
    "close": "Close",
    "loading": "Loading..."
  },
  "crud": {
    "unexpectedError": "An unexpected error occurred. Please try again."
  },
  "reception": {
    "errorLoadHotel": "We couldn't load your hotel details. Refresh the page or sign in again.",
    "errorLoadHotels": "We couldn't load the hotel list. Refresh the page to try again.",
    "minibarStatus": {
      "Restocked": "OK · Restocked",
      "Reviewed": "OK · Reviewed",
      "DoorOpened": "Door opened. Check for consumption",
      "ConsumptionToReview": "Consumption · Restock and review",
      "Inspecting": "Under review",
      "StockShort": "Missing stock",
      "ReviewedPendingRestock": "Reviewed · Restock pending",
      "Incident": "Incident",
      "OutOfService": "Out of service"
    },
    "chargesStatus": {
      "PendingConfirmation": "Charges pending confirmation",
      "PendingPayment": "Payment pending",
      "Unpaid": "Unpaid",
      "Recovered": "Recovered · Nothing pending",
      "AbsorbedByHotel": "Absorbed by the hotel",
      "PaidToVerify": "Paid · To verify",
      "ToVerify": "To verify",
      "PaidOk": "Consumption paid OK",
      "NonePending": "Nothing pending"
    }
  },
  "errors": {
    "sessionExpired": "Your session has expired. Please log in again.",
    "forbidden": "You do not have permission to perform this action.",
    "network": "Check your internet connection and try again.",
    "server": "Something went wrong on our end. Please try again later.",
    "validation": "Please fix the validation errors and try again.",
    "notFound": "The requested resource was not found.",
    "conflict": "A conflict occurred. The data may have been modified.",
    "tooManyRequests": "Too many requests. Please wait a moment and try again.",
    "requestFailed": "The request could not be completed. Please try again.",
    "unexpected": "Something went wrong. Please try again."
  }
}
