{
    "common": {
        "delete_title": "Delete record?",
        "delete_text": "«{name}» will be deleted. Only allowed when not in use.",
        "delete_yes": "Yes, delete",
        "delete_no": "Cancel",
        "delete_error": "Could not delete.",
        "deleted_ok": "Deleted successfully.",
        "delete_btn": "Delete",
        "code_auto_hint": "The code is generated automatically when you save."
    },
    "brand": {
        "app_name": "Lavandería Tibu",
        "nav_title": "Lavandería Tibu",
        "logo_alt": "Lavandería Tibu — laundry",
        "default_page_title": "Lavandería Tibu",
        "meta_suffix": "Lavandería Tibu"
    },
    "layout": {
        "access_denied": "You do not have permission to open {path}. Ask an administrator to review your role if you need access.",
        "sidebar": {
            "home": "Home",
            "sales_pos": "Front desk & sales",
            "menu_laundry_pos_prices": "Laundry POS prices & items",
            "catalog": "Catalog",
            "catalog_categories": "Categories",
            "catalog_products": "Services",
            "catalog_sale_services": "Services (POS sales)",
            "catalog_sale_products": "Products (POS sales)",
            "catalog_etapas": "Stages",
            "catalog_tipos_servicio": "Service types",
            "catalog_garment_types": "Garment types",
            "catalog_clients": "Clients",
            "catalog_client_categories": "Client classification",
            "laundry_ops": "Laundry (orders)",
            "clients_misc": "Clients & other lists",
            "inventory": "Inventory",
            "reports": "Reports",
            "system_admin": "System (company, users, TIBU)",
            "legacy_products_archive": "Legacy products (archive)",
            "profile": "My profile"
        }
    },
    "catalogos": {
        "etapas": {
            "nav": "Stages",
            "page_title": "Stages catalog",
            "breadcrumb": "Stages",
            "subtitle": "TIBU process stages (wash, ironing, full service…) used on lines and pricing.",
            "empty": "No stages configured.",
            "th_actions": "Actions"
        },
        "tipos_servicio": {
            "nav": "Service types",
            "page_title": "Service types catalog",
            "breadcrumb": "Service types",
            "subtitle": "Urgent, express, normal and other types applied to orders and the POS.",
            "empty": "No service types configured.",
            "th_actions": "Actions"
        },
        "legacy_products": {
            "nav": "Legacy concepts",
            "page_title": "Legacy concepts (productos table)",
            "breadcrumb": "Legacy concepts",
            "subtitle": "View and edit historical rows only. New sales use service and garment types on the POS (TIBU). Creating new rows is disabled.",
            "modal_edit": "Edit legacy concept",
            "modal_new": "New legacy concept",
            "new_disabled_hint": "New rows cannot be created here (legacy catalog frozen)."
        }
    },
    "tibu": {
        "shipping_status": {
            "not_requested": "Delivery not requested",
            "pending": "Delivery pending",
            "in_transit": "In transit",
            "delivered": "Delivered",
            "failed": "Delivery failed"
        },
        "priority_level": {
            "urgent": "Urgent",
            "express": "Express",
            "normal": "Normal"
        },
        "load_type": {
            "heavy": "Heavy load",
            "light": "Light load"
        },
        "order_step": {
            "recepcion": "Reception",
            "lavado": "Wash",
            "secado": "Dry",
            "planchado": "Ironing",
            "terminado": "Finished",
            "entregado": "Delivered"
        }
    },
    "dashboard": "Dashboard",
    "sales": "Sales",
    "analytics": "Analytics",
    "apps": "Apps",
    "components": "Components",
    "elements": "Elements",
    "font_icons": "Font Icons",
    "widgets": "Widgets",
    "tables": "Tables",
    "datatables": "Data Tables",
    "forms": "Forms",
    "users": "Users",
    "pages": "Pages",
    "authentication": "Authentication",
    "drag_and_drop": "Drag and Drop",
    "maps": "Maps",
    "charts": "Charts",
    "starter_kit": "Starter Kit",
    "documentation": "Documentation",
    "ui_kit": "UI Kit",
    "more": "More",
    "lavanderia": {
        "dashboard": {
            "page_title": "Traffic-light dashboard (TIBU)",
            "heading": "Orders in real time",
            "breadcrumb_parent": "Laundry",
            "breadcrumb_current": "Traffic-light dashboard"
        },
        "lista": {
            "page_title": "Order list (TIBU)",
            "heading": "Laundry order list"
        },
        "operador": {
            "page_title": "Operator (TIBU)",
            "breadcrumb_parent": "Laundry",
            "breadcrumb_current": "Operator panel — {area}",
            "heading": "Pending orders — {area}",
            "intro": "Simplified UI for tablets or phones. Tap an order to advance to the next stage.",
            "btn_lavado": "Wash",
            "btn_secado": "Dry",
            "btn_planchado": "Ironing",
            "empty_area": "No pending orders in this area.",
            "min_in_stage": "{n} min in stage"
        },
        "escanear": {
            "page_title": "Scan QR (TIBU)",
            "heading": "Scan laundry order",
            "breadcrumb_parent": "Laundry",
            "breadcrumb_current": "Scan QR",
            "scan_label": "QR code or folio",
            "scan_placeholder": "Scan QR or enter folio",
            "scan_hint": "If the scanner fails, enter the folio manually (e.g. LMS-…).",
            "scan_btn_loading": "Scanning…",
            "scan_btn": "Scan (entry/exit)",
            "found_title": "Order found",
            "stage_label": "Current stage",
            "advance_btn_loading": "Advancing…",
            "advance_btn": "Start / advance stage",
            "found_line": "Order found: {folio}",
            "found_line_short": "Folio",
            "client_label": "Customer",
            "service_label": "Service",
            "instructions_label": "Instructions",
            "scan_registered": "Scan registered",
            "scan_registered_toast": "Scan registered successfully",
            "scan_sequence_label": "Sequence",
            "scan_sequence_entry": "Entry (sequence 1)",
            "scan_sequence_exit": "Exit (sequence 2)",
            "presence_status_label": "Presence status",
            "presence_status_pending": "Pending",
            "presence_status_in_progress": "In progress",
            "presence_status_completed": "Completed",
            "presence_status_skipped": "Skipped",
            "operator_area_title": "Area and operator",
            "operator_area_body": "Area: {area}. Select who registers the scan.",
            "operator_select_label": "Scanning operator",
            "operator_select_placeholder": "Select operator",
            "operator_select_loading": "Loading operators…",
            "operator_select_empty": "No operators enabled for this area.",
            "operator_area_select_label": "Scan area",
            "operator_blocked_title": "Select operator",
            "operator_blocked_body": "Choose the operator performing the scan in the selected area. Reception records the scan on behalf of the floor operator.",
            "operator_blocked_body_short": "Select an operator before scanning.",
            "operator_area_missing": "Could not determine your assigned area.",
            "ticket_title": "Ticket status",
            "ticket_loading": "Fetching status…",
            "order_no_ticket": "Scan a code to view the ticket status.",
            "ticket_folio_label": "Folio",
            "ticket_estatus_label": "Status",
            "ticket_current_step_label": "Order pipeline stage",
            "ticket_global_step_hint": "This is the order’s global stage (updated when reception advances the order). Shop-floor work is shown under “Last scan” and “Progress by area”.",
            "ticket_last_scan_title": "Last process (area)",
            "order_status_pendiente": "Pending",
            "order_status_en_proceso": "In process",
            "order_status_terminado": "Completed",
            "order_status_entregado": "Delivered",
            "order_status_cancelado": "Canceled",
            "presences_title": "Progress by area",
            "recent_scans_title": "Recent scans",
            "refresh_btn": "Refresh",
            "refresh_loading": "Refreshing…"
        },
        "recepcion": {
            "page_title": "Reception / sale (TIBU)",
            "breadcrumb_parent": "Laundry",
            "breadcrumb_current": "Reception / sale",
            "legacy_redirect_title": "Sales on the POS (TIBU)",
            "legacy_redirect_body": "This route no longer uses the legacy productos catalog. Record sales under “New sale (POS)” with service type, garment, load type, and matrix pricing. The legacy list remains for lookup or occasional edits only.",
            "legacy_redirect_cta": "Go to New sale (POS)"
        },
        "area": {
            "breadcrumb_parent": "Laundry",
            "breadcrumb_current": "Area: {area}",
            "title": "Area scan (TIBU)",
            "subtitle": "Area code: {code}. Use a USB scanner (keyboard mode) or type the folio and press Enter.",
            "requires_two_scans": "This area requires two scans per order: first check-in, second check-out or confirmation.",
            "scan_label": "QR code or folio",
            "scan_placeholder": "Scan or type the folio (e.g. LMS-…)",
            "scan_help": "Focus stays in this field for USB scanners that send Enter.",
            "scan_submit": "Register scan",
            "scan_loading": "Registering…",
            "scan_error_generic": "Could not register the scan.",
            "scan_first_title": "First scan recorded",
            "scan_first_body": "Check-in at this station or start of this stage.",
            "scan_second_title": "Second scan recorded",
            "scan_second_body": "Check-out or confirmation (when the area requires two reads).",
            "scan_registered": "Scan recorded",
            "seq_first": "1st scan",
            "seq_second": "2nd scan",
            "recent_events": "Recent events",
            "recent_empty": "No events in this session yet.",
            "event_ok": "OK",
            "event_fail": "Error",
            "switch_area": "Switch area",
            "menu_item": "TIBU scan — {area}",
            "page_title": "{area} · TIBU",
            "codes": {
                "reception": "Reception",
                "selection": "Selection (yard)",
                "heavy_wash": "Heavy wash",
                "light_wash": "Light wash",
                "ironing": "Ironing",
                "storage": "Storage",
                "shipping": "Shipping"
            }
        }
    },
    "ventas": {
        "pos": {
            "breadcrumb_parent": "Sales",
            "breadcrumb_current": "New sale (POS)",
            "caja_closed_title": "Cash register closed.",
            "caja_closed_body": "You cannot register sales until a register is opened.",
            "caja_open_link": "Open register",
            "catalog_title": "Service catalog",
            "catalog_hint": "Step 1: add services to the cart. Then fill in the customer and charge on the right.",
            "open_catalog_modal_btn": "Add service to cart",
            "open_catalog_modal_sub": "Category → service → quantity",
            "flow_step_catalog": "Services",
            "flow_step_client": "Customer & checkout",
            "catalog_step_categories": "1. Category",
            "catalog_step_services": "2. Service",
            "catalog_step_configure": "3. Confirm",
            "service_added_to_cart": "{name} added to cart",
            "cart_services_count": "{n} service in cart",
            "cart_services_count_plural": "{n} services in cart",
            "empty_cart_hint": "Use «Add service to cart» on the left panel to get started.",
            "catalog_modal_title": "Service catalog",
            "catalog_modal_pick_category": "Choose a category",
            "catalog_modal_pick_service": "Services — {category}",
            "catalog_modal_configure": "Configure service",
            "catalog_modal_back": "Back",
            "catalog_title_legacy": "Legacy catalog (services)",
            "catalog_hint_legacy": "For compatibility with older item-based sales. Does not consume internal TIBU inventory.",
            "etapa": "Stage",
            "etapa_ph": "Stage first (wash, ironing…)",
            "service_type": "Stage",
            "service_type_ph": "Stage first (wash, ironing…)",
            "tibu_qty_pieces": "Quantity (pieces)",
            "add_tibu_line": "Add line",
            "add_content_line": "Service contents",
            "add_content_hint": "Describe which garments the selected service includes. Not charged; shown on the ticket.",
            "add_content_select_product": "Select a service in the catalog first.",
            "content_for_product": "includes",
            "add_content_btn": "Add contents",
            "content_modal_btn": "Service contents",
            "content_pending_hint": "{n} garment(s) pending. They will be added when you confirm the service.",
            "content_modal_title": "Service contents",
            "content_modal_title_draft": "Contents — {name}",
            "content_modal_title_cart": "Contents of {name}",
            "content_modal_subtitle_draft": "Add garments here; they are saved with the line when you add the service to the cart.",
            "content_modal_subtitle_cart": "Informational detail for this service (not charged; shown on the ticket).",
            "content_modal_empty": "No garments listed. Use the form above to add some.",
            "view_content_btn": "View contents ({n})",
            "badge_content": "Info only",
            "badge_tibu": "Laundry",
            "badge_catalog": "POS catalog",
            "no_charge": "No charge",
            "content_line_mode": "Ticket only",
            "add_catalog_line": "POS catalog (service)",
            "filter_category": "Filter by category",
            "all_categories": "All categories",
            "select_product": "Service",
            "add_catalog_btn": "Add service to cart",
            "optional_service_uses_product_or_header": "Optional: uses service default or header service type",
            "th_billing_mode": "Billing mode",
            "billing_piece_unit": "Per unit (service price)",
            "billing_weight_catalog": "By weight ($/kg from service)",
            "loading_catalog": "Loading catalog…",
            "init_loading": "Preparing point of sale…",
            "badge_service": "Service",
            "badge_product": "Service",
            "badge_stock": "Stock: {n}",
            "per_kg": "Per kg",
            "per_piece": "Per piece",
            "per_kg_suffix": " / kg",
            "no_products": "No services configured. Check the POS catalog in Admin.",
            "cart_title": "Customer and cart",
            "search_client": "Search customer",
            "search_placeholder": "Name, email or phone...",
            "quick_client": "Quick registration",
            "client": "Customer",
            "remove": "Remove",
            "client_name": "Customer name",
            "client_category": "Classification",
            "client_category_none": "No classification",
            "client_name_ph": "e.g. John Doe",
            "client_email": "Email",
            "priority": "Priority (SLA)",
            "priority_none": "No specific level",
            "delivery": "Home delivery",
            "delivery_date": "Promised delivery date",
            "delivery_date_hint": "When the service should be ready. The traffic light combines this date with the alert hours set above.",
            "order_tipo_servicio": "Service type (SLA)",
            "order_tipo_servicio_placeholder": "Select service type",
            "order_tipo_servicio_hint": "Sets order priority (urgent, express, normal). Not derived from cart products.",
            "order_tipo_servicio_required": "Select the order service type.",
            "semaphore_section": "Traffic-light alerts (hours before delivery)",
            "semaphore_yellow": "Yellow (hours)",
            "semaphore_red": "Red (hours)",
            "semaphore_hint": "The dashboard traffic light uses these values with the delivery date. Set them per order here.",
            "semaphore_required": "Enter yellow and red alert hours for the traffic light.",
            "cart_lines_title": "Services in order",
            "cart_summary_right": "{n} line(s) in cart",
            "edit_line": "Edit line",
            "delivery_address": "Delivery address",
            "delivery_address_hint": "Taken from the client's address; you can edit it for this order.",
            "save_client_direccion": "Save address to client catalog",
            "client_address_save_error": "Order saved, but the client address could not be updated: {msg}",
            "details_clothes": "Clothing details / summary (optional)",
            "instructions": "Special instructions (optional)",
            "th_concept": "Item",
            "th_qty": "Qty / Kg",
            "th_unit": "Unit",
            "th_sub": "Subtotal",
            "th_billing": "TIBU billing",
            "billing_standard": "Standard (product/qty only)",
            "billing_garment": "By garment type",
            "billing_weight": "By weight (TIBU)",
            "remove_line": "Remove",
            "garment_type": "Garment type",
            "weight_kg": "Weight (kg)",
            "load_type": "Load type",
            "optional": "Optional",
            "line_obs": "Line observations",
            "extra_cost": "Extra cost",
            "real_qty": "Actual quantity",
            "real_qty_label": "Actual: {n}",
            "real_weight_kg": "Actual weight (kg)",
            "bill_qty_label": "Billable: {n}",
            "bill_weight_label": "Billable weight: {n} kg",
            "custom_price_enable": "Adjust unit price",
            "custom_price": "Unit price to charge",
            "extra_cost_hint": "Added once to this line subtotal. Defaults from the product catalog.",
            "default_load_applied": "Default load applied",
            "default_billing_applied": "Default billing applied",
            "select": "Select…",
            "empty_cart": "Cart is empty. Add items.",
            "payment": "Payment method",
            "payment_unset": "Unspecified",
            "pay_cash": "Cash",
            "pay_card": "Card",
            "pay_transfer": "Transfer",
            "payments_title": "Payment",
            "payments_hint": "Choose the payment method and finalize the order. You may split the total across methods.",
            "payments_after_open_hint": "Save the order (Open order) to enable payment and finalize.",
            "payment_amount": "Amount",
            "add_payment_line": "Add method",
            "payments_sum_label": "Payments sum",
            "payments_sum_mismatch": "Payment sum ({sum}) does not match total ({total}).",
            "payments_finalize_required": "Enter the payment method before finalizing (must match the total).",
            "total": "Total",
            "saving": "Saving…",
            "submit": "Charge and confirm sale",
            "open_order": "Open order",
            "save_changes": "Save changes",
            "finalize_order": "Charge and finalize",
            "order_opened": "Order opened: {folio}",
            "changes_saved": "Changes saved",
            "open_order_badge": "Open order:",
            "open_orders_title": "Open orders (reception)",
            "refresh_open_orders": "Refresh",
            "loading_open_orders": "Loading open orders…",
            "no_open_orders": "No open orders. Use «New order» or reopen by folio.",
            "new_order": "New order",
            "reopen_order_label": "Reopen order by folio",
            "reopen_order_placeholder": "e.g. LMS-20260509-ABC123",
            "reopen_order_btn": "Reopen",
            "reopen_order_ok": "Order reopened: {folio}",
            "reopen_order_not_found": "No pending reception order found with that folio.",
            "reopen_order_stale_storage": "The order saved on this device no longer exists or is no longer at reception. Selection was cleared.",
            "reopen_order_error": "Could not reopen the order.",
            "reopen_order_recent_hint": "Suggestions from recently opened folios saved on this device.",
            "modal_title": "Sale registered — {folio}",
            "qr_ready": "QR code generated for tracking.",
            "qr_preview_label": "Tracking QR code",
            "qr_preview_hint": "Scan with a phone camera to check order status.",
            "print_two": "Print in browser (2 copies with QR)",
            "print_server": "Open thermal PDF (logo, details & QR)",
            "pdf_loading": "Generating…",
            "pdf_error": "Could not generate the document.",
            "auto_ticket_next": "Automatically open the browser ticket (2 copies with QR) after each sale",
            "auto_ticket_hint": "If the browser blocks pop-ups, use the print buttons below.",
            "ticket_popup_blocked": "The browser blocked the ticket window. Click “Print in browser…” or allow pop-ups for this site.",
            "close": "Close",
            "quick_client_title": "Quick customer registration",
            "phone": "Phone",
            "address": "Address",
            "cancel": "Cancel",
            "save_use": "Save and use",
            "client_pick_required_hint": "Search and pick a customer from the catalog (required). Use «+ Customer» to register a new one.",
            "bags_section_title": "Bag labels",
            "bags_section_hint": "Enter how many bags this order uses. Each gets a barcode label with the customer name to stick on the bag.",
            "bags_qty_label": "Number of bags",
            "bags_apply": "Generate codes",
            "bags_applying": "Generating…",
            "bags_print_all": "Print all labels",
            "bags_print_one": "Print",
            "bags_printing": "Printing…",
            "bags_thermal_ok": "Label sent to the reception printer.",
            "bags_thermal_error": "Could not print the label.",
            "bags_empty": "No bags yet. Enter quantity and tap «Generate codes».",
            "bags_bag_n": "Bag {n}",
            "bags_save_order_first": "Save the order before generating bag labels.",
            "bags_updated": "Bag codes updated.",
            "bags_error": "Could not update bags.",
            "bags_print_none": "No bags to print.",
            "bags_pdf_error": "Could not generate label PDF.",
            "bags_quick_print_btn": "Print label",
            "bags_quick_print_hint": "Generates a bag code if needed and prints the label with the customer name.",
            "client_saved": "Customer saved.",
            "client_error": "Error saving: {msg}",
            "sale_ok": "Sale registered: {folio}",
            "sale_error": "Error: {msg}",
            "sale_timeout": "The operation took too long. Wait a moment and try again.",
            "show_obs_on_ticket": "Show notes on sales ticket",
            "sale_print_ok": "Sale saved. Ticket printed successfully.",
            "sale_print_warn": "Sale saved; print error: {msg}",
            "print_thermal_ticket": "Print ticket",
            "print_thermal_printing": "Printing…",
            "print_thermal_ok": "Ticket sent to the reception printer.",
            "print_thermal_no_printer": "No sale printer configured for reception. Set one up under Administration → Printers.",
            "preview_sync_notice": "Totals calculated with backend preview.",
            "page_title": "New sale (POS)",
            "validation": {
                "cliente_required": "Enter the customer name.",
                "cliente_select_required": "Select a customer from the catalog (search or quick register).",
                "cliente_min": "At least 2 characters.",
                "delivery_address": "Address is required for home delivery.",
                "garment_required": "Select garment type for lines billed by garment.",
                "weight_required": "Enter weight (kg) for lines billed by weight.",
                "service_type_required": "Select the stage before adding TIBU garment lines.",
                "etapa_required": "Select the stage before adding TIBU garment lines.",
                "catalog_service_required": "Set a default service type on the POS catalog product (Admin).",
                "content_line_required": "Product and garment type are required for a content line.",
                "catalog_qty_required": "Enter quantity (≥ 1) for the catalog line.",
                "catalog_product_missing": "A POS catalog line has an invalid or inactive product.",
                "finalize_need_items": "Add at least one line before finalizing the order.",
                "no_piece_price": "No piece price for this combination (service, garment and load). Check the matrix or load type.",
                "no_price_per_kg": "No valid price per kg; weight billing is unavailable until configured."
            }
        },
        "caja": {
            "breadcrumb_parent": "Sales",
            "breadcrumb_current": "Cash register (open/close)",
            "title_state": "Register status",
            "open_badge": "Open",
            "initial_balance": "Opening balance",
            "opened_at": "Opened",
            "close_btn": "Close register (cut)",
            "close_processing": "Processing…",
            "no_caja": "No open register. Open one to record sales.",
            "name_label": "Name",
            "name_ph": "Register 1",
            "initial_label": "Opening balance ($)",
            "open_btn": "Open register",
            "opening": "Opening…",
            "open_ok": "Register opened.",
            "open_error": "Could not open register.",
            "close_ok": "Register closed.",
            "close_error": "Could not close register.",
            "cut_summary": "Sales: {ventas} | Final balance (all methods): {saldo} | Cash expected: {esperado}",
            "arqueo_title": "Cash count (optional)",
            "cash_counted": "Cash counted ($)",
            "cash_counted_help": "If provided, variance is calculated against expected cash in drawer.",
            "notes_close": "Closing notes",
            "notes_ph": "Shift notes…",
            "movements_title": "Cash movements",
            "movements_empty": "No movements this session.",
            "movements_type": "Type",
            "movements_in": "In",
            "movements_out": "Out",
            "movements_amount": "Amount",
            "movements_reason": "Reason",
            "movements_add": "Add",
            "movements_loading": "Loading…",
            "movements_ok": "Movement recorded.",
            "movements_error": "Could not record movement."
        },
        "tickets": {
            "breadcrumb_parent": "Sales",
            "breadcrumb_current": "Ticket history",
            "title": "Ticket history",
            "subtitle": "Filter orders and reprint the ticket as a server PDF (80 mm, logo and barcode).",
            "filter_from": "From",
            "filter_to": "To",
            "filter_client": "Customer",
            "filter_client_ph": "Name (contains)",
            "filter_folio": "Folio",
            "filter_folio_ph": "LMS-…",
            "filter_status": "Status",
            "filter_status_all": "All",
            "filter_tipo_servicio": "Service (catalog)",
            "filter_priority_level": "Service (catalog)",
            "filter_priority_all": "Any",
            "filter_flag": "Priority flag",
            "filter_flag_all": "Any",
            "filter_flag_yes": "Yes",
            "filter_flag_no": "No",
            "filter_caja": "Register (ID)",
            "filter_caja_ph": "Optional",
            "per_page": "Per page",
            "search": "Search",
            "reset": "Clear",
            "table_folio": "Folio",
            "table_client": "Customer",
            "table_date": "Date",
            "table_delivery_date": "Delivery",
            "table_status": "Status",
            "table_priority": "Priority",
            "table_caja": "Register",
            "table_select": "Select",
            "table_total": "Total",
            "table_qr": "Barcode",
            "table_actions": "Actions",
            "edit_order": "Edit order",
            "priority_badge": "Urgent",
            "reprint_ticket": "Reprint ticket",
            "reprint_label": "Print label",
            "reprint_label_ok": "Label sent to printer.",
            "reprint_label_error": "Could not print the label.",
            "reprint_ok": "Ticket sent to printer",
            "reprint_error": "Could not print ticket",
            "whatsapp_ready": "WhatsApp",
            "whatsapp_ready_hint": "Open WhatsApp Web with ready-for-pickup message",
            "whatsapp_no_phone": "No phone on the registered customer for this order",
            "loading": "Loading…",
            "empty": "No results.",
            "page": "Page {n} of {m} · {t} records",
            "prev": "Previous",
            "next": "Next",
            "pdf_error": "Could not generate the document.",
            "bulk_hint": "Multi-select (current page):",
            "select_page": "Select page",
            "clear_selection": "Clear selection",
            "bulk_reprint_ticket": "Reprint selected tickets",
            "export_csv": "Export CSV",
            "export_loading": "Exporting…",
            "export_ok": "CSV downloaded.",
            "export_error": "Could not export.",
            "export_forbidden": "No permission to export (reportes.ver).",
            "page_title": "Ticket history"
        }
    },
    "admin": {
        "garment_types": {
            "nav": "Garment types (TIBU)",
            "breadcrumb_parent": "Administration",
            "breadcrumb_current": "Garment types",
            "title": "Garment types administration",
            "subtitle": "TIBU garment catalog: code, name, sort order, active flag, and default load. POS amounts come from the product catalog or laundry_piece_prices + pricing_rules, not from garment type.",
            "refresh": "Refresh",
            "new": "New garment",
            "th_code": "Code",
            "th_name": "Name",
            "th_sort": "Sort",
            "th_active": "Active",
            "th_default_load": "Default load",
            "th_actions": "Actions",
            "yes": "Yes",
            "no": "No",
            "edit": "Edit",
            "disable": "Disable",
            "modal_new": "New garment",
            "modal_edit": "Edit garment",
            "f_code": "Code",
            "f_name": "Name",
            "f_sort": "Sort",
            "f_active": "Active",
            "f_default_load": "Default load",
            "pricing_note": "Amounts and billing mode at the POS are defined in the product catalog or the piece-price matrix / per-kg pricing rule.",
            "cancel": "Cancel",
            "save": "Save",
            "saving": "Saving...",
            "load_error": "Could not load list.",
            "code_required": "Code is required.",
            "name_required": "Name is required.",
            "created": "Garment created.",
            "saved": "Garment updated.",
            "disabled": "Garment disabled.",
            "save_error": "Could not save."
        },
        "laundry_pos_catalog": {
            "nav": "Laundry POS catalog",
            "breadcrumb_parent": "Administration",
            "breadcrumb_current": "POS catalog (laundry)",
            "title": "POS catalog — categories & services",
            "title_categories": "POS catalog categories",
            "title_servicio": "Sale services (POS)",
            "title_producto": "Sale products (POS)",
            "subtitle": "One catalog for front-desk sales: services by weight or piece, and optional on-hand qty for consumables (same table as the POS). The old list is kept only as an archive under System.",
            "subtitle_categories": "Groups services and products shown at reception. Shared by both sale catalogs.",
            "subtitle_servicio": "Laundry services (by weight or piece). Shown in the POS; no retail stock.",
            "subtitle_producto": "Retail or consumable items. Shown in the POS; optional piece stock.",
            "link_manage_categories": "Manage categories",
            "tab_categories": "Categories",
            "tab_products": "Services",
            "tab_products_producto": "Products",
            "tab_products_servicio": "Services",
            "new_producto": "New product",
            "new_servicio": "New service",
            "modal_new_prod_producto": "New sale product",
            "modal_edit_prod_producto": "Edit sale product",
            "modal_new_prod_servicio": "New sale service",
            "modal_edit_prod_servicio": "Edit sale service",
            "created_prod_producto": "Product created.",
            "saved_prod_producto": "Product updated.",
            "disabled_prod_producto": "Product disabled.",
            "created_prod_servicio": "Service created.",
            "saved_prod_servicio": "Service updated.",
            "disabled_prod_servicio": "Service disabled.",
            "breadcrumb_categories": "POS categories",
            "breadcrumb_servicio": "POS services",
            "breadcrumb_producto": "POS products",
            "refresh": "Refresh",
            "new_category": "New category",
            "new_product": "New service",
            "th_code": "Code",
            "th_name": "Name",
            "th_sort": "Sort",
            "th_active": "Active",
            "th_actions": "Actions",
            "th_tipo": "Type",
            "th_etapa": "Stage",
            "th_tipo_servicio": "Service (SLA)",
            "filter_tipo": "Type",
            "filter_tipo_all": "All",
            "filter_search": "Search",
            "filter_search_ph": "Name, code or description…",
            "filter_all": "All",
            "filter_all_categories": "All categories",
            "filter_clear": "Clear filters",
            "filter_results": "Showing {shown} of {total} items",
            "products_empty": "No items match this filter.",
            "th_category": "Category",
            "th_billing_unit": "Billing unit",
            "th_unit_price": "Unit price",
            "th_stock": "On hand",
            "yes": "Yes",
            "no": "No",
            "edit": "Edit",
            "disable": "Disable",
            "modal_new_cat": "New category",
            "modal_edit_cat": "Edit category",
            "modal_new_prod": "New service",
            "modal_edit_prod": "Edit service",
            "f_code": "Code",
            "f_name": "Name",
            "f_tipo": "Type",
            "tipo_servicio": "Service (laundry)",
            "tipo_producto": "Product (retail)",
            "f_sort": "Sort",
            "f_active": "Active",
            "f_tracks_stock": "Track stock (per piece)",
            "f_stock_quantity": "Quantity on hand",
            "tracks_stock_help": "Only when billing by piece. POS sales decrement this; order cancellation restores it.",
            "f_category": "Category",
            "f_tipo_servicio": "Service (SLA)",
            "f_tipo_servicio_help": "Applied automatically when this item is sold at the POS. If the order has several items, the highest-priority service wins.",
            "f_semaphore_red": "Red alert (hours before delivery)",
            "f_semaphore_yellow": "Yellow alert (hours before delivery)",
            "semaphore_help": "Traffic-light board: yellow when ≤ these hours remain; red when ≤ red hours. Empty = global defaults (2 h / 3 h).",
            "f_priority_level": "Service (SLA)",
            "f_priority_level_help": "Applied automatically when this item is sold at the POS. If the order has several items, the highest-priority service wins.",
            "f_description": "Description",
            "f_billing_unit": "Billing unit",
            "f_unit_price": "Unit price",
            "f_extra_cost": "Extra cost (per line)",
            "extra_cost_help": "Added once to each POS sale subtotal for this service.",
            "cancel": "Cancel",
            "save": "Save",
            "saving": "Saving…",
            "load_error": "Could not load list.",
            "save_error": "Could not save.",
            "saved_cat": "Category updated.",
            "created_cat": "Category created.",
            "disabled_cat": "Category disabled.",
            "saved_prod": "Service updated.",
            "created_prod": "Service created.",
            "disabled_prod": "Service disabled.",
            "unit_price_help": "Base price used on the POS and on new orders.",
            "service_prices_section": "Prices by service type",
            "service_prices_hint": "Optional: an amount per service overrides the unit price above for that service on the POS and on new orders.",
            "service_price_amount": "Amount",
            "service_price_add": "+ Add price by service",
            "service_price_remove": "Remove",
            "service_price_need_type": "In per-service prices, select the service type on each complete row.",
            "service_price_need_amount": "In per-service prices, enter the amount on each complete row.",
            "service_price_duplicate": "Do not repeat the same service type on two rows.",
            "stock_need_qty": "Enter an on-hand quantity (integer ≥ 0) when stock tracking is enabled."
        },
        "config_empresa": {
            "nav": "Company & receipt",
            "breadcrumb_parent": "Administration",
            "breadcrumb_current": "Company & thermal receipt",
            "title": "Company and receipt settings",
            "subtitle": "General data and thermal receipt (PDF) copy. Changes are stored in the database.",
            "save": "Save",
            "saving": "Saving...",
            "reload": "Reload",
            "saved": "Settings saved.",
            "load_error": "Could not load settings.",
            "save_error": "Could not save.",
            "forbidden": "No permission to edit company settings. Ask an administrator for «administracion.configuracion_empresa» or run pending migrations.",
            "section_general": "General (required to save)",
            "f_nombre_empresa": "Name / legal name",
            "f_nombre_corto": "Short name (code)",
            "f_nombre_largo": "Long name",
            "f_rfc": "Tax ID (RFC)",
            "f_telefono": "Phone",
            "f_email": "Email",
            "f_direccion": "Address (street)",
            "f_codigo_postal": "Postal code",
            "f_ciudad": "City",
            "f_estado": "State",
            "f_pais": "Country",
            "f_sitio_web": "Website (URL or empty)",
            "section_ticket_header": "Receipt — header",
            "f_ticket_nombre": "Name on receipt",
            "f_ticket_rfc": "RFC on receipt (key only; printed as RFC: …)",
            "f_ticket_domicilio": "Street & neighborhood",
            "f_ticket_cp_ciudad": "Postal code, city, state (one line)",
            "f_ticket_telefono": "Phone on receipt (number only; printed as TELEFONO: …)",
            "f_ticket_linea_folio": "Ticket / issue line",
            "ticket_linea_folio_help": "Placeholders: {folio}, {fecha_hora}, {fecha}. Example: TICKET: {folio}    EXP: {fecha_hora}",
            "section_ticket_footer": "Receipt — footer / policies",
            "f_ticket_footer": "Footer text (one line per row)",
            "ticket_footer_help": "Placeholders: {folio}, {fecha_hora}, {fecha}, {cliente}, {total}, {fecha_entrega}, {recepcionista}.",
            "section_legal_optional": "Terms & privacy (optional)",
            "f_terminos": "Terms and conditions",
            "f_politica": "Privacy policy"
        },
        "areas": {
            "breadcrumb_parent": "Administration",
            "breadcrumb_current": "TIBU areas",
            "title": "Operational areas",
            "subtitle": "Disabling only turns off the flow (is_enabled); scans and history are kept.",
            "refresh": "Refresh",
            "new": "New area",
            "th_code": "Code",
            "th_name": "Name",
            "th_sort": "Sort",
            "th_active": "Catalog active",
            "th_enabled": "Enabled",
            "th_double_scan": "Double scan",
            "th_floor": "Floor/zone",
            "th_actions": "Actions",
            "yes": "Yes",
            "no": "No",
            "edit": "Edit",
            "disable": "Disable",
            "modal_new": "New area",
            "modal_edit": "Edit area",
            "f_name": "Name",
            "f_sort": "Sort order",
            "f_active_cat": "Active in catalog",
            "f_enabled": "Enabled for operations",
            "f_double": "Requires double scan",
            "f_floor": "Floor / label (optional)",
            "cancel": "Cancel",
            "save": "Save",
            "saving": "Saving…",
            "load_error": "Could not load the list.",
            "name_required": "Enter the area name.",
            "saved": "Changes saved.",
            "created": "Area created.",
            "save_error": "Could not save.",
            "disable_confirm_title": "Disable area?",
            "disable_confirm_body": "The area will stop appearing in the operational flow. History is not deleted.",
            "disabled_ok": "Area disabled.",
            "disable_error": "Could not disable."
        },
        "impresoras": {
            "nav": "Printers",
            "breadcrumb_parent": "Administration",
            "breadcrumb_current": "Printers by area",
            "title": "Printers by area",
            "subtitle": "Configure thermal printers linked to each operational area.",
            "pos_hint": "POS sales print on the sales printer for the user's assigned area.",
            "pos_hint_fallback": " If the user has no area, the {area} printer is used.",
            "refresh": "Refresh",
            "new": "New printer",
            "filter_area": "Filter by area",
            "filter_all": "All areas",
            "th_area": "Area",
            "th_codigo": "Code",
            "th_nombre": "Name",
            "th_sistema": "Windows name",
            "th_tipo": "Type",
            "th_red": "Network",
            "th_activa": "Active",
            "th_default": "Default",
            "th_actions": "Actions",
            "badge_pos": "POS",
            "yes": "Yes",
            "no": "No",
            "edit": "Edit",
            "empty": "No printers registered.",
            "modal_new": "New printer",
            "modal_edit": "Edit printer",
            "f_area": "Area",
            "f_area_placeholder": "Select an area",
            "f_codigo": "Code",
            "f_nombre": "Display name",
            "f_sistema": "System printer name",
            "f_sistema_hint": "Exact printer name in Windows or CUPS.",
            "f_tipo": "Ticket type",
            "tipo_venta": "Sales (customer)",
            "tipo_cocina": "Kitchen / production",
            "f_ip": "IP (optional)",
            "f_puerto": "Port",
            "f_ancho": "Paper width (mm)",
            "f_activa": "Active",
            "f_default": "Default in area",
            "f_default_hint": "When several exist in the same area, the default one is used.",
            "cancel": "Cancel",
            "save": "Save",
            "saving": "Saving…",
            "load_error": "Could not load the list.",
            "validation_required": "Fill in area, name and system printer name.",
            "created": "Printer registered.",
            "updated": "Changes saved.",
            "deleted": "Printer deleted.",
            "save_error": "Could not save.",
            "delete_error": "Could not delete.",
            "test_btn": "Test print",
            "test_loading": "Printing…",
            "test_ok": "Test ticket sent.",
            "test_error": "Could not print the test ticket."
        }
    },
    "inventory": {
        "products": {
            "breadcrumb_parent": "Inventory",
            "breadcrumb_current": "Warehouse products",
            "title": "Inventory — products",
            "subtitle": "Warehouse / supplies (inventory_* tables). Not the laundry catalog or POS.",
            "search": "Search",
            "search_ph": "SKU or name",
            "filter_active": "Active",
            "filter_all": "All",
            "filter_yes": "Yes",
            "filter_no": "No",
            "btn_new": "New product",
            "btn_edit": "Edit",
            "btn_delete": "Delete",
            "btn_disable": "Disable",
            "btn_activate": "Enable",
            "btn_movements": "Movements",
            "th_sku": "SKU",
            "th_name": "Name",
            "th_type": "Type",
            "th_stock": "Stock",
            "th_min_stock": "Min. stock",
            "th_active": "Active",
            "th_actions": "Actions",
            "stock_hint": "Stock is updated by movements (in/out/adjustment).",
            "bulk_csv_title": "Bulk adjustment (CSV)",
            "bulk_csv_hint": "File with header sku,quantity — signed quantity like an adjustment movement (warehouse inventory).",
            "btn_bulk_csv": "Upload adjustment CSV",
            "bulk_csv_ok": "Applied {n} adjustments (ref. {ref}).",
            "modal_create": "New inventory product",
            "modal_edit": "Edit product",
            "field_sku": "SKU / code",
            "field_name": "Name",
            "field_type": "Product type",
            "field_brand": "Brand",
            "field_category": "Category",
            "field_subcategory": "Subcategory",
            "field_supplier": "Supplier",
            "field_min_stock": "Minimum stock (alert)",
            "field_min_stock_hint": "Optional. If empty, the CLI uses the global threshold (config).",
            "field_active": "Active",
            "optional": "Optional",
            "save": "Save",
            "cancel": "Cancel",
            "confirm_delete": "Delete this inventory product?",
            "confirm_disable": "Disable «{name}»?",
            "confirm_activate": "Enable «{name}»?",
            "disable": "Disable",
            "activate": "Enable",
            "disabled_ok": "Inventory product disabled.",
            "activated_ok": "Inventory product enabled.",
            "modal_movements": "Stock movements",
            "mov_type": "Type",
            "mov_qty": "Quantity",
            "mov_ref": "Reference",
            "mov_date": "Date",
            "mov_user": "User",
            "type_in": "In",
            "type_out": "Out",
            "type_adj": "Adjustment",
            "btn_add_movement": "Record movement",
            "empty": "No products.",
            "empty_movements": "No movements.",
            "page": "Page {n} of {m} · {t} records",
            "prev": "Previous",
            "next": "Next",
            "loading": "Loading…",
            "saved": "Saved.",
            "deleted": "Deleted.",
            "error": "Error: {msg}",
            "movement_ok": "Movement recorded.",
            "page_title": "Inventory — products"
        },
        "transfer_documents": {
            "menu": "Documents (receipt / issue)",
            "breadcrumb_parent": "Inventory",
            "breadcrumb_current": "Documents",
            "title": "Inventory documents",
            "subtitle": "Warehouse receipts, internal deliveries, and documented issues (draft → confirm).",
            "filter_status": "Status",
            "filter_type": "Type",
            "filter_all": "All",
            "btn_apply": "Apply",
            "btn_new": "New document",
            "btn_view": "View",
            "btn_continue": "Continue",
            "th_folio": "Folio",
            "th_type": "Type",
            "th_status": "Status",
            "th_created": "Created",
            "th_creator": "Created by",
            "th_actions": "Actions",
            "loading": "Loading…",
            "empty": "No documents yet.",
            "empty_cta": "Create first receipt or issue",
            "page": "Page {n} of {m} · {t} records",
            "prev": "Previous",
            "next": "Next",
            "type_inbound": "Receipt",
            "type_internal": "Internal delivery",
            "type_outbound": "Issue",
            "status_draft": "Draft",
            "status_confirmed": "Confirmed",
            "status_cancelled": "Cancelled",
            "error": "Error: {msg}",
            "page_title": "Inventory — documents"
        },
        "transfer_documents_detail": {
            "breadcrumb_new": "New",
            "title_new": "New document",
            "title": "Document",
            "page_title_new": "Inventory — new document",
            "page_title": "Inventory — document {folio}",
            "btn_save_draft": "Save draft",
            "btn_confirm": "Confirm document",
            "btn_cancel_draft": "Cancel draft",
            "field_folio": "Folio",
            "field_type": "Document type",
            "field_area": "Destination area",
            "field_recipient": "Recipient user",
            "field_supplier": "Supplier",
            "field_supplier_ref": "Supplier ref. (invoice/ASN)",
            "field_notes": "Notes",
            "hint_internal_destination": "To confirm an internal delivery, set at least one destination area or recipient user.",
            "lines_title": "Lines",
            "btn_add_line": "Add line",
            "th_product": "Product",
            "th_qty": "Quantity",
            "lines_empty": "No lines. Add at least one line before saving or confirming.",
            "btn_change_product": "Change",
            "aria_pick_product": "Choose product",
            "aria_remove_line": "Remove line",
            "pick_product_title": "Search warehouse product",
            "pick_empty": "No results. Type SKU or name and search.",
            "pick_use": "Use",
            "modal_confirm_title": "Confirm document",
            "modal_confirm_body": "Confirming will post stock movements (in or out depending on type). This cannot be undone from here.",
            "modal_cancel_title": "Cancel draft",
            "modal_cancel_body": "The document will be marked cancelled and will not affect stock.",
            "saved": "Draft saved.",
            "confirmed_ok": "Document confirmed.",
            "cancelled_ok": "Draft cancelled.",
            "err_folio": "Enter a folio.",
            "err_lines": "Add at least one line.",
            "err_product_line": "Each line must have a product selected.",
            "err_qty": "Each quantity must be greater than zero.",
            "meta_title": "Audit",
            "meta_confirmed": "Confirmed",
            "meta_cancelled": "Cancelled"
        },
        "quick_movements": {
            "menu": "Quick in / out",
            "breadcrumb_parent": "Inventory",
            "breadcrumb_current": "Quick movements",
            "title": "Quick stock in / out",
            "subtitle": "Record purchases (detergent, supplies) or issues (consumption, counter sales) in one step. Folio is generated automatically.",
            "mode_in": "In (purchase / receipt)",
            "mode_out": "Out (consumption / dispatch)",
            "search_ph": "Search by SKU or name…",
            "search_btn": "Search",
            "pick_hint": "Pick a product and click Add. You can add several lines before submitting.",
            "pick_empty": "No results. Try another term or create the product under Warehouse products.",
            "btn_add_line": "Add to list",
            "th_product": "Product",
            "th_stock": "Stock",
            "th_qty": "Quantity",
            "lines_title": "Products to move",
            "lines_empty": "Add at least one product.",
            "field_notes": "Notes (optional)",
            "btn_submit_in": "Post receipt",
            "btn_submit_out": "Post issue",
            "btn_clear": "Clear list",
            "link_products": "Manage products",
            "link_documents": "Documents with manual folio",
            "success": "Movement posted. Folio: {folio}",
            "err_lines": "Add at least one product with quantity greater than zero.",
            "err_qty": "Enter a valid quantity.",
            "err_duplicate": "This product is already in the list. Change the quantity on that row.",
            "page_title": "Inventory — quick in / out"
        }
    },
    "catalog": {
        "clients": {
            "breadcrumb_parent": "Catalog",
            "breadcrumb_current": "Clients",
            "title": "Clients",
            "page_title": "Clients",
            "subtitle": "Shared catalog; quick search and create also from Point of Sale.",
            "search_ph": "Search name, email, phone…",
            "filter_all_categories": "All classifications",
            "btn_new": "New client",
            "th_name": "Name",
            "th_category": "Classification",
            "th_email": "Email",
            "th_phone": "Phone",
            "th_address": "Address",
            "th_points": "Points",
            "th_actions": "Actions",
            "badge_mostrador": "Counter (read-only)",
            "empty": "No results.",
            "loading": "Loading…",
            "page": "Page {n} of {m} · {t} records",
            "prev": "Previous",
            "next": "Next",
            "modal_new": "New client",
            "modal_edit": "Edit client",
            "field_name": "Name",
            "field_email": "Email",
            "field_phone": "Phone",
            "field_address": "Home address",
            "field_address_ph": "Street, number, neighborhood, references…",
            "field_address_hint": "Used automatically in POS when home delivery is selected.",
            "field_category": "Classification",
            "category_none": "No classification",
            "save": "Save",
            "saving": "Saving…",
            "cancel": "Cancel",
            "delete_confirm": "Delete client «{name}»?",
            "delete_yes": "Yes, delete",
            "delete_no": "No",
            "name_required": "Name is required.",
            "save_error": "Could not save.",
            "delete_error": "Could not delete."
        },
        "client_categories": {
            "breadcrumb_parent": "Catalog",
            "breadcrumb_current": "Client classification",
            "title": "Client classification",
            "page_title": "Client classification",
            "subtitle": "Segment your customer base (VIP, frequent, corporate, etc.) with colors for catalog and POS.",
            "refresh": "Refresh",
            "new": "New classification",
            "th_color": "Color",
            "th_code": "Code",
            "th_name": "Name",
            "th_clients": "Clients",
            "th_sort": "Order",
            "th_active": "Active",
            "th_actions": "Actions",
            "yes": "Yes",
            "no": "No",
            "edit": "Edit",
            "disable": "Disable",
            "empty": "No classifications yet.",
            "modal_new": "New classification",
            "modal_edit": "Edit classification",
            "f_code": "Code",
            "f_name": "Name",
            "f_color": "Color",
            "f_sort": "Order",
            "f_active": "Active",
            "cancel": "Cancel",
            "save": "Save",
            "saving": "Saving…",
            "saved": "Classification updated.",
            "created": "Classification created.",
            "disabled": "Classification disabled.",
            "load_error": "Could not load catalog.",
            "save_error": "Could not save.",
            "name_required": "Name is required.",
            "color_invalid": "Invalid color. Use #RRGGBB format."
        }
    }
}
