{
    "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": {
        "sidebar": {
            "home": "Home",
            "sales_pos": "Front desk & sales",
            "menu_laundry_pos_prices": "Laundry POS prices & items",
            "catalog": "Catalog",
            "catalog_categories": "Categories",
            "catalog_products": "Products",
            "catalog_service": "Service types",
            "catalog_garment_types": "Garment types",
            "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": {
        "services": {
            "nav": "Services",
            "page_title": "Services catalog",
            "breadcrumb": "Services",
            "subtitle": "Separate module for service types used by TIBU POS.",
            "empty": "No services configured."
        },
        "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": "Your work area",
            "operator_area_body": "Assigned area: {area}",
            "operator_blocked_title": "Access restricted",
            "operator_blocked_body": "This screen is for operators only (not Reception).",
            "operator_blocked_body_short": "No access: this screen is for operators only.",
            "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": "Product catalog",
            "catalog_hint": "Pick a product configured in admin (service, load and price come from the product). Add to cart and optional content details.",
            "catalog_title_legacy": "Legacy catalog (products)",
            "catalog_hint_legacy": "For compatibility with older item-based sales. Does not consume internal TIBU inventory.",
            "service_type": "Service type",
            "service_type_ph": "Service first (wash, ironing…)",
            "tibu_qty_pieces": "Quantity (pieces)",
            "add_tibu_line": "Add line",
            "add_content_line": "Product contents",
            "add_content_hint": "Describe which garments the selected product includes. Not charged; shown on the ticket.",
            "add_content_select_product": "Select a product in the catalog above first.",
            "content_for_product": "includes",
            "add_content_btn": "Add contents",
            "content_modal_btn": "Product contents",
            "content_pending_hint": "{n} garment(s) pending. They will be added when you confirm the product.",
            "content_modal_title": "Product 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 product to the cart.",
            "content_modal_subtitle_cart": "Informational detail for this product (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 (product)",
            "filter_category": "Filter by category",
            "all_categories": "All categories",
            "select_product": "Product",
            "add_catalog_btn": "Add product to cart",
            "optional_service_uses_product_or_header": "Optional: uses product default or header service type",
            "th_billing_mode": "Billing mode",
            "billing_piece_unit": "Per unit (product price)",
            "billing_weight_catalog": "By weight ($/kg from product)",
            "loading_catalog": "Loading catalog…",
            "badge_service": "Service",
            "badge_product": "Product",
            "badge_stock": "Stock: {n}",
            "per_kg": "Per kg",
            "per_piece": "Per piece",
            "per_kg_suffix": " / kg",
            "no_products": "No products or services. Catalogs",
            "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_name_ph": "e.g. John Doe",
            "client_email": "Email",
            "priority": "Priority (SLA)",
            "priority_none": "No specific level",
            "delivery": "Home delivery",
            "delivery_address": "Delivery address",
            "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",
            "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": "Payments",
            "payments_hint": "Split the total across methods. With one line, the amount follows the total.",
            "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 payments before finalizing (they must match the total).",
            "total": "Total",
            "saving": "Saving…",
            "submit": "Charge and confirm sale",
            "open_order": "Open order",
            "save_changes": "Save changes",
            "finalize_order": "Finalize order",
            "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_saved": "Customer saved.",
            "client_error": "Error saving: {msg}",
            "sale_ok": "Sale registered: {folio}",
            "sale_error": "Error: {msg}",
            "preview_sync_notice": "Totals calculated with backend preview.",
            "page_title": "New sale (POS)",
            "validation": {
                "cliente_required": "Enter the customer name.",
                "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 service type 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_priority_level": "Priority (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_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",
            "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 & products",
            "subtitle": "One catalog for front-desk sales: services, weight- or piece-priced items, and optional on-hand qty for consumables (same table as the POS). The old product list is kept only as an archive under System.",
            "tab_categories": "Categories",
            "tab_products": "Products",
            "refresh": "Refresh",
            "new_category": "New category",
            "new_product": "New product",
            "th_code": "Code",
            "th_name": "Name",
            "th_sort": "Sort",
            "th_active": "Active",
            "th_actions": "Actions",
            "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 product",
            "modal_edit_prod": "Edit product",
            "f_code": "Code",
            "f_name": "Name",
            "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_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 product.",
            "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": "Product updated.",
            "created_prod": "Product created.",
            "disabled_prod": "Product disabled.",
            "unit_price_help": "Used when there is no row below for that service type.",
            "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.",
            "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."
        }
    },
    "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": "Catalogs",
            "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…",
            "btn_new": "New client",
            "th_name": "Name",
            "th_email": "Email",
            "th_phone": "Phone",
            "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",
            "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."
        }
    }
}
