{
  "config": {
    "step": {
      "user": {
        "title": "Maintenance Supporter",
        "description": "Set up your maintenance management system.",
        "menu_options": {
          "create_object": "Create Maintenance Object",
          "create_from_template": "Create from Template",
          "global_setup": "Global Settings"
        }
      },
      "create_from_template": {
        "title": "Select Template Category",
        "description": "Choose a category to browse predefined maintenance templates.",
        "data": {
          "template_category": "Category",
          "go_back": "Go back"
        },
        "data_description": {
          "go_back": "Return to the main menu without saving."
        }
      },
      "template_select": {
        "title": "Select Template",
        "description": "Choose a maintenance template to use as a starting point.",
        "data": {
          "template_id": "Template",
          "go_back": "Go back"
        },
        "data_description": {
          "go_back": "Return to category selection without saving."
        }
      },
      "template_customize": {
        "title": "Customize Template",
        "description": "Customize the {template_name} template. It includes {task_count} tasks: {task_list}.",
        "data": {
          "name": "Object name",
          "area_id": "Area",
          "manufacturer": "Manufacturer",
          "model": "Model",
          "serial_number": "Serial number",
          "documentation_url": "Manual / documentation URL",
          "notes": "Notes",
          "go_back": "Go back"
        },
        "data_description": {
          "name": "A name for this maintenance object.",
          "area_id": "The area where this object is located.",
          "manufacturer": "The manufacturer of the object.",
          "model": "The model name or number.",
          "serial_number": "The serial number of the object.",
          "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.",
          "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.",
          "go_back": "Return to template selection without saving."
        }
      },
      "global_setup": {
        "title": "Global Settings",
        "description": "Configure global maintenance settings.",
        "data": {
          "default_warning_days": "Default warning days before due",
          "notifications_enabled": "Enable notifications",
          "notify_service": "Notification service"
        },
        "data_description": {
          "default_warning_days": "Number of days before a maintenance task is due to show a warning.",
          "notifications_enabled": "Send notifications when maintenance tasks become due.",
          "notify_service": "The notification service to use (e.g., notify.mobile_app_phone)."
        }
      },
      "create_object": {
        "title": "Create Maintenance Object",
        "description": "Define a device or asset to manage maintenance for.",
        "data": {
          "name": "Object name",
          "area_id": "Area",
          "manufacturer": "Manufacturer",
          "model": "Model",
          "serial_number": "Serial number",
          "documentation_url": "Manual / documentation URL",
          "notes": "Notes",
          "installation_date": "Installation date",
          "warranty_expiry": "Warranty expiry",
          "go_back": "Go back"
        },
        "data_description": {
          "name": "A unique name for this maintenance object (e.g., 'Pool Pump', 'Car').",
          "area_id": "The area in your home where this object is located.",
          "manufacturer": "The manufacturer of the object.",
          "model": "The model name or number.",
          "serial_number": "The serial number of the object.",
          "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.",
          "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.",
          "installation_date": "When this object was installed or purchased.",
          "warranty_expiry": "When the manufacturer warranty for this object expires.",
          "go_back": "Return to the main menu without saving."
        }
      },
      "task_menu": {
        "title": "Maintenance Tasks",
        "description": "Add maintenance tasks for {object_name}. Currently {task_count} task(s) defined.",
        "menu_options": {
          "add_task": "Add Maintenance Task",
          "finish": "Finish Setup"
        }
      },
      "add_task": {
        "title": "Add Maintenance Task",
        "description": "Define a maintenance task for {object_name}.",
        "data": {
          "name": "Task name",
          "type": "Maintenance type",
          "schedule_type": "Schedule type",
          "custom_icon": "Task icon",
          "go_back": "Go back",
          "reading_unit": "Reading unit (for reading tasks, e.g. kWh)"
        },
        "data_description": {
          "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').",
          "type": "The category of maintenance work.",
          "schedule_type": "How this task should be scheduled.",
          "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).",
          "go_back": "Return to the task menu without saving."
        }
      },
      "time_based": {
        "title": "Time-based Schedule",
        "description": "Configure the time interval for this maintenance task.",
        "data": {
          "interval_days": "Interval",
          "interval_unit": "Interval unit",
          "interval_anchor": "Interval anchor",
          "last_performed": "Last performed",
          "warning_days": "Warning days before due",
          "go_back": "Go back"
        },
        "data_description": {
          "interval_days": "How often this maintenance repeats, combined with the interval unit.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.",
          "last_performed": "When this maintenance was last performed. Leave empty if never done.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to task creation without saving."
        }
      },
      "one_time": {
        "title": "One-time Task",
        "description": "Configure a single, non-recurring maintenance task. It is archived once completed.",
        "data": {
          "due_date": "Due date",
          "warning_days": "Warning days before due",
          "go_back": "Go back"
        },
        "data_description": {
          "due_date": "The date this one-time task is due.",
          "warning_days": "Number of days before the due date to show a warning.",
          "go_back": "Return to task creation without saving."
        }
      },
      "calendar": {
        "title": "Calendar Schedule",
        "description": "Configure a calendar-based recurrence (weekdays, nth weekday of the month, or a day of the month).",
        "data": {
          "weekdays": "On these weekdays",
          "nth": "Which occurrence",
          "weekday": "Weekday",
          "day": "Day of month",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "last_day": "Last day of the month",
          "business": "Business days only",
          "offset": "Offset (days)",
          "last_performed": "Last performed"
        },
        "data_description": {
          "weekdays": "The task repeats on each selected weekday.",
          "nth": "Which occurrence in the month (e.g. 1st, or Last).",
          "weekday": "The weekday for the nth-weekday rule (e.g. Saturday).",
          "day": "Day of the month (1-31; clamped to the month's length).",
          "warning_days": "Number of days before the due date to show a warning.",
          "go_back": "Return to task creation without saving.",
          "last_day": "Overrides the day number: the task is due on the month's last day.",
          "business": "Roll a weekend date back to the preceding Friday (e.g. last business day).",
          "offset": "Shift the computed date by ±N days (e.g. -2 = two days before)."
        }
      },
      "sensor_select": {
        "title": "Select Trigger Sensor",
        "description": "Choose a Home Assistant entity to monitor for this maintenance task.",
        "data": {
          "trigger_entity": "Entity to monitor",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_entity": "Select the sensor entity that should trigger this maintenance task.",
          "go_back": "Return to task creation without saving."
        }
      },
      "sensor_attribute": {
        "title": "Select Attribute",
        "description": "Choose which value to monitor from {entity_id}. Current state: {current_state} {unit}",
        "data": {
          "trigger_attribute": "Value to monitor",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_attribute": "Select the entity state or a specific attribute to monitor.",
          "go_back": "Return to entity selection without saving."
        }
      },
      "trigger_type": {
        "title": "Trigger Type",
        "description": "How should the sensor value trigger maintenance?",
        "data": {
          "trigger_type": "Trigger type",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_type": "Threshold: triggers when value exceeds limits. Counter: triggers after accumulating a target value. State Change: triggers after a number of state transitions.",
          "go_back": "Return to attribute selection without saving."
        }
      },
      "trigger_threshold": {
        "title": "Threshold Configuration",
        "description": "Set threshold values for **{entity_id}** ({attribute}).\nCurrent: **{current_value} {unit}** | Avg: {average} | Range: {minimum}–{maximum} ({data_period}d)\nSuggested above: {suggested_above} | Suggested below: {suggested_below}",
        "data": {
          "trigger_above": "Trigger when above",
          "trigger_below": "Trigger when below",
          "trigger_equals": "Trigger when equal to",
          "trigger_not_equals": "Trigger when different from",
          "trigger_for_minutes": "For at least (minutes)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_above": "Trigger maintenance when value exceeds this threshold.",
          "trigger_below": "Trigger maintenance when value falls below this threshold.",
          "trigger_equals": "Trigger maintenance when the value equals this level.",
          "trigger_not_equals": "Trigger maintenance when the value differs from this level.",
          "trigger_for_minutes": "Value must exceed threshold for this many minutes before triggering.",
          "interval_days": "Optional time-based safety interval in addition to the sensor trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to trigger type selection without saving."
        }
      },
      "trigger_counter": {
        "title": "Counter Configuration",
        "description": "Set counter target for {entity_id} ({attribute}). Current: {current_value} {unit}.",
        "data": {
          "trigger_target_value": "Target value",
          "trigger_delta_mode": "Delta mode (count changes, not absolute)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers",
          "trigger_baseline_value": "Start reading (optional)"
        },
        "data_description": {
          "trigger_target_value": "Trigger maintenance when this accumulated value is reached.",
          "trigger_delta_mode": "If enabled, counts the difference from a baseline instead of the absolute value.",
          "interval_days": "Optional time-based safety interval in addition to the counter trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to trigger type selection without saving."
        }
      },
      "trigger_state_change": {
        "title": "State Change Configuration",
        "description": "Count state transitions of {entity_id}.",
        "data": {
          "trigger_from_state": "From state (optional)",
          "trigger_to_state": "To state (optional)",
          "trigger_target_changes": "Number of changes to trigger",
          "trigger_for_minutes": "For at least (minutes)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_from_state": "Only count transitions from this state. Leave empty for any.",
          "trigger_to_state": "Only count transitions to this state. Leave empty for any.",
          "trigger_target_changes": "Number of matching state changes before triggering maintenance.",
          "interval_days": "Optional time-based safety interval in addition to the state change trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to trigger type selection without saving.",
          "trigger_for_minutes": "The new state must hold this long before the change counts. 0 = count immediately."
        }
      },
      "trigger_runtime": {
        "title": "Runtime Configuration",
        "description": "Track accumulated runtime of {entity_id}. Maintenance triggers when total on-time reaches the target hours.",
        "data": {
          "trigger_runtime_hours": "Target runtime (hours)",
          "trigger_on_states": "Active states (comma-separated)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_runtime_hours": "Trigger maintenance after this many hours of accumulated runtime.",
          "trigger_on_states": "Which sensor states count as 'active'. Leave empty for default: on, 1, true. Example: in_use, running",
          "interval_days": "Optional time-based safety interval in addition to the runtime trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to trigger type selection without saving."
        }
      },
      "compound_logic": {
        "title": "Compound Trigger",
        "description": "Choose how multiple conditions should be combined.",
        "data": {
          "compound_logic": "Logic",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "compound_logic": "AND = all conditions must trigger. OR = any condition triggers.",
          "go_back": "Return to trigger type selection without saving."
        }
      },
      "compound_condition_entity": {
        "title": "Condition #{condition_num} — Entity",
        "description": "Select the entity for this condition.",
        "data": {
          "trigger_entity": "Entity",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_entity": "The sensor entity to monitor for this condition.",
          "go_back": "Return to previous step without saving."
        }
      },
      "compound_condition_type": {
        "title": "Condition #{condition_num} — Type",
        "description": "How should this condition evaluate the sensor?",
        "data": {
          "trigger_type": "Trigger type",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_type": "The method used to determine when this condition triggers.",
          "go_back": "Return to entity selection without saving."
        }
      },
      "compound_condition_threshold": {
        "title": "Condition — Threshold",
        "data": {
          "trigger_above": "Trigger above",
          "trigger_below": "Trigger below",
          "trigger_equals": "Trigger when equal to",
          "trigger_not_equals": "Trigger when different from",
          "trigger_for_minutes": "Duration (minutes)",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_above": "Trigger when value exceeds this threshold.",
          "trigger_below": "Trigger when value drops below this threshold.",
          "trigger_equals": "Trigger maintenance when the value equals this level.",
          "trigger_not_equals": "Trigger maintenance when the value differs from this level.",
          "trigger_for_minutes": "Value must remain beyond threshold for this duration.",
          "go_back": "Return to condition type selection without saving."
        }
      },
      "compound_condition_counter": {
        "title": "Condition — Counter",
        "data": {
          "trigger_target_value": "Target value",
          "trigger_delta_mode": "Delta mode",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_target_value": "Trigger when accumulated value reaches this target.",
          "trigger_delta_mode": "Count changes from a baseline instead of the absolute value.",
          "go_back": "Return to condition type selection without saving."
        }
      },
      "compound_condition_state_change": {
        "title": "Condition — State Change",
        "data": {
          "trigger_from_state": "From state",
          "trigger_to_state": "To state",
          "trigger_target_changes": "Number of changes",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_from_state": "Only count transitions from this state. Leave empty for any.",
          "trigger_to_state": "Only count transitions to this state. Leave empty for any.",
          "trigger_target_changes": "Number of matching state changes before triggering.",
          "go_back": "Return to condition type selection without saving."
        }
      },
      "compound_condition_runtime": {
        "title": "Condition — Runtime",
        "data": {
          "trigger_runtime_hours": "Target runtime (hours)",
          "trigger_on_states": "Active states",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_runtime_hours": "Trigger after this many hours of accumulated runtime.",
          "trigger_on_states": "Sensor states counted as 'active'. Leave empty for default.",
          "go_back": "Return to condition type selection without saving."
        }
      },
      "compound_review": {
        "title": "Compound Trigger Review",
        "description": "{condition_count} condition(s) configured with {compound_logic} logic.",
        "data": {
          "compound_action": "Action",
          "go_back": "Go back"
        },
        "data_description": {
          "go_back": "Return to logic selection without saving."
        }
      },
      "manual": {
        "title": "Manual Schedule",
        "description": "This task has no automatic schedule. You can mark it as due manually.",
        "data": {
          "warning_days": "Warning days before due",
          "notes": "Notes",
          "go_back": "Go back"
        },
        "data_description": {
          "warning_days": "Number of days before due date to show a warning.",
          "notes": "Additional notes or instructions for this task.",
          "go_back": "Return to task creation without saving."
        }
      },
      "reconfigure": {
        "title": "Reconfigure {name}",
        "description": "Update the settings for this maintenance object.",
        "data": {
          "name": "Object name",
          "area_id": "Area",
          "manufacturer": "Manufacturer",
          "model": "Model",
          "serial_number": "Serial number",
          "documentation_url": "Manual / documentation URL",
          "notes": "Notes",
          "installation_date": "Installation date",
          "warranty_expiry": "Warranty expiry"
        },
        "data_description": {
          "name": "The name of this maintenance object.",
          "area_id": "The area where this object is located.",
          "manufacturer": "The manufacturer of this object.",
          "model": "The model of this object.",
          "serial_number": "The serial number of this object.",
          "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.",
          "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.",
          "installation_date": "When this object was installed.",
          "warranty_expiry": "When the manufacturer warranty for this object expires."
        }
      }
    },
    "error": {
      "name_exists": "A maintenance object with this name already exists.",
      "no_tasks": "At least one maintenance task is required.",
      "invalid_entity": "The selected entity does not exist or has no numeric data.",
      "invalid_attribute": "The selected attribute is not available on this entity.",
      "invalid_threshold": "At least one threshold (above or below) must be set.",
      "invalid_interval": "Interval must be a positive number.",
      "invalid_due_date": "A due date is required for one-time tasks.",
      "min_exceeds_max": "Minimum interval must not exceed maximum interval.",
      "invalid_notify_service": "Invalid notification service format. Use 'notify.service_name' (e.g., notify.mobile_app_phone).",
      "notify_service_not_found": "This notification service was not found in Home Assistant. Please verify the service name.",
      "nfc_tag_duplicate": "This NFC tag is already linked to another task."
    },
    "abort": {
      "already_configured": "This maintenance object is already configured.",
      "global_already_exists": "Global settings already configured.",
      "template_not_found": "The selected template was not found.",
      "missing_data": "Required data was not provided.",
      "reconfigure_successful": "Configuration updated successfully.",
      "reconfigure_cancelled": "Reconfiguration cancelled."
    }
  },
  "options": {
    "step": {
      "init": {
        "title": "Maintenance Options",
        "description": "{object_info}",
        "menu_options": {
          "manage_tasks": "Manage Tasks",
          "add_task": "Add New Task",
          "object_settings": "Object Settings",
          "done": "Done"
        }
      },
      "global_init": {
        "title": "Global Settings",
        "description": "Configure global maintenance settings.",
        "menu_options": {
          "general_settings": "General Settings",
          "advanced_features": "Advanced Features",
          "panel_access": "Panel Access",
          "budget_settings": "Budget Settings",
          "manage_groups": "Manage Groups",
          "notification_settings": "Notification Settings",
          "notification_actions": "Interactive Actions",
          "test_notification": "Send Test Notification",
          "done": "Done"
        }
      },
      "advanced_features": {
        "title": "Advanced Features",
        "description": "Choose which advanced features to show in the UI. Disabling a feature hides it from the interface but does not delete any data.",
        "data": {
          "advanced_adaptive_visible": "Adaptive Scheduling",
          "advanced_predictions_visible": "Sensor Predictions",
          "advanced_seasonal_visible": "Seasonal Adjustments",
          "advanced_environmental_visible": "Environmental Correlation",
          "advanced_budget_visible": "Budget Tracking",
          "advanced_groups_visible": "Groups",
          "advanced_checklists_visible": "Checklists",
          "advanced_schedule_time_visible": "Time-of-day scheduling"
        },
        "data_description": {
          "advanced_adaptive_visible": "Show EWA, Weibull analysis, and interval suggestions for tasks.",
          "advanced_predictions_visible": "Show sensor degradation analysis and threshold prediction charts.",
          "advanced_seasonal_visible": "Show seasonal factor charts and monthly adjustment data.",
          "advanced_environmental_visible": "Show environmental correlation (temperature, humidity) adjustments.",
          "advanced_budget_visible": "Show monthly/yearly budget tracking and alerts.",
          "advanced_groups_visible": "Show maintenance group management.",
          "advanced_checklists_visible": "Show task checklists for step-by-step completion.",
          "advanced_schedule_time_visible": "Allow tasks to become overdue at a specific time of day instead of midnight."
        }
      },
      "panel_access": {
        "title": "Panel Access",
        "description": "Admins always have full access. To delegate create, edit and delete to specific non-admins, turn on the option below and select them — everyone else sees only Complete and Skip. Found {user_count} non-admin user(s).",
        "data": {
          "operator_write_enabled": "Allow selected users to create, edit and delete",
          "admin_panel_user_ids": "Users with full panel access"
        },
        "data_description": {
          "operator_write_enabled": "Off (default): only admins can modify content. On: the users selected below also get full create/edit/delete access.",
          "admin_panel_user_ids": "Listed users see the full panel; everyone else sees only Complete and Skip on each task."
        }
      },
      "general_settings": {
        "title": "General Settings",
        "description": "Configure basic settings for Maintenance Supporter.",
        "data": {
          "default_warning_days": "Default warning days before due",
          "notifications_enabled": "Enable notifications",
          "notify_service": "Notification service",
          "panel_enabled": "Show sidebar panel",
          "panel_title": "Sidebar panel title"
        },
        "data_description": {
          "default_warning_days": "Number of days before a maintenance task is due to show a warning.",
          "notifications_enabled": "Send notifications when maintenance tasks become due or are overdue.",
          "notify_service": "The notification service to use (e.g., notify.mobile_app_phone).",
          "panel_enabled": "Show a Maintenance Supporter panel in the sidebar.",
          "panel_title": "Custom name for the sidebar entry. Leave blank to use \"Maintenance\". Useful to avoid clashing with Home Assistant's built-in Maintenance dashboard."
        }
      },
      "notification_settings": {
        "title": "Notification Settings",
        "description": "Configure when and how often notifications are sent for each status.",
        "data": {
          "notify_due_soon_enabled": "Notify when due soon",
          "notify_due_soon_interval_hours": "Due soon reminder interval (hours)",
          "notify_overdue_enabled": "Notify when overdue",
          "notify_overdue_interval_hours": "Overdue reminder interval (hours)",
          "notify_triggered_enabled": "Notify when triggered",
          "notify_triggered_interval_hours": "Triggered reminder interval (hours)",
          "quiet_hours_enabled": "Enable quiet hours",
          "quiet_hours_start": "Quiet hours start",
          "quiet_hours_end": "Quiet hours end",
          "max_notifications_per_day": "Max notifications per day",
          "notification_bundling_enabled": "Bundle notifications",
          "notification_bundle_threshold": "Bundle threshold",
          "notification_title_style": "Notification title style"
        },
        "data_description": {
          "notify_due_soon_interval_hours": "How often to repeat the due-soon reminder. Set to 0 for a single notification.",
          "notify_overdue_interval_hours": "How often to repeat the overdue reminder. Set to 0 for a single notification.",
          "notify_triggered_interval_hours": "How often to repeat the triggered notification. Set to 0 for a single notification.",
          "quiet_hours_enabled": "Suppress notifications during quiet hours.",
          "max_notifications_per_day": "Maximum number of notifications per day. Set to 0 for unlimited.",
          "notification_bundling_enabled": "Send a single summary notification when multiple tasks need attention.",
          "notification_bundle_threshold": "Minimum number of tasks to trigger a bundled notification.",
          "notification_title_style": "What appears as the notification's TITLE. Default keeps the per-status text (e.g. 'Maintenance overdue!'). Object name / Task name help when phone notifications stack."
        }
      },
      "budget_settings": {
        "title": "Budget Settings",
        "description": "Set monthly and yearly maintenance budgets to track spending.",
        "data": {
          "budget_currency": "Currency",
          "budget_monthly": "Monthly budget",
          "budget_yearly": "Yearly budget",
          "budget_alerts_enabled": "Enable budget alerts",
          "budget_alert_threshold": "Alert threshold (%)"
        },
        "data_description": {
          "budget_currency": "Currency used for budget display and notifications.",
          "budget_monthly": "Maximum monthly maintenance spending. Set to 0 to disable.",
          "budget_yearly": "Maximum yearly maintenance spending. Set to 0 to disable.",
          "budget_alerts_enabled": "Send a notification when spending exceeds the alert threshold.",
          "budget_alert_threshold": "Percentage of budget at which to send an alert."
        }
      },
      "notification_actions": {
        "title": "Interactive Actions",
        "description": "Configure action buttons shown on mobile notifications (requires Companion App).",
        "data": {
          "action_complete_enabled": "Show 'Complete' button",
          "action_skip_enabled": "Show 'Skip' button",
          "action_snooze_enabled": "Show 'Snooze' button",
          "snooze_duration_hours": "Snooze duration (hours)"
        },
        "data_description": {
          "action_complete_enabled": "Adds a button to mark the task as completed directly from the notification.",
          "action_skip_enabled": "Adds a button to skip the current maintenance cycle from the notification.",
          "action_snooze_enabled": "Adds a button to postpone the notification reminder.",
          "snooze_duration_hours": "How long to postpone notifications when snooze is pressed."
        }
      },
      "test_notification": {
        "title": "Test Notification",
        "description": "{result}"
      },
      "manage_groups": {
        "title": "Manage Groups",
        "description": "Select a group to manage or create a new one.",
        "data": {
          "selected_group": "Select group"
        }
      },
      "add_group": {
        "title": "Add Group",
        "description": "Create a new maintenance group to organize related tasks.",
        "data": {
          "group_name": "Group name",
          "group_description": "Description"
        },
        "data_description": {
          "group_name": "A name for this group (e.g., 'Spring Maintenance').",
          "group_description": "Optional description for this group."
        }
      },
      "manage_tasks": {
        "title": "Manage Tasks",
        "description": "Select a task to edit or remove.",
        "data": {
          "selected_task": "Select task",
          "go_back": "Go back"
        }
      },
      "task_action": {
        "title": "Task Actions",
        "description": "Task: {task_name} — Choose an action.\n\nNext due dates: {next_dates}",
        "menu_options": {
          "edit_task": "Edit Task",
          "edit_trigger": "Edit Trigger",
          "remove_trigger": "Remove Trigger",
          "edit_checklist": "Edit Checklist",
          "adaptive_scheduling": "Adaptive Scheduling",
          "delete_task": "Delete Task",
          "manage_tasks": "Back"
        }
      },
      "edit_task": {
        "title": "Edit Task",
        "description": "Edit settings for **{task_name}**.",
        "data": {
          "name": "Task name",
          "type": "Maintenance type",
          "interval_days": "Interval",
          "interval_unit": "Interval unit",
          "due_date": "Due date",
          "interval_anchor": "Interval anchor",
          "warning_days": "Warning days before due",
          "enabled": "Enabled",
          "notes": "Notes",
          "documentation_url": "Documentation URL",
          "last_performed": "Last performed",
          "responsible_user_id": "Responsible user",
          "custom_icon": "Task icon",
          "nfc_tag_id": "NFC tag ID",
          "go_back": "Go back",
          "reading_unit": "Reading unit (for reading tasks, e.g. kWh)",
          "season_months": "Seasonal window (months)",
          "ends_count": "Ends after (number of times)",
          "ends_until": "Ends on date"
        },
        "data_description": {
          "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').",
          "type": "The category of maintenance work.",
          "interval_days": "How often this maintenance repeats, combined with the interval unit.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "due_date": "The date this one-time task is due.",
          "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.",
          "warning_days": "Number of days before due date to show a warning.",
          "enabled": "When disabled, scheduling and triggers are paused. The task is not deleted.",
          "notes": "Additional notes or instructions for this task.",
          "documentation_url": "Link to external documentation or manual for this task.",
          "last_performed": "When this maintenance was last performed. Leave empty if never done.",
          "responsible_user_id": "The Home Assistant user responsible for this task.",
          "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).",
          "nfc_tag_id": "Link an NFC tag to this task. Scanning the tag will automatically mark the task as completed.",
          "go_back": "Return to task actions without saving.",
          "season_months": "Only due in the selected months; off-season dates roll to the next active month. Leave empty for all year.",
          "ends_count": "Stop repeating after this many completions (a finite series). Leave empty for no limit.",
          "ends_until": "Stop repeating once the next occurrence would fall after this date. Ignored if 'Ends after' is set."
        }
      },
      "edit_checklist": {
        "title": "Edit Checklist",
        "description": "Define checklist steps for {task_name}. Enter one step per line.",
        "data": {
          "checklist_text": "Checklist steps",
          "go_back": "Go back"
        },
        "data_description": {
          "checklist_text": "Enter each checklist step on a separate line. These steps will be shown when completing the task.",
          "go_back": "Return to task actions without saving."
        }
      },
      "delete_task": {
        "title": "Delete Task",
        "description": "Are you sure you want to delete the task {task_name}? This cannot be undone.",
        "data": {
          "confirm": "Confirm deletion",
          "go_back": "Go back"
        }
      },
      "remove_trigger": {
        "title": "Remove Trigger",
        "description": "Remove trigger from **{task_name}**?\n\n**Entity:** {entity_ids}\n**Type:** {trigger_type}\n**Config:** {config_details}\n\nIf all entities are removed, the schedule will revert to time-based.",
        "data": {
          "entities_to_remove": "Entities to remove",
          "confirm": "Confirm removal",
          "go_back": "Go back"
        },
        "data_description": {
          "entities_to_remove": "Select which entities to remove from this trigger. If all are removed, the entire trigger is deleted.",
          "go_back": "Return to task actions without saving."
        }
      },
      "trigger_summary": {
        "title": "Current Trigger",
        "description": "Trigger for **{task_name}**:\n\n**Entity:** {entity_ids}\n**Current state:** {current_states}\n**Type:** {trigger_type} (attribute: {attribute})\n**Config:** {config_details}",
        "menu_options": {
          "edit_trigger_proceed": "Edit Trigger",
          "task_action": "Back"
        }
      },
      "add_task": {
        "title": "Add Maintenance Task",
        "description": "Define a new maintenance task for this object.",
        "data": {
          "name": "Task name",
          "type": "Maintenance type",
          "schedule_type": "Schedule type",
          "custom_icon": "Task icon",
          "go_back": "Go back",
          "reading_unit": "Reading unit (for reading tasks, e.g. kWh)"
        },
        "data_description": {
          "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').",
          "type": "The category of maintenance work.",
          "schedule_type": "How this task should be scheduled.",
          "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).",
          "go_back": "Return to the main menu without saving."
        }
      },
      "opt_time_based": {
        "title": "Time-based Schedule",
        "description": "Configure the time interval for this task.",
        "data": {
          "interval_days": "Interval",
          "interval_unit": "Interval unit",
          "interval_anchor": "Interval anchor",
          "last_performed": "Last performed",
          "warning_days": "Warning days before due",
          "go_back": "Go back"
        },
        "data_description": {
          "interval_days": "How often this maintenance repeats, combined with the interval unit.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.",
          "last_performed": "When this maintenance was last performed. Leave empty if never done.",
          "warning_days": "Number of days before due date to show a warning.",
          "go_back": "Return to the main menu without saving."
        }
      },
      "opt_one_time": {
        "title": "One-time Task",
        "description": "Configure a single, non-recurring maintenance task. It is archived once completed.",
        "data": {
          "due_date": "Due date",
          "warning_days": "Warning days before due",
          "go_back": "Go back"
        },
        "data_description": {
          "due_date": "The date this one-time task is due.",
          "warning_days": "Number of days before the due date to show a warning.",
          "go_back": "Return to the main menu without saving."
        }
      },
      "opt_calendar": {
        "title": "Calendar Schedule",
        "description": "Configure a calendar-based recurrence (weekdays, nth weekday of the month, or a day of the month).",
        "data": {
          "weekdays": "On these weekdays",
          "nth": "Which occurrence",
          "weekday": "Weekday",
          "day": "Day of month",
          "last_performed": "Last performed",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "last_day": "Last day of the month",
          "business": "Business days only",
          "offset": "Offset (days)"
        },
        "data_description": {
          "weekdays": "The task repeats on each selected weekday.",
          "nth": "Which occurrence in the month (e.g. 1st, or Last).",
          "weekday": "The weekday for the nth-weekday rule (e.g. Saturday).",
          "day": "Day of the month (1-31; clamped to the month's length).",
          "last_performed": "When this maintenance was last performed. Leave empty if never done.",
          "warning_days": "Number of days before the due date to show a warning.",
          "go_back": "Return to the main menu without saving.",
          "last_day": "Overrides the day number: the task is due on the month's last day.",
          "business": "Roll a weekend date back to the preceding Friday (e.g. last business day).",
          "offset": "Shift the computed date by ±N days (e.g. -2 = two days before)."
        }
      },
      "opt_manual": {
        "title": "Manual Schedule",
        "description": "This task has no automatic schedule. You can mark it as due manually.",
        "data": {
          "warning_days": "Warning days before due",
          "notes": "Notes",
          "go_back": "Go back"
        },
        "data_description": {
          "warning_days": "Number of days before due date to show a warning.",
          "notes": "Additional notes or instructions for this task.",
          "go_back": "Return to the main menu without saving."
        }
      },
      "opt_sensor_select": {
        "title": "Select Trigger Sensor",
        "description": "Choose a Home Assistant entity to monitor.",
        "data": {
          "trigger_entity": "Entity to monitor",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_entity": "Select the sensor entity that should trigger this maintenance task."
        }
      },
      "opt_sensor_attribute": {
        "title": "Select Attribute",
        "description": "Choose which value to monitor from {entity_id}. Current state: {current_state} {unit}",
        "data": {
          "trigger_attribute": "Value to monitor",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_attribute": "Select the entity state or a specific attribute to monitor."
        }
      },
      "opt_trigger_type": {
        "title": "Trigger Type",
        "description": "How should the sensor value trigger maintenance?",
        "data": {
          "trigger_type": "Trigger type",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_type": "Threshold: triggers when value exceeds limits. Counter: triggers after accumulating a target value. State Change: triggers after a number of state transitions."
        }
      },
      "opt_trigger_threshold": {
        "title": "Threshold Configuration",
        "description": "Set threshold values for **{entity_id}** ({attribute}).\nCurrent: **{current_value} {unit}** | Avg: {average} | Range: {minimum}–{maximum} ({data_period}d)\nSuggested above: {suggested_above} | Suggested below: {suggested_below}",
        "data": {
          "trigger_above": "Trigger when above",
          "trigger_below": "Trigger when below",
          "trigger_equals": "Trigger when equal to",
          "trigger_not_equals": "Trigger when different from",
          "trigger_for_minutes": "For at least (minutes)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_above": "Trigger maintenance when value exceeds this threshold.",
          "trigger_below": "Trigger maintenance when value falls below this threshold.",
          "trigger_equals": "Trigger maintenance when the value equals this level.",
          "trigger_not_equals": "Trigger maintenance when the value differs from this level.",
          "trigger_for_minutes": "Value must exceed threshold for this many minutes before triggering.",
          "interval_days": "Optional time-based safety interval in addition to the sensor trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning."
        }
      },
      "opt_trigger_counter": {
        "title": "Counter Configuration",
        "description": "Set counter target for {entity_id} ({attribute}). Current: {current_value} {unit}.",
        "data": {
          "trigger_target_value": "Target value",
          "trigger_delta_mode": "Delta mode (count changes, not absolute)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers",
          "trigger_baseline_value": "Start reading (optional)"
        },
        "data_description": {
          "trigger_target_value": "Trigger maintenance when this accumulated value is reached.",
          "trigger_delta_mode": "If enabled, counts the difference from a baseline instead of the absolute value.",
          "interval_days": "Optional time-based safety interval in addition to the counter trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning."
        }
      },
      "opt_trigger_state_change": {
        "title": "State Change Configuration",
        "description": "Count state transitions of {entity_id}.",
        "data": {
          "trigger_from_state": "From state (optional)",
          "trigger_to_state": "To state (optional)",
          "trigger_target_changes": "Number of changes to trigger",
          "trigger_for_minutes": "For at least (minutes)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_from_state": "Only count transitions from this state. Leave empty for any.",
          "trigger_to_state": "Only count transitions to this state. Leave empty for any.",
          "trigger_target_changes": "Number of matching state changes before triggering maintenance.",
          "interval_days": "Optional time-based safety interval in addition to the state change trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning.",
          "trigger_for_minutes": "The new state must hold this long before the change counts. 0 = count immediately."
        }
      },
      "opt_trigger_runtime": {
        "title": "Runtime Configuration",
        "description": "Track accumulated runtime of {entity_id}.",
        "data": {
          "trigger_runtime_hours": "Target runtime (hours)",
          "trigger_on_states": "Active states (comma-separated)",
          "interval_days": "Safety interval",
          "interval_unit": "Interval unit",
          "trigger_combinator": "Combine trigger and interval",
          "warning_days": "Warning days before due",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "trigger_runtime_hours": "Trigger maintenance after this many hours of accumulated runtime.",
          "trigger_on_states": "Which sensor states count as 'active'. Leave empty for default: on, 1, true. Example: in_use, running",
          "interval_days": "Optional time-based safety interval in addition to the runtime trigger.",
          "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.",
          "trigger_combinator": "Whichever first (default): trigger or elapsed interval makes the task due. Both required: the task only becomes due once the trigger fired and the interval elapsed.",
          "warning_days": "Number of days before due date to show a warning."
        }
      },
      "compound_logic": {
        "title": "Compound Trigger",
        "description": "Choose how multiple conditions should be combined.",
        "data": {
          "compound_logic": "Logic",
          "go_back": "Go back",
          "auto_complete_on_recovery": "Auto-complete when the sensor recovers"
        },
        "data_description": {
          "compound_logic": "AND = all conditions must trigger. OR = any condition triggers."
        }
      },
      "compound_condition_entity": {
        "title": "Condition #{condition_num} — Entity",
        "description": "Select the entity for this condition.",
        "data": {
          "trigger_entity": "Entity",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_entity": "The sensor entity to monitor for this condition."
        }
      },
      "compound_condition_type": {
        "title": "Condition #{condition_num} — Type",
        "description": "How should this condition evaluate the sensor?",
        "data": {
          "trigger_type": "Trigger type",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_type": "The method used to determine when this condition triggers."
        }
      },
      "compound_condition_threshold": {
        "title": "Condition — Threshold",
        "data": {
          "trigger_above": "Trigger above",
          "trigger_below": "Trigger below",
          "trigger_equals": "Trigger when equal to",
          "trigger_not_equals": "Trigger when different from",
          "trigger_for_minutes": "Duration (minutes)",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_above": "Trigger when value exceeds this threshold.",
          "trigger_below": "Trigger when value drops below this threshold.",
          "trigger_equals": "Trigger maintenance when the value equals this level.",
          "trigger_not_equals": "Trigger maintenance when the value differs from this level.",
          "trigger_for_minutes": "Value must remain beyond threshold for this duration."
        }
      },
      "compound_condition_counter": {
        "title": "Condition — Counter",
        "data": {
          "trigger_target_value": "Target value",
          "trigger_delta_mode": "Delta mode",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_target_value": "Trigger when accumulated value reaches this target.",
          "trigger_delta_mode": "Count changes from a baseline instead of the absolute value."
        }
      },
      "compound_condition_state_change": {
        "title": "Condition — State Change",
        "data": {
          "trigger_from_state": "From state",
          "trigger_to_state": "To state",
          "trigger_target_changes": "Number of changes",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_from_state": "Only count transitions from this state. Leave empty for any.",
          "trigger_to_state": "Only count transitions to this state. Leave empty for any.",
          "trigger_target_changes": "Number of matching state changes before triggering."
        }
      },
      "compound_condition_runtime": {
        "title": "Condition — Runtime",
        "data": {
          "trigger_runtime_hours": "Target runtime (hours)",
          "trigger_on_states": "Active states",
          "go_back": "Go back"
        },
        "data_description": {
          "trigger_runtime_hours": "Trigger after this many hours of accumulated runtime.",
          "trigger_on_states": "Sensor states counted as 'active'. Leave empty for default."
        }
      },
      "compound_review": {
        "title": "Compound Trigger Review",
        "description": "{condition_count} condition(s) configured with {compound_logic} logic.",
        "data": {
          "compound_action": "Action",
          "go_back": "Go back"
        }
      },
      "adaptive_scheduling": {
        "title": "Adaptive Scheduling",
        "description": "Configure smart interval adaptation for {task_name}. The system learns from your completion feedback to suggest better intervals.",
        "data": {
          "adaptive_enabled": "Enable adaptive scheduling",
          "ewa_alpha": "Learning rate (alpha)",
          "min_interval_days": "Minimum interval (days)",
          "max_interval_days": "Maximum interval (days)",
          "seasonal_enabled": "Enable seasonal awareness",
          "sensor_prediction_enabled": "Enable sensor-driven predictions",
          "environmental_entity": "Environmental sensor (optional)",
          "go_back": "Go back"
        },
        "data_description": {
          "adaptive_enabled": "When enabled, the system will learn from your feedback and suggest optimal maintenance intervals.",
          "ewa_alpha": "How quickly the algorithm adapts to new data. Higher = more responsive, lower = more stable.",
          "min_interval_days": "The shortest interval the system will ever recommend.",
          "max_interval_days": "The longest interval the system will ever recommend.",
          "seasonal_enabled": "Adjust recommendations based on seasonal patterns learned from your maintenance history.",
          "sensor_prediction_enabled": "Analyze sensor trends to predict when thresholds will be reached and suggest earlier maintenance if needed.",
          "environmental_entity": "Link a temperature, humidity or pressure sensor to correlate environmental conditions with maintenance intervals.",
          "go_back": "Return to task actions without saving."
        }
      },
      "object_settings": {
        "title": "Object Settings",
        "description": "Edit object details.",
        "data": {
          "name": "Object name",
          "manufacturer": "Manufacturer",
          "model": "Model",
          "serial_number": "Serial number",
          "documentation_url": "Manual / documentation URL",
          "notes": "Notes",
          "area_id": "Area",
          "installation_date": "Installation date",
          "warranty_expiry": "Warranty expiry",
          "go_back": "Go back"
        },
        "data_description": {
          "name": "A unique name for this maintenance object (e.g., 'Pool Pump', 'Car').",
          "manufacturer": "The manufacturer of the object.",
          "model": "The model name or number.",
          "serial_number": "The serial number of the object.",
          "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.",
          "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.",
          "area_id": "The area in your home where this object is located.",
          "installation_date": "When this object was installed or purchased.",
          "warranty_expiry": "When the manufacturer warranty for this object expires.",
          "go_back": "Return to the main menu without saving."
        }
      }
    }
  },
  "entity": {
    "button": {
      "button_complete": {
        "name": "{task_name} Complete"
      },
      "button_skip": {
        "name": "{task_name} Skip"
      },
      "button_reset": {
        "name": "{task_name} Reset"
      }
    },
    "sensor": {
      "maintenance_task": {
        "name": "{task_name}",
        "state": {
          "ok": "OK",
          "due_soon": "Due Soon",
          "overdue": "Overdue",
          "triggered": "Triggered",
          "archived": "Archived",
          "paused": "Paused"
        },
        "state_attributes": {
          "maintenance_type": {
            "name": "Maintenance type",
            "state": {
              "cleaning": "Cleaning",
              "inspection": "Inspection",
              "replacement": "Replacement",
              "calibration": "Calibration",
              "service": "Service",
              "reading": "Reading",
              "custom": "Custom"
            }
          },
          "schedule_type": {
            "name": "Schedule type",
            "state": {
              "time_based": "Time-based",
              "sensor_based": "Sensor-based",
              "one_time": "One-time",
              "manual": "Manual"
            }
          },
          "interval_days": {
            "name": "Interval"
          },
          "interval_unit": {
            "name": "Interval unit"
          },
          "interval_anchor": {
            "name": "Interval anchor",
            "state": {
              "completion": "From completion",
              "planned": "From planned date"
            }
          },
          "due_date": {
            "name": "Due date"
          },
          "warning_days": {
            "name": "Warning days"
          },
          "last_performed": {
            "name": "Last performed"
          },
          "next_due": {
            "name": "Next due"
          },
          "days_until_due": {
            "name": "Days until due"
          },
          "parent_object": {
            "name": "Parent object"
          },
          "times_performed": {
            "name": "Times performed"
          },
          "total_cost": {
            "name": "Total cost"
          },
          "average_duration": {
            "name": "Average duration (min)"
          },
          "notes": {
            "name": "Notes"
          },
          "documentation_url": {
            "name": "Documentation URL"
          },
          "trigger_entity": {
            "name": "Trigger entity"
          },
          "trigger_attribute": {
            "name": "Trigger attribute"
          },
          "trigger_type": {
            "name": "Trigger type",
            "state": {
              "threshold": "Threshold",
              "counter": "Counter",
              "state_change": "State change",
              "runtime": "Runtime",
              "compound": "Compound"
            }
          },
          "trigger_active": {
            "name": "Trigger active"
          },
          "trigger_current_value": {
            "name": "Trigger current value"
          },
          "trigger_entity_state": {
            "name": "Trigger entity state",
            "state": {
              "available": "Available",
              "unavailable": "Unavailable",
              "missing": "Missing",
              "startup": "Startup"
            }
          },
          "trigger_above": {
            "name": "Trigger above"
          },
          "trigger_below": {
            "name": "Trigger below"
          },
          "trigger_for_minutes": {
            "name": "Trigger for (minutes)"
          },
          "trigger_target_value": {
            "name": "Trigger target value"
          },
          "trigger_delta_mode": {
            "name": "Trigger delta mode"
          },
          "trigger_baseline_value": {
            "name": "Trigger baseline value"
          },
          "trigger_current_delta": {
            "name": "Trigger current delta"
          },
          "trigger_from_state": {
            "name": "Trigger from state"
          },
          "trigger_to_state": {
            "name": "Trigger to state"
          },
          "trigger_target_changes": {
            "name": "Trigger target changes"
          },
          "trigger_change_count": {
            "name": "Trigger change count"
          },
          "trigger_runtime_hours": {
            "name": "Target runtime (hours)"
          },
          "trigger_accumulated_hours": {
            "name": "Accumulated runtime (hours)"
          },
          "trigger_remaining_hours": {
            "name": "Remaining runtime (hours)"
          },
          "last_entry": {
            "name": "Last entry"
          },
          "suggested_interval": {
            "name": "Suggested interval"
          },
          "interval_confidence": {
            "name": "Interval confidence",
            "state": {
              "low": "Low",
              "medium": "Medium",
              "high": "High"
            }
          },
          "adaptive_scheduling_enabled": {
            "name": "Adaptive scheduling enabled"
          },
          "seasonal_factor": {
            "name": "Seasonal factor"
          },
          "seasonal_reason": {
            "name": "Seasonal reason",
            "state": {
              "learned": "Learned",
              "manual": "Manual"
            }
          },
          "degradation_rate": {
            "name": "Degradation rate"
          },
          "degradation_trend": {
            "name": "Degradation trend",
            "state": {
              "rising": "Rising",
              "falling": "Falling",
              "stable": "Stable",
              "insufficient_data": "Insufficient data"
            }
          },
          "days_until_threshold": {
            "name": "Days until threshold"
          },
          "threshold_prediction_confidence": {
            "name": "Prediction confidence",
            "state": {
              "low": "Low",
              "medium": "Medium",
              "high": "High"
            }
          },
          "environmental_factor": {
            "name": "Environmental factor"
          },
          "environmental_entity": {
            "name": "Environmental entity"
          },
          "weibull_beta": {
            "name": "Weibull shape (β)"
          },
          "weibull_eta": {
            "name": "Weibull scale (η)"
          },
          "weibull_r_squared": {
            "name": "Weibull R²"
          },
          "weibull_beta_interpretation": {
            "name": "Failure pattern",
            "state": {
              "early_failures": "Early failures",
              "random_failures": "Random failures",
              "wear_out": "Wear-out",
              "highly_predictable": "Highly predictable"
            }
          },
          "confidence_interval_low": {
            "name": "Confidence interval (low)"
          },
          "confidence_interval_high": {
            "name": "Confidence interval (high)"
          }
        }
      },
      "summary_overdue": {
        "name": "Overdue"
      },
      "summary_due_soon": {
        "name": "Due Soon"
      },
      "summary_triggered": {
        "name": "Triggered"
      },
      "summary_needs_attention": {
        "name": "Needs attention"
      },
      "summary_ok": {
        "name": "OK"
      },
      "document_storage": {
        "name": "Document storage"
      },
      "summary_total_tasks": {
        "name": "Total tasks"
      },
      "next_due": {
        "name": "{task_name} Next due"
      },
      "days_until_due": {
        "name": "{task_name} Days until due"
      },
      "parts_to_reorder": {
        "name": "Parts to reorder"
      },
      "batteries_to_replace": {
        "name": "Batteries to replace"
      }
    },
    "binary_sensor": {
      "maintenance_task_due": {
        "name": "{task_name} overdue",
        "state_attributes": {
          "maintenance_status": {
            "name": "Maintenance status",
            "state": {
              "ok": "OK",
              "due_soon": "Due Soon",
              "overdue": "Overdue",
              "triggered": "Triggered",
              "archived": "Archived"
            }
          },
          "days_until_due": {
            "name": "Days until due"
          },
          "next_due": {
            "name": "Next due"
          },
          "parent_object": {
            "name": "Parent object"
          }
        }
      }
    },
    "calendar": {
      "maintenance_schedule": {
        "name": "Maintenance Schedule"
      }
    },
    "todo": {
      "maintenance_todo": {
        "name": "Maintenance"
      }
    }
  },
  "services": {
    "complete": {
      "name": "Complete Maintenance",
      "description": "Mark a maintenance task as completed.",
      "fields": {
        "entity_id": {
          "name": "Entity",
          "description": "The maintenance sensor entity to complete."
        },
        "notes": {
          "name": "Notes",
          "description": "Optional notes about the maintenance performed."
        },
        "cost": {
          "name": "Cost",
          "description": "Cost of the maintenance performed."
        },
        "duration": {
          "name": "Duration",
          "description": "Duration of the maintenance in minutes."
        },
        "reading_value": {
          "name": "Reading value",
          "description": "Recorded value for reading-type tasks (meter reading, level check)."
        },
        "completed_by": {
          "name": "Completed by",
          "description": "Person who performed the maintenance (must be linked to a Home Assistant user). When omitted, the user triggering the call is recorded."
        },
        "completed_at": {
          "name": "Completed at",
          "description": "When the maintenance was actually performed — use it to backfill a past completion. Must not be in the future; when omitted, now is recorded."
        }
      }
    },
    "reset": {
      "name": "Reset Maintenance",
      "description": "Reset the last performed date of a maintenance task.",
      "fields": {
        "entity_id": {
          "name": "Entity",
          "description": "The maintenance sensor entity to reset."
        },
        "date": {
          "name": "Date",
          "description": "The date to set as last performed. Defaults to today."
        }
      }
    },
    "skip": {
      "name": "Skip Maintenance",
      "description": "Skip the current maintenance cycle.",
      "fields": {
        "entity_id": {
          "name": "Entity",
          "description": "The maintenance sensor entity to skip."
        },
        "reason": {
          "name": "Reason",
          "description": "Optional reason for skipping the maintenance."
        }
      }
    },
    "export_data": {
      "name": "Export Data",
      "description": "Export all maintenance data as JSON or YAML.",
      "fields": {
        "format": {
          "name": "Format",
          "description": "Output format for the exported data (json or yaml)."
        },
        "include_history": {
          "name": "Include History",
          "description": "Whether to include task history entries in the export."
        }
      }
    },
    "add_object": {
      "name": "Add Object",
      "description": "Create a new maintenance object (device). Returns the new entry_id.",
      "fields": {
        "name": {
          "name": "Name",
          "description": "Name of the object/device."
        },
        "area_id": {
          "name": "Area",
          "description": "Area to assign the device to."
        },
        "manufacturer": {
          "name": "Manufacturer"
        },
        "model": {
          "name": "Model"
        },
        "serial_number": {
          "name": "Serial number"
        },
        "installation_date": {
          "name": "Installation date"
        },
        "warranty_expiry": {
          "name": "Warranty expiry",
          "description": "Warranty expiry date (used for asset tracking and reminders)."
        },
        "documentation_url": {
          "name": "Documentation URL",
          "description": "Link to a manual or vendor page (http/https only)."
        },
        "notes": {
          "name": "Notes"
        }
      }
    },
    "add_task": {
      "name": "Add Task",
      "description": "Add a maintenance task to an existing object. Returns the new task_id.",
      "fields": {
        "entry_id": {
          "name": "Object",
          "description": "The maintenance object to add the task to."
        },
        "name": {
          "name": "Name",
          "description": "Name of the task."
        },
        "task_type": {
          "name": "Task type",
          "description": "Free-form category (e.g. inspection, service, custom)."
        },
        "schedule_type": {
          "name": "Schedule type",
          "description": "time_based (interval) or sensor_based. Default: time_based."
        },
        "interval_days": {
          "name": "Interval",
          "description": "Interval length between occurrences (for time-based tasks), combined with interval_unit."
        },
        "interval_unit": {
          "name": "Interval unit",
          "description": "Unit for the interval: days, weeks, months or years. Default: days."
        },
        "due_date": {
          "name": "Due date",
          "description": "Due date (YYYY-MM-DD) for a one-time task (schedule_type one_time)."
        },
        "schedule": {
          "name": "Calendar schedule",
          "description": "Nested recurrence for the calendar kinds, e.g. kind=nth_weekday, nth=1, weekday=5 for the 1st Saturday (weekday 0=Mon ... 6=Sun), kind=weekdays, weekdays=[0, 3] for Mon & Thu, or kind=day_of_month, day=15. Takes precedence over interval_days / schedule_type."
        },
        "warning_days": {
          "name": "Warning (days)",
          "description": "Days before due to enter the due-soon window."
        },
        "enabled": {
          "name": "Enabled"
        },
        "notes": {
          "name": "Notes"
        }
      }
    },
    "update_task": {
      "name": "Update Task",
      "description": "Update the common fields of an existing maintenance task. Only the provided fields change.",
      "fields": {
        "entry_id": {
          "name": "Object",
          "description": "The maintenance object the task belongs to."
        },
        "task_id": {
          "name": "Task ID",
          "description": "The id of the task to update (see list_tasks)."
        },
        "name": {
          "name": "Name",
          "description": "New name of the task."
        },
        "task_type": {
          "name": "Task type",
          "description": "Category (cleaning, inspection, replacement, calibration, service, reading, custom)."
        },
        "schedule_type": {
          "name": "Schedule type",
          "description": "time_based (interval), sensor_based, one_time or manual."
        },
        "interval_days": {
          "name": "Interval",
          "description": "Interval length between occurrences, combined with interval_unit."
        },
        "interval_unit": {
          "name": "Interval unit",
          "description": "days, weeks, months or years."
        },
        "due_date": {
          "name": "Due date",
          "description": "Due date for one-time tasks (YYYY-MM-DD)."
        },
        "schedule": {
          "name": "Schedule (calendar recurrence)",
          "description": "Nested recurrence object for the calendar kinds, e.g. kind=day_of_month, day=-1, business=true. Takes precedence over the flat fields."
        },
        "warning_days": {
          "name": "Warning days",
          "description": "Days before due when the task turns due-soon."
        },
        "enabled": {
          "name": "Enabled",
          "description": "Whether the task is active."
        },
        "notes": {
          "name": "Notes",
          "description": "Free-form notes on the task."
        },
        "priority": {
          "name": "Priority",
          "description": "low, normal or high."
        },
        "labels": {
          "name": "Labels",
          "description": "List of tags for filtering and reporting."
        },
        "responsible_user": {
          "name": "Responsible user",
          "description": "Assign the task to this person (must be linked to a Home Assistant user)."
        },
        "clear_responsible_user": {
          "name": "Clear responsible user",
          "description": "Remove the current assignment. Cannot be combined with \"Responsible user\"."
        }
      }
    },
    "delete_task": {
      "name": "Delete Task",
      "description": "Delete a maintenance task including its history. This cannot be undone - consider archiving via the panel instead.",
      "fields": {
        "entry_id": {
          "name": "Object",
          "description": "The maintenance object the task belongs to."
        },
        "task_id": {
          "name": "Task ID",
          "description": "The id of the task to delete (see list_tasks)."
        }
      }
    },
    "list_tasks": {
      "name": "List Tasks",
      "description": "Return a snapshot of active maintenance tasks (id, name, status, next due) for automations, scripts and voice. Supports filtering by object and status.",
      "fields": {
        "entry_id": {
          "name": "Object",
          "description": "Only return tasks of this maintenance object."
        },
        "status": {
          "name": "Status",
          "description": "Only return tasks with this status."
        }
      }
    }
  },
  "selector": {
    "maintenance_type": {
      "options": {
        "cleaning": "Cleaning",
        "inspection": "Inspection",
        "replacement": "Replacement",
        "calibration": "Calibration",
        "service": "Service",
        "reading": "Reading",
        "custom": "Custom"
      }
    },
    "schedule_type": {
      "options": {
        "time_based": "Time-based",
        "weekdays": "Weekdays",
        "nth_weekday": "Nth weekday of month",
        "day_of_month": "Day of month",
        "sensor_based": "Sensor-based",
        "one_time": "One-time",
        "manual": "Manual"
      }
    },
    "interval_unit": {
      "options": {
        "days": "Days",
        "weeks": "Weeks",
        "months": "Months",
        "years": "Years"
      }
    },
    "trigger_type": {
      "options": {
        "threshold": "Threshold",
        "counter": "Counter",
        "state_change": "State Change",
        "runtime": "Runtime",
        "compound": "Compound (Multiple Conditions)"
      }
    },
    "compound_logic": {
      "options": {
        "and": "AND (all conditions must trigger)",
        "or": "OR (any condition triggers)"
      }
    },
    "entity_logic": {
      "options": {
        "any": "Any entity triggers",
        "all": "All entities must trigger"
      }
    },
    "trigger_combinator": {
      "options": {
        "any": "Trigger or interval (whichever first)",
        "all": "Trigger and interval (both required)"
      }
    },
    "notification_title_style": {
      "options": {
        "default": "Default (per-status title)",
        "object_name": "Object name as title",
        "task_name": "Task name as title"
      }
    }
  },
  "issues": {
    "missing_global_entry": {
      "title": "Maintenance Supporter global configuration is missing",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Restore the global configuration",
            "description": "Your maintenance objects still exist, but the global \"Maintenance Supporter\" entry was deleted — so the summary sensors, the sidebar panel and the dashboard counts are gone, and the KPI chips read \"unknown\".\n\nClick **Submit** to recreate the global configuration with default settings. Your objects and tasks are left untouched. You can adjust notifications and defaults afterwards under Settings → Devices & Services.\n\n(To leave things as they are, use Home Assistant's **Ignore** button.)"
          }
        }
      }
    },
    "document_storage_issues": {
      "title": "Document storage needs cleanup",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Reclaim document storage",
            "description": "Maintenance Supporter found unreferenced files and/or dead records in document storage — usually the aftermath of a crash, an external file deletion, or a partial restore.\n\nClick **Submit** to reclaim the space: unreferenced and stale files are deleted and dead document records are removed. Files still referenced by a document are never touched.\n\n(To dismiss without cleaning up, use Home Assistant's **Ignore** button on the Repairs page.)"
          }
        }
      }
    },
    "missing_trigger_entity": {
      "title": "Trigger sensor not found: {task_name}",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Missing trigger entity",
            "description": "The sensor entity `{entity_id}` configured as trigger for task \"{task_name}\" on object \"{object_name}\" is no longer available.\n\nChoose how to resolve this issue:",
            "menu_options": {
              "replace_entity": "Replace with a different entity",
              "remove_trigger": "Remove the sensor trigger",
              "dismiss": "Dismiss (will reappear)"
            }
          },
          "replace_entity": {
            "title": "Replace trigger entity",
            "description": "Select a new entity to replace `{entity_id}` as trigger for task \"{task_name}\" on \"{object_name}\".",
            "data": {
              "new_entity_id": "New trigger entity"
            },
            "data_description": {
              "new_entity_id": "Select the new sensor entity to use as trigger."
            }
          },
          "remove_trigger": {
            "title": "Remove sensor trigger",
            "description": "This will remove the sensor trigger from task \"{task_name}\" on \"{object_name}\" and convert the schedule to time-based or manual. The maintenance history will be preserved.\n\nPrevious trigger entity: `{entity_id}`"
          }
        }
      }
    },
    "orphan_admin_panel_user": {
      "title": "Panel-access user no longer exists",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Orphaned user in panel-access list",
            "description": "User `{user_id}…` is in the Maintenance Supporter panel-access list but no longer exists in Home Assistant. Probably the user was deleted.\n\nClick **Submit** to remove this user from the list. (To leave the issue alone, use Home Assistant's **Ignore** button on the Repairs page instead.)"
          }
        }
      }
    },
    "stale_action_entity": {
      "title": "Completion action references a deleted entity",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Completion action: {stale_entity} no longer exists",
            "description": "The task **{task_name}** has an `on_complete_action` configured to call a service on `{stale_entity}`, but that entity is no longer registered in Home Assistant.\n\nChoose how to repair:",
            "menu_options": {
              "replace_entity": "Replace with a different entity",
              "remove_action": "Remove the completion action"
            }
          },
          "replace_entity": {
            "title": "Replace target entity",
            "description": "Pick the entity to use instead of `{stale_entity}` for task **{task_name}**.",
            "data": {
              "new_entity": "New target entity"
            }
          },
          "remove_action": {
            "title": "Remove completion action",
            "description": "Clear the `on_complete_action` from task **{task_name}** entirely. The task itself is unaffected — only the on-complete service-call is removed."
          }
        }
      }
    },
    "notify_service_missing": {
      "title": "Notification service `{service}` not found",
      "description": "Maintenance Supporter is configured to send notifications via `{service}`, but that service does not currently exist in Home Assistant, so reminders fail silently.\n\nThis usually means the service was renamed, or the integration behind it (a mobile app, a notify group, …) was removed. To fix it: restore that service, or open **Settings → Devices & Services → Maintenance Supporter → Configure → General settings** and pick a valid `notify.*` service.\n\nNote: this only checks the configured service itself. If notifications reach some devices but not others, a member *inside* your notify group is likely misconfigured — that is not visible here; check Home Assistant's **system log** (Settings → System → Logs)."
    },
    "shared_parts_moved": {
      "title": "Shared spare parts moved to {new_owner}",
      "description": "Several maintenance objects were sharing one spare-part stock pool that lived on **{deleted_object}**, and that object has just been deleted. Rather than leave the others pointing at a pool that no longer exists, Maintenance Supporter moved the shared parts ({parts}) — together with their current stock — onto **{new_owner}**, and repointed every other object's task links at them. Nothing was lost.\n\n**{new_owner}** was picked automatically: it is the oldest object that was using the pool. If a different object is the better home for these parts, move them there in the Maintenance panel.\n\nNothing else needs doing — dismiss this notification once you have checked it."
    },
    "broken_part_link": {
      "title": "Broken spare-part links on {object_name}",
      "description": "A task on **{object_name}** was just completed, but {count} spare-part links on it could not be resolved — the part, or the object that owns it, no longer exists.\n\nThe completion itself was recorded, so the work is not lost. What did not happen is the stock deduction: nothing was taken off any part's stock for this completion.\n\nTo fix it, open the task in the Maintenance panel and remove the stale part links, or point them at the parts you use now. Dismiss this notification once that is done."
    },
    "device_link_lost": {
      "title": "{object} lost its device link",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Repair the device link of {object}",
            "description": "**{object}** was attached to a Home Assistant device, so its maintenance entities appeared on that device's page. That device no longer exists — deleted, or its integration removed — and the object now shows a device of its own. Nothing else changed: its tasks and their history are untouched.\n\nChoose how to proceed. Best guess for the intended device: **{suggestion}**.",
            "menu_options": {
              "relink": "Link the appliance's device",
              "unlink": "Remove the link"
            }
          },
          "relink": {
            "title": "Pick the appliance's device",
            "description": "Pick the device that **{object}** belongs to. The best match — **{suggestion}** — is pre-selected; check it before saving. Maintenance Supporter's own twin devices are rejected.",
            "data": {
              "device": "Device"
            }
          },
          "unlink": {
            "title": "Remove the device link",
            "description": "**{object}** keeps a device of its own. Tasks and history stay untouched; you can link a device again any time in the Maintenance panel."
          }
        },
        "error": {
          "self_link": "That is a Maintenance Supporter device (the object's twin, not the appliance) — pick the appliance's own device.",
          "device_gone": "That device does not exist (anymore)."
        },
        "abort": {
          "entry_gone": "This object no longer exists — nothing to repair."
        }
      }
    },
    "device_link_self": {
      "title": "{object} is linked to its own maintenance device",
      "fix_flow": {
        "step": {
          "init": {
            "title": "Repair the device link of {object}",
            "description": "**{object}**'s device link points at the twin device Maintenance Supporter created for the object — it carries the appliance's name, and the device picker used to offer it. The appliance's real device page never showed the maintenance entities.\n\nChoose how to proceed. Best guess for the intended device: **{suggestion}**.",
            "menu_options": {
              "relink": "Link the appliance's device",
              "unlink": "Remove the link"
            }
          },
          "relink": {
            "title": "Pick the appliance's device",
            "description": "Pick the device that **{object}** belongs to. The best match — **{suggestion}** — is pre-selected; check it before saving. Maintenance Supporter's own twin devices are rejected.",
            "data": {
              "device": "Device"
            }
          },
          "unlink": {
            "title": "Remove the device link",
            "description": "**{object}** keeps a device of its own. Tasks and history stay untouched; you can link a device again any time in the Maintenance panel."
          }
        },
        "error": {
          "self_link": "That is a Maintenance Supporter device (the object's twin, not the appliance) — pick the appliance's own device.",
          "device_gone": "That device does not exist (anymore)."
        },
        "abort": {
          "entry_gone": "This object no longer exists — nothing to repair."
        }
      }
    }
  },
  "exceptions": {
    "no_coordinator_for_entity": {
      "message": "No maintenance coordinator found for entity {entity_id}."
    },
    "no_task_for_entity": {
      "message": "No maintenance task found for entity {entity_id}."
    },
    "completion_details_required": {
      "message": "“{task_name}” requires these details when you complete it: {fields}. Complete it from the Maintenance panel or card so you can fill them in."
    },
    "completed_at_in_future": {
      "message": "The completion date cannot be in the future."
    }
  },
  "triggers": {
    "task_became_overdue": {
      "name": "A maintenance task became overdue",
      "description": "Triggers when a maintenance task's status changes to overdue.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "task_became_due_soon": {
      "name": "A maintenance task became due soon",
      "description": "Triggers when a maintenance task enters its warning window.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "sensor_trigger_activated": {
      "name": "A sensor trigger activated",
      "description": "Triggers when a sensor-based maintenance task activates.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "task_became_ok": {
      "name": "A maintenance task returned to OK",
      "description": "Triggers when a maintenance task no longer needs attention.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    }
  },
  "conditions": {
    "task_is_overdue": {
      "name": "A maintenance task is overdue",
      "description": "Tests if a maintenance task is overdue.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "task_is_due_soon": {
      "name": "A maintenance task is due soon",
      "description": "Tests if a maintenance task is in its warning window.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "task_is_triggered": {
      "name": "A sensor trigger is active",
      "description": "Tests if a sensor-based maintenance task is triggered.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    },
    "task_needs_attention": {
      "name": "A maintenance task needs attention",
      "description": "Tests if a maintenance task is overdue or triggered.",
      "fields": {
        "behavior": {
          "name": "Behavior"
        },
        "for": {
          "name": "For"
        }
      }
    }
  }
}
